Mit Image-Dateien zu arbeiten, funktioniert viel besser, wenn Sie Linux dazu bringen, sie wie richtige Block-Geräte zu behandeln, einschließlich der I/O-Aufrufe, die die Geometrie und Partitionen ermitteln. Dafür bietet sich der Einsatz eines sogenannten Loopback-Device an, das der Linux-Kernel zur Verfügung stellt. Es bildet eine Datei auf ein oder mehrere Block-Geräte
»/dev/loop*
«
ab. Im System tauchen so weitere Festplatten und Partitionen auf, sobald die Image-Datei mit
»losetup
«
aktiviert ist. So bindet
losetup /dev/loop0 sda.img
die Datei
»sda.img
«
über die Gerätedatei
»/dev/loop0
«
ein, wenn diese noch zur Verfügung steht. Anschließend lässt sich dieses neue Gerät genauso mit
»testdisk
«
oder
»fdisk
«
bearbeiten wie eine echte Festplatte.
Um auf Partitionen zuzugreifen, die sich in einem Image befinden oder auf einem Blockgerät ohne Partitionseintrag, geben Sie hinter dem Offset-Parameter den Wert in Bytes an:
losetup /dev/loop0 sda.img -o <!-- START: including template: design/standard/templates/content/datatype/view/ezxmltags/emphasize.tpl (design:content/datatype/view/ezxmltags/emphasize.tpl) -->Offset <!-- STOP: including template: design/standard/templates/content/datatype/view/ezxmltags/emphasize.tpl (design:content/datatype/view/ezxmltags/emphasize.tpl) -->
Die mit
»sfdisk -uS
«
oder
»fdisk -lu
«
erhaltenen Werte müssen Sie dazu mit 512 multiplizieren.
In
Listing 6
beginnt die erste Partition beim Sektor 8192,
»losetup
«
weist sie also mit dem folgenden Befehl richtig zu:
Listing 6
Partitionstabelle eines Image
losetup /dev/loop0 sda.img -o $((512 * 8192))
Hierbei multipliziert das Shell-Konstrukt
»$(())
«
die beiden Werte. Jetzt sollte es möglich sein, die Partition zu mounten. Das Dateisystem weiß selbst, wo es beginnt und endet, also macht es nichts aus, dass die per
»losetup
«
gemappte Partition den Rest der Festplatte umfasst. Um das Tool selbst das verwendete Dateisystem erkennen zu lassen, rufen Sie
mount /dev/loop0 /mnt
auf. Alternativ geben Sie den Dateisystemtyp hinter
»-t
«
an:
mount -t <!-- START: including template: design/standard/templates/content/datatype/view/ezxmltags/emphasize.tpl (design:content/datatype/view/ezxmltags/emphasize.tpl) -->Dateisystem <!-- STOP: including template: design/standard/templates/content/datatype/view/ezxmltags/emphasize.tpl (design:content/datatype/view/ezxmltags/emphasize.tpl) --> /dev/loop0 /mnt
Weil der Mount-Befehl über Loopback-Geräte Bescheid weiß, können Sie beide Schritte auch in einem erledigen, indem Sie
»mount
«
gleich die richtigen Parameter mitgeben:
mount -o loop,offset=$((512 * 8192)) sda.img /mnt
Wenn Mount selbst kein freies Loop-Device findet, geben Sie mit
»loop=/dev/loop1
«
eines an. Jetzt können Sie von der gemounteten Partionen nach Belieben Dateien kopieren und auch ändern – wenn Sie sie nicht mit
»-r
«
nur-lesbar gemountet haben.
Dieser Ansatz funktioniert auch mit komprimierten Image-Dateien wie bei Knoppix, wenn Sie die entsprechenden Gerätedateien
»/dev/cloop*
«
verwenden. Je nach verwendeter Version von
»losetup
«
und
»mount
«
ist es dabei obligatorisch, die Datei read-only zu mounten.
»losetup
«
unterstützt auch die Cryptoloop-Erweiterung des Kernels mit den folgenden Optionen:
-e
Verschlüsselungstyp
«
-k
Schlüssellänge
«
-N
«
: verwende Passphrase anstatt eines Hash-Algorithmus als SchlüsselEin Beispiel eines Aufrufs mit AES-Verschlüsselung und 256 Bits langem Key:
losetup -e aes -k 256 -N /dev/loop0 partition.img
Wenn Ihre Distribution eine spezielle Version von
»losetup
«
aus dem Loop-AES-Paket einsetzt, besitzt der Befehl andere Optionen:
-e
Verschlüsselungstyp
«
-H
Hash-Algorithmus
«
.Der Hash-Algorithmus wird dazu verwendet, die Schlüssel unkenntlich zu machen. Das obige Beispiel sieht damit so aus:
losetup -e AES256 -H unhashed2 /dev/loop0 partition.img
Mounten lässt sich eine solche Partition wie oben beschrieben, nur die Daten werden verschlüsselt gespeichert. Wenn
»losetup
«
merkwürdige Fehlermeldungen ausgibt, müssen Sie möglicherweise erst die entsprechenden Verschlüsselungsmodule in den Kernel laden wie im folgenden Listing:
for m in loop cryptoloop aes_generic aes_i586 cbc; do [ -d /sys/module/"$m" ] || modprobe "$m" done
Vergessen Sie nicht, nach dem Unmounten die Datei wieder vom Loopback-Device zu trennen. Sonst bleibt es für andere Anwendungen blockiert. Wenn sie Unmount mit der Option
»-d
«
aufrufen, geschieht dies automatisch. Haben Sie es vergessen, können Sie es mit
»losetup -d /dev/loop0
«
nachholen.