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


18

我正在运行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-也不成功


在设置了当前希望自动引导到的当前分区之后,您是否有机会将Ubuntu安装了另一个分区?
fabricator4

我不确定您的意思,我是linux的新手。我确实在以前的Ubuntu安装上进行了安装,但是没有升级。全新安装。我可能在分区方面做了一些坏事……这可能,对修复它有什么想法吗?
埃里克(Eric)

sudo update-grubsudo update-grub2运行相同的命令。所以,不用担心那部分。
saji89 '10 -10-18

请发布cat /boot/grub/grub.cfg via pastebin 的输出并在此处共享链接。这是看实际grub.cfg生成的。
saji89 '10 -10-18

下面是引擎收录:pastebin.com/xxe2rLhg的grub.cfg的。感谢你的帮助!
埃里克

Answers:


22

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

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

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

编辑

有关更多详细信息,请参见此答案


非常感谢,这正是我想要的!
Avio

进行更改后,还运行update-grub以生成更新的/boot/grub/grub.cfg文件
Colt

不要杀死recordfail!的功能!如果启动失败,则需要更长的超时时间。要手动清除,您只需要@sniffski的答案:grub-editenv create。但是,可能还有其他原因recordfail要设置...
Cameron Tacklind

6

采用:

grub-editenv create

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


非常感谢您的分享。这通过SSH起作用,这使我陷入了陷入grub无头服务器的困境。
Geppettvs D'Constanzo

grub-editenv - unset recordfail效果很好,并且不会影响可能设置的其他环境
Cameron Tacklind

2

更改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 x.x.x-xx-generic-pae"

然后我用了1秒 GRUB_TIMEOUT=在选择默认操作系统之前,时间给了我1秒钟的时间(如果需要引导至其他操作系统,例如Xubuntu)

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


还有另一种解决方案:

有一个称为引导修复的程序,可帮助配置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从终端或破折号运行。


第三种解决方案:

您可以使用名为grub-customizer的易于使用的GUI应用程序使您的生活变得轻松一些。顾名思义,您不仅可以对Grub菜单条目进行重新排序,还可以做更多的事情。

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

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

在此处输入图片说明

正如您从菜单中看到的那样,有show menu选项。放松一下,看看是否有效


不用找了。:-/根据菜单中的列表,我认为GRUB_DEFAULT应该是数字#?将GRUB_TIMEOUT更改为0并没有帮助。
埃里克

@Eric您可以使用两种方式:如果您知道操作系统在grub列表中的位置,则可以使用数字。但是对我来说,我有4个Linux发行版和1个Windows以及memTest和恢复。因此,仅凭确定(我知道您可能已经做到了,但仅确保:P)对我来说很难记住他们的位置:)。grub-update更改值后是否运行了?
Suhaib 2012年

更改值后,我确实运行了grub-update。:-/
埃里克(Eric)

我安装并使用了您提供的引导修复应用程序,该应用程序在首次引导时就可以使用。之后,GRUB菜单又回来了,它一直坐在那儿,直到我按下一个键。感谢您的所有帮助,我非常感谢。不知道从这里去哪里...
Eric

@Eric好的,我发现了第三个解决方案
Suhaib 2012年

2

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':如果此选项设置为'countdown'或'hidden',那么 显示菜单之前,GRUB将等待'GRUB_TIMEOUT'设置的超时时间到期。如果在此期间按下ESC,它将显示菜单并等待输入。


应该,但是它所做的只是显示标准菜单1秒钟。至少在全新的16.04
frnhr

1

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

GRUB_DISABLE_OS_PROBER=true

...然后运行sudo update-grub

说明:该文件/boot/grub/grub.cfg是由运行产生update-grub使用中的文件/etc/grub.d/etc/default/grub。因此,您不应该编辑grub.cfg,但有助于找出设置超时的原因。搜索以开头的行set timeout=,然后搜索以开头的下​​一行 ### END /etc/grub.d/ ...。这可能会提示您哪个脚本设置了超时。在我的情况下,os-prober脚本负责超时。事实证明,有一个10秒的硬编码超时,/etc/grup.d/30_os-prober它没有设置GRUB_TIMEOUT。您可以禁用os-prober GRUB_DISABLE_OS_PROBER=true或进行编辑,/etc/grup.d/30_os-prober也可以使用GRUB_OS_PROBER_SKIP_LIST跳过某些硬盘分区(当在某个位置找到另一个OS时使用30_os-prober)。有关详细信息,请参阅此问答。正如其他人指出的,另一个原因可能是记录记录失败,在这种情况下设置GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT


0

我有一个问题,就是在我使用AUFS(unionfs)将根文件系统设置为只读后,总是出现grub菜单。每次启动后,我都不得不在服务器上按Enter键。我按照这里的说明进行操作:禁用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

解决方案中的之前和之后完全相同。
RawwrBag 2014年

set timeout=-1set timeout=1。前者是“永远等待”,后者是“等待一秒钟”。
Jeff McJunkin

0

我的Ubuntu总是有30秒的超时时间,无论我是否要设置值。以下是我如何发现recordfail是缺少的值

1.验证实际的grub脚本 /boot/grub/grub.cfg

恕我直言,验证Grub将执行的操作的最佳方法是打开/boot/grub/grub.cfg。它是grub-mkconfig使用中的模板/etc/grub.d和中的设置自动生成的脚本/etc/default/grub

在109行附近,您会看到类似以下内容:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=30 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

以我生成的脚本为例,我可以发现该recordfail变量未设置。

2.如果recordfail未设置变量,请进行设置

/etc/default/grub在您喜欢的文本编辑器(例如vim)中打开,然后将变量GRUB_RECORDFAIL_TIMEOUT设置为给定值,例如5秒。

您的配置文件应如下所示:

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

3.更新配置以运行 update-grub

最后一步,更新配置以使其运行update-grub。现在,GRUB2将使用设置的超时时间。此命令将重新生成/boot/grub.cfg文件。

4.验证生成的脚本结果

再次,打开/boot/grub.cfg并检查第109行的结果:

108 if [ "${recordfail}" = 1 ] ; then
109   set timeout=5 # Note here this value
110 else
111   if [ x$feature_timeout_style = xy ] ; then
112     set timeout_style=hidden
113     set timeout=3
114   # Fallback hidden-timeout code in case the timeout_style feature is
115   # unavailable.
116   elif sleep --interruptible 3 ; then
117     set timeout=0
118   fi
119 fi

请注意,第109行的值现在为5,而不是以前的30。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.