我在半嵌入式环境中的单板机上安装了 Ubuntu 10.10 Server;没有键盘或屏幕,只能通过 SSH 访问。
所以就是真的当它偶尔启动并卡在 GRUB 菜单上,等待按键来选择第一个选项时,令人沮丧。
如何配置 GRUB 使其在任何情况下都不等待击键?
更新 #1:没有 menu.lst,因为这是 GRUB 2。但我有一个 /etc/default/grub,如下所示:
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=2
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
GRUB_CMDLINE_LINUX=""
更新 #2:我搞明白了。在启动失败之后的启动中,GRUB 会禁用其自身的超时。由于显示菜单会导致启动失败,因此这是一个不可避免的循环。可以通过编辑 /etc/grub.d/00_header 文件并更改 make_timeout 函数来禁用此行为:
make_timeout ()
{
echo "set timeout=0"
}
现在退出并重新运行 grub 配置更新程序脚本:
sudo update-grub2
我觉得这种行为竟然是 Ubuntu Server(一种用于通过控制台访问的机器的产品)的默认行为,这毫无意义。
答案1
对于 Ubuntu 12.04 LTS,有一个特定的选项可以在中设置/etc/default/grub
。
例如,如果您想要有 2 秒的超时时间(从而避免无人值守重启时挂起),只需添加以下行/etc/default/grub
:
GRUB_RECORDFAIL_TIMEOUT=2
记得追上update-grub
去...
答案2
以下是针对 Ubuntu 10.10 的说明,与之前的版本略有不同。在文件中 /etc/grub.d/00_header 注释掉之前启动失败的愚蠢检查:
##if [ \${recordfail} = 1 ]; then
## set timeout=-1
##else
set timeout=${2}
##fi
然后更新:
sudo update-grub
请注意,如果有第二个驱动器连接了 Linux,grub2 会找到它,并在启动时询问您想要哪一个。运行“update-grub”之前,请移除所有额外的驱动器。
也可以看看https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544
答案3
我在 Ubuntu Server 9.10 中遇到了这个非常令人不快的设计疏忽。您的修复对我帮助很大。我只是想指出,9.10 所需的修复有所不同,因为同一文件中没有“make_timeout ()”函数。
对于 Ubuntu 9.10,转到同一文件(00_header)的末尾并更改以下内容:
如果 [ \${recordfail} = 1 ]; 那么 设置超时=-1 别的 设置超时=${GRUB_TIMEOUT} 菲 末梢血
到
如果 [ \${recordfail} = 1 ]; 那么 设置超时=${GRUB_TIMEOUT} 别的 设置超时=${GRUB_TIMEOUT} 菲 末梢血
和前面一样,然后运行:
sudo 更新-grub2
答案4
我只是为 recordfail 设置了一个较长的超时时间:
if [ "\${recordfail}" = 1 ]; then
set timeout=30
else
set timeout=${2}
这意味着如果上次启动失败,则启动时会有 30 秒的超时时间。(与其他操作系统的做法不同...)
这甚至可以(并且恕我直言应该)在 /etc/default/grub 中进行设置。