在 Server 2012 R2 标准集群中的 Hyper-V 上运行 Ubuntu 14.04。当我将此虚拟机故障转移到另一个节点时,它启动时出现此错误:
/boot 的磁盘驱动器尚未准备好或不存在。继续等待,或按 S 跳过安装或按 M 进行手动恢复。
我可以按 S 跳过错误,系统可以启动,但如果我重新启动虚拟机,错误又会再次出现。我也无法对虚拟机进行正确的备份,因为备份软件抱怨启动分区是空的。
有人见过这种情况吗?有什么建议可以解决它吗?
谢斯克
答案1
这可能意味着该/boot
分区(通常/dev/sda1
)已受到非致命损坏。系统仍能从中读取和启动内核,但无法在启动过程中检测到该分区并挂载它。
除此之外,系统运行正常,但未/boot
安装,因此您将无法看到 grub 文件或执行更新内核等操作。
您可能会/boot
在/etc/fstab
文件中找到一个条目,该条目尝试通过其块 ID 来挂载它:
# /boot was on /dev/sda1 during installation
UUID=cc1f7924-150b-412c-81c0-a8931eed57f0 /boot ext2 defaults 0 2
如果你运行blkid
,你应该正常地看到像这样的条目/dev/sda1
,但它可能缺失:
/dev/sda1: UUID="cc1f7924-150b-412c-81c0-a8931eed57f0" TYPE="ext2"
file -s
能够识别它,并且可能会显示正确的 ID,但它不知何故被损坏了:
$ sudo file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext2 filesystem data (mounted or unclean), UUID=cc1f7924-150b-412c-81c0-a8931eed57f0 (needs journal recovery)
在其上运行 fsck 有望解决问题(尽管在 VM 中可能值得先进行检查点/快照):
$ sudo fsck /dev/sda1
fsck from util-linux 2.20.1
e2fsck 1.42.9 (4-Feb-2014)
Superblock needs_recovery flag is set, but no journal is present.
Clear<y>? yes
/dev/sda1 was not cleanly unmounted, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sda1: ***** FILE SYSTEM WAS MODIFIED *****
/dev/sda1: 301/62248 files (15.3% non-contiguous), 46683/248832 blocks
此后file -s
应该会显示一个没有问题的文件系统,并且您应该能够再次挂载它,或者在重新启动时成功挂载它。
$ sudo file -s /dev/sda1
/dev/sda1: Linux rev 1.0 ext2 filesystem data, UUID=cc1f7924-150b-412c-81c0-a8931eed57f0