答案1
您的旧prefix
设置是prefix=(hd0,msdos1)/grub2
.这告诉我您/boot
在分区上有一个单独的文件系统,(hd0,msdos1)
因为旧前缀没有提到/boot
并且它曾经有效直到你做出改变。
请注意,GRUB 一次仅访问一个文件系统:它不知道也不关心Linux 中(hd0,msdos1)
通常安装的文件系统/boot
。它只需要路径名中实际属于该文件系统的部分,因为 GRUB 有效地将 视为/boot
根目录以满足其自身的需要。这就是变量的root=hd0,msdos1
含义。这也是为什么旧前缀的路径名是 just /grub2
,而不是/boot/grub2
。
通过将新前缀指定为(hd0,msdos1)/boot/grub2
,您可以有效地告诉 GRUB 查看/boot/boot/grub2
Linux 中的内容。
如果您执行了类似的操作mv /boot/grub2 /boot/newname
,则现在必须使用set prefix=(hd0,msdos1)/newname
使前缀反映grub2
目录的新名称。
如果将grub2
目录移出/boot
文件系统,则会遇到更大的问题,因为 GRUB 仅在其核心映像中安装了最少的模块来访问该grub2
目录:如果新位置位于 LVM 卷上或具有与您的文件系统类型不同的文件系统类型,/boot
文件系统,GRUB 很可能无法读取它。如果您这样做了,您需要从 RHEL 7.6 安装介质启动到救援模式,然后使用grub-install
GRUB 重新安装以使其完全适应新位置:它将首先选择所需的模块并运行grub-mkimage
以创建一个包含正确模块的新 GRUB 核心映像文件,然后将其嵌入到 MBR 以及 MBR 和第一个分区开头之间的磁盘块中。
有关 GRUB 结构的更多背景信息,请参见我之前写的关于 GRUB 的答案。