假设您有一个 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 内,所以操作系统默认无法识别这种嵌套。有什么方法可以激活 Linux,使 /dev/vg0/mylv1 或等效设备出现,从而可以在主机系统中挂载吗?
我知道使用 qemu-nbd 可以实现这一点,必要时我会使用它。但是,如果可能的话,我希望有更直接的方法,而不是模拟网络块设备并将其连接起来。
答案1
我相信你正在寻找的工具是kpartx
。
一般程序是:
列出磁盘映像中的分区:
kpartx -l /dev/vg0/mylv
将分区添加到设备映射器:
kpartx -a /dev/vg0/mylv
挂载您感兴趣的分区:
mount -o ro /dev/mapper/loop0p5 /mnt
答案2
您可能能够使用偏移量通过环回访问分区文件系统。将扇区起始乘以扇区大小。
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