语境:
我的系统总是忘记硬盘启动顺序。我在 BIOS 中指定了启动顺序,但下次重启后,它就消失了。我的主要启动驱动器位于附加卡 (SAS HBA) 上。主板 BIOS 设置实用程序可以正常获取该卡上的驱动器。但是,无论我在 BIOS 中如何排列它们,硬盘启动顺序都会在下次电源循环时重置。实际装有我的操作系统的驱动器永远不会位于顶部,因此系统永远不会启动。
我可以确定的是,我的健忘症服务器总是会先尝试从光盘和 USB 介质启动,然后再尝试任何硬盘。此外,它重置的硬盘顺序始终相同(除非我重新安排电缆)。
我尝试过的:
我尝试更新/重置 BIOS 以解决根本问题,但无济于事。我已更新/重置/重新配置了 SAS HBA 上的固件。我尝试联系主板制造商以解决明显的错误,并被告知没有可用的免费支持选项。SAS HBA 制造商的支持热线告诉我要换一块主板。我尝试将链式加载引导加载程序写入始终位于列表顶部的驱动器的开头,这破坏了我的 RAID 设置。我尝试将 SAS HBA 插入不同的 PCIe 插槽,并调整本机主板 SATA 链路和 HBA 本身上的驱动器连接顺序。除非我物理断开所有主板 SATA 链路,否则问题仍然存在,我需要连接这些链路。
问题:
我几乎已经放弃解决问题的根源(BIOS 忘记了硬盘启动顺序)。考虑到我可以指望系统首先尝试从 USB 或光学媒体启动,并且我想要启动的硬盘在 BIOS 顺序中始终位于同一位置(在大多数操作系统中可能是设备枚举),是否有一个启动 CD 可以配置为使系统自动从任意编号的硬盘驱动器启动?
我理想的解决方案是这样的:
- 我下载了一个自动启动 CD/USB 映像。
- 我配置了它的参数(例如“5 秒超时后,从 HDD 04 自动启动”)。这必须能够选择 BIOS 默认启动驱动器以外的硬盘驱动器。
- 我将图像放在 USB 或光学介质上,然后将其插入系统。
- 随后每次我重新启动系统时,新的加载程序都会运行,并自动告诉系统从正确的驱动器启动。
我技术能力很强,但没有手动配置 GRUB 或类似软件的经验。我应该从哪里开始?
答案1
您可以安装 GRUB 并使用 UUID 作为每个硬盘分区的标识符,以确保尽管 HDD 在 BIOS 中改变了其启动顺序,PC 仍能始终启动正确的分区。
首先,获取一个 LiveCD(任何人都可以这样做,我通常使用系统救援光盘. 在控制台模式(默认选项)启动后,运行以下命令获取 UUID:
ls -l /dev/disk/by-uuid/
您将得到如下结果:
localhost ~ # ls -l /dev/disk/by-uuid/
total 0
lrwxrwxrwx 1 root root 10 Feb 22 09:25 0adb57d3-e475-4825-8ff9-32bd82fbd210 -> ../../sda3
lrwxrwxrwx 1 root root 10 Feb 22 09:25 9fb9d595-77b3-458a-b082-80a77d1d2b50 -> ../../sda1
lrwxrwxrwx 1 root root 10 Feb 22 09:25 d1a2c45f-b8dc-4312-a195-853e9364b398 -> ../../sda2
-> ../../sdaX 等于 /dev/sdaX。这样您就可以获取 HDD 分区的所有 UUID。上面的示例是 Linux 分区,Windows 分区可能会显示不同的 UUID,但它们始终是唯一的。
现在您应该插入要从中启动操作系统的 USB 驱动器并安装它:mount /dev/sdd1 /mnt/pendrive
然后,您可以使用以下命令将 GRUB 安装到您的 pendrive 中:
grub-install --no-floppy --root-directory=/mnt/pendrive /dev/sdd1
要获取 USB 密钥所在的设备,您可以运行fdisk -l
。
安装后,您应该编辑文件grub.conf
并使用 UUID 选择正确的分区:
root (hd0,0)
kernel /<kernel_file> root=UUID=4a2464b4-c865-4681-b9d9-5d8aef1e2215
另一种更简单的方法是使用超级Grub磁盘并让它找到启动分区并让您选择要启动的分区。