如果我尝试在 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
使用库这个包可以帮你解决所有烦人的细节问题,而不需要你手动解决