Linux

訪問 LVM 卷上的分區

  • October 19, 2012

假設您有一個 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.

一般程序是:

  1. 列出磁碟映像中的分區:
kpartx -l /dev/vg0/mylv
  1. 將分區添加到設備映射器:
kpartx -a /dev/vg0/mylv
  1. 掛載你感興趣的分區:
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

引用自:https://serverfault.com/questions/440287