【问题标题】:Resetting Default Grub Boot重置默认 Grub 引导
【发布时间】:2015-05-31 19:18:56
【问题描述】:

我的系统在一个硬盘上安装了多个 Red Hat。我想在运行时自动选择默认安装启动。 Red Hat 这样做的方式(与 Grub 文档略有不同)是进入 grub shell 并说

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

保存到指定的地方。

我使用链式加载,所以磁盘上有几个 grub.conf 文件。我只想更改与 /boot 中与 MBR 相关联的 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 关联的那个文件实际上控制初始启动。

我在这里错过了什么?

【问题讨论】:

    标签: linux boot grub


    【解决方案1】:

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

    Grub legacy 保证某些变量被硬编码到此文件中的特定位置 (see here)。请注意,在 stage2 的情况下,这些偏移量是相对于 512 字节的偏移量给出的。在我们的特殊情况下,我们想要更改保存的条目号,偏移量为 0x200 + 0xC。要将其更改为 1,我们说

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

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

    这是 grub-set-default 命令应该做的,但在 Redhat 发行版中缺少它,并且上面描述的替代“修复”不起作用。

    【讨论】:

      猜你喜欢
      • 2020-05-26
      • 2017-11-09
      • 2012-07-22
      • 2017-11-19
      • 1970-01-01
      • 2019-10-21
      • 1970-01-01
      • 2014-03-19
      • 2016-09-19
      相关资源
      最近更新 更多