Imageerstellung mit dd und ddrescue

Aus Linupedia.org
Version vom 29. August 2006, 13:53 Uhr von TomcatMJ (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Mit Hilfe von dd lassen sich Images diverser Medien erstellen. Ob es sich dabei um Abbilddateien einer Festplatte, Dikettenimages oder ISO-/RAW-Images einer CD oder DVD erstellen ist für den eigentichen syntaktischen aufbau des Befehls unerheblich.

Für die Erstellung eines kompletten Abbilds einer CD/DVD dient beispielsweise folgender Befehl:

dd if=/dev/dvd of=/pfad/wo/das/Image/hin/soll/Image.img

Danach sollte man mit Hilfe des befehls cmp überprüfen, ob beim auslesen des Ursprungsmediums auch alle Daten korrekt gelesen wurden.

cmp Image.img /dev/dvd

Im Falle einer Daten-CD/DVD ist das Ergebnis ein ISO-Image, es kann also mit

mv Image.img Image.iso

problemlos den passenden Namen bekommen. Wenn es sich jedoch um eine SVCD gehandelt haben sollten, sollte man bedenken,das oben im dd-Befehl ja keine Blocksize angegeben wurde und dd in diesem Fall die Blocksize selbst herausgefunden hat, die bei SVCDs nunmal keine 2048 wie in einem ISO-Format beträgt sondern 2352. Dann liegt natürlich kein wirkiches ISO-Image vor sondern ein RAW-Image welches dann als solches durchaus auch per K3b oder cdrdao wieder auf eine CD gebrannt werden könnte. Mit dd selbst kann jedoch nicht auf CD oder DVD gebrannt werden.

Mit dem Befehl kann man jedoch auch Diskettenimages anlegen und auch vorhandene Diskettenimages auf Diskette zurückkopieren. Der Befehl fürs anlegen lautet auch hier wieder:

dd if=/dev/fd0 of=/pfad/wo/das/Image/hin/soll/Diskimage.img

Der Befehl zum zurück kopieren eines solchen Diskettenimages lautet dann passenderweise:

dd if=Diskimage.img of=/dev/fd0

Dabei ist es unerheblich ob auf der Diskette bereits ein Dateisystem existiert oder nicht, da dies gnadenlos von dd überschrieben wird. Man sollte jedoch auch hier wieder mit cmp überprüfen, ob die Daten korrekt gelesen bzw. geschrieben wurden. Sollte ein auf Diskette zurückgeschriebenes Image Fehler aufweisen, so sollte die entsprechende Diskette umgehend entsorgt werden,da dann Medienfehler die Ursache sein dürften und diese wohl kaum reparierbar sind (es sie denn man formatiert die Diskette mehrfach im sogenannten Lowlevel, also ohne Dateisystem, was aber recht zeitaufwändig ist und den Aufwand gegenüber dem Wert einer Diskette meist nicht rechtfertigt).

Desweiteren dient dd auch dem erstellen von Festplattenimages. Man kann damit ganze Festplatten in ein RAW-Image sichern:

dd if=/dev/hdb of=/pfad/wo/das/Image/hin/soll/hdb-Image.img

Oder beispielsweise einzelne Partitionen:

dd if=/dev/hda6 of=/pfad/wo/das/Image/hin/soll/hda6-Image

Man kann jedoch diesen Befehl ebensogut zum 1:1 kopieren von ganzen Festplatten nutzen indem man identische(!) Festplatten in ein System integriert, beispielsweise mit externen USB-Festplattengehäusen, und dann die Rohdaten einfach 1:1 per dd vom Eingangsmedium auf das Ausgangsmedium schaufelt:

dd if=/dev/sda of=/dev/sdb

Je nach Festplatengröße dauert das natürlich einige Zeit.

Festplattenimages lassen sich aber auch direkt komprimiert anegen indem man die Angabe über das Ausgangsmedium weglässt und die daraus resultierende Augabe an einen Packer piped:

dd if=/dev/hda | gzip --best >hda-Image.gz

Zurückkopieren liesse sich das dann mit:

gunzip -c hda-Image.gz | dd of=/dev/hda

Mit Hilfe der Pipefähigkeit von dd assen sich durchaus kompexe Scripte erstellen mit deren Hilfe z.B. solche Images über Netzwerke hinweg angelegt udn zurückgespielt werden können, siehe dazu auch in der manpage von netcat.


Mit Angabe der Blockgröße und der Anzahl der zu lesenden Blöcke kann man per dd aber auch den Masterbootrecord einer Festplatte sicher um zum Beispiel Grub zu sichern.

dd if=/dev/hda bs=512 count=1 of=grub.img

Zurückspielen eines so angelegten Images geht äquivalent zum erstellen mit:

dd if=grub.img bs=512 count=1 of=/dev/hda

Die Alternative zu dd für den Fall, daß es sich um Medien handelt die Fehler aufweisen lautet ddrescue. Dessen Syntax ist identisch zu dd, jedoch muss man dabei beachten, daß beim einlesen im Fehlerfall natürlich die an der defekten Stelle ehemaös vorhandenen daten nicht aus dem Nichst heraus restauriert werden können sondern durch ddrescue schlichtweg durch Nullen ersetzt werden. Desweiteren kann es dabei auch je nach Fehelrart zwingend notwendig werden die Blockgröße sowie die Anzahl der zu lesenden Datenblöcke anzugeben.


--TomcatMJ 15:53, 29. Aug 2006 (CEST)