如何以编程方式确定哪个是 Solaris/illumos 上的引导磁盘?
How to programmatically determine which is the boot disk on Solaris/illumos?
在测试服务器上有两个三星 960 Pro SSD,完全相同的制造商、型号和大小。在两者上,我都安装了完全相同的 OS、OmniOS r15026.
的全新安装
在POST时间按F8,进入主板BOOT管理器,选择两个启动盘之一。因此,我知道系统从哪个启动。
但是如何通过程序知道启动后哪个是启动盘呢?
好像是:
- Not possible on Linux,
- Not possible on FreeBsd
- Possible on macOS.
Solaris/illumos 是否提供一些内省挂钩来确定哪个是启动盘?
是否可以通过编程方式确定哪个是 Solaris/illumos 上的引导磁盘?
命令行工具也可以。
编辑 1:感谢@andrew-henle,我开始了解命令 eeprom
。
正如预期的那样,它是 available on illumos,但不幸的是,在带有 OmniOS 的测试服务器上它并没有 return 太多:
root@omnios:~# eeprom
keyboard-layout=US-English
ata-dma-enabled=1
atapi-cd-dma-enabled=1
ttyd-rts-dtr-off=false
ttyd-ignore-cd=true
ttyc-rts-dtr-off=false
ttyc-ignore-cd=true
ttyb-rts-dtr-off=false
ttyb-ignore-cd=true
ttya-rts-dtr-off=false
ttya-ignore-cd=true
ttyd-mode=9600,8,n,1,-
ttyc-mode=9600,8,n,1,-
ttyb-mode=9600,8,n,1,-
ttya-mode=9600,8,n,1,-
lba-access-ok=1
root@omnios:~# eeprom boot-device
boot-device: data not available.
Omni 上的解决方案OS r15026
感谢@abarczyk,我能够确定正确的启动盘。
我不得不使用稍微不同的语法:
root@omnios:~# /usr/sbin/prtconf -v | ggrep -1 bootpath
value='unix'
name='bootpath' type=string items=1
value='/pci@38,0/pci1022,1453@1,1/pci144d,a801@0/blkdev@w0025385971B16535,0:b
使用/usr/sbin/format
,我能够看到条目对应于
16. c1t0025385971B16535d0 <Samsung-SSD 960 PRO 512GB-2B6QCXP7-476.94GB>
/pci@38,0/pci1022,1453@1,1/pci144d,a801@0/blkdev@w0025385971B16535,0
这是正确的,因为这是我在 BI 中手动选择的磁盘OS。
非常感谢@abarczyk 和@andrew-henle 考虑这一点并提供指导性帮助。
使用eeprom
命令。
Description
eeprom
displays or changes the values of parameters in the EEPROM.
It processes parameters in the order given. When processing a
parameter accompanied by a value, eeprom
makes the indicated
alteration to the EEPROM; otherwise, it displays the parameter's
value. When given no parameter specifiers, eeprom displays the values
of all EEPROM parameters. A '−' (hyphen) flag specifies that
parameters and values are to be read from the standard input (one
parameter or parameter=value per line).
Only the super-user may alter the EEPROM contents.
eeprom
verifies the EEPROM checksums and complains if they are
incorrect.
platform-name
is the name of the platform implementation and can be
found using the –i
option of uname(1)
.
SPARC
SPARC based systems implement firmware password protection with
eeprom, using the security-mode
, security-password
and
security-#badlogins
properties.
x86
EEPROM storage is simulated using a file residing in the
platform-specific boot area. The /boot/solaris/bootenv.rc
file
simulates EEPROM storage.
Because x86 based systems typically implement password protection in
the system BIOS, there is no support for password protection in the
eeprom
program. While it is possible to set the security-mode
,
security-password
and security-#badlogins
properties on x86 based
systems, these properties have no special meaning or behavior on x86
based systems.
找到启动系统的设备的最佳方法是检查 prtconf -vp 输出:
# /usr/sbin/prtconf -vp | grep bootpath
bootpath: '/pci@0,600000/pci@0/scsi@1/disk@0,0:a'
在我的 Solaris 11.4 Beta
系统上,有一个非常有用的命令 devprop
可以帮助回答您的问题:
$ devprop -s bootpath
/pci@0,0/pci1849,8c02@1f,2/disk@1,0:b
那么您只需查看 format
的输出,看看它转换成什么。在我的系统上,即
9. c2t1d0 <ATA-ST1000DM003-1CH1-CC47-931.51GB>
/pci@0,0/pci1849,8c02@1f,2/disk@1,0
在测试服务器上有两个三星 960 Pro SSD,完全相同的制造商、型号和大小。在两者上,我都安装了完全相同的 OS、OmniOS r15026.
的全新安装在POST时间按F8,进入主板BOOT管理器,选择两个启动盘之一。因此,我知道系统从哪个启动。
但是如何通过程序知道启动后哪个是启动盘呢?
好像是:
- Not possible on Linux,
- Not possible on FreeBsd
- Possible on macOS.
Solaris/illumos 是否提供一些内省挂钩来确定哪个是启动盘?
是否可以通过编程方式确定哪个是 Solaris/illumos 上的引导磁盘?
命令行工具也可以。
编辑 1:感谢@andrew-henle,我开始了解命令 eeprom
。
正如预期的那样,它是 available on illumos,但不幸的是,在带有 OmniOS 的测试服务器上它并没有 return 太多:
root@omnios:~# eeprom
keyboard-layout=US-English
ata-dma-enabled=1
atapi-cd-dma-enabled=1
ttyd-rts-dtr-off=false
ttyd-ignore-cd=true
ttyc-rts-dtr-off=false
ttyc-ignore-cd=true
ttyb-rts-dtr-off=false
ttyb-ignore-cd=true
ttya-rts-dtr-off=false
ttya-ignore-cd=true
ttyd-mode=9600,8,n,1,-
ttyc-mode=9600,8,n,1,-
ttyb-mode=9600,8,n,1,-
ttya-mode=9600,8,n,1,-
lba-access-ok=1
root@omnios:~# eeprom boot-device
boot-device: data not available.
Omni 上的解决方案OS r15026
感谢@abarczyk,我能够确定正确的启动盘。
我不得不使用稍微不同的语法:
root@omnios:~# /usr/sbin/prtconf -v | ggrep -1 bootpath
value='unix'
name='bootpath' type=string items=1
value='/pci@38,0/pci1022,1453@1,1/pci144d,a801@0/blkdev@w0025385971B16535,0:b
使用/usr/sbin/format
,我能够看到条目对应于
16. c1t0025385971B16535d0 <Samsung-SSD 960 PRO 512GB-2B6QCXP7-476.94GB>
/pci@38,0/pci1022,1453@1,1/pci144d,a801@0/blkdev@w0025385971B16535,0
这是正确的,因为这是我在 BI 中手动选择的磁盘OS。
非常感谢@abarczyk 和@andrew-henle 考虑这一点并提供指导性帮助。
使用eeprom
命令。
Description
eeprom
displays or changes the values of parameters in the EEPROM. It processes parameters in the order given. When processing a parameter accompanied by a value,eeprom
makes the indicated alteration to the EEPROM; otherwise, it displays the parameter's value. When given no parameter specifiers, eeprom displays the values of all EEPROM parameters. A '−' (hyphen) flag specifies that parameters and values are to be read from the standard input (one parameter or parameter=value per line).Only the super-user may alter the EEPROM contents.
eeprom
verifies the EEPROM checksums and complains if they are incorrect.
platform-name
is the name of the platform implementation and can be found using the–i
option ofuname(1)
.SPARC
SPARC based systems implement firmware password protection with eeprom, using the
security-mode
,security-password
andsecurity-#badlogins
properties.x86
EEPROM storage is simulated using a file residing in the platform-specific boot area. The
/boot/solaris/bootenv.rc
file simulates EEPROM storage.Because x86 based systems typically implement password protection in the system BIOS, there is no support for password protection in the
eeprom
program. While it is possible to set thesecurity-mode
,security-password
andsecurity-#badlogins
properties on x86 based systems, these properties have no special meaning or behavior on x86 based systems.
找到启动系统的设备的最佳方法是检查 prtconf -vp 输出:
# /usr/sbin/prtconf -vp | grep bootpath
bootpath: '/pci@0,600000/pci@0/scsi@1/disk@0,0:a'
在我的 Solaris 11.4 Beta
系统上,有一个非常有用的命令 devprop
可以帮助回答您的问题:
$ devprop -s bootpath
/pci@0,0/pci1849,8c02@1f,2/disk@1,0:b
那么您只需查看 format
的输出,看看它转换成什么。在我的系统上,即
9. c2t1d0 <ATA-ST1000DM003-1CH1-CC47-931.51GB>
/pci@0,0/pci1849,8c02@1f,2/disk@1,0