Datenrettung mittels Linux
ISO-Images und CD/DVD RAW-Images
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 sollte, sollte man bedenken, dass oben im dd-Befehl 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 wirkliches 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. Diskettenimages
Mit dem dd Befehl kann man jedoch auch Diskettenimages anlegen und auch vorhandene Diskettenimages auf Diskette zurückkopieren. Der Befehl zum 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 sei 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). Festplattenimages
Desweiteren dient dd auch zum 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
Achtung: Die zu kopierende Festplatte/Partition darf hierbei nicht gemountet sein, da sonst etwaige Schreibzugriffe während des Kopiervorgangs zu defekten Image-Dateien führen können!
Festplattenimages mounten
Um erstellte Festplattenimages auf einem anderen Linuxsystem zu mounten, kann man wie folgt vorgehen: image = Pfad zum Image z.B.: /mnt/server.img
kpartx -a -v image add map loop0p1 (253:0): 0 433692 linear /dev/loop0 63 add map loop0p2 (253:1): 0 64260 linear /dev/loop0 433755 # ls -l /dev/mapper/ insgesamt 0 lrwxrwxrwx 1 root root 16 7. Dez 02:18 control -> ../device-mapper brw------- 1 root root 253, 0 7. Dez 14:13 loop0p1 brw------- 1 root root 253, 1 7. Dez 14:13 loop0p2
Nun kann man sich seine Partition mounten
mount /dev/mapper/loop0p1 /mnt/
Festplattenreplikation
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 Festplattengröße dauert das natürlich einige Zeit.
Festplattenimages lassen sich aber auch direkt komprimiert anlegen indem man die Angabe über das Ausgangsmedium weglässt und die daraus resultierende Ausgabe 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 lassen sich durchaus komplexe Scripte erstellen mit deren Hilfe z.B. solche Images über Netzwerke hinweg angelegt und zurückgespielt werden können, siehe dazu auch in der manpage von netcat. Bootsektorsicherung
Mit Angabe der Blockgröße und der Anzahl der zu lesenden Blöcke kann man per dd aber auch den Masterbootrecord einer Festplatte sichern 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
Alternativen zu dd
Die Alternative zu dd für den Fall, dass es sich um Medien handelt, die Fehler aufweisen, lautet ddrescue. Dessen Syntax ist identisch zu dd, jedoch muss man dabei beachten, dass beim Einlesen im Fehlerfall natürlich die an der defekten Stelle ehemals vorhandenen Daten nicht aus dem Nichts heraus restauriert werden können, sondern durch ddrescue schlichtweg durch Nullen ersetzt werden. Desweiteren kann es dabei auch je nach Fehlerart zwingend notwendig werden die Blockgröße sowie die Anzahl der zu lesenden Datenblöcke anzugeben. Datenvernichtung(!) und Festplattenrecycling
Der Befehl dd kann auch dazu genutzt werden alte Daten unwiderruflich zu löschen, ähnlich wie wipe für Dateien. Benötigt wird sowas z.B. wenn Firmen Altgeräte weiterverkaufen wollen aber auch sichergehen wollen, dass die ehemals gespeicherten sensiblen Firmendaten nicht in die falschen Hände geraten können.
dd if=/dev/zero of=/dev/sda
Auch wenn hiermit ausgeschlossen ist, dass einzelne Dateien oder gar die gesamte Festplatte wieder herstellbar sind, so kann man dennoch – aus „psychologischen Gründen“, /dev/urandom verwenden.
dd if=/dev/urandom of=/dev/sda
Ein Wiederholen dieses Vorgangs hat in beiden Fällen allerdings nur einen Effekt: Man verschwendet Zeit. Aufgrund der Bauart heutiger Platten ist es praktisch ausgeschlossen, dass bereits nach einmaligem überschreiben mit Nullen noch Daten wiederhergestellt werden können. (vgl. verlinkter Artikel aus heise security).
Beispiele Clonen, Backup und Sicherung
Es gilt, möglichst alle Filesysteme ungemountet auslesen, wo das nicht möglich ist, zu mindestens Readonly gemountet auslesen und dann auf das Image einen Filesystemcheck machen.
einzelne Partition als Image ablegen / Image temporär mounten / zurückschreiben
dd if=/dev/hda2 of=/PATH/DATEI.IMAGE bs=8K mount -o loop /PATH/DATEI.IMAGE /mnt # eventuell weitere Mountoptionen notwendig dd if=/PATH/DATEI.IMAGE of=/dev/hda2 bs=8K
Filesystemtype und Zustand eines Images ermitteln / korrigieren (Konsolauszug)
LINUX:/ # file DATEI.IMAGE DATEI.IMAGE: Linux rev 1.0 ext2 filesystem data (mounted or unclean) LINUX:/ # fsck /PATH/DATEI.IMAGE # evtl. weitere Optionen notwendig ; kompletten Path des Images fsck 1.38 (30-Jun-2005) e2fsck 1.38 (30-Jun-2005) /PATH/DATEI.IMAGE was not cleanly unmounted, check forced. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /PATH/DATEI.IMAGE: 72/16632 files (12.5% non-contiguous), 24776/66432 blocks LINUX:/ # file DATEI.IMAGE DATEI.IMAGE: Linux rev 1.0 ext2 filesystem data
einzelne Partition auf eine Festplatte mit identischer Partitionstabelle kopieren
dd if=/dev/hda2 of=/dev/hdb2 bs=8K
ganze Festplatte als Image ablegen / zurückschreiben
dd if=/dev/hda of=/PATH/DATEI.IMAGE bs=8K dd if=/PATH/DATEI.IMAGE of=/dev/hda bs=8K
man kann von einem solchem Image auch einzelne Partitionen temporär mounten, dabei muss für das mount der jeweilige Offset benutzt werden.
Festplatte auf einen andere Festplatte clonen
dd if=/dev/hda of=/dev/hdb bs=8K