最近,在使用我的 VirtualBox VM 时,系统崩溃了。之后,VM 无法再启动(我使用的是 Vagrant)。在故障排除过程中,我打开了 VirtualBox GUI,发现 VM 无法启动的原因是由于以下错误:
Couldn't remount RDWR because of unprocessed orphan inode list.
我在 Google 上搜索了此错误,发现这可能是由文件系统损坏引起的,但可以通过简单的卸载/重新安装来修复。不幸的是,我无法使用控制台来执行此操作,或者至少我找不到方法。有没有办法可以在没有控制台的情况下修复此错误,或者,有没有办法可以在无法安装虚拟硬盘的情况下访问虚拟机中的控制台?
答案1
今天早上我设法解决了这个问题。以下是我采取的步骤,以防其他人遇到此问题:
下载可启动的 Linux .iso。
我在虚拟机中运行的是 Ubuntu 14.04 x64,因此我决定从以下网址下载 64 位 Ubuntu 14.04 安装 .iso:这里。您下载哪个版本并不重要,只要它支持您的文件系统并且您熟悉它即可。
将虚拟机中的 .iso 文件挂载为虚拟 CD-ROM。
从控制台运行virtualbox
以打开 Virtual Box 配置 GUI。从那里,转到:设置 -> 存储 -> 添加 CD/DVD 设备 -> 选择磁盘。浏览到您刚刚下载的 .iso 文件。
从.iso 文件启动。
现在使用命令 启动虚拟机的启动过程vagrant up
。在启动过程中,系统会提示您按下一个键来选择启动设备(对我来说是F12
)。现在选择要从中启动的 CD-ROM。您下载的 .iso 应该可以启动。如果您使用的是 Ubuntu,请选择尝试一下 Ubuntu。 现在,启动一个终端窗口。
卸载并 fsck 磁盘
在终端中,您可能首先必须卸载虚拟硬盘。如果您的磁盘是/dev/sda1
,请使用以下命令:
sudo umount /dev/sda1
然后您可以fsck
在磁盘上运行:
fsck /dev/sda1
确认修复后,重新启动虚拟机。一切应恢复正常。
答案2
我在 AWS EC2 机器上遇到了同样的问题。为了使解决方案复杂化,受影响的卷是 EC2 实例的根卷。因此,设备无法启动,并且 SSH 也无法连接到实例。
以下步骤帮助我解决了该问题:
- 将卷与 EC2 实例分离。
- 使用与旧实例相同的 AMI 和 AZ 配置新的 EC2 实例。
- 将卷(在步骤 1 中分离)附加到新实例。
- 执行以下命令:
# Switch to Root user:
sudo -i
# Identify the device Filesystem name and save it as a variable:
lsblk
rescuedev=/dev/xvdf1 # Mention the right Filesystem for the particular volume.
# Use /mnt as the mount point:
rescuemnt=/mnt
mkdir -p $rescuemnt
mount $rescuedev $rescuemnt
# Mount special file systems and change the root directory (chroot) to the newly mounted file system:
for i in proc sys dev run; do mount --bind /$i $rescuemnt/$i ; done
chroot $rescuemnt
# Download, install and execute EC2Rescue tool for Linux to fix the issues:
curl -O https://s3.amazonaws.com/ec2rescuelinux/ec2rl.tgz
tar -xf ec2rl.tgz
cd ec2rl-<version_number>
./ec2rl run
cat /var/tmp/ec2rl/*/Main.log | more
./ec2rl run --remediate
# Switch back from the Root user and unmount the volume:
exit
umount $rescuemnt/{proc,sys,dev,run,}
- 关闭 EC2 实例并分离卷。
- 将卷附加到原始实例并启动 EC2 实例。