无法获取grub菜单超时(或消失)

我正在运行Ubuntu 12.04。

我无法为我的生活获得grub菜单(带选项)消失。

我希望它能自动启动到第一个选项。 我编辑了/ etc / default / grub ,看起来如下所示:

GRUB_DEFAULT=0 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=10 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" GRUB_CMDLINE_LINUX="" 

在此之后,我运行了sudo update-grub 。 然后我意识到我有grub 2,所以我运行了sudo update-grub2 (两者都让它看起来像是成功创建了grub.cfg文件。

我重新启动计算机,然后回到grub菜单,然后坐在那里直到我做出选择。 如果电源耗尽,这是不可取的…… 🙂

我也尝试使用sudo grub-install / dev / sda重新安装grub – 也不成功

正如其他答案所指出的那样,您可能是记录失败情况的受害者。 手动编辑/boot/grub/grub.cfg应该是不可能的,因为它是自动生成的。 看到的另一个建议是编辑/etc/grub.d/00_header但它可能会提示用户干预更新。

最简单的解决方案是在/etc/default/grub定义未记录的 GRUB_RECORDFAIL_TIMEOUT变量。 例如:

 GRUB_HIDDEN_TIMEOUT=0 GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=5 GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT 

编辑

有关详细信息,请参阅此答案 。

使用:

 grub-editenv create 

这将清除grub环境文件,并且应该在下次启动时清除。

GRUB_TIMEOUT=10更改为零

这是我的配置文件:

 GRUB_DEFAULT="Ubuntu, with Linux 3.2.0-30-generic-pae" #GRUB_HIDDEN_TIMEOUT=10 #GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=1 GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="" 

首先,直接写入要引导的操作系统的名称。 我的是Ubuntu。 因此,您将在GRUB_DEFAULT="Ubuntu, with Linux xxx-xx-generic-pae"编写它

然后我在GRUB_TIMEOUT=使用了1秒钟,在选择默认操作系统之前给我1秒钟(如果我需要启动到另一个操作系统,例如Xubuntu)

至于GRUB_CMDLINE_LINUX_DEFAULT=""如果你删除quite splash它将在启动过程中显示文本而不是Ubuntu徽标(我喜欢这样:P)


还有另一种解决方案:

有一个名为boot-repair的程序,它有助于使用GUI进行配置。

在此处输入图像描述

在此处输入图像描述

正如你从图像中看到的那样。 有一个名为Unhide boot menu的框。 只需取消选中该框并按下appy即可。 您可以通过单击高级选项箭头来访问它。

安装启动修复

 sudo add-apt-repository ppa:yannubuntu/boot-repair sudo apt-get update sudo apt-get install -y boot-repair 

然后从终端或短划线运行boot-reapir


第三解决方案

你可以使用一个易于使用的GUI应用程序grub-customizer来让你的生活变得轻松。 顾名思义,您可以做的不仅仅是重新排序Grub菜单条目。

您可以通过以下方式安装:

 sudo add-apt-repository ppa:danielrichter2007/grub-customizer sudo apt-get update sudo apt-get install grub-customizer 

在此处输入图像描述

从菜单中可以看到show menu选项。 取消查看是否有效

我遇到的问题是,在使用AUFS(unionfs)将根文件系统只读后,grub菜单总是出现。 每次启动后,我都会在服务器上点击输入键。 我按照这里的说明操作: 禁用grub 2菜单 。 从那以后,我没有任何问题。

编辑/boot/grub/grub.cfg并更改:

 if [ ${recordfail} = 1 ]; then set timeout=-1 else set timeout=10 fi 

 if [ ${recordfail} = 1 ]; then set timeout=1 else set timeout=10 fi 

我可以通过在/etc/default/grub添加以下行来解决该问题

 GRUB_DISABLE_OS_PROBER=true 

…然后运行sudo update-grub

解释:文件/boot/grub/grub.cfg是通过使用/etc/grub.d/etc/default/grub的文件运行update-grub生成的。 因此,您不应该编辑grub.cfg ,但找出超时设置的原因会很有帮助。 搜索以set timeout=开头的行,然后搜索以### END /etc/grub.d/ ...开头的下一行。 这可能会为您提供哪些脚本设置超时的提示。 在我的情况下,os-prober脚本负责超时。 事实certificate/etc/grup.d/30_os-prober中有一个10s的硬编码超时,它不是由GRUB_TIMEOUT设置的。 您可以通过GRUB_DISABLE_OS_PROBER=true禁用os-prober或编辑/etc/grup.d/30_os-prober或使用GRUB_OS_PROBER_SKIP_LIST跳过某些硬盘分区(在某处找到另一个操作系统时使用30_os-prober)。 有关详细信息,请参阅此问答 。 正如其他人指出的另一个原因可能是recordfail ,在这种情况下设置GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT

不推荐使用GRUB_HIDDEN_TIMEOUTGRUB_HIDDEN_TIMEOUT_QUIET选项。 所以评论那些。

要跳过菜单并在仅按住ESC时显示,请添加:

 GRUB_TIMEOUT_STYLE='countdown' GRUB_TIMEOUT=1 

示例/etc/default/grub

 GRUB_DEFAULT=0 #GRUB_HIDDEN_TIMEOUT=0 #GRUB_HIDDEN_TIMEOUT_QUIET=true GRUB_TIMEOUT=1 GRUB_TIMEOUT_STYLE=countdown GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian` GRUB_CMDLINE_LINUX_DEFAULT="" GRUB_CMDLINE_LINUX="" 

‘GRUB_TIMEOUT_STYLE’ :如果此选项设置为’倒计时’或’隐藏’,则显示菜单之前 ,GRUB将等待’GRUB_TIMEOUT’设置的超时到期。 如果在此期间按下ESC ,它将显示菜单并等待输入。