Rettung einer Festplatte mit schlechten Sektoren: dd vs gddrescue


11

Irgendwo im Internet habe ich gelesen, dass gddrescue dd zumindest in Bezug auf die Anzahl der in einem problematischen Sektor durchgeführten Festplattenlesevorgänge überlegen ist. Ist das wirklich der Fall?

Zeit dd if = / dev / sda skip = 900343967 von = a.bin count = 4 iflag = direct conv = noerror, sync

dd: Lesen von `/ dev / sda ': Eingabe- / Ausgabefehler
2 + 0 Datensätze in
2 + 0 Datensätze aus
1024 Bytes (1,0 kB) kopiert, 18.6057 s, 0,1 kB / s
3 + 1 Datensätze in
4 + 0 Datensätzen aus
2048 kopierte Bytes (2,0 kB), 18,6707 s, 0,1 kB / s

real 0m18.672s
Benutzer 0m0.000s
sys 0m0.004s

Übrigens hilft die direkte Flagge wirklich, ohne sie konnte ich nur 1 von 4 Sektoren lesen (gegenüber 3/4 damit). Dies verlangsamt jedoch die Übertragungsgeschwindigkeit spürbar - sie ist für mich mindestens fünfmal langsamer: 5 MB / s gegenüber 25 MB / s ohne dieses Flag. Wie auch immer, jetzt zum gddrescue (ddrescue) Teil.

Zeit ddrescue -b512 -c1 -s4b -dnvD -i900343967b -o0b / dev / sda b.bin

Über 2048 Bytes von / dev / sda nach b.bin kopieren
Startpositionen: infile = 460976 MB, outfile = 0 B
Blockgröße kopieren: 1 harte Blöcke
Harte Blockgröße: 512 Bytes
Max_retries: 0
Direkt: ja Sparse: nein Split: nein Abschneiden: nein


Drücken Sie Strg-C, um die Rettung zu unterbrechen : 1536 B, Fehlergröße: 512 B, aktuelle Rate: 53 B / s
ipos: 460976 MB, Fehler: 1, durchschnittliche Rate: 53 B / s
opos: 1536 B, Zeit vom letzten erfolgreichen Lesevorgang: 0 s
Fertig

real 0m18.736s
Benutzer 0m0.004s
sys 0m0.000s

Wie oben gezeigt, hat die Ausführung genau genauso lange gedauert. Wie erwartet - gleiche Statistik: 3/4. Obwohl ich die problematischen Sektoren mit 0x00 für dd (conv = sync) auffüllen konnte, scheint gddrescue diese Funktionalität zu vermissen? Stattdessen überspringt es einfach den problematischen Sektor, ohne etwas an seine Position zu schreiben, und fährt mit dem nächsten folgenden Sektor fort (wenn ich bereits Daten über diesen Sektor in der Ausgabedatei geschrieben habe - werden sie nicht überschrieben: Manchmal ist dies möglicherweise nicht wünschenswert ). Ich bin nicht sicher, wie die Option -t (Abschneiden) für ein Blockgerät mit gddrescue funktioniert(Ich denke, es wird es vollständig mit 0x00 überschreiben), aber in einer regulären Datei wird, wie vorhergesagt, die gesamte Datei abgeschnitten, ohne dies nur innerhalb der versetzten Dimensionen (dh -o1) zu tun. Das ist also etwas ähnlich wie dd sync , aber weit davon entfernt, dasselbe zu sein, da es nur die Identifikationsfunktionalität nachahmt, wenn Sie bereit sind, das gesamte Ausgabegerät / die gesamte Ausgabedatei zu überschreiben.

Dank der ausführlichen Option und der Möglichkeit, fehlerhafte Sektoren / Blöcke zu protokollieren, scheint gddrescue eine bessere Wahl zu sein. Es ist wichtig zu beachten, dass beide Apps mit (ziemlich) identischen Parametern gestartet wurden.

Die Ausgabe von

diff? .bin

ist leer (Exit 0), was bedeutet, dass die Dateien genau gleich sind.

Dies ist der Teil, den ich NICHT verstehe:

dd ist selbst bei fehlerfreien Dingen langsam, da es winzige Lese- und Schreibvorgänge ausführt. Es verbringt viel Zeit damit, durch die fehlerhaften Teile des Laufwerks zu kauen, anstatt so viel fehlerfreies Zeug wie möglich zu lesen, und dann wieder die harten Sachen zu machen.

Worum geht es? Besonders der Teil " Es verbringt viel Zeit damit, durch die fehlerhaften Teile des Laufwerks zu kauen, anstatt so viel fehlerfreies Zeug wie möglich zu lesen und dann wieder das harte Zeug zu machen "? Es hat genauso lange gedauert wie oben gezeigt (obwohl ich einen sehr kleinen Teil der Daten überprüft habe, aber sollte das wichtig sein?).

gddrescue bietet den Schalter -r an , der die Anzahl der erneuten Lesevorgänge in einem "fehlerhaften Sektor" steuern soll. Dd scheint jedoch die ganze Zeit mit -r0 zu laufen (da dies dieselbe Zeit in Anspruch nahm). Ist diese Option also nur für die "Nachbearbeitung" gedacht? Was ich bei bekommen, ist , dass die ursprünglich beide dd und gddrescue scheinen zu laufen -r0 und dd scheint nicht zu kauen durch die fehlerhaften Teile mehr als gddrescue (sie scheinen beide halt an einem schlechten Block für 15-18 Sekunden geben oder nehmen, also was ist los , wie ist gddrescue schneller ???)

Wofür ist die Option -D (verwenden Sie synchrone Schreibvorgänge für die Ausgabedatei)? Ich habe keinen Unterschied zu einigen der durchgeführten Tests festgestellt.

Kann jemand das Ganze kommentieren? Vielen Dank.

Antworten:


6

Ich bin mir nicht sicher, wie der zitierte Autor zu seinem Schluss gekommen ist. Ich diskutiere nicht, ob er richtig ist oder nicht, ich habe einfach nicht diese Erfahrung.

Auf der anderen Seite in Bezug auf diese Aussage ...

gddrescue ist dd zumindest in Bezug auf die Unterscheidung zwischen der Anzahl der in einem problematischen Sektor durchgeführten Festplattenlesevorgänge überlegen.

Der eigentliche "zumindest" Grund für die Verwendung von gddrescue ist, dass gddrescue die Ausgabe bei wiederholten Lese- / Schreibversuchen nicht abschneidet. gddrescue ist auch vollautomatisch in Bezug auf bestimmte Lesefehler, die dd stoppen würden.

Der zitierte Autor mag also richtig sein, er mag nicht ... aber die ganze Aussage verfehlt den Punkt von gddrescue.

UPDATE: Detaillierte Unterschiede zwischen dd und gddrescue.

dd conv = noerror, geht nach einem Fehler weiter, überspringt aber nur den fehlerhaften Block. Selbst wenn Sie die Synchronisierungsoption hinzufügen, werden nur Nullen gesetzt, anstatt zu überspringen. Wenn Sie dd verwenden, um einen weiteren Lesevorgang mit derselben Ausgabe durchzuführen, überschreiben / verlieren Sie einfach alles, was Sie zuvor wiederhergestellt haben.

gddrescue, wird auch nach einem Fehler weitermachen. Es kann eine Teilrendite von einem schlechten Block zurückgewinnen und wird zurückgehen und den Block Sektor für Sektor versuchen. gddrescue führt ein detailliertes Fehlerprotokoll mit guten Blöcken, schlechten Blöcken und Sektor für Sektor von allen schlechten Blöcken. Wenn Sie versuchen, den Lesevorgang erneut durchzuführen, schneidet gddrescue ab (schneidet ab) und fügt zusätzlich wiederhergestellte Daten hinzu.

Denken Sie daran, auch mit beiden Werkzeugen, wenn ein ganzer Block zu 100% unlesbar ist. Sie erhalten immer noch keine Daten davon. gddrescue kann möglicherweise mehr Daten abrufen, wenn einige Sektoren im Block lesbar bleiben.


Ich verstehe, na ja . Wenn gddrescue vollautomatisch ist, ist dd nicht auch vollautomatisch mit conv = noerror ? Könnten Sie den Teil "Ausgabe bei wiederholten Lese- / Schreibversuchen abschneiden" näher erläutern? Sie meinen das "Nachbearbeitungs" -Ding, wenn gddrescue angewiesen wird, Sektoren erneut zu untersuchen, die anfangs nicht gelesen wurden?
XXL

Ich habe meine Antwort aktualisiert, um Ihre Frage wiederzugeben.
JM Becker

Ich habe gddrescue mehrmals auf Festplatten und optischen Medien verwendet. Der Vorteil ist, dass versucht wird, unlesbare Bereiche wiederherzustellen. Sie können es auch stoppen und später erneut ausführen, und es wird genau dort fortgesetzt, wo es aufgehört hat.
Chris Thompson

1
@TechZilla - gddrescue nur überspringt den schlechten Block als auch, wie dd tut. Wie ich oben geschrieben habe, ist das Auffüllen mit Nullen (conv = sync) genau die Option, die gddrescue fehlt und die manchmal nützlich ist (mit zusätzlichem Aufwand können Sie dies manuell mit / dev / zero tun, da Sie das Protokoll von haben würden schlechte Sektoren, wie pro gddrescue- Ausgabe erzeugt). Es gibt keinen Unterschied zwischen gddrescue und dd in Bezug auf die Wiederherstellung, gddrescue macht diesbezüglich nichts anderes. Warum? Denn bei gleicher Blockgröße stellen sie die gleiche Datenmenge wieder her.
XXL

@TechZilla - Der einzige tatsächliche Unterschied besteht darin, dass die Anzahl der zu verarbeitenden Sektoren höher als die Blockgröße gewählt wird . Auf diese Weise können Sie die Dinge im Vergleich zu dd spürbar beschleunigen , da dd nur mit einer statischen nicht variablen Sektorgröße arbeiten kann. Auf der anderen Seite liest gddrescue zuerst so viele Sektoren, wie Sie angewiesen haben, aber es deklariert diese Chunks auch als schlecht, wenn ein einzelner Block im Inneren zweifelhaft ist und wenn dies erledigt ist, wechseln Sie in den Post-Modus und überprüfen Sie die verwirrenden Bereiche schrittweise Verringerung der Sektorgröße, bis die minimale Blockgröße erreicht ist
XXL

2

Abhängig davon, wann Ihre Festplatte sowie der Hersteller hergestellt wurde und welche Firmware-Version mit modernen Festplatten ausgeführt wird, werden fehlerhafte Sektoren von der Firmware entfernt und das Laufwerk kann die fehlerhaften Sektoren überspringen. Daher kann der Gedanke, eine Festplatte aus schlechten Sektoren zu "retten", in dieser Hinsicht umstritten sein. Die Frage, ob die jetzt schlechten Sektoren einst gültige Daten hatten, scheint die von Ihnen gesuchte Falllösung zu sein - kein Wortspiel beabsichtigt!

Auf grc.com gibt es eine Software namens Spinrite 6, die behauptet, Festplatten mit fehlerhaften Sektoren reparieren zu können. Es ist kostenpflichtige Software, und ich habe es nie ausprobiert. Es lohnt sich, darüber zu lesen, insbesondere wenn versucht wird, eine Festplatte "wiederzubeleben", und sie tatsächlich wie beschrieben funktioniert. Die FAQ auf grc.com zu Spinrite 6 gibt an, dass es eine 30-tägige Geld-zurück-Garantie gibt (und es gibt keine Testversion oder kostenlose Version). Hinweis: Ich bin weder mit grc.com verbunden, noch empfehle ich es für Ihre Situation. Ich weiß nur, dass es existiert und möglicherweise wie angekündigt funktioniert. Nehmen Sie einfach nicht mein Wort dafür - Vorbehalt.

In Bezug auf die Beurteilung, ob gddrescue dd "überlegen" ist, zumindest in Bezug auf die Fähigkeit, zwischen der Anzahl der auf einem problematischen Sektor durchgeführten Festplattenlesevorgänge und einer beliebigen Anzahl von Lesevorgängen auf einem fehlerhaften Sektor zu unterscheiden (da es als nicht markiert ist) Funktionssektor in einer Liste fehlerhafter Sektoren in einer Firmware-Liste) scheint mir für eine qualitative Verwendung von gddrescue oder dd nicht nützlich zu sein.

Es kann nützlich sein, die Webseite dd (Unix) unter folgender Adresse zu lesen: https://secure.wikimedia.org/wikipedia/en/wiki/Gddrescue#Recovery-oriented_variants_of_dd

Es kann auch nützlich sein, einen Blick darauf zu werfen: So erstellen Sie ein Image einer abgestürzten Festplatte mit UBCD, dd-retten und P2 eXplorer unter: http://www.myfixlog.com/fix.php?fid= 21

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.