Datenwiederherstellung und Datenrettung mit LinuxEinleitung Neben der Funktionierenden Technik sind in der IT die daten das wichtigste. Es gibt verschiedene Ansätze, für Datenintegrität und sicherheit zu sorgen. Die wohl wichtigten Möglichkeiten sind:
Doch was tun, wenn auf weder auf Redundanz (z.B.: Totalausfall incl. Redundanzen) noch auf Sicherungen (z.B.:nicht vorhanden oder auch ausgefallen) zurückgegriffen werden kann, und der unangenehme Fall des Datenverlustes eintritt. Meißt können die Daten vom Datenträger noch mit speziellen Programmen gerettet werden. Dieser Artikel beschäftigt sich mit dem Thema "Datenrettung mit Linux". Hierfür kommt das Programm ddrescue zum Einsatz. Installation Zur Installation wird wie bei debian üblich apt-get verwendet:
Installation von ddrescue mittels apt-get
rescue:~# apt-get install gddrescue Reading package lists... Done Building dependency tree Reading state information... Done The following NEW packages will be installed: gddrescue 0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded. Need to get 33.1kB of archives. After unpacking 127kB of additional disk space will be used. Get:1 http://ftp.de.debian.org sid/main gddrescue 1.2-1 [33.1kB] Fetched 33.1kB in 0s (114kB/s) Selecting previously deselected package gddrescue. (Reading database ... 217900 files and directories currently installed.) Unpacking gddrescue (from .../gddrescue_1.2-1_i386.deb) ... Setting up gddrescue (1.2-1) ... rescue:~# Funktionsweise von ddrescue Zunäst könnte die Funktionsweise des Programms von Interesse sein: Normalerweise werden Daten mit befehlen wie cp oder Programmen wie mc kopiert. Dabei handelt es sich um ein Zusammenspiel von Programmen und Betriebssystem. Der Kopierbefehl wird natürlich im Betriebssystemkern bearbeitet, welcher eventuell auftretende Lesefehler an das Programm zurückgibt. In der Praxis heißt das, dass der Kopierbefehl mit z.B. einem Lese oder Zugriffsfehler abbricht. ddrescue greift quasi direkt auf die Daten zu. Bei ersten Durchlauf werden alle Daten welche sich auf anhieb auslesen lassen gerettet, und Zugriffsfehler werden "vermerkt", wobei diese Sektoren einfach übersprungen werden. Bei den Folgedurchgängen wird gezielt versucht die fehlerhaften Sektoren auszulesen. Weiterhin sind nun die Optionen die das Programm beitet von Interesse. Ein schlichter Aufruf des Programms mit der Option --help gibt einen Überblick:
Optionen von ddrescue
Von besonderem Interesse sind die Optionen:
rescue:~# ddrescue --help GNU ddrescue - Data recovery tool. Copies data from one file or block device to another, trying hard to rescue data in case of read errors. Usage: ddrescue [options] infile outfile [logfile] Options: -h, --help display this help and exit -V, --version output version information and exit -b, --block-size=
Die detailierte Ausgabe von ddrescue verstehen Um missverständnissen oder Fehlinterpretationen vorzubeugen wird noch auf die Ausgabe des Programms eingegangen:
Anwendung von ddrescue anhand von Beispielen Beispiel 1: Videodaten retten Im ersten Beispiel wird versucht ein Video von einer verkratzten CD zu retten. Da die CD keine tiefen Kratzer hat, und hiervon auch nicht sonderlich viele, kann man von "normaler" Abnutzung bzw. Verscheißerscheinungen sprechen. Ein versuch die Datei mit dem cp-Befehl zu kopieren, endet mit einem Fehler bei ca. der Hälfte der Daten, d.h. danach steht nur die hälfte des Videomaterials zur Verfügung. ddrescue wird nur mit der Option --verbosebzw. -vaufgerufen, somit gibt ddrescue detailierte Informationen über den Status aus. Ein Durchlauf könnte beispielsweise so aussehen:
Beispielausgabe einer Wiederherstellung bzw. Rettung eines GeburtstagsFeierVideos
rescue:~# ddrescue -v /cdrom/Backup-01.01.2000.tar.bz2 /backup/Backup-01.01.2000.tar.bz2
About to copy 720824 kBytes from /cdrom/Geburtstagsfeier-2000.avi to /backup/Geburtstagsfeier-2000.avi
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 hard blocks
Hard block size: 512 bytes
Max_retries: 0 Split: yes Truncate: no
Press Ctrl-C to interrupt
rescued: 719443 kB, errsize: 1380 kB, current rate: 0 B/s
ipos: 652148 kB, errors: 2710, average rate: 254 kB/s
opos: 652148 kB
Splitting error areas...
Wendet man sich der Ausgabe des Progamms zurück, erkennt man, dass die Zahl der Zugriffsfehler (errors:) mit 2710 doch relativ hoch erschient. Beruhigend ist jedoch, dass sich die fehlerhaften Daten auf nur 1380 kb balaufen. Für diesen Konkreten Fall bedeutet dies, dass von einer ca. 700 MB großen Datei (entspricht ca. 45 Minuten Videomaterial), nur ca. 1 MB (entspricht ca. 5 Sekunden Videomaterial) nicht gerettet werden konnte. Wobei die 5 Sekunden "Verlust" auf das ganze Video verteilt sind. Also kann man getrost davon ausgehen, dass man nicht mal selbst etwas davon bemerkt, wenn man sich das Video ansieht. Beispiel 2: Rettung eines Backup's aus dem Jahre 2000 Dieses Beispiel ist besonders interessant, wenn man bedenkt, dass der Datenträger gut gelagert war. Man möchte meinen gebrannte CD's und DVD's "sind für die Ewigkeit", dem ist bei weitem nicht so, deshalb sollte man BESONDERS WICHTIGE Daten eventuell. regelmäßig erneut brennen. Das wiederholte Brennen schafft eine gewisse Redundanz, und damit sinkt die Wahrscheinlichkeit des Komplettverlustes.
Beispielausgabe einer Wiederherstellung bzw. Rettung eines Backup's
rescue:~# ddrescue -v /cdrom/Backup-01.01.2000.tar.bz2 /backup/Backup-01.01.2000.tar.bz2
About to copy 720824 kBytes from /cdrom/Backup-01.01.2000.tar.bz2 to /backup/Backup-01.01.2000.tar.bz2
Starting positions: infile = 0 B, outfile = 0 B
Copy block size: 128 hard blocks
Hard block size: 512 bytes
Max_retries: 0 Split: yes Truncate: no
Press Ctrl-C to interrupt
rescued: 719443 kB, errsize: 1380 kB, current rate: 0 B/s
ipos: 652148 kB, errors: 2710, average rate: 254 kB/s
opos: 652148 kB
Splitting error areas...
Natürlich ist es bei einem Archiv erstrebenswert, dieses völlig fehlerfrei bzw. lückenlos zu retten, da es sich sonst unter umständen nicht mehr entpacken lässt oder die Datenintegrität nicht mehr gegeben ist. Um die Integrität zu prüfen, können Hash-Programme verwendet werden. Beispielsweise könnte mittels eines MD5-Hashes überprüft werden, ob die Daten in ordnung sind. Um es auf den Punkt zu bringen, die Daten sollen Komplett bis aufs letzte Byte gerettet werden. ddrescue kann auch nicht zaubern, aber zumindest mit einer gewissen "hartnäckigkeit" versuchen alles zu retten. Hier kommt die bereits oben erwähnte Option: -r, --max-retries=>n< exit after given retries (-1=infinity) [0]ins Spiel. Wird hier n=-1 gewählt, so beendet sich ddrescue erst, wenn alle Daten gelesen werden konnten. Diese Option könnte sich je nach Beschädigung des Datenträgers als sehr Zeitintensiv erweisen, doch wenn die Daten wirklich wichtig sind, wird man auch das in Kauf nehmen müssen. |