如何找出 GRUB2 的菜单输出

如何找出 GRUB2 的菜单输出

我刚刚更新了一台运行 Ubuntu Server 12.04 的远程计算机。我只能通过 SSH 访问,现在要求重新启动。我猜安装了新内核。我需要让它在一个非常特定的内核中启动,否则它就会挂起。有什么方法可以检查(从命令行,因为我是通过 SSH 连接)GRUB2 在下次重新启动时将执行什么操作?

我主要需要确保:

  1. 机器将在正确的内核上启动(现在可能已移至“ Previous Linux Versions”子菜单)
  2. GRUB2 菜单将“服从”我的超时请求(在某些情况下,我发现机器会卡在 GRUB2 引导菜单中,尽管GRUB_TIMEOUT在 中指定了参数 /etc/default/grub

那么有什么方法可以“模拟”或诊断 GRUB2 在下次重新启动时将要执行的操作吗?一些检查诸如“它将启动内核 yaddayaddayadda 并且激活了 yadda 秒的超时

我知道可能性不大,但也许有类似诊断工具的东西(必须是命令行......我什至在我连接的计算机上没有 X-Windows)

先感谢您!

答案1

据我所知,真正模拟的唯一方法是将磁盘传递给虚拟机。

我经常用我的 GRUB2 USB 记忆棒来做这件事,它有我的台式机和上网本的内核,还有十几张 Linux Live CD 以及启动项 memtest、DOS、Windows,...

当我更改配置中的某些内容(例如添加另一个 Live CD ISO)时,我可以通过在 KVM 会话中启动 USB 记忆棒来测试它是否可以启动。

不幸的是,如果系统实际启动然后写入磁盘,这个解决方案对您来说将是致命的!文件系统蓬勃发展,因为它们仍在被主机使用,然后来宾也开始修复和使用它们......

因此,为了安全地使用它,您必须确保您的虚拟机以只读模式使用它。实现这一目标的最安全选择是通过只读循环设备。

# losetup --只读 --find --show /dev/sda
/dev/loop42
# 同步
# qemu-kvm -disk file=/dev/loop42,只读

由于 GRUB 本身不需要进行任何写入,因此您应该能够准确地看到将会发生什么。确保您的磁盘已同步,因为 /boot 上最近的文件修改可能仍仅驻留在内存中而不是磁盘上。如果你可以 umount /boot 那将是最好的选择。

对于您的命令行问题,请注意您可以通过 SSH 执行 X(尽管速度非常慢)。 KVM 还提供 VNC、串行控制台和其他远程功能。

如果您无法在服务器上运行虚拟机(例如,如果它是虚拟服务器),则可以以只读甚至写时复制模式使用网络块设备 (NBD) 来运行服务器虚拟机通过网络。服务器甚至不需要支持 NBD,它只需要运行服务器守护进程。不过,客户端必须在内核中支持 NBD。

当然,如果您只能阅读并理解 grub.cfg 文件,那么整个模拟工作就显得有些过分了。不幸的是,自动生成的内容会因为不必要的样式而导致不可读。

相关内容