Linux 如何自动检测内核是否必须在 dev hdc 或 hda 上启动

Linux 如何自动检测内核是否必须在 dev hdc 或 hda 上启动

我有一台安装Linux的工业PC。

这些 PC 有两个版本,每个版本的内部主板略有不同,根据主板类型,PC 内的磁盘被视为 hda 或 hdc。

到目前为止,要在两种类型的磁盘启动之间进行选择,我只需在 grub menu.lst 中放入两个条目,如下所示,因此在第一次启动 PC 时,维护人员将选择正确的设备,该设备将被记住以供将来重新启动。

default = 0
timeout = 9

title Linux 2.4.34 ( hda )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hda1 console=ttyS0,9600 console=tty0 apm=off

title Linux 2.4.34 ( hdc )
        root (hd0,0)
        kernel /boot/vmlinuz-2.4.34 ro root=/dev/hdc1 console=ttyS0,9600 console=tty0 apm=off

但在大多数情况下,这种类型的 PC 交付时没有屏幕和键盘,维护人员无法选择启动选项,因此我正在寻找一种方法,允许 PC 在加载内核之前检查正确的启动设备。

实际上,我需要启动过程检查磁盘是否被视为 /dev/hdc 或 /dev/hda ,以便使用根设备的正确值调用启动选项(即 root=/dev/hda1 或 root =/dev/hdc1 )

问题是我不知道这是否可能以及如何做到。

有人对这个话题有一些建议吗?

答案1

马特的回答应该对你有用。我想指出另一种可能性:使用 initramfs/initrd。

您可以发送一个 initrd(我很确定 initramfs 是 2.4 之后的版本,但 2.4 应该有 initrd),其中包含一些查找 rootfs 的代码。 initrd 的优点是您那时正在运行Linux。例如,您可以编写一个 shell 脚本来查找根文件系统。一旦找到它,就可以挂载它,将其pivot_root 挂载到它,然后执行/sbin/init。

您还可以获得其他好处 - 例如,如果不同的板(现在或将来)需要加载不同的模块来查看硬盘或其他启动关键设备,您可以这样做。

您还可以在那里放置各种恢复工具,这可能会很有用。

(在现代 Linux 发行版上, root= 选项实际上由 initramfs 处理。)

相关内容