kpartx: Partition im Loop Device

22. Mai 2009 at 10:00

Ein normales Image einer Partition kann mit losetup zum Loop-Device gemacht werden und so über /dev/loopX als Gerät angesprochen und z.B. gemountet werden. Schwieriger wird es jedoch, wenn das Loop-Device eine komplette Platte inklusive Partitionen enthält.

Ein einfaches Beispiel: Ein mit „dd if=/dev/sda of=/imagefile“ erstelltes Image kann zwar mit losetup zu /dev/loop0 gemacht werden, jedoch ist ein direktes Ansprechen der Partitionen, die ehemals auf /dev/sda existierten, nicht möglich. Dazu müßte es ja ein /dev/loop0_1, /dev/loop0_2 oder /dev/loop0_3 geben.

Gut, möglich ist es schon, denn losetup kann mit –offset auch nur Teile der Image-Datei als Loop-Device nutzen, nur müßte man so auf’s Byte genau die Partitionen finden, wobei ein Irrtum möglicherweise die Daten vernichten würde.

Diese Aufgabe löst kpartx. Der Einsatz ist ganz einfach: Installieren und loslegen.

apt-get install kpartx
kpartx -av /imagefile
oder
kpartx -av /dev/loop0

Schon stehen unter /dev/mapper je Partition ein Loop-Device zur Verfügung, also zum Beispiel:

  • /dev/mapper/loop0p1 (ehemals /dev/sda1)
  • /dev/mapper/loop0p2 (ehemals /dev/sda2)
  • /dev/mapper/loop0p3 (ehemals /dev/sda3)

Der Parameter -a steht für add, das v dagegen für verbose, so dass ich gleich sehe, was er mir angelegt hat. Mit dem Parameter -l zeigt man die Mappings an, mit -d löscht man sie wieder.

Typischer Anwendungszweck:

Mit losetup kam ich noch gut klar. Als ich jedoch das erste mal ein Image erstellt habe und darin eine virtuelles Debian von einer virtuellen CD (.ISO-Datei) installierte, hat mir dieses in der Image-Datei mehrere Partitionen angelegt. Hier war kpartx meine Rettung, denn so konnte ich noch auf die Daten im Image-File zugreifen.