打开基于Qemu / Xen文件的虚拟机镜像(升级后不能启动)

除了一台仍在运行Xen / RHEL5的虚拟主机,我们所有的虚拟function都托pipe在带有LVM存储设备的KVM主机上。 我愚蠢地试图在Xen机器上运行的guest虚拟机上进行Ubuntu完全版升级,只是为了安装非Xen内核并拒绝启动(在那里出现菜鸟错误)。

到实际的问题,有问题的机器使用单个文件的存储设备。 已经有一段时间了,我不得不打开其中一个,但是这个过程与打开一个LVM卷没什么区别,但由于某种原因,我没有在设备文件中看到一个分区表。

root@vh1 web2.entrant # losetup -a /dev/loop2: [0902]:34603012 (storage.img) /dev/loop3: [0902]:32768005 (/srv/xen/domains/web2.entrant/disk.img) root@vh1 web2.entrant # fdisk -l /dev/loop3 Disk /dev/loop3: 68.7 GB, 68719476736 bytes 255 heads, 63 sectors/track, 8354 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x00000000 Disk /dev/loop3 doesn't contain a valid partition table 

在同一主机上检查另一台机器的分区文件会产生相同的问题(无效的分区表),尽pipe它本身仍然很好地启动/运行。

编辑:(添加kpartx)

 root@vh1 ~ # kpartx -av /srv/xen/domains/web2.entrant/disk.img root@vh1 ~ # 

没有消息(如预期)说明哪些分区已被添加

编辑:(尝试guestfish,德维克救援等)

 [root@vh1 web2.entrant]# virt-rescue --rw --suggest -a /srv/web2.entrant/disk.img Inspecting the virtual machine or disk image ... This disk contains one or more filesystems, but we don't recognize any operating system. You can use these mount commands in virt-rescue (at the ><rescue> prompt) to mount these filesystems. # /dev/vda has type 'unknown' 

和客人:

 ><fs> add-ro disk.img ><fs> run ><fs> list-filesystems /dev/vda: unknown ><fs> lvs ><fs> 

我假设我已经把分区表弄糟了,不幸的是我还没有得到机器分区布局的副本(看起来是从另一个客户机拷贝的(同时启动的)似乎performance出相同的空分区表时尝试相同的过程)

你有没有尝试使用kpartx工具?

使用类似于: kpartx -av path_to_disk_image 。 它将创build循环条目,以便随后可以将分区挂载到任意位置。 可能看起来像: mount mount_point_path /dev/mapper/loopXpX

guestfish将在这里使用。

过去我使用过guestfish来进行一些lvm修改

本文档通过安装lvm vgs来修改单个文件,如grub.conf,fstab等。

假设以前的内核仍然可用,或许恢复的途径是编辑客户机上的grub.conf以引导到旧的XEN内核,并且一旦开始交互式地进行修复。

你有没有尝试简单地挂载磁盘映像本身,无分区表? 即mount -o loop /path/to/disk.img / mnt / testing

我似乎记得一个客人可以是一个原始的分区。

如果你有vm.cfg文件,那也是有帮助的。