7.4. Wie kann ich Partitionen aus dd-Images mounten?

Keywords: dd | image | mount | loop | fdisk

7.4.1

Hat man eine einzelne Festplatten-Partition mit dd in ein Imagefile kopiert (z. B. mit dem Befehl dd if=/dev/hda2 of=<Image-Dateiname>), kann man dieses Image relativ einfach über ein loop-Device mounten:

mount -t <filesystem> -o loop,ro <Image-Dateiname> <Zielverzeichnis>

Ist jedoch von einer kompletten Festplatte mit mehreren Partitionen eine solche Kopie erstellt worden (z. B. dd if=/dev/hda of=<Image-Dateiname>) und man möchte einzelne Partitionen aus diesem Image mounten, dann muss man genau wissen, wo diese Partitionen beginnen.

Angenommen, die kopierte Festplatte ist ein Hitachi-Microdrive mit 512 MB, hat zwei primäre Partitionen und einen MasterBootRecord (MBR) und wurde in das Image platte.bin kopiert. Wir wollen die beiden Partitionen einzeln mounten, also müssen wir zuerst die Lage der Partition feststellen. Das geht mit fdisk:

fdisk -l -u platte.bin

Mit dem Argument -l bekommen wir von fdisk eine Ausgabe der Partitionstabelle und -u sorgt dafür, daß Anfang und Ende jeder Partition in Sektoren statt Zylindern angegeben wird. Man bekommt dann eine solche oder mindestens eine sehr ähnliche Ausgabe:

Platte platte.bin: 0 MByte, 0 Byte
16 Köpfe, 63 Sektoren/Spuren, 0 Zylinder, zusammen 0 Sektoren
Einheiten = Sektoren von 1 × 512 = 512 Bytes

Gerät        boot.   Anfang       Ende       Blöcke   Id  System
platte.bin1              63      498959      249448+   c  W95 FAT32 (LBA)
platte.bin2          499968     1052351      276192   83  Linux

Die Größen-Angaben von null Byte bei einem Image sollten uns nicht stören, wichtig ist die Angabe der Sektorengröße, hier 512 Byte. Die erste Partition, hier die FAT32-Partition, beginnt mit Sektor 63. Da jeder Sektor 512 Byte groß ist, rechnen wir nun den Speicherbereich aus, den wir am Anfang des Images überspringen müssen, um bei Sektor 63 anzukommen: 63 * 512 = 32256 Byte.

Diese 32256 Byte nehmen wir jetzt als Offset für ein loop-Device. Dieses wird mit losetup eingerichtet:

losetup -o 32256 /dev/loop0 platte.bin

Danach kann dann dieses loop-Device gemountet werden:

mount -t vfat -o ro /dev/loop0 /mnt

Nachdem das Image wieder umountet wurde oder falls doch Fehler bei der Offset-Berechnung aufgetreten sind, sollte man das loop-Device wieder freigeben:

losetup -d /dev/loop0
— Jens Nixdorf (cboltz)