我有一台 Centos 6 服务器,在过去 6 个月里一直在 Google Compute Platform 上正常运行。
如果没有重新启动 - 它今天早上就冻结了,重新启动时出现以下错误:
[ 3.205240] VFS: Cannot open root device "UUID=e2eb8dc4-d9f9-48e8-9194-cdbff5f4513f" or unknown-block(0,0)
[ 3.208204] Please append a correct "root=" boot option; here are the available partitions:
[ 3.210557] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[ 3.213256] Pid: 1, comm: swapper veid: 0 Not tainted 2.6.32-673.8.1.lve1.4.3.1.el6.x86_64 #1
[ 3.215642] Call Trace:
[ 3.216263] [<ffffffff81546288>] ? panic+0xa7/0x16f
[ 3.217749] [<ffffffff81c45515>] ? mount_block_root+0x208/0x2bd
[ 3.219708] [<ffffffff81002930>] ? bstat+0x200/0x8d0
[ 3.221633] [<ffffffff81c45620>] ? mount_root+0x56/0x5a
[ 3.223300] [<ffffffff81c45794>] ? prepare_namespace+0x170/0x1a9
[ 3.225390] [<ffffffff81c44ac2>] ? kernel_init+0x2e6/0x2fc
[ 3.227119] [<ffffffff8100971d>] ? __switch_to+0x7d/0x340
[ 3.228979] [<ffffffff8100c3ca>] ? child_rip+0xa/0x20
[ 3.231076] [<ffffffff81c447dc>] ? kernel_init+0x0/0x2fc
[ 3.232883] [<ffffffff8100c3c0>] ? child_rip+0x0/0x20
我已关闭该实例并将磁盘连接到另一台机器,然后:
- 检查启动分区是否已满(没有单独的启动分区)
- 检查 grub 默认设置为 0(不是 1)
- 检查 /etc/fstab 是否具有磁盘的正确 UUID
答案1
这与 fstab 无关。这是因为您的 initramfs 无法找到根卷本身。这通常是由于初始 ramdisk 没有发现/挂载包含根的块设备所需的模块,或者缺少 GRUB 传递的正确根卷信息。
上述情况的一个例子是,由于没有找到基于 LVM 的根 LV 所需的 LVM 模块,initramfs 无法找到根的块设备。
另外,这可能是由于您的 GRUB 具有无效的 root= 条目,因为 initramfs 从 GRUB 获取有关应安装什么的信息(在启动期间传递)。确保您使用 UUID 来定义根卷,并且您在 GRUB 中指定的 UUID 与卷本身的 UUID 匹配。
看起来它没有找到任何可以安装的东西,这更像是 initramfs 中缺少模块的问题,而不是其他问题。您可能需要在 chroot 中重建 initramfs(使用可以访问该卷的实时操作系统)。Dracut 是您将用来重建 initramfs 的工具。
如果重建后问题仍然存在,那么提取 initramfs 并检查其内容将是一个明智的做法。在此过程中,如果您在 root mount 或 root pivot 失败时进入 initramfs shell,这将非常有帮助。如果是这种情况,您将很容易调查导致此问题的原因(因为该 shell 默认有很多工具)。