访问 LVM 卷上的分区

访问 LVM 卷上的分区

假设您有一个 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

一般程序是:

  1. 列出磁盘映像中的分区:

    kpartx -l /dev/vg0/mylv
    
  2. 将分区添加到设备映射器:

    kpartx -a /dev/vg0/mylv
    
  3. 挂载您感兴趣的分区:

    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

相关内容