如何在KVM主机上安装虚拟机的LVM分区?

如果我尝试在KVM主机上执行以下操作:

# kpartx -av /dev/VolGroup00/kvm101_img add map kvm101_img1 : 0 208782 linear /dev/VolGroup00/kvm101_img 63 add map kvm101_img2 : 0 125612235 linear /dev/VolGroup00/kvm101_img 208845 # mount /dev/mapper/kvm101_img1 /mnt 

然后我得到/启动分区挂载。 但是,如果我input以下内容,则会出现错误:

 # mount /dev/mapper/kvm101_img2 /mnt mount: you must specify the filesystem type 

这是来宾机器上的fdisk布局:

 # fdisk -l Device Boot Start End Blocks Id System /dev/hda1 * 1 13 104391 83 Linux /dev/hda2 14 7832 62806117+ 8e Linux LVM 

是否有可能在客户端上find根分区并将其挂载到主机系统上?

似乎我终于想出了如何做我需要的事情。 这是我做的:

 # kpartx -av /dev/VolGroup00/kvm101_img # vgscan 

如果VolGroup名称在来宾系统和主机系统中相同,则必须重命名来宾VolGroup

 # vgrename <uuid> VolGroupXX 

您可以在vgdisplay查看VolGroups的uuid。 所以,诀窍在于激活来宾VolGroup:

 # lvscan # vgchange -ay VolGroupXX # lvscan 

之后,它很容易登上:

 # mount /dev/VolGroupXX/LogVol00 /mnt 

最后,落后的过程是:

 # umount /mnt # vgchange -an VolGroupXX # kpartx -dv /dev/VolGroup00/kvm101_img # pvscan 

最后一个命令清除LVMcaching,并从LVM中删除由kpartx创build的物理卷。

我很高兴你知道你的情况。

在更一般的情况下,来宾驱动器可能有多种格式,如qcow,qcow2等,因此您无法直接使用它们。 在这种情况下,你可能会在主机上使用类似的东西:

 # modprobe nbd # kvm-nbd -c /dev/nbd0 file.qcow2 

然后,您可以访问/ dev / nbd0作为原始客户驱动器。 要停止使用此设备,您应该运行:

 # nbd-client -d /dev/nbd0 

另一方面,如果访客驱动器是原始格式,则可以使用losetup:

 # losetup -f file.raw 

这将find并使用第一个可用的循环设备(例如/ dev / loop0)。 要停止使用它运行:

 # losetup -d /dev/loop0 

在此之后,您将能够执行您在答案中描述的kpartx / vgscan / lvscan / mount过程。

你可以使用guestfish – http://libguestfs.org/guestfish.1.html

从libguestfs软件包中使用guestfish可能会更容易guestfish ,它应该能够解决所有烦人的细节问题,而不是手动执行