重置默认Grub引导



我有一个系统,在一个硬盘驱动器上安装了几个Red Hat。我想在运行时自动选择要启动的默认安装。Red Hat的方法(与Grub文档略有不同)是输入Grub shell并说

savedefault --stage2=<Stage 2 File> --default=<default>

其保存到指定的。

我使用链加载,所以磁盘上有几个grub.conf文件。我只想更改与/boot中绑定到MBR的stage2文件相关联的stage2,而不是与安装本身相关联的单个stage2文件。在grub中,如果我说

find /boot/grub/stage2

find /grub/stage2

我会返回到所涉及的分区和文件的完整路径名的有效列表。在前一种情况下,类似

(hd0,1)
(hd0,2)

在后一个中

(hd0,0)

我想改变的是后一种情况。然而,如果我说

根(hd0,0)

savedefault --stage2=/grub/stage2 --default=1

或等变体

savedefault --stage2=(hd0,0)/grub/stage2
savedefault --stage2=(hd0,0)/boot/grub/stage2

或者类似的,我得到

Error 15: File not found

我模糊地怀疑我没有正确安装分区,而且它可能是只读的,就像我做事的方式一样,但我所做的似乎都没有改变正确的stage2文件。注意,如果我只是说

savedefault --stage2=/boot/grub/stage2 --default=1

或者离开'-stage2=…'选项完全关闭,命令成功,但更改了当前运行的操作系统启动分区上的stage2文件,而不是与实际控制初始启动的MBR grub.conf相关联的文件。

我在这里错过了什么?

因此,答案似乎是暴力覆盖stage2 grub文件。这是保存的菜单项的存储位置。

Grub legacy保证将某些变量硬编码到此文件中的特定位置(请参阅此处)。注意,在阶段2的情况下,这些偏移是相对于512字节的偏移给出的。在我们的特殊情况下,我们希望更改保存的条目编号,偏移量为0x200+0xC。要将其更改为1,我们称之为

printf 'x01' | dd conv-notrunc of=/boot/grub/stage2 bs=1 seek=$((0x20c))

在下一次重新启动时,grub将自动选择菜单项1。

这就是grub set default命令应该做的,但Redhat发行版中缺少它,而且上面描述的替代"修复"也不起作用。

相关内容

  • 没有找到相关文章

最新更新