我有一台运行 Intel S2600C0 bios 版本的测试服务器SE5C600.86B.02.06.0002
。它有 7 个 SSD:5SDLFNCAR-960G-1HA2
个和 2 个Micron_M500DC_MTFDDAK800MBB
。操作系统和所有文件都在第一个 SSD 上,其他 6 个 SSD 由我们的软件使用。
问题是,如果第一个 SSD 不是启动顺序中的第一个,则 BIOS 在尝试从它启动时会卡住,而不是意识到它无法启动并继续启动顺序中的下一个设备。
我们的实验表明分区表存在问题:
- 在数据磁盘上使用 GPT 分区表(我们用于软件的)进行启动时卡住了。
- 使用数据盘上的 MBR 分区表进行启动时卡住。
- 我尝试向表中添加一个分区并启动 - 但它也卡住了。
- 当我删除分区表(使用
sgdisk -Z
)时 - 我能够启动使用任何启动顺序。
启动标志(或可引导旧版 BIOS对于 GPT) 始终处于关闭状态 - 尽管我也尝试过激活它(但仍然没有用)
“只需设置正确的启动顺序”不是一个解决方案(尽管我可能被迫接受它)因为:
- 当所有 SSD 都是同一类型且在 BIOS 菜单中具有相同的名称时,需要经过大量的反复试验才能确定操作系统位于哪一个 SSD 上。
- 测试服务器是一回事——我们希望避免对客户的服务器进行同样的操作。
这是 BIOS 信息:
$ dmidecode -t bios -q
BIOS Information
Vendor: Intel Corp.
Version: SE5C600.86B.02.06.0002.101320150901
Release Date: 10/13/2015
Address: 0xF0000
Runtime Size: 64 kB
ROM Size: 8192 kB
Characteristics:
PCI is supported
BIOS is upgradeable
BIOS shadowing is allowed
Boot from CD is supported
Selectable boot is supported
EDD is supported
5.25"/1.2 MB floppy services are supported (int 13h)
3.5"/720 kB floppy services are supported (int 13h)
3.5"/2.88 MB floppy services are supported (int 13h)
Print screen service is supported (int 5h)
8042 keyboard services are supported (int 9h)
Serial services are supported (int 14h)
Printer services are supported (int 17h)
ACPI is supported
USB legacy is supported
BIOS boot specification is supported
Targeted content distribution is supported
BIOS Revision: 4.6
BIOS Language Information
Language Description Format: Long
Installable Languages: 1
en|US|iso8859-1
Currently Installed Language: en|US|iso8859-1
答案1
这是预期行为:当 BIOS 识别出正确定义的分区表时,它会加载第一个 512 字节扇区并将控制权移交给刚从磁盘加载的代码。此后,它不再具有“良好启动”或“卡住启动”的控制/可见性/概念。
当找不到有效的分区表时,BIOS 会自动选择下一个磁盘,直到找到有效的磁盘。
要解决此问题,有三个解决方案:
- 使用硬件 RAID 控制器,使多个磁盘在 BIOS 级别被视为一个实体
- 使用 fakeraid 解决方案(如英特尔在其芯片组上提供的解决方案),通过使用适当的 Option ROM,可以抽象多个磁盘布局,并将它们作为单个磁盘呈现给主 BIOS
- 安装适当的 MBR/bootloader每个磁盘,这样 BIOS 启动顺序就变得无关紧要了(这是经典的软件 RAID 解决方案)