如何从 KVM 在来宾 VM 上运行 fsck

kir*_*ran 7 kvm-virtualization

我有一台 KVM 服务器,我的一台客户机崩溃并提示表单 fsck 检查。现在我没有控制台访问权限或没有来宾 VM 的根访问权限。

有什么办法可以从管理程序运行 fsck 吗?

我使用 centos 6.1 作为我的管理程序

小智 13

安装 libguestfs:

# yum install libguestfs-tools
Run Code Online (Sandbox Code Playgroud)

使用 guestfish 打开磁盘镜像:

# guestfish -a /path/to/diskimage.img

Welcome to guestfish, the libguestfs filesystem interactive shell for
editing virtual machine filesystems.

Type: 'help' for help on commands
      'man' to read the manual
      'quit' to quit the shell   
<fs> run
<fs> list-filesystems
/dev/vda1: ext4
/dev/system/lv_root: ext4
/dev/system/lv_swap: swap
Run Code Online (Sandbox Code Playgroud)

并 fsck 有问题的文件系统:

<fs> fsck /dev/system/lv_root
fsck should have 2 parameter(s)
type 'help fsck' for help on fsck
<fs> fsck  ext4 /dev/system/lv_root
...
Run Code Online (Sandbox Code Playgroud)

祝你好运!


Bar*_*rim 3

您也许可以将文件挂载到环回接口上并对其进行 fsck。从网站www.ingent.net/en/tag/kvm/中,使用:

losetup -f
/dev/loop0
Run Code Online (Sandbox Code Playgroud)

...看到这里的loop0是下一个空闲设备,然后将磁盘映像分配给该点。

losetup /dev/loop0 disk.raw
Run Code Online (Sandbox Code Playgroud)

kpartx 用于创建访问它的设备。

kpartx -av /dev/loop0
Run Code Online (Sandbox Code Playgroud)

然后你应该能够使用 fsck。

fsck.ext3 -f /dev/mapper/loop0p1
fsck.ext3 -f /dev/mapper/loop0p2
Run Code Online (Sandbox Code Playgroud)

...等等。该页面是关于将系统转换为在 KVM 上运行的,但是上面引用的这部分可能会让您走上进行 fsck 修复的轨道;我要注意的是,您应该使用图像文件的副本而不是基本图像文件来执行此操作,以防万一出现问题。

  • *耸耸肩*如果它在其他选项失败时有效......它仍然是可以尝试的东西。 (3认同)
  • 完成答案:修复完成后,可以像这样删除分区映射和循环设备:`sync; kpartx -dv /dev/loop0; losetup -d /dev/loop0` (2认同)