我发现它grub-reboot
仅适用于冷重启(关闭然后手动启动),但不适用于简单的reboot
或shutdown -r
.使用这些常用的重新启动命令,Ubuntu 16.04 偶尔会显示一些Clearing orphaned inode
消息,然后立即返回Started new Kernel Device Manager
(关闭和启动消息通常甚至是交错的)。我从来没有看到 GRUB2 屏幕,更重要的是,我从来没有启动到我的备用 grub 条目。
OTOH,如果我关闭然后手动打开机器,我会发现它grub-reboot
确实标记了正确的临时选项(不是我刚刚留下的选项)。
由于对我来说,整个目的grub-reboot
是远程切换操作系统,这不是一个好的选择。
如何重新启动并看到 GRUB?
答案1
有问题的系统是为 kexec 配置的,因此它永远不会下降到引导加载程序或固件。
kexec 背后的总体思想是避免在许多服务器硬件上出现疯狂的 POST 时间,以减少需要升级内核时的停机时间。它还有其他一些巧妙的用途(它在某些发行版上用于处理故障转储,甚至可以用于在直接在硬件上运行 Linux 和在 Xen 虚拟机管理程序中运行 Linux 之间切换)。
有两种选择可以处理这个问题。
了解如何正确禁用 kexec(通过禁用加载新内核的 init 脚本,或者卸载应该位于
kexec-tools
Ubuntu 上调用的包中的 kexec 命令)。不幸的是,这是特定于系统的,我现在不知道 Ubuntu 如何处理 kexec,所以我不能在这里给出太多建议。在发出重新引导命令之前,通过以 root 身份运行命令来手动卸载 kexec 内核
kexec -u
。只有在启动期间或安装新内核包时加载才有效(尽管我认为这是 Ubuntu 处理它的方式,但我不确定)。或者,如果使用 systemd,则调用systemctl reboot
而不只是reboot
可能绕过 kexec 内核的使用,但我对此不确定。