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.