GRUB 忽略 /etc/default/grub 中的设置 - 单启动系统

GRUB 忽略 /etc/default/grub 中的设置 - 单启动系统

如何让 GRUB 直接启动到 Ubuntu 而不在 30 秒内显示菜单?

我今天在一台全新的机器上安装了全新的 Ubuntu 18.04.3。

制造商已经安装了 Windows 的测试安装,但我告诉 Ubuntu 安装程序将其删除并用 Ubuntu 覆盖。

现在我发现 GRUB 菜单出现后要等待 30 秒,然后才默认为 Ubuntu(第一个选项)。它显示三个选项:“Ubuntu”、“Ubuntu 高级选项”(这会引导至一个子菜单,其中有内核版本的选择),最后一个选项会导致系统重置并调出 BIOS 设置。这不太好,因为这台机器应该是独立的,这会导致重启时间变慢。

当我查看 /etc/default/grub 时,我看到 GRUB_TIMEOUT 是已经设置为 0,并且 GRUB_TIMEOUT_STYLE 已设置为“隐藏”,这很奇怪,因为 GRUB 菜单在每次启动时都会停留 30 秒。

尽管如此,我还是尝试添加:GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true(并运行 sudo update-grub),但没有任何变化。每次启动时,grub 菜单仍会停留 30 秒。我尝试过只激活 GRUB_HIDDEN_TIMEOUT 选项并注释掉 GRUB_TIMEOUT 选项;以及只激活 GRUB_TIMEOUT 选项并注释掉 GRUB_HIDDEN_TIMEOUT 选项;这些都没有任何变化。

我尝试添加:GRUB_DISABLE_OS_PROBER=true(并运行 sudo update-grub),但没有任何效果。仍然会出现 30 秒的 grub 菜单。

我尝试从 /etc/grub.d/30_os-prober 中删除 x 位,但仍然没有什么区别。

我现在尝试从实时 USB 运行引导修复,这为菜单添加了几个新选项(每个选项的名称都是以 .efi 结尾的字母串)。菜单仍显示 30 秒。

还有什么我可以尝试让 GRUB 跳过菜单并直接启动到 Ubuntu 吗?*缺少重新安装吗?

提前致谢!

====================

编辑:我已经找出了问题所在。在 /etc/grub.d/00_header 中有:

if [ "$recordfail_broken" = 1 ]; then
  cat << EOF
if [ \$grub_platform = efi ]; then
  set timeout=${GRUB_RECORDFAIL_TIMEOUT:-30}
  if [ x\$feature_timeout_style = xy ] ; then
    set timeout_style=menu
  fi
fi
EOF

...这导致这些行位于 /boot/grub/grub.cfg 中...

if [ $grub_platform = efi ]; then
  set timeout=30
  if [ x$feature_timeout_style = xy ] ; then
    set timeout_style=menu
  fi
fi

因此,即使我的 grub 环境中没有设置“recordfail”(我已经检查过),显然 GRUB 声明 recordfail 系统已损坏,因此默认将 recordfail 默认超时设置为 30 秒。

我已将 GRUB_RECORDFAIL_TIMOUT 更改为 0,现在我获得了想要的更快的启动时间。但是,如果启动时出现任何问题,现在我显然无法访问启动菜单。

发生这种情况似乎是因为 /boot 目录位于 LVM 分区上,因此无法写入。这是一个已知错误(这里)。但是为什么在全新安装上会发生这种情况……?

答案1

作为一种暴力破解方法,您可以创建一个名为的文件,/etc/grub.d/99_short_timeout其内容如下:

cat << EOF
set timeout=1
EOF

并调用

chmod a+x /etc/grub.d/99_short_timeout
update-grub

之后。这将set timeout=1作为最后一行添加到grub.cfg

我之所以希望至少有一秒钟的超时时间,是因为我想保留更改 GRUB 选择的机会。就我而言,GRUB 拒绝完全跳过选择,原因很充分:我使用 Btrfs,而 GRUB 还无法写入 Btrfs 分区,因此它无法记录失败的启动,也无法在启动时区分是否应该为我提供救援系统。

相关内容