无法获取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_TIMEOUT
和GRUB_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 ,它将显示菜单并等待输入。