update-grub 忽略 /etc/default/grub 中的某些选项

update-grub 忽略 /etc/default/grub 中的某些选项

刚刚安装了另一个硬盘,发现 grub 自动添加了启动所需的菜单项。我想通过编辑 /etc/default/grub 来调整这些新条目,但似乎某些设置被 update-grub 和 grub-mkconfig 脚本忽略或覆盖。具体来说,这些行:

GRUB_TIMEOUT=2
GRUB_OS_PROBER_SKIP_LIST="469841589841479F"

我确实删除了 GRUB_HIDDEN_TIMEOUT=0 行,因为文档说它已被弃用,并将其替换为:

GRUB_TIMEOUT_STYLE="隐藏"

运行任一脚本后,生成的 grub.cfg 文件包含:

如果 [ “${recordfail}” = 1 ] ; 然后
  设置超时=-1
别的
  如果 [ x$feature_timeout_style = xy ] ; 然后
    设置 timeout_style=hidden
    设置超时=2
  # 如果 timeout_style 功能不可用,则回退隐藏超时代码
  # 不可用。
  elif sleep --interruptible 2 ; 然后
    设置超时=0
### 结束 /etc/grub.d/00_header ###

因此这里使用了超时选项。问题似乎出在后面的 /etc/grub.d/30_os-prober 部分。在我拥有第二块硬盘之前,显然没有来自那里的条目。现在有了,它将以下内容添加到 grub.cfg 中:

### 开始 /etc/grub.d/30_os-prober ###
菜单项'Windows 7 (加载器) (在 /dev/sdb1 上)'--class windows --class os $menuentry_id_option'osprober-chain-CA0E41BE0E41A3F3'{

[剪辑]
}
menuentry'Windows 恢复环境(加载器)(在 /dev/sdb2 上)'--class windows --class os $menuentry_id_option'osprober-chain-469841589841479F'{

[剪辑]
}
设置 timeout_style=menu
如果 [ “${timeout}” = 0 ]; 然后
  设置超时=10
### 结束 /etc/grub.d/30_os-prober ###

因此,它不仅不会忽略我告诉它的分区,而且脚本的 os-prober 部分也不允许我将超时设置为 0 并强制显示菜单(如果我想更改启动选项,我习惯在开机时按住左移键)。

一两秒的超时延迟只会稍微让人烦躁一些,但当我明确不想要菜单时却强制显示菜单,并且该菜单包含一个永远不应该列出的分区,这就更加让人烦躁了。

除了每次编辑 grub.cfg 或调整 /etc/grub.d/30_os-prober(在升级过程中可能会被覆盖?)之外,有没有办法解决这个问题?

谢谢!

答案1

Grub 检查是否GRUB_OS_PROBER_SKIP_LIST为,因此正确的格式例如:EXPUUIDUUIDGRUB_OS_PROBER_SKIP_LISTUUID@/dev/????

GRUB_OS_PROBER_SKIP_LIST="A3F5-6DF3@/dev/sda1"

答案2

我如何清理 grub.cfg

0- 当安装新的 [Linux] 发行版时,grub-mkconfig 将使用 /etc/grub.d/10_linux 来实现 Linux 内核和恢复菜单项。OS-Prober 将 [/etc/grub.d/30_os-prober] 使用 30_os-prober 查找其他操作系统 [操作系统]

启动菜单经常会有不需要的、多余的甚至是无效的条目。(启动菜单中的一个无效条目让我开始了这一探索。)我查看了 /boot/grub/grub.config 以熟悉菜单条目。

为了删除不需要的条目,我以 root 身份执行以下操作:

1- 30_os-prober 发现了无效条目。我将我想要的条目 [由 30_os-prober 在 /boot/grub/grub.cfg 中创建] 复制到 40_custom。

2-我在 /etc/default/grub 中放入 GRUB_DISABLE_OS_PROBER="true"

3-我在启动备份目录中测试了新配置。sudo grub-mkconfig -o menu-test.cfg [文件名任意]

4-当测试文件看起来符合我的要求时:sudo update grub

下次我启动时,不需要的条目消失了,但我想要的条目却在最后。

答案3

查找 UUID 的最佳方法是这样的:

sudo grub-probe --target=fs_uuid --device /dev/sda6

查找 UUIDblkid对 Mac OS X 分区不起作用。

答案4

如果os-prober检查分区时返回错误(例如zfs),请参见此修复

相关内容