假设你有一个LVM卷/ dev / vg0 / mylv。 您已将此虚拟磁盘作为虚拟化或模拟客户机系统呈现。 在安装过程中,来宾系统将其视为/ dev / sda并将其分区到/ dev / sda {1,2,5,6}并完成安装。 现在,在某些时候,您需要从主机系统内访问这些文件系统,而无需运行来宾系统。 fdisk看到这些分区就好了:
# fdisk -l /dev/vg0/mylv Device Boot Start End Blocks Id System /dev/vg0/mylv1 2048 684031 340992 83 Linux /dev/vg0/mylv2 686078 20969471 10141697 5 Extended /dev/vg0/mylv5 686080 8290303 3802112 83 Linux /dev/vg0/mylv6 8292352 11980799 1844224 83 Linux
但是,/ dev / vg0 / mylv1等设备实际上并不存在。 我想这是因为它们在LV内,操作系统默认情况下不能识别这种types的嵌套。 有没有什么办法可以推动Linux,使/ dev / vg0 / mylv1或同等出现,从而变得可挂载在主机系统?
我知道这可能与qemu-nbd,并将在必要时使用。 但是,如果可能的话,我希望有更直接的东西,而不是模拟一个networking块设备,并附加。
我相信你正在寻找的工具是kpartx 。
一般程序是:
列出磁盘映像中的分区:
kpartx -l /dev/vg0/mylv
将分区添加到设备映射器:
kpartx -a /dev/vg0/mylv
安装您感兴趣的分区:
mount -o ro /dev/mapper/loop0p5 /mnt
您可以使用偏移量通过回送来访问分区的文件系统。 将扇区开始乘以扇区大小。
mkdir /mnt/mylv{1,5,6} mount -o ro,loop,offset=$((512*2048)) /dev/vg0/mylv /mnt/mylv1 mount -o ro,loop,offset=$((512*686080)) /dev/vg0/mylv /mnt/mylv5 mount -o ro,loop,offset=$((512*8292352)) /dev/vg0/mylv /mnt/mylv6