Linux
訪問 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 是可能的,如有必要會使用它。但是,如果可能的話,我希望有更直接的東西,而不是模擬網路塊設備並附加它。
我相信您正在尋找的工具是
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