gddrescue
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
GNU ddrescue 🇬🇧 ist ein Programm zur Datenrettung von defekten Datenträgern. Es liest Datenblöcke und rettet im ersten Durchlauf die Daten, die sich fehlerlos auslesen lassen. Zugriffsfehler merkt sich das Programm, um in weiteren Durchläufen zu versuchen, die entsprechenden Blöcke auszulesen. Dabei schreibt das Programm für Daten, die nicht mehr gelesen werden können, entsprechende Lückenstellen in die Zieldatei. Je nach Situation kann die Datenrettung einige Zeit dauern. gddrescue läuft automatisch ab.
Hinweis:
Achtung, Verwechslungsgefahr: Neben dem im Paket gddrescue enhaltenen Programm ddrescue (OHNE Unterstrich) gibt es auch noch das ältere Programm dd_rescue 🇬🇧 (MIT Unterstrich). Letzteres hat mit dem hier vorgestellten Programm lediglich gemeinsam, dass es die Funktionalität von dd erweitert. Für dd_rescue gab es jedoch lediglich bis Ubuntu 12.04 ein Paket. Zur Begründung der Entfernung wurde darauf verwiesen, dass das neuere Programm zum einen einen viel größeren Funktionsumfang besäße und zum anderen nur wenige Funktionen des älteren nicht hätte. Die Anwendung von dd_rescue ist relativ simpel und wird in den Artikeln Festplatten Problembehebung sowie Rettungsanker - Mit dd_rescue defekte Partition wiederherstellen 🇩🇪 behandelt.
Installation¶
Folgendes Paket muss installiert[1] werden:
gddrescue (universe )
Befehl zum Installieren der Pakete:
sudo apt-get install gddrescue
Oder mit apturl installieren, Link: apt://gddrescue
Benutzung¶
Die Datenrettung wird über das Terminal[2] gestartet – je nach mitgegebenen Parametern können einzelne Dateien oder ganze Medien ausgelesen werden. Mit Strg + C kann der Vorgang jederzeit unterbrochen und bei Verwendung eines Logfiles zu einem späteren Zeitpunkt an derselben Stelle fortgeführt werden.
Der Grundaufruf sieht wie folgt aus:
ddrescue OPTIONEN QUELLE ZIEL LOGDATEI
Hinweis:
Beim ersten Anzeichen eines drohenden Datenverlustes sollte eine Kopie angelegt werden, um den möglichen Datenverlust gering zu halten.
Hinweis:
Es ist sinnvoll, vor dem Anschließen bzw. Einlegen von (möglicherweise) defekten externen beschreibbaren Datenträgern sicherheitshalber den Automount – zumindest temporär – zu deaktivieren und dies mit einem anderen Datenträger zu testen.
Grundsätzlich sollte bei jedem Befehl eine Logdatei angegeben werden, erst mit dieser Datei zeigt das Programm alle Fähigkeiten, die es hat. Die Logdatei wird schreibend und lesend von ddrescue verwendet.
Ein guter Ansatz ist es, zunächst einmal zu versuchen alles zu sichern, was zum Zeitpunkt der Sicherung fehlerfrei ist, und keine Zeit auf fehlerhafte Blöcke zu verwenden:
ddrescue -n QUELLE ZIEL ddrescue.log
Erst danach startet man einen weiteren Durchlauf, in dem versucht wird, möglichst viele von den im ersten Schritt als kaputt markierten Daten doch noch zu retten:
ddrescue QUELLE ZIEL ddrescue.log
Dieses zweigeteilte Vorgehen ist zu bevorzugen, da durch die intensive Beanspruchung, noch Daten aus den defekten Blöcke zu bekommen, auch andere Teile der Medien zerstört werden können.
Achtung!
Falls zwischen den Durchläufen das System neu gestartet wird, so müssen vor dem zweiten Durchlauf sicherheitshalber die Gerätebezeichnungen überprüft werden, denn evtl. haben Letztere sich geändert (siehe dazu in der nachfolgenden Tabelle die Beschreibung zum Parameter -b
)!
Parameter¶
Optionen | |
Parameter | Beschreibung |
-b bytes | Sektorengröße der Quelle in Bytes – 512 ist Standard (3.5"-Disketten + Festplatten: 512 / 5.25"-Disketten: 1024 / CD-ROMs: 2048 ), im Zweifelsfall hilft bei sudo fdisk -l sudo parted -l Sector size (physical) |
-r, --max-retries=>n< | Maximale Versuche, um die Daten zu retten - bei -1 wird das Programm so lange ausgeführt, bis alle Fehler behoben wurden. |
-n, --no-scrape | Keine "Kratz"-Phase; bzw. früher: Kein Teilen von nicht-lesbaren Blöcken und keine wiederholten Versuche, diese zu lesen. Schont die auszulesenden Medien. |
-v | Mehr Informationen anzeigen lassen |
--help | Anzeige weiterer möglicher Parameter |
logfile | (Nur der Vollständigkeit halber, da genaugenommen kein Parameter:) Anlegen eines Logfiles. Dies hat den Vorteil, dass man die Sicherung jederzeit mit
Strg +
C abbrechen und später an dieser Stelle fortführen kann. Der Terminus logfile ist übrigens beispielhaft zu verstehen, man kann stattdessen auch einen beliebigen anderen Dateinamen wählen. Hinweis:In ddrescue-Versionen ab 1.20 (Ubuntu 17.10) wird stattdessen der Terminus |
Zusätzliche Informationen sind in den Manpages zu finden.
Logfile¶
Mit dem Logfile können Daten sehr effizient wiederhergestellt werden. Auch das Zusammenführen von Backups (Datei, CD-ROM, Festplatte ...) ist so möglich. So kann das Programm aus mehreren Kopien eines Backups ggf. ein funktionierendes und fehlerfreies Backup erstellen.
Das Logfile kann mit einem Editor eingesehen und bearbeitet werden und ist in zwei Sektionen unterteilt: die Statuszeile und eine Liste der Datenblöcke. Eine Beispieldatei kann so aussehen:
# Rescue Logfile. Created by GNU ddrescue version 1.2 # pos size status 0x00000000 0x001F4000 + 0x001F4000 0x002FC000 / 0x004F0000 0x022C0000 + ...
Neben Informationen über die Datenträgerposition und die Größe erfährt man etwas über den Status. Jede Zeile in der Liste beschreibt einen Datenblock. Kommentarzeilen sind mit der Raute hinterlegt.
Status | |
Meldung | Beschreibung |
? | kopieren nicht überprüfter Blöcke |
* | Zuschneiden der Blöcke |
/ | Blöcke trennen |
- | Defekte Sektoren erneut überprüfen |
F | Füllen der angegebenen Blöcke |
G | Erstellung des Logfile |
+ | Beendet |
Anwendungsbeispiele¶
Eine Vielzahl von Anwendungsbeispielen findet man auf mangpagez.com 🇬🇧 hinterlegt.
Dateiwiederherstellung¶
Um eine einzelne Datei zu retten, gibt man z.B. Folgendes an:
ddrescue -v ~/Quelldatei.tar.bz2 ~/Zieldatei.tar.bz2
Laufwerk¶
CD zu Image¶
Um einen Datenträger zu retten, muss man das Laufwerk ansprechen, und das Image wird im angegebenen Verzeichnis gesichert:
ddrescue -b2048 /dev/cdrom /home/BENUTZER/Datensicherung.iso logfile
Ausgabe:
Press Ctrl-C to interrupt rescued: 28459 kB, errsize: 3129 kB, current rate: 655 kB/s ipos: 31588 kB, errors: 48, average rate: 78762 B/s opos: 31588 kB Copying Data...
Im obigen Beispiel wurde ein Datenträger ausgelesen. Die ausgegebenen Werte bedeuten Folgendes:
ddrescue | |
Ausgabe | Beschreibung |
rescued: | bisher gerettete Datenmenge |
ipos: | derzeitige Leseposition |
opos: | Schreibposition im Durchgang |
errsize: | fehlerhafte Datenmenge |
errors: | Anzahl gefundener Fehler |
current rate: | aktuelle Lesegeschwindigkeit |
average rate: | durchschnittliche Lesegeschwindigkeit |
Copying data... | Im ersten Durchgang wird angezeigt, dass Daten kopiert werden) |
Splitting error areas... | In den Folgedurchgängen werden fehlerbehaftete Bereiche unterteilt |
Partition zu Partition¶
Es ist ebenfalls möglich, Datenträger (-Partitionen) zu kopieren, die nicht im System eingebunden (eingehängt) sind. Es wird eine 1:1-Kopie erstellt, kein Image. Hierzu werden als Quelle und Ziel von ddrescue die entsprechenden Geräte bzw. Partitionen angegeben. Es werden Root-Rechte [3] benötigt.
sudo ddrescue --force /dev/sdb1 /dev/sdc3
Der Befehl kopiert die Partition sdb1
auf die Partition sdc3
. Man kann wieder Quelle und Ziel an die eigenen Bedürfnisse anpassen, so ist es z.B. beim Austausch von Festplatten möglich, als Quelle /dev/sdb
und als Ziel /dev/sdc
anzugeben.
Achtung!
Bei Kopien mit einem Datenträger oder einer Partition als Ziel werden alle auf dem Ziel befindlichen Daten gelöscht. Dies wird von gddrescue standardmäßig verweigert. Wenn man sich sicher ist, das man alle(!) Daten auf dem Zielgerät bzw. der Zielpartition nicht mehr benötigt, kann man die Option --force
(bzw. kurz -f
) verwenden um auf das Gerät zu schreiben.
Problembehebung¶
Manchmal kann es vorkommen dass beim Auslesen der (externen) Festplatte plötzlich nur noch Lesefehler auftreten und erst nach Aus- und erneutem Anstecken der Platte wieder Daten gelesen werden können. In diesem Fall kann man versuchen die eventuell vorhandene TLER Funktion der Festplatte zu akvieren.
Hinweis:
Die Aktivierung der Funktion kann dazu führen dass in Summe weniger Daten gerettet werden da weniger Zeit für die hardware-internen Fehlerkorrekturmechanismen aufgewendet wird. Sie sollte entsprechend nicht standardmäßig aktiviert werden.
Um zu prüfen ob diese vorhanden ist wird das Paket smartmontools benötigt. Anschließend ist der folgende Befehl in einem Terminal zu verwenden:
1 | sudo smartctl -l scterc /dev/sdX |
wobei X entsprechend des fehlerhaften Datenträgers anzupassen ist. Lautet die Ausgabe
SCT Error Recovery Control: Read: Disabled Write: Disabled
so ist die Funktion aber vorhanden, aber deaktiviert. Aktiviert werden kann sie mit dem Befehl
1 | sudo smartctl -l scterc,Y,Z /dev/sdX |
Y und Z stehen hierbei für die Zeit in 1/10 s welche versucht werden soll einen Lese- bzw. Schreibfehler zu korrigieren.
Links¶