Partitionen in Image-Dateien bearbeiten
Benutzer von virtuellen Maschinen kennen das Problem - die virtuelle Festplatte ist in einer Datei untergebracht, die sich aber nicht mounten lässt, weil sie intern nochmals in Partitionen eingeteilt ist. Die Option »offset« des Kommandos losetup löst das Problem. Die Option kann auch dem Mount-Kommando mitgegeben werden.
Doch noch einmal langsam. Worum geht es? Wir haben eine Image-Datei, hier im Beispiel datei.image, in der eine Partitionstabelle und eine oder mehrere Partitionen enthalten sind. Mit sfdisk -l datei.image
können wir die Partitionstabelle sehen. Gleichzeitig liefert uns dieses Kommando den Startsektor der Partitionen, wenn wir dazu noch die Option -uS angeben:
sfdisk -l -uS datei.image
Die Sektornummer müssen wir mit 512 multiplizieren, weil der Offset für losetup in Bytes angegeben wird. Hat die gesuchte Partition beispielsweise die Sektornummer 63, so lässt sie sich einfach mit einem Kommando ähnlich
mount -o loop,offset=$((63 * 512)) datei.image /mnt/tmp
mounten.
Eventuell will man die Partition aber nicht mounten, sondern einen Dateisystem-Check laufen lassen. In diesem Fall muss man ebenfalls ein Loop-Blockgerät anlegen, allerdings direkt das Programm losetup verwenden:
losetup -o $((63 * 512)) /dev/loop0 datei.image
Statt /dev/loop0 kann man auch die Option -f verwenden. Der Nachteil der Option -f ist allerdings, dass man dann nachsehen muss, welches Loop-Gerät benutzt wird.
Nun kann man mit /dev/loop arbeiten, z.B.:
e2fsck /dev/loop0
oder
xfs_repair /dev/loop0
Man muss darauf achten, dass kein anderes Programm gleichzeitig auf das Image zugreift, insbesondere keine virtuelle Maschine, sonst ist das Chaos vorprogrammiert.