如何手动定义 grub 前缀变量?

如何手动定义 grub 前缀变量?

我的 grub 坏了,我不知道是什么原因造成的,它是在我启动我打算尝试安装的 Linux 发行版的 USB 实时映像后发生的,但我只在 anaconda 设置菜单中,安装本身并没有还没开始呢。在我开始安装之前,安装程序突然冻结了,我不得不重新启动系统。在我以某种方式完成了 /dev/sdb 上的 grub 安装后,我无法启动到现有的操作系​​统。

我的设置如下: /dev/sdb1 (Boot), /dev/sdb3 (Arch Linux Root) /dev/sdb2 (Windows boot) /dev/sdb4 (空分区,保留用作其他 Linux 发行版的 LVM我打算安装)。

grub 前缀应该是(hd1,msdos1)/grub,但是当我尝试重新安装 grub 并修复它时,由于某种原因它总是想把(hd1,msdos3)/启动/grub作为前缀和根。

当我尝试启动时,它给了我典型的错误:找不到文件“/grub/i386-pc/normal.mod”,我有点困惑,因为 grub-install 命令在 arch 上运行良好,没有报告错误,但仍然无法正确安装 grub。

这就是我从 grub 救援启动时所做的:

set prefix=(hd1,msdos1)/grub
insmod normal
normal

当我这样做时,它会正确加载,现在我只需要一种在安装 grub 时手动定义它的方法。另外,要明确的是,运行grub 安装再次并不能解决问题,只能重复它。 Grub 似乎希望我将其安装在 /dev/sdb3 上的 /boot/grub 上,而实际上它安装在 /dev/sdb1 上的 /grub 上

答案1

EG: grub-install --boot-directory=/media/USERNAME/Mounted_BootVolume/ --force /dev/sda3

其中 /dev/sda3 是“Patch-Core-Onto-Partition”,可能(但不一定)与 Mounted_BootVolume 相同。

“.../grub”作为尾随目标目录显然无法更改

取自联机帮助页: --boot-directory=... 在目录 DIR/grub 而不是 boot/grub 目录下安装 GRUB 映像

PS:新的自定义目录由 grub-shell 的任何启动隐式反映(即 grub.cfg 不需要添加 prefix= 行)AFAIK

答案2

我在这里花了几个小时用头撞墙,拼图中缺失的部分grub-install不是重新生成grub.cfg文件,您需要运行update-grub或等效grub-mkconfig -o /boot/grub/grub.cfg命令。

答案3

你有没有尝试过启动修复?它是一个实时 USB,尝试自动修复您的 Grub 安装。

答案4

您必须使用 nano 或 vim 编辑该文件,/etc/default/grub如下所示,

添加前两行,

GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true

保存并运行update-grub

我希望这能起作用。

相关内容