如何以编程方式确定哪个是 Solaris/illumos 上的引导磁盘?

How to programmatically determine which is the boot disk on Solaris/illumos?

在测试服务器上有两个三星 960 Pro SSD,完全相同的制造商、型号和大小。在两者上,我都安装了完全相同的 OS、OmniOS r15026.

的全新安装

在POST时间按F8,进入主板BOOT管理器,选择两个启动盘之一。因此,我知道系统从哪个启动。

但是如何通过程序知道启动后哪个是启动盘呢?

好像是:

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命令。

根据 the eeprom man page:

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