无头 Ubuntu 服务器机器有时卡在 GRUB 菜单

mik*_*vis 55 ubuntu headless grub grub2 ubuntu-10.10

我在半嵌入式环境中的单板机器上安装了 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=""
Run Code Online (Sandbox Code Playgroud)

更新#2:我想通了。在引导失败后的引导上,GRUB 禁用自己的超时。由于显示菜单会使启动失败,因此这是一个不可避免的循环。可以通过编辑 /etc/grub.d/00_header 文件并更改 make_timeout 函数来禁用此行为:

make_timeout ()
{
    echo "set timeout=0"
}
Run Code Online (Sandbox Code Playgroud)

现在退出并重新运行 grub 配置更新程序脚本:

sudo update-grub2
Run Code Online (Sandbox Code Playgroud)

对我来说,这种行为将成为 Ubuntu Server 的默认行为是没有意义的,Ubuntu Server 是一种用于通过控制台访问的机器的产品。

小智 41

对于 Ubuntu 12.04 LTS,可以在/etc/default/grub.

例如,如果您想要 2 秒超时(从而避免无人值守重启时挂起),只需在 中添加以下行/etc/default/grub

GRUB_RECORDFAIL_TIMEOUT=2
Run Code Online (Sandbox Code Playgroud)

记得跟在update-grub后面...


Bry*_*yce 18

以下是 Ubuntu 10.10 的说明,与之前的版本略有不同。在文件 /etc/grub.d/00_header 中 注释掉之前启动失败的愚蠢检查:

##if [ \${recordfail} = 1 ]; then
##  set timeout=-1
##else
  set timeout=${2}
##fi
Run Code Online (Sandbox Code Playgroud)

然后更新:

sudo update-grub
Run Code Online (Sandbox Code Playgroud)

请注意,如果连接了 Linux 的第二个驱动器,grub2 会找到它,并在启动时询问您想要哪个驱动器。在运行“update-grub”之前删除所有额外的驱动器。

另见https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/797544


GNT*_*NTC 6

我在使用 Ubuntu Server 9.10 时遇到了这种非常不愉快的设计疏忽。你的修复对我帮助很大。我只是想指出 9.10 所需的修复是不同的,因为同一文件中没有“make_timeout()”函数。

对于 Ubuntu 9.10,转到同一文件 (00_header) 的末尾并更改以下内容:

如果 [ \${记录失败} = 1 ]; 然后
  设置超时=-1
别的
  设置超时=${GRUB_TIMEOUT}
菲
EOF

如果 [ \${记录失败} = 1 ]; 然后
  设置超时=${GRUB_TIMEOUT}
别的
  设置超时=${GRUB_TIMEOUT}
菲
EOF

和以前一样,然后运行:

须藤更新-grub2