如何在 KVM 主机上挂载虚拟机的 LVM 分区?

如何在 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

然后我就可以挂载 /boot 分区了。但是如果我输入以下内容,就会出现错误:

# 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

是否有可能在客户机上找到根分区并将其安装在主机系统上?

答案1

看来我终于弄清楚了如何做我需要的事情。以下是我所做的:

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

如果客户机和主机系统中的 VolGroup 名称相同,则必须重命名客户机 VolGroup

# vgrename <uuid> VolGroupXX

您可以签入的 VolGroups 的 uuid vgdisplay。因此,诀窍在于激活客户 VolGroup:

# lvscan
# vgchange -ay VolGroupXX
# lvscan

之后就很容易安装:

# mount /dev/VolGroupXX/LogVol00 /mnt

最后逆向过程为:

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

最后一个命令清理 LVM 缓存并从 LVM 中删除由 kpartx 创建的物理卷。

答案2

我很高兴你能弄清楚你的情况。

在更一般的情况下,客户驱动器可能采用多种格式,例如 qcow、qcow2 等,因此您无法直接处理它们。在这种情况下,您可以在主机上使用类似以下内容:

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

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

# nbd-client -d /dev/nbd0

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

# losetup -f file.raw

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

# losetup -d /dev/loop0

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

答案3

你可以使用 guestfish 来做到这一点 -http://libguestfs.org/guestfish.1.html

答案4

可能更容易guestfish使用这个包可以帮你解决所有烦人的细节问题,而不需要你手动解决

相关内容