Mit Ddrescue retten Sie Daten von beschädigten Festplatten, DVDs, USB-Sticks oder Speicherkarten. Ein leistungsfähiges grafisches Frontend, das sämtliche Funktionen einfach zugänglich macht, begleitet das leistungsfähige Kommandozeilenwerkzeug.
Egal, ob Festplatte, SSD oder Flashspeicher – auf Massenspeichern enthaltenen Dateisystemen drohen durch Fehlbedienung oder äußere Einflüsse fortwährend Gefahren. Im Fall der Fälle unterstützt Sie gegebenenfalls ein Backup bei der Datenrettung, sofern es denn eines gibt: Aufgrund von Bequemlichkeit oder Gelegenheit fehlt eine solche Datensicherung jedoch allzu oft. Im Notfall müssen Sie daher die Daten direkt vom beschädigten Datenträger retten. Dabei hilft Ihnen das freie Erste-Hilfe-Tool Ddrescue. Zusammen mit dem passenden grafischen Werkzeug Ddrescue-GUI haben Sie ein mächtiges Werk zur Hand.
Allgemeines Vorgehen
Klassische Festplatten machen bei Lese- und Schreibfehlern oft Geräusche, SSDs und Flashspeicher bleiben dagegen still und behalten das Malheur zunächst für sich. Zeigt das System ein unerklärliches Verhalten, das auf Probleme beim Schreiben oder Lesen hinweist, öffnen Sie zur Kontrolle ein Terminalfenster und verschaffen sich mittels dmesg | grep sd nähere Informationen. Erscheinen hier Meldungen wie in Listing 1, sollten Sie so schnell wie möglich handeln. Zeigt ein Datenträger erst einmal beginnende Ausfallerscheinungen, droht schnell der Verlust sämtlicher Daten.
Um weitere Schäden abzuwenden, sollten Sie die betroffene Festplatte umgehend aushängen oder – im Fall von bereits erfolgten Datenverlusten auf der Systempartition – den Rechner herunterfahren und von einem Live-Linux neu starten. In jedem Fall müssen Sie in der Lage sein, Shell-Kommandos auf dem betroffenen Rechner auszuführen, ohne dass der beschädigte Datenträger eingebunden ist. Von daher empfiehlt es sich, stets einen USB-Stick mit einem bootfähigen Linux-System im Haus zu haben.
Listing 1
$ dmesg | grep sd [...] [sda] Add. Sense: Unrecovered read error - auto reallocate failed [...] end_request: I/O error, dev sda, sector 12345 [...] Buffer I/O error on device sda1, logical block 764321
Überlegen Sie nun, ob Sie einen kompletten Massenspeicher (etwa /dev/sda) oder nur eine Partition darauf (zum Beispiel /dev/sda1) retten möchten. Nutzen Sie zum Beispiel eine getrennte Home-Partition, dann sollten Sie die Rettungsversuche erst auf diese konzentrieren. Eine Übersicht über die am System angeschlossenen Datenträger erhalten Sie mittels des Tools Lsblk; aus den Partitionsgrößen lässt sich in der Regel schnell die entsprechende Geräte-ID ableiten (Listing 2). Alternativ hilft ein Blick auf die Ausgaben von sudo fdisk -l beziehungsweise sudo gdisk -l.
Listing 2
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 59,6G 0 disk |?sda1 8:1 0 53,7G 0 part / |?sda2 8:2 0 5,9G 0 part [SWAP] sdb 8:16 0 596,2G 0 disk |?sdb1 8:17 0 596,2G 0 part sr0 11:0 1 1024M 0 rom
Zudem benötigen Sie die Blockgröße des zu rettenden Dateisystems, denn diese müssen Sie beim Aufruf von Ddrescue mit angeben. Den entsprechenden Wert ermitteln Sie mithilfe des Aufrufs stat Mountpoint -f | grep Block. Als Option geben Sie dem Kommando den Einhängepunkt der gewünschten Partition mit und filtern mithilfe von Grep die Zeile mit der Blockgröße heraus. Listing 3 zeigt typische Blockgrößen für eine DVD, einen USB-Stick oder eine Festplattenpartition.
Listing 3
$ stat /media/cdrom0 -f | grep Block Blockgröße: 2048 Fundamentale Blockgröße: 2048 $ stat /media/usb-stick -f | grep Block Blockgröße: 8192 Fundamentale Blockgröße: 8192 $ stat /home -f | grep Block Blockgröße: 4096 Fundamentale Blockgröße: 4096
Mit diesen Informationen installieren Sie auf dem Rettungssystem Ddrescue (siehe Kasten “Verwechslungsgefahr”) und machen sich mit den Optionen des Kommandos vertraut. Die Notsicherung leiten Sie mittels des Kommandos ddrescue ein – auf die Optionen gehen wir etwas später ein. Der Zieldatenträger muss nun ausreichend Platz für die zu rettenden Daten bieten. Sichern Sie über das Netzwerk, müssen Sie darauf achten, dass der Zielrechner durchgehend zur Verfügung steht, also keine WAN-Trennung durch den Provider erfolgt oder Wartungsfenster mit Unterbrechung von im Netz angebotenen Diensten auftreten.
Verwechslungsgefahr
Das im Artikel genutzte Programm Ddrescue installieren Sie unter Debian und unter dessen Derivaten wie Ubuntu über das Paket gddrescue. In den Paketquellen finden Sie jedoch auch ein Paket mit dem eigentlich viel stimmigeren Namen ddrescue – es richtet das Kommando dd_rescue auf dem Rechner ein. Lassen Sie sich an dieser Stelle nicht verwirren: Beide Programme erweitern das klassische Dd-Kommando um Funktionen zum Retten von Daten von beschädigten Datenträgern. Im Rahmen dieses Artikels behandeln wir jedoch nur das zuerst genannte Programm Ddrescue: Es gilt als das fortgeschrittenere der beiden.
Legen Sie die Sicherung nun nach Möglichkeit als Abbilddatei ab. Diese lässt sich später per Loopback wieder sehr einfach in den Verzeichnisbaum eines Linux-Systems einhängen und auf Dateiebene auslesen, eventuelle Dateisystemfehler übergeht Ddrescue dabei. Beginnen Sie die Sicherung am besten mit der Option -n, um zunächst alle problemlos lesbaren Bereiche in Sicherheit zu bringen, bevor das Speichermedium ganz den Geist aufgibt. Die Angabe der Blockgröße könnten Sie theoretisch auslassen, eventuell führt dies allerdings zu einer geringeren Lesegeschwindigkeit. Weitere wichtige Optionen zu Ddrescue im Überblick finden Sie in der Tabelle “Ddrescue-Optionen”.
Ddrescue-Optionen
| Anweisung | Aktion | Hinweis |
|---|---|---|
-v |
ausführliche Meldungen anzeigen | |
-bBlockgröße |
Angabe der Blockgröße | Ermittlung siehe Listing 3 |
-f |
ein Geräte/eine Partition überschreiben | nicht bei Ausgabe in eine Datei |
-n |
beschädigte Blöcke übergehen | |
-rAnzahl |
Anzahl der Leseversuche | bei -r-1 arbeitet Ddrescue, bis es alle Blöcke erfolgreich lesen konnte |
Die fehlerbehafteten Areale auf dem Speichermedium vermerkt Ddrescue im ersten Durchgang in einer Logdatei. Im zweiten Durchgang, ohne die Option -n, nutzt Ddrescue dieses Protokoll dann, um aus den fehlerhaften Bereichen zu retten, was dort noch zu retten ist (Listing 4). Der Erfolg der Aktion hängt stark vom Zustand des Datenträgers ab. Mit gut Glück klappt jedoch eine vollständige Wiederherstellung.
Listing 4
### Durchlauf 1: Sichert Daten aus unbeschädigten Bereichen: ddrescue -n -bBlockgröße Quelle Ziel Logdatei ### Durchlauf 2: Versucht Daten aus fehlerhaften Bereichen zu sichern: ddrescue -bBlockgröße Quelle Ziel Logdatei
Hinweis
Planen Sie für alle Rettungsarbeiten ausreichend Zeit ein. Eine Rettungsaktion für eine 1 TByte große Festplatte nimmt gut und gerne zwei Tage oder länger in Anspruch.
Daten von USB-Stick retten
Als konkretes Beispiel sichern wir den Inhalt eines USB-Sticks – sinngemäß Gleiches gilt zum Beispiel für die beschädigte SD-Speicherkarte einer Digitalkamera. Haben Sie das Medium an den Rechner angesteckt, liefert Lsblk die Geräte-ID /dev/sdc für den gesamten USB-Stick beziehungsweise /dev/sdc1 für die einzige Partition darauf (Listing 5, Zeile 1 bis 6). Der Aufruf des Kommandos stat zeigt eine Blockgröße von 8192 an (Zeile 7 und 8). Mit diesen Informationen hängen Sie den Datenträger dann per Umount wieder aus (Zeile 9).
Listing 5
$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 59,6G 0 disk [...] sdc 8:32 1 2G 0 disk |?sdc1 8:33 1 2G 0 part /run/media/username/8D86-A06A $ stat /run/media/username/8D86-A06A -f | grep Block Blockgröße: 8192 Fundamentale Blockgröße: 8192 $ umount /run/media/clangner/8D86-A06A
Wie in Listing 6 gezeigt, rufen Sie nun den ersten Durchgang von Ddrescue auf. Den Befehl passen Sie entsprechend der zuvor ermittelten Daten für die Blockgröße und die jeweilige Geräte-ID an Ihre Situation an. Während der Laufzeit gibt das Programm Informationen zur bisher geretteten Datenmenge (rescued), zur aktuellen Lese- (ipos) und Schreibposition (opos), zur Menge an fehlerbehafteten Daten (errsize) sowie zur Anzahl der Fehler (errors) aus. Ferner erfahren Sie die aktuelle (current rate) und durchschnittliche (average rate) Lesegeschwindigkeit auf dem Medium.
Listing 6
$ sudo ddrescue -n -b8192 /dev/sdc1 usbstick.img usbstick.log GNU ddrescue 1.20 Press Ctrl-C to interrupt rescued: 213581 kB, errsize: 0 B, current rate: 10485 kB/s ipos: 213581 kB, errors: 0, average rate: 10170 kB/s opos: 213581 kB, run time: 21s, remaining time: 3m time since last successful read: 0s Copying non-tried blocks... Pass 1 (forwards)
Sämtliche erfolgreich ausgelesenen Daten befinden sich nach Abschluss der Aktion in der Image-Datei usbstick.img. Der Umfang dieser Datei entspricht in etwa der Größe des defekten Datenträgers. In der Logdatei usbstick.log finden Sie eine Reihe von Statusmeldungen. Neben Meta-Informationen wie Start- und Endzeit beinhaltet das Protokoll auch Informationen zu den fehlerhaften Blöcken (siehe Tabelle “Statusangaben im Ddrescue-Log”).
Statusangaben im Ddrescue-Log
| Statuszeichen | Bedeutung |
|---|---|
+ |
beendet |
G |
Erstellen der Protokolldatei |
F |
Füllen der angegebenen Blöcke |
- |
Angabe erneut zu prüfender, defekter Sektoren |
/ |
Blocktrennung |
* |
Zuschneiden von Blöcken |
? |
Kopieren nicht geprüfter Blöcke |
Das in Listing 7 gezeigte Log weist keinerlei Auffälligkeiten auf, sodass Sie hier auf einen zweiten Durchgang verzichten können. Mahnt Ddrescue hingegen unter errors Fehler an, dann wiederholen Sie den Sicherungsvorgang entsprechend des Schemas aus Listing 8. Durch den Verzicht auf die Option -n versucht sich Ddrescue dann auch an den problematischen Bereichen des Datenträgers. Die Informationen dazu holt sich das Programm aus der beim ersten Durchlauf geschriebenen Protokolldatei.
Listing 7
# Mapfile. Created by GNU ddrescue version 1.20 # Command line: ddrescue -n -b8192 /dev/sdc1 usbstick.img usbstick.log # Start time: 2015-09-24 18:06:44 # Current time: 2015-09-24 18:10:09 # Finished # current_pos current_status 0x7CEF0000 + # pos size status 0x00000000 0x7CF00000 +
Listing 8
$ ddrescue -b8192 /dev/sdc1 usbstick.img usbstick.log
Zum Auslesen der geretteten Daten erzeugen Sie nun schließlich einen Einhängepunkt und binden die nach dem zweiten Durchgang erzeugte Image-Datei in dieses Verzeichnis ein (Listing 9). Im geschilderten Beispiel finden Sie dann sämtliche vom USB-Stick geretteten Daten im Verzeichnis ~/usbstick-gerettet.
Listing 9
$ mkdir ~/usbstick-gerettet $ sudo mount -o loop usbstick.img ~/usbstick-gerettet
Datenrettung mit GUI
Kündigt sich unmissverständlich der Ausfall eines Datenträgers an, herrscht in der Regel eine gewisse Unsicherheit. Die nötige Ruhe und Geduld, um sich mit unbekannten Terminalwerkzeugen und deren oft kryptischen Anweisungen auseinanderzusetzen, fehlt in einer solchen Situationen meist. Von daher sollten Sie eventuell besser zu einem grafischen Werkzeug greifen, das Sie bei den wichtigsten Schritten unterstützt.
Hier kommt Ddrescue-GUI [1] ins Spiel, ein grafischer Aufsatz für Ddrescue – so mussten der Entwickler des Tools das Rad nicht noch einmal neu erfinden. Für alle aktuell gängigen Ubuntu-Ausgaben bietet er DEB-Pakete zur Installation über die Paketverwaltung an. Nutzen Sie eine andere Distribution, die das Programm nicht in den Paketquellen führt, müssen Sie den Quellcode-Tarball herunterladen und die enthaltene Datei DDRescue-GUI.py ausführen. Weil es sich um eine Python-Anwendung handelt, brauchen Sie Ddrescue-GUI nicht zu kompilieren. Allerdings benötigt die Anwendung mit wxPython eine Abhängigkeit, die Sie üblicherweise nachinstallieren müssen – je nach Distribution über die Pakete python-wxtools oder wxpython2.8.
Beim Start des Programms müssen Sie sich über die Eingabe Ihres Passworts zunächst einmal administrative Rechte holen. In Ddrescue-GUI (Abbildung 1) bestimmen Sie dann über die Auswahlboxen das Quellmedium (Image Source), die Protokolldatei (Log File) sowie das Ziel für die geretteten Daten (Image Destination). Die Anzeige filtert automatisch die gewünschten Geräte heraus und bietet sie zur Auswahl an (Abbildung 2).

Abbildung 1: Ddrescue-GUI setzt alle wichtigen Funktionen des Kommandozeilenwerkzeugs Ddrescue in einer einfachen grafischen Oberfläche um.

/dev.” width=”300″ height=”191″ />
Abbildung 2: Getreu dem Linux-Motto “Alles ist eine Datei” erscheinen die Laufwerk- und Partitions-IDs als Dateien im Verzeichnis/dev.Nach der Wahl der wichtigsten Parameter erreichen Sie unter Settings die restlichen Optionen des Ddrescue-Kommandos (Abbildung 3). Dort aktivieren Sie den Punkt Use Direct Disk Access (Recommended) [2]: So umgeht Ddrescue den Kernel-Cache, zudem funktionierte auf unserem Testsystem die Fortschrittsanzeige nur mit dieser Option.

Abbildung 3: Wie bei Rettungsversuchen aus dem Terminal sollten Sie auch mit Ddrescue-GUI darauf achten, zuerst die unproblematischen Daten zu sichern.
Achten Sie ebenso auf die Option Do a soft run (don’t attempt to read bad sectors), denn auch mit der grafischen Oberfläche sollten Sie zuerst alle noch lesbaren Daten in Sicherheit bringen und sich erst im zweiten Durchlauf um die problematischen Bereiche kümmern. Die Schalter Balanced (default), Set to best recovery und Set to fastest recovery im unteren Bereich des Einstellungsfensters geben empfohlene Werte für die Anzahl der Leseversuche vor. Auf diesem Weg steuern Sie die Hartnäckigkeit von Ddrescue und damit auch die Arbeitsgeschwindigkeit des Prozesses.
Stecken Sie nach dem Start des Programms weitere Massenspeicher ein, aktualisieren Sie diese im Hauptfenster mit Update Disk Info. Der Punkt Disk Information sollte eigentlich eine Übersicht über alle angeschlossenen Medien liefern. Auf unseren Testsystemen (Arch Linux und Ubuntu 15.04) bleibt dieses Fenster allerdings leer.
Mit einem Klick auf Start lösen Sie dann schließlich die Sicherung aus. Wie üblich gilt es jetzt, Geduld zu beweisen. Nach Abschluss der Datenrettung bietet Ddrescue-GUI an, die Einstellungen für einen zweiten Durchlauf zurückzusetzen oder das erstellte Image umgehend zu mounten (Abbildung 4). Alternativ binden Sie die Abbilddatei wieder von Hand per mount -o loop ins System ein.

Abbildung 4: Nach erfolgreicher Arbeit bietet Ddrescue-GUI an, das Image mit den geretteten Daten direkt ins System zu mounten.
Fazit
Für diesen Bericht haben wir Ddrescue auf einen angeschlagenen USB-Stick und eine defekte SD-Speicherkarte losgelassen. Während wir die Inhalte des USB-Sticks mithilfe von Ddrescue tatsächlich fast vollständig sichern konnten, war bei der Speicherkarte (mit Aufnahmen einer Familienfeier) Hopfen und Malz verloren. Ob und was Sie gegebenenfalls von einem Medium retten können, hängt also sehr von den Umständen ab. Verlassen Sie sich daher nicht auf Rettungswerkzeuge, sondern sichern Sie wichtige Daten besser gleich ordentlich: Better sa[f|v]e than sorry.
Der Autor
Harald Zisler beschäftigt sich seit den frühen 90er-Jahren mit FreeBSD und Linux. Zu Technik- und EDV-Themen verfasst er Zeitschriftenbeiträge und Bücher. Aktuell ist beim Rheinwerk Verlag die dritte Auflage seines Buchs “Computer-Netzwerke” erschienen.
Infos
[1] Ddrescue-GUI: https://launchpad.net/ddrescue-gui
[2] “Direct disc access: Bypassing the kernel cache”: http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html#Direct-disc-access






Guten Tag,
ich habe eine Frage zu Listing 3.
Ich will eine 4 TB NVMe-Festplatte auslesen. Einzelne Partitionen dann als .img-Datei auf einer 6 TB HDD speichern die Blockgröße berechnen will (wie z. B. sta
muß ich Partitionen gemountet haben, oder nicht mounten?
LG Heiko
Die 4 TB NVMe-Festplatte NICHT mounten.