运行 GRUB,我想将内核根参数设置为与引导加载程序所在的磁盘相同的分区(或者更一般地说,设置为同一设备上的分区)。
最初,安装将 GRUB 菜单项设置/dev/XX
为 root 参数:
title XXXXX
root (hd#,#)
kernel /boot/vmlinuz-XXXX root=/dev/XX1 resume=/dev/XX2 splash=silent quiet showopts vga=0x###
initrd /boot/initrd-XXXX
我可以更改该kernel
行以引用我的磁盘标签,增加其以各种顺序出现的容差:
kernel /boot/vmlinuz-XXXX root=LABEL=??? resume=LABEL=swap? splash=silent quiet showopts vga=0x###
我想更改该行,以便我可以引用引导分区,无论是/dev/sda2
或/dev/hdb6
,或者更好的是仅引用分区号,内核将相对于引导分区(root (hd#,#)
在 GRUB 中)解释该分区号。
答案1
对于 grub 的正确安装,此信息无关紧要。您不需要指定 /boot 是哪个分区,只要在安装 grub 时安装了它即可。 Grub 在安装过程中将设备(磁盘)以及 vmlinuz 和/initrd 的位置保存在 MBR 中,之后不需要在 grub 配置中进一步引用。
编辑
在澄清您想要“引用与引导分区相关的根分区”之后。据我所知,没有任何选项可以支持此功能,但您可以自己添加它(因此请在这里划掉我的最后一条评论)。这将涉及修改 initrd 映像中的 init 脚本。例如,您可以在内核行中添加像 bootrel=+1 这样的参数,并向 initrd 映像添加一些代码以找出引导分区在哪里,然后检查 bootrel 参数以找到根分区并相应地设置根参数。
这当然是一种过于复杂和黑客的方式。也许你处理问题的方式是错误的。如果您更笼统地描述您需要实现的目标,那么也许有人会提供更多选择。