我已将 GRUB 设置为完全隐藏。但是,它有时会在启动时随机显示。这可能是什么原因造成的?
etc/default/grub 的内容
GRUB_DEFAULT="0"
GRUB_TIMEOUT_STYLE="hidden"
GRUB_TIMEOUT="0"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nouveau.modeset=0"
GRUB_CMDLINE_LINUX=""
GRUB_HIDDEN_TIMEOUT="0"
GRUB_DISABLE_OS_PROBER="true"
Ubuntu 18.04 是唯一安装的操作系统。我正在使用 UEFI 启动,并禁用安全启动。
答案1
你有
GRUB_TIMEOUT_STYLE="hidden"
但/etc/default/grub
你也有线
GRUB_HIDDEN_TIMEOUT="0"
在/etc/default/grub
。
使用第一个命令您告诉 Grub 隐藏菜单,使用第二个命令您告诉 Grub 在 0 秒后显示菜单。
你应该删除该行
GRUB_HIDDEN_TIMEOUT="0"
然后/etc/default/grub
运行sudo update-grub
。
这是GRUB 手册:
‘GRUB_HIDDEN_TIMEOUT’
等待这么多秒后再显示菜单。如果在此期间按下 ESC,则显示菜单并根据“GRUB_TIMEOUT”等待输入。如果按下与菜单项关联的热键,则立即启动关联的菜单项。如果在上述任一情况发生之前超时到期,则在启动默认项之前显示菜单,时间为“GRUB_TIMEOUT”中指定的秒数。
如果您设置了“GRUB_HIDDEN_TIMEOUT”,您还应该设置“GRUB_TIMEOUT=0”,这样除非按下 ESC,否则根本不会显示菜单。
默认情况下未设置此选项,并且不推荐使用,而建议使用不太容易混淆的“GRUB_TIMEOUT_STYLE=countdown”或“GRUB_TIMEOUT_STYLE=hidden”。
另一种可能性是 Grub 的内置recordfail
函数。每当选择菜单项(手动或自动)时,Grub 都会设置变量recordfail=1
并将其保存在 中/boot/grub/grubenv
。
在启动过程中,如果启动成功,systemd 将取消设置该变量;如果启动失败,该变量将保持不变/boot/grub/grubenv
。
每次 Grub 启动时,Grub 都会读取/boot/grub/grubenv
并检查是否recordfail
设置为1
。这样 Grub 就会知道上次启动是否成功。如果上次启动不成功,Grub 会覆盖您的设置,/etc/default/grub
显示启动菜单 30 秒。
/boot/grub/grubenv
您可以使用检查内容
cat /boot/grub/grubenv
答案2
当系统或程序未正常关闭后 Grub 进入恢复模式时,似乎会出现问题。
为了防止 Grub 在这些情况下显示,请将这一行添加到 /etc/default/grub 中
GRUB_RECORDFAIL_TIMEOUT="3"
将超时值设置为任意值。我将其设置为 3,以便在系统发生故障时仍可以选择访问组。将值设置为 0 将完全阻止 Grub 显示。
完成更改后,运行此命令以应用它们:sudo update-grub