如何强制 Ubuntu 在卡住的启动菜单上启动?

nLi*_*ked 32 server boot grub2 headless

我有 Ubuntu Server 11.04,但它是无头的(没有监视器)。我希望能够访问它的唯一方法是通过 SSH 远程访问。但是,有时,比如断电后,当服务器重新启动时,它会卡在 Grub 启动菜单上,并且不会倒计时。它会挂在那里等我选择第一个启动项。这意味着我必须去那里插入显示器和键盘。

但我不能远程做到这一点。无论断电还是其他原因,如何强制它继续引导到引导条目 1(默认)?

小智 39

从 Ubuntu 12.04 开始,一个更直接但未记录的解决方案是使用/etc/default/grub覆盖记录失败超时:

GRUB_TIMEOUT=10
GRUB_RECORDFAIL_TIMEOUT=$GRUB_TIMEOUT
Run Code Online (Sandbox Code Playgroud)

然后运行sudo update-grub以应用更改。


这种选项完全没有记录的事实太糟糕了。

实际上,对 的支持GRUB_RECORDFAIL_TIMEOUT是在 12.04 周期中间添加的,从 version 开始1.99-21ubuntu3.3

  grub2 (1.99-21ubuntu3.3) precise-proposed; urgency=low

[ Ben Howard ]
* Parameterization of recordfail setting. This allows users to define the
  default time out of GRUB when recordfail has been set. The curren
  setting causes hangs on headless and appliances where access to the
  console is limited or prohibited.  (LP: #669481)  [1]

-- Louis Bouchard <louis.bouchard@canonical.com>  Tue, 21 Aug 2012 10:51:58 +0200
Run Code Online (Sandbox Code Playgroud)

来自 LaunchPad 的更多详细信息。


fos*_*dom 10

这个问题的答案可以在 grub 文件中找到 /etc/grub.d/00_header

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

将超时值设置为 -1 将停止倒计时。将值更改为值 > 0 即set timeout=10

文件的这一部分看起来像

make_timeout ()
{
    cat << EOF
if [ "\${recordfail}" = 1 ]; then
  set timeout=10
else
  set timeout=${2}
fi
EOF
}
Run Code Online (Sandbox Code Playgroud)

然后运行

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

  • 我*认为*这个解决方案不是永久性的,因为如果 grub 包收到更新,它将被覆盖。使用“GRUB_RECORDFAIL_TIMEOUT”的“其他解决方案”更合适。所以,我恭敬地对这个解决方案投了反对票,而对另一个解决方案投了赞成票。 (5认同)