Partitionierte Datenträgerimages mounten

Aus Linupedia
Wechseln zu: Navigation, Suche

Partitionierte Datenträgerimages mounten

Gezielte Adressierung mittels 'offset'

Das oben beschriebene Vorgehen funktioniert auch für den direkten Zugriff auf Partitionen innerhalb eines Images. Das folgende Beispiel zeigt, wie die erste Partition eines SD-Card-Images gezielt adressiert und gemountet wird.

Das Image wurde von einer SD-Card gezogen. Darin befindet sich eine primäre Partition:

j3:~ # fdisk -l sd-card.img

Disk sd-card.img: 29.5 GiB, 31674335232 bytes, 61863936 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device                                  Boot Start      End  Sectors  Size Id Type
sd-card.img1                                  8192 61863935 61855744 29.5G  c W95 FAT32 (LBA)

Die erste und einzige Partition 'sd-card.img1' beginnt bei Sektor 8192 (Spalte Start). Daraus kann der Offset als Produkt mit der Größe der Sektoren (512 bytes) errechnet und direkt adressiert werden:

j3:~ $ sudo mount -t vfat -o loop,ro,offset=$((8192 * 512)) sd-card.img /mnt

kpartx

Als Alternative bietet sich das Tool 'kpartx' an. Es erstellt für alle Partitionen Einträge für den DeviceMapper, welche dann nach Bedarf gemountet werden können:

# modprobe loop
# kpartx -va sd-card.img
add map loop0p1 (253:7): 0 8192 linear /dev/loop0 4224
add map loop0p2 (253:8): 0 1849216 linear /dev/loop0 12416
add map loop0p3 (253:9): 0 6002688 linear /dev/loop0 1861632

Um beispielsweise auf die Daten in der 3. Partition (aus Sicherheitsgründen nur) lesend zugreifen zu können, wird diese mit der Option 'ro' gemounted:

# mount -o loop,ro /dev/mapper/loop0p3 /mnt

Nach Verwendung sollten die Ressourcen wieder sauber freigegeben werden:

# umount /mnt
# kpartx -d sd-card.img 
loop deleted : /dev/loop0

Links