ddrescue

Kommandozeilenprogramm zur Datenwiederherstellung

GNU ddrescue (von engl. to rescue)[2] ist ein Kommandozeilenprogramm zur Datenwiederherstellung. Das Programm kopiert Daten aus einer Datei oder von einem blockorientierten Gerät (Festplatte, CD-ROM oder dergleichen) in eine andere Datei oder auf ein anderes blockorientiertes Gerät. Auch bei Lesefehlern versucht es, die Daten so weit wie irgend möglich wiederzugeben; dabei werden Bereiche mit Lesefehlern zunächst großzügig übersprungen und zurückgestellt, um sich erst später möglichst nah an nicht mehr zu lesende Bereiche heranzutasten. Im Angesicht der (bei möglicherweise drohendem Komplettausfall begrenzten) Restlebensdauer des Datenträgers wird dadurch eine sichere Rettung problemlos zu lesender Daten erreicht, ehe der Datenträger durch zeitraubende wiederholte Leseversuche an defekten Stellen möglicherweise überlastet wird.

GNU ddrescue (gddrescue)


Bildschirmausgabe von ddrescue
Basisdaten

Maintainer Antonio Diaz Diaz
Entwickler Antonio Diaz Diaz / GNU-Projekt
Erscheinungsjahr 12. August 2004
Aktuelle Version 1.28[1]
(23. Januar 2024)
Betriebssystem Unixoide Systeme
Programmier­sprache C++
Kategorie Datenwiederherstellung
Lizenz GPL (Freie Software)
deutschsprachig nein
www.gnu.org/software/ddrescue/ddrescue.html

Geschichte und Entwicklungsanlass

Bearbeiten

Antonio Diaz Diaz begann mit der Entwicklung von ddrescue im Sommer 2004, um Daten aus einer fehlerhaften CD-ROM zu retten, nachdem er kein Programm fand, das seinen Ansprüchen für diese Aufgabe genügte.

Diaz war und ist der alleinige Entwickler und Programmierer von ddrescue und bezeichnet es als ein zwar etwas komplexes, aber kleines Projekt, für das daher nicht mehr als ein Entwickler benötigt wird.[3]

Abgrenzung zu anderen Programmen

Bearbeiten

ddrescue unterscheidet sich von dd durch einen ausgeklügelten Algorithmus, der Daten von aussetzenden Laufwerken auf eine Weise kopiert, bei der so wenig weiterer Schaden verursacht wird wie möglich.[4]

GNU ddrescue ist nicht identisch mit dem älteren Hilfsprogramm dd_rescue von Kurt Garloff.[2]

Namen der Programme und ihrer Programmpakete
Programm Paket Entwickler Anmerkung
Debian u. ä. Fedora, CentOS u. ä.
ddrescue gddrescue ddrescue Antonio Diaz Diaz Wird in diesem Text beschrieben.
dd_rescue dd_rescue Kurt Garloff  

Zwar gibt es ein Shell Script namens dd_rhelp, das Garloffs dd_rescue mehrfach aufruft, um etwas Ähnliches zu leisten wie GNU ddrescue; jedoch soll die Zusammenarbeit von dd_rescue und dd_rhelp laut Antonio Diáz Diáz und anderen vergleichsweise ineffizient sein.[3]

Aufgabe des Programms

Bearbeiten
 
Eine kurze Protokolldatei von ddrescue; wenn mehr Fehler aufgetreten sind, kann solch eine Datei viel länger sein.

Laut seinem Programmautor kann ddrescue vor allem für zwei Aufgaben verwendet werden:[3]

  1. die Wiederherstellung der Daten einer defekten Festplatte auf einer anderen Festplatte
  2. das Löschen aller guten Sektoren einer Festplatte unter Beibehaltung der fehlerhaften, um die Festplatte zur Reklamation an den Hersteller schicken zu können, ohne unnötig eigene Daten preiszugeben.

GNU ddrescue hat den differenziertesten Algorithmus zur Änderung von Blockgrößen, den es in einer Open-Source-Software gibt.[5][6] Es gilt als bedeutendes Datenwiederherstellungswerkzeug[7][8] und wird professionell eingesetzt.[9]

Wenn man die Mapfile-Option von ddrescue benutzt, werden die Daten besonders effizient kopiert, weil nur die benötigten Blöcke gelesen werden. Darüber hinaus kann man dadurch die Datenwiederherstellung jederzeit unterbrechen und später an derselben Stelle fortsetzen.

Spezielle Einsatzmöglichkeiten

Bearbeiten

Automatische Kombination von gesicherten Daten: Hat man bereits mehrere beschädigte Abbilder einer Datei, einer CD-ROM oder eines anderen blockorientierten Speichers vorliegen, so kann ddrescue diese verwenden, um ein Abbild mit minimalen Fehlerblöcken zu kompilieren; im Idealfall gar ein fehlerfreies. Ansonsten wird ddrescue unter Verwendung der als Parameter anzugebenden Protokolldatei (engl. mapfile) beim zweiten und jedem folgenden Kopiervorgang nur die Blöcke lesen, die noch benötigt werden.

Der Autor von ddrescue empfiehlt, Sicherungen mit lzip zu komprimieren, weil das Lzip-Format für die Langzeitarchivierung von Daten ausgelegt ist und Datenwiederherstellungsfunktionen bietet, die gut die Fähigkeiten von ddrescue ergänzen. Wenn der Datenverlust in einer Datei auf einem beschädigten Datenträger beruht, ist eine Zusammenarbeit von ddrescue und Lziprecover die beste Möglichkeit zur Wiederherstellung von Daten aus mehreren beschädigten Kopien.

ddrescue kann ausgewählte Teile der Ausgabedatei überschreiben (fill mode). Damit können zum Beispiel Daten gelöscht oder fehlerhafte Sektoren gekennzeichnet werden und in manchen Fällen beschädigte Sektoren wieder nutzbar gemacht werden.[10]

Anwendungsbeispiele

Bearbeiten

Die einfachste und in der Regel beste Möglichkeit, ddrescue zu verwenden, ist ddrescue quelle ziel mapfile ohne spezielle Parameter. Dies ist anstelle der Verwendung von dd bereits dann sinnvoll, wenn man auch nur den leisen Verdacht hat, das Gerät, von dem man das Image ziehen will, könnte Lesefehler produzieren. Beispiel: angenommen eine zu sichernde alte Diskette befinde sich im Laufwerk /dev/sdg, so startet man

ddrescue /dev/sdg  myfloppy.img  myfloppyddrescue_map

wobei sicherzustellen ist, dass das Laufwerk nicht oder nur zum Lesen gemountet ist. Nach dem Start zeigt ddrescue laufend an, welche Bereiche es gerade liest oder zu lesen versucht. Ist der Lesevorgang sofort oder nach einigen Versuchen fehlerfrei, so erhält man damit schnellstmöglich ein fehlerfreies Abbild. myfloppyddrescue_map enthält eine einfache, lesbare Liste mit Bereichen mit und ohne Fehler. Im Idealfall ist das nur ein Bereich von der Gesamtgröße der Diskettenkapazität, der als fehlerfrei markiert ist.

Die so erzeugte Datei kann unter unixoiden Betriebssystemen als Loop device gemountet werden.

mount -o loop,ro myfloppy.img /mnt

Eine Festplatte wiederherstellen

Bearbeiten

Beispiel: Mit ddrescue eine Festplatte mit zwei Ext2-Partitionen von /dev/sda auf /dev/sdb wiederherstellen. Wir verwenden die nicht existierenden Gerätedateien sdXa und sdXb in allen untenstehenden Befehlen als Platzhalter für die tatsächlichen Gerätedateien (z. B. sda, sdb), um versehentlichen Datenverlust zu verhindern, wenn man beim Kopieren und Einfügen übersieht, einzelne Platzhalter zu ersetzen.[11]

Hardwarekonstellation

Das Beispiel setzt – auch wenn andere Konstellationen möglich sind – voraus, dass vier Datenträger an den Rechner angeschlossen sind:

  die wiederherzustellende oder zu kopierende Festplatte (/dev/sdXa),
  eine leere zweite Festplatte (/dev/sdXb), die mindestens so groß ist wie die erste, die kopiert werden soll,
  ein CD-ROM-Laufwerk für eine Linux-Live-CD und
  ein USB-Stick für die Mapdatei von ddrescue (/dev/sdc1).

Die Verwendung eines gesonderten USB-Sticks für die Mapdatei sorgt dafür, dass die Datei selbst bei einem Systemabsturz erhalten bleibt. Speichert man sie hingegen nur im (lediglich im Arbeitsspeicher vorhandenen) Dateisystem der Live-CD, dann geht sie bei einem eventuellen Systemneustart verloren, wodurch ddrescue seine Arbeit nicht an der Stelle fortsetzen könnte, an der es unterbrochen wurde. Da ein Wiederherstellungslauf von ddrescue etliche Stunden dauern kann, ist dies ein nicht zu vernachlässigendes Risiko.

 
ddrescue beim Programmlauf

Die Befehlsfolge

Der Computer wird über eine Linux-Live-CD wie Parsix, Kanotix gestartet, dann gibt man an der Kommandozeile nacheinander folgende Befehle ein:

ddrescue -f -n /dev/sdXa /dev/sdXb /media/myusb/rescue.map
ddrescue -d -f -r3 /dev/sdXa /dev/sdXb /media/myusb/rescue.map
fdisk /dev/sdXb
e2fsck -v -f -p /dev/sdXb1
e2fsck -v -f -p /dev/sdXb2

Die Befehle im Einzelnen

Schritt Befehl Funktion
1 ddrescue -f -n /dev/sdXa /dev/sdXb /media/myusb/rescue.map Der erste Durchlauf von ddrescue, bei dem nur jene Daten kopiert werden, die ddrescue problemlos lesen kann.
-n (engl. „no-split“), fehlerhafte Bereiche nicht teilen oder mehrfach zu lesen versuchen.
2 ddrescue -d -f -r3 /dev/sdXa /dev/sdXb /media/myusb/rescue.map Zweiter Durchlauf von ddrescue, bei dem es jeden nicht problemlos zu lesenden Sektor bis zu dreimal (Parameter „-r3“) zu lesen versucht. Die Ausgabe des ersten Durchlaufs wird durch diesen zweiten Durchlauf ergänzt, das heißt ddrescue versucht bei diesem zweiten Durchlauf, die Lücken in der Ausgabe seines ersten Durchlaufs zu füllen.
3 fdisk /dev/sdXb Falls die Partitionstabelle beschädigt ist, muss man in diesem Schritt versuchen, mit fdisk die Partitionstabelle zu restaurieren.
4 e2fsck -v -f -p /dev/sdXb1 Ermittelt und repariert eventuelle Fehler im Dateisystem der von ddrescue geschriebenen Partition sdb1.
-f (engl. „force“), unter allen Umständen erzwungene Überprüfung des Dateisystems.
-p (engl. „preen“) automatische Korrektur aller Probleme, die keines menschlichen Eingreifens bedürfen.
5 e2fsck -v -f -p /dev/sdXb2 Ermittelt und repariert eventuelle Fehler im Dateisystem der von ddrescue geschriebenen Partition sdb2.

Verbreitung

Bearbeiten

ddrescue ist vorinstallierter Bestandteil verschiedener GNU/Linux-Distributionen und liegt ebenso für FreeBSD vor.[12]

Einige Live-Systeme, die standardmäßig ddrescue mitbringen:

Siehe auch

Bearbeiten
Bearbeiten

Einzelnachweise

Bearbeiten
  1. Antonio Diaz Diaz: GNU ddrescue 1.28 released. 25. Januar 2024 (englisch, abgerufen am 25. Januar 2024).
  2. a b gddrescue. In: „Ubuntuusers.de“. 28. Dezember 2013, abgerufen am 28. Dezember 2013: „Achtung, Verwechslungsgefahr: Neben dem Paket gddrescue, welches das Programm ddrescue enthält, gibt es noch das Paket ddrescue mit dem Programm dd_rescue.“
  3. a b c Interview With GNU DDRescue's Antonio Diaz Diaz. In: „Blue-GNU – News for Gnus“. 15. August 2007, archiviert vom Original (nicht mehr online verfügbar) am 15. April 2008; abgerufen am 28. Dezember 2013 (englisch).
  4. GNU ddrescue Manual. The GNU project, abgerufen am 6. September 2013.
  5. Disk drive recovery: ddrescue, dd_rescue, dd_rhelp. John Gilmore, archiviert vom Original (nicht mehr online verfügbar) am 30. Mai 2013; abgerufen am 6. September 2013.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/www.toad.com
  6. Damaged Hard Disk. www.cgsecurity.org, abgerufen am 6. September 2013.
  7. Best Data Recovery Tools – Top 10 List. Geekyprojects, abgerufen am 6. September 2013.
  8. 12 essential system recovery tools. PC Plus Issue 303 22nd Jan 2011, abgerufen am 6. September 2013.
  9. gnu ddrescue to the rescue! Jelsoft Enterprises Ltd., archiviert vom Original am 27. Oktober 2013; abgerufen am 15. März 2024.
  10. Ddrescue – Data recovery tool. The GNU project, abgerufen am 6. September 2013.
  11. GNU ddrescue Manual: “7 A small tutorial with examples”
  12. J. Harris: ddrescue 1.17. Port Details. In: „FreshPorts.org – New ports and applications [for FreeBSD]“. 16. August 2007, abgerufen am 12. Januar 2014.
  13. Package lists for grml32-small 2013.09[-rc1]. In: „Grml.org“. 17. Oktober 2013, abgerufen am 13. Januar 2014.
  14. Komplette Software-Liste (CD, ca. 1000 Programme). In: „Knopper.net“. 26. Juni 2013, abgerufen am 13. Januar 2014.
  15. Programs Included in Parted Magic 2014_01_04 – Parted Magic LLC. In: „PartedMagic.com“. 10. Januar 2014, archiviert vom Original (nicht mehr online verfügbar) am 13. Januar 2014; abgerufen am 13. Januar 2014.  Info: Der Archivlink wurde automatisch eingesetzt und noch nicht geprüft. Bitte prüfe Original- und Archivlink gemäß Anleitung und entferne dann diesen Hinweis.@1@2Vorlage:Webachiv/IABot/partedmagic.com
  16. Detailed-packages-list [SystemRescueCd-3.8.1]. In: „Sysresccd.org“. 28. Oktober 2013, abgerufen am 13. Januar 2014.
  17. Version 12.04. In: „Ubuntu-rescue-remix.org“. 26. April 2012, archiviert vom Original am 28. Januar 2014; abgerufen am 18. Januar 2014: „Ubuntu-Rescue-Remix features a full command-line environment with the newest versions of the most powerful free/libre open-source data recovery software including GNU ddrescue, Photorec, The Sleuth Kit, Gnu-fdisk and Clamav.“