Dd, Mkisofs

Aus LinuxUser 06/2006

Dd, Mkisofs

© sxc.hu

Spiegelbildlich

Ob Backup, Datenrettung oder das Erstellen boot-fähiger CDs/DVDs: Die beiden Werkzeuge Dd und Mkisofs erledigen die Aufgabe gekonnt.

Zum Brennen von Daten-CDs oder -DVDs stehen auf der Kommandozeile mehrere Anwendungen zur Verfügung. Bevor es jedoch ans eigentliche Brennen geht, muss ein so genanntes ISO-Image erstellt werden. Für diesen Zweck greifen Sie beispielsweise zu Mkisofs: Es unterstützt die Rockridge– und Joliet-Erweiterungen, erzeugt Images für bootbare Medien und Dateien und kann automatische Backups anlegen, wobei es einzelne Dateien ausschließt. Eine Alternative kommt in Form von Dd, das nicht nur ISO-Abbilder erzeugt, sondern oft auch die letzte Rettung für die Daten von sterbenden Festplatten darstellt.

Convert und Copy

Das praktische kleine Tool Dd müsste eigentlich den Namen Cc tragen: Convert & Copy. Da dieser aber schon für den C-Compiler vergeben war, griffen die Entwickler einfach zum nächsten Buchstaben im Alphabet.

Dd erstellt 1:1-Kopien von Datenträgern. Egal ob Festplattenpartitionen, CDs oder DVDs – Dd liest und schreibt zuverlässig blockweise. Da dd diese Blöcke nicht verarbeitet oder interpretiert, spielt es keine Rolle, um welches Dateisystem es sich handelt. Sogar vor Festplatten mit Fehlern schreckt Dd nicht zurück (siehe Abschnitt “Letzte Rettung”). Der einfache Aufruf für Dd lautet:

dd if=Quelle of=Ziel

Über if geben Sie also an, von wo Dd die Daten liest, und hinter of definieren Sie die Ausgabe. Als Quelle und Ziel dienen oft ein Gerät, wie eine Festplatte(npartition) oder ein CD-/DVD-Laufwerk. Alternativ geben Sie nach dem Gleichheitszeichen eine Datei an. Um etwa die Festplattenpartition hda1 1:1 nach /dev/hdb1 zu kopieren, tippen Sie:

dd if=/dev/hda1 of=/dev/hdb1

Ebenso können Sie Dd dazu verwenden, schnell eine CD oder DVD auf der Kommandozeile zu kopieren. Ein entsprechendes ISO-Image erstellen Sie beispielsweise über:

$ dd if=/dev/hdc of=abbild.iso
9153728+0 Datensätze ein
9153728+0 Datensätze aus
4686708736 bytes transferred in?
 1209,649659 seconds (3874435?
 bytes/sec)

Das Medium muss dazu nicht gemountet [1] sein. Die Laufwerksangabe /dev/hdc ersetzen Sie durch den entsprechenden Gerätenamen Ihres Laufwerks; das ISO-Image landet anschließend in der Datei abbild.iso des aktuellen Verzeichnisses.

Optimieren mit Optionen

Das Programm Dd bringt einige Schalter mit. Ein praktischer Parameter, der die Arbeit des Programms maßgeblich beschleunigt, ist bs (englisch “block size” = Blockgröße). Standardmäßig arbeitet Dd mit 512 Byte großen Blöcken – es liest jeweils 512 Bytes ein und schreibt diese in die Ausgabedatei. Wählen Sie größere Blöcke, arbeitet Dd dementsprechend schneller. So sorgt der Aufruf:

dd if=/dev/hda1 of=/dev/hdb1?
 bs=2k

dafür, dass Dd die Partition in 2 KByte (2048 Bytes) großen Blöcken kopiert. Unterschreitet der letzte Block die angegebene Blockgröße, füllt Dd ihn nicht auf:

$ dd if=/dev/hda1 of=/dev/hdb1? bs=6k
16059+1 Datensätze ein
16059+1 Datensätze aus
98670592 bytes transferred in?
 13,801482 seconds (7149275?
 bytes/sec)

Die Ausgabe zeigt, dass Dd 16059 Blöcke der Größe 6144 Bytes und einen “übrig gebliebenen” Block von 4096 Byte kopiert hat.

Neben der Blockgröße können Sie angeben, wie viele dieser Blöcke Dd lesen soll: Um 40 MByte zu kopieren, schreiben Sie bs=1M count=40. Dabei spezifiziert die Option count die Anzahl der Blöcke. Das macht beispielsweise Sinn, wenn Sie den Boot-Sektor einer Festplatte sichern wollen – Sie kopieren in diesem Fall nur den ersten, 512 Bytes großen Block mit dem Aufruf:

dd if=/dev/hda of=bootsektor?
 bs=512 count=1

Letzte Rettung

Das Programm Dd erweist sich auch als unverzichtbarer Helfer, wenn es um die Rettung von Daten aus zerstörten Dateisystemen geht. Bevor Sie sich an die Reparatur begeben, sollten Sie zunächst ein Backup vornehmen. Dazu erstellen Sie mit Dd eine 1:1-Kopie des zerstörten Systems und führen auf dieser die Reparaturversuche durch.

Da Dd standardmäßig zerstörte Sektoren von der Kopie ausschließt, setzen Sie die Parameter conv=noerror,sync ein:

dd bs=512 conv=noerror,sync?
 if=/dev/hda of=/dev/hdb

Auf diese Weise teilen Sie Dd mit, dass es mit dem Lesen und Ablegen von Daten auch dann fortfahren soll, wenn es defekte Sektoren findet. Dabei sorgt noerror dafür, dass Dd bei Fehlern nicht abbricht, und sync füllt unlesbare Sektoren mit Nullen auf.

ISO-Images mit Mkisofs

Das Programm Mkisofs (“make ISO9660 filesystem”) erstellt ausschließlich ISO-Images – das aber gekonnt und mit vielen zusätzlichen Features. Der einfache Aufruf lautet:

mkisofs Parameter -o datei.?
iso /Verzeichnis/Daten

Über -o definieren Sie den Namen der Zieldatei. Dahinter geben Sie die Daten an, die ins Image wandern sollen. Als optionale Parameter teilen Sie Mkisofs beispielsweise über -r mit, dass Sie die Rockridge-Erweiterung wünschen. Alternativ darf hier auch -R stehen, um zusätzlich Rechte und Dateieigentümer zu setzen. Die Joliet-Erweiterung schalten Sie entsprechend über -J ein:

mkisofs -J -R -o datei.iso?/Verzeichnis/Daten

Über den Parameter -V setzen Sie einen Namen (Volume-ID) für die spätere CD/DVD. Enthält dieser Leer- und Sonderzeichen, schließen Sie ihn in Hochkommata ein:

mkisofs -V "Backup 20060502" …

Darf es hingegen etwas ausführlicher sein, schalten Sie mit -v (“verbose”) auf eine lange Ausgabe um (Abbildung 1); mit -quiet hingegen stellen Sie das Programm ruhig. Wer die Statusmeldungen nicht im Terminal sehen will, dennoch aber nicht auf die Informationen verzichten möchte, leitet sie in ein Protokoll (hier: log.txt) um:

mkisofs … -log-file log.txt …
Abbildung 1: Mkisofs bei der Arbeit – auf Wunsch zeigt das Tool genau an, was im Hintergrund passiert.

Abbildung 1: Mkisofs bei der Arbeit – auf Wunsch zeigt das Tool genau an, was im Hintergrund passiert.

Ideal für Backups

Mkisofs bringt einige praktische Optionen für das regelmäßige Erstellen von Datensicherungen mit. So schließen Sie beispielsweise über die Option -m gezielt Dateien vom Image aus. Hinter dem Parameter geben Sie als weitere Argumente Namen an. Dabei kann Mkisofs auch mit Wildcards umgehen und akzeptiert Mehrfachnennung. Um etwa sämtliche HTML-Dateien nicht ins ISO-Image aufzunehmen, tippen Sie:

mkisofs … -m *.html -m *.HTML?
 -o backup.iso /home/huhn

Über die Option -x klammern Sie bei Bedarf ganze Verzeichnisse aus, falls nötig wiederum mit mehrfacher Angabe:

mkisofs … -x /tmp -x /var?
 -o backup.iso /

Achten Sie bei der Verwendung dieser beiden Parameter darauf, dass Sie bei der Angabe der zu sichernden Daten keine Wildcards verwenden. Das Kommando

mkisofs … -m *.html -m *.HTML?
 -o backup.iso *

führt beispielsweise dazu, dass die Shell die letzte Wildcard auflöst und so wieder alle Daten ins Image aufnimmt.

Wer Dateien mit typischen Backup-Endungen, wie z. B. ~, # oder .bak, ausklammern möchte, setzt hingegen einfach die Option -no-bak ein, und schlägt damit sämtliche Fliegen mit einer Klappe.

Bootbar bitte!

Um bootbare Medien zu erstellen, greifen Sie beispielsweise auf den Isolinux-Bootloader [2] zurück, der mit Mkisofs Hand in Hand arbeitet:

mkisofs -J -R -o bootcd.iso?
 -b isolinux/isolinux.bin?
 -c isolinux/boot.cat?
 -no-emul-boot?
 -boot-load-size 4?
 -boot-info-table?/Ordner/Daten

Neben den schon bekannten Mkisofs-Optionen taucht hier einiges Neue auf: Hinter -b steht das eigentliche Boot-Image, und über -c geben Sie den Boot-Katalog an. Der Parameter -no-emul-boot weist das Programm an, bei einer Installation von dieser CD keine Emulation zu erstellen, sondern den Inhalt der Abbilddatei auf die Platte zu schreiben. Die Option -boot-load-size 4 definiert, dass das BIOS später vier Sektoren à 512 Bytes für die Boot-Datei bereitstellt. Schließlich erzwingt (-boot-info-table), dass beim Booten Informationen über das Layout des Mediums berücksichtigt werden. Beachten Sie, dass sich das Verzeichnis isolinux unterhalb von /Ordner/Daten befinden muss.

Images testen

Das Kommando Mount [1] bietet eine praktische Option, um ISO-Images vor dem Brennen auf eventuelle Fehler zu überprüfen. Dazu hängen Sie die Abbilddatei unter Angabe des Parameters -o loop testweise ins Dateisystem ein:

mount -o loop datei.iso /mnt/tmp

Beachten Sie, dass der Mount-Punkt existieren muss; außerdem benötigen Sie für diesen Befehl Administratorrechte. Nach Abschluss des Tests hängen Sie das ISO-Image über den Befehl umount /mnt/tmp wieder aus.

Glossar

ISO

Linux unterstützt mehrere Typen von Dateisystemen, wie Ext2, Ext3, ReiserFS und selbst FAT und NTFS. ISO 9660, wie der komplette Name lautet, ist der Standard für die Verwaltung von Dateien auf CD-ROMs.

Rockridge

Die Rockridge-Erweiterung ergänzt das ISO-Dateisystem um Unix-typische Dateiinformationen, wie Besitzer, Gruppe, Zugriffsrechte und symbolische Links. So tritt beim Kopieren von Daten aus einem Unix-Dateisystem auf CD kein Informationsverlust ein. Zudem erlaubt Rockridge längere Dateinamen.

Joliet

Microsoft-Erweiterung zum ISO-9660-Standard, um lange Dateinamen auf CD zu schreiben.

Blöcke

Eine fortlaufende Ansammlung von Bytes auf einem Datenträger. Einige Geräte wie Festplatten, Disketten und CD-/DVD-Laufwerke organisieren ihre Daten in solchen Blöcken (“block devices”). Andere Geräte arbeiten zeichenorientiert (“character devices”) und lesen/schreiben einzelne Bytes.

Wildcards

Platzhalter, die Teile von Zeichenketten unbestimmt lassen. Ein Fragezeichen ? in einer Zeichenkette lässt nur denjenigen Buchstaben unbestimmt, an dem sich das Fragezeichen befindet, während ein * für beliebig viele verschiedene Zeichen steht.

Infos

[1] Mount und Fstab: Heike Jurzik, “Ganz schön anhänglich”, LinuxUser 05/2006, S. 94, http://www.linux-user.de/ausgabe/2006/05/094-zubefehl/index.html

[2] Informationen zu Isolinux: http://syslinux.zytor.com/iso.php

LinuxUser 06/2006 KAUFEN
EINZELNE AUSGABE
ABONNEMENTS
TABLET & SMARTPHONE APPS
E-Mail Benachrichtigung
Benachrichtige mich zu:

Hinweis: Dieser Artikel ist älter als ein Jahr, enthaltene Informationen sind möglicherweise veraltet.

0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben