Wie schätze ich die Schleifen / Zeit für die Fertigstellung von GNU ddrescue (1.18.1) unter Verwendung des aktuellen Status?

9

Hintergrund / Kontext:

Ich verwende derzeit GNU ddrescue 1.18.1, um Daten von einem USB-Stick wiederherzustellen, bei dem eine Kabelverbindung aufgetreten ist, während ich ein Image der virtuellen Festplatte auf die Partition disk2s1 geschrieben habe. Zunächst stelle ich meine zweite Partition (disk2s2) wieder her und stelle fest, dass ich die dritte Phase (Splitting) erreicht habe. Ich platziere das Bild auf einem Netzwerkspeicher.

Frage:

Ich habe bemerkt, dass diese Phase Schleifen. Gibt es eine Möglichkeit, die Anzahl der Schleifen zu berechnen, die aufgrund meiner aktuellen Statusinformationen wahrscheinlich auftreten (ich zeige nur zwei Fehler an)?

Status:

Status

Aktualisieren / Bearbeiten:

Daher bin ich immer noch sehr daran interessiert, wie man die Schleifen / die Zeit für die Fertigstellung mit dem ddrescue-Tool abschätzen kann. Gemäß den Kommentaren füge ich eine Auswertung einer Protokolldatei für meine derzeit ausgeführte disk2s1-Partition hinzu (die disk2s2-Partition wurde nach 14,5 Stunden abgeschlossen, wobei ein Benutzer etwa 6 Stunden lang unterbrochen wurde).

part1-log

Partitionsprotokoll abgeschlossen

Für die gerade abgeschlossene Partition ist hier das Ergebnis der Protokollprüfung.

Fotoprotokoll

Referenz (Hinweise zum Ddrescue-Algorithmus):

4 Algorithmus


GNU ddrescue ist keine Ableitung von dd und steht in keiner Weise in Beziehung zu dd, außer dass beide zum Kopieren von Daten von einem Gerät auf ein anderes verwendet werden können. Der Hauptunterschied besteht darin, dass ddrescue einen ausgeklügelten Algorithmus verwendet, um Daten von fehlerhaften Laufwerken zu kopieren, wodurch diese so wenig zusätzlichen Schaden wie möglich verursachen.

Ddrescue verwaltet den Status der laufenden Rettung effizient und versucht, zuerst die guten Teile zu retten. Dabei werden Lesevorgänge in schlechten (oder langsamen) Bereichen für später geplant. Dies maximiert die Datenmenge, die endgültig von einem fehlerhaften Laufwerk wiederhergestellt werden kann.

Das Standarddienstprogramm dd kann zum Speichern von Daten von einem fehlerhaften Laufwerk verwendet werden. Es liest die Daten jedoch nacheinander, wodurch das Laufwerk möglicherweise abgenutzt wird, ohne dass etwas gerettet wird, wenn sich die Fehler am Anfang des Laufwerks befinden.

Andere Programme lesen die Daten nacheinander, wechseln jedoch zu kleinen Lesevorgängen, wenn sie Fehler finden. Dies ist eine schlechte Idee, da dies bedeutet, mehr Zeit in Fehlerbereichen zu verbringen, die Oberfläche, die Köpfe und die Antriebsmechanik zu beschädigen, anstatt sie so schnell wie möglich zu verlassen. Dieses Verhalten verringert die Wahrscheinlichkeit, die verbleibenden guten Daten zu retten.

Der Algorithmus von ddrescue lautet wie folgt (der Benutzer kann den Prozess jederzeit unterbrechen, muss sich jedoch darüber im Klaren sein, dass ein fehlerhaftes Laufwerk ddrescue für eine lange Zeit blockieren kann, bis der Kernel aufgibt):

1) Lesen Sie optional eine Protokolldatei, die den Status einer mehrteiligen oder zuvor unterbrochenen Rettung beschreibt. Wenn keine Protokolldatei angegeben ist oder leer ist oder nicht vorhanden ist, markieren Sie die gesamte Rettungsdomäne als nicht ausprobiert.

2) (Erste Phase; Kopieren) Lesen Sie die nicht getesteten Teile der Eingabedatei, markieren Sie die fehlgeschlagenen Blöcke als nicht zugeschnitten und überspringen Sie sie. Überspringen Sie auch langsame Bereiche. Die übersprungenen Bereiche werden später in zwei zusätzlichen Durchgängen (vor dem Trimmen) versucht, wobei die Richtung nach jedem Durchgang umgekehrt wird, bis die gesamte Rettungsdomäne ausprobiert ist. Der dritte Durchgang ist ein umfassender Durchgang, bei dem das Überspringen deaktiviert ist. (Der Zweck besteht darin, große Fehler schnell abzugrenzen, die Protokolldatei klein zu halten und gute Ausgangspunkte für das Zuschneiden zu erstellen.) Nur nicht erprobte Bereiche werden in großen Blöcken gelesen. Das Trimmen, Aufteilen und Wiederholen erfolgt Sektor für Sektor. Jeder Sektor wird höchstens zweimal ausprobiert; Der erste in diesem Schritt (normalerweise als Teil eines großen Blocklesevorgangs, manchmal aber auch als einzelner Sektor), der zweite in einem der folgenden Schritte als einzelner Sektor.

3) (Zweite Phase; Trimmen) Lesen Sie jeweils einen Sektor von der Vorderkante des kleinsten nicht getrimmten Blocks weiter, bis ein fehlerhafter Sektor gefunden wird. Lesen Sie dann jeweils einen Sektor von der Hinterkante desselben Blocks rückwärts, bis ein fehlerhafter Sektor gefunden wird. Markieren Sie für jeden nicht zugeschnittenen Block die gefundenen fehlerhaften Sektoren als fehlerhaften Sektor und markieren Sie den Rest dieses Blocks als nicht geteilt, ohne zu versuchen, ihn zu lesen. Wiederholen, bis keine nicht zugeschnittenen Blöcke mehr vorhanden sind. (Große, nicht zugeschnittene Blöcke werden durch Verkettung kleinerer Blöcke erzeugt, und der Anteil guter Daten an den Rändern ist daher geringer.)

4) (Dritte Phase; Aufteilen) Lesen Sie jeweils einen Sektor von der Mitte des größten nicht geteilten Blocks weiter, bis ein fehlerhafter Sektor gefunden wird. Wenn der gefundene fehlerhafte Sektor nicht der erste ist, der versucht wird, lesen Sie jeweils einen Sektor von der Mitte desselben Blocks rückwärts, bis ein fehlerhafter Sektor gefunden wird. Wenn die Protokolldatei größer als '--logfile-size' ist, lesen Sie nacheinander die größten nicht geteilten Blöcke, bis die Anzahl der Einträge in der Protokolldatei unter '--logfile-size' fällt. Wiederholen, bis alle verbleibenden nicht geteilten Blöcke weniger als 7 Sektoren haben. Lesen Sie dann die verbleibenden nicht geteilten Blöcke nacheinander.

5) (Vierte Phase; Wiederholung) Versuchen Sie optional, die fehlerhaften Sektoren erneut zu lesen, bis die angegebene Anzahl von Wiederholungsdurchläufen erreicht ist. Jeder schlechte Sektor wird nur einmal in jedem Durchgang ausprobiert. Ddrescue kann nicht wissen, ob ein fehlerhafter Sektor nicht wiederherstellbar ist oder ob er nach einigen Wiederholungsversuchen irgendwann gelesen wird.

6) Schreiben Sie optional eine Protokolldatei zur späteren Verwendung.

Die Gesamtfehlergröße ('errsize') ist die Summe der Größen aller nicht zugeschnittenen, nicht geteilten und fehlerhaften Sektorenblöcke. Sie nimmt während der Kopierphase zu und kann während des Zuschneidens, Teilens und erneuten Versuchens abnehmen. Beachten Sie, dass sich die Gesamtfehlergröße verringern kann, wenn ddrescue die ausgefallenen Blöcke aufteilt und sie kleiner macht, während die Anzahl der Fehler zunimmt.

Die Protokolldatei wird regelmäßig auf der Disc gespeichert sowie wenn ddrescue beendet oder unterbrochen wird. Im Falle eines Absturzes können Sie die Rettung mit wenig Nachkopieren fortsetzen. Das Intervall zwischen den Speicherungen variiert je nach Größe der Protokolldatei zwischen 30 Sekunden und 5 Minuten (größere Protokolldateien werden in längeren Intervallen gespeichert).

Dieselbe Protokolldatei kann auch für mehrere Befehle verwendet werden, die verschiedene Bereiche der Eingabedatei kopieren, und für mehrere Wiederherstellungsversuche über verschiedene Teilmengen. Siehe dieses Beispiel:

Retten Sie zuerst den wichtigsten Teil der Disc. ddrescue -i0 -s50MiB / dev / hdc hdimage-Protokolldatei ddrescue -i0 -s1MiB -d -r3 / dev / hdc hdimage-Protokolldatei

Dann retten Sie einige wichtige Disc-Bereiche. ddrescue -i30GiB -s10GiB / dev / hdc hdimage-Protokolldatei ddrescue -i230GiB -s5GiB / dev / hdc hdimage-Protokolldatei

Jetzt rette den Rest (kopiert nicht, was bereits getan wurde). ddrescue / dev / hdc hdimage-Protokolldatei ddrescue -d -r3 / dev / hdc hdimage-Protokolldatei

Tommie C.
quelle
Ist die Festplatte überhaupt noch unter demselben Gerätenamen verbunden? Außerdem sollten Sie ddrescuenur benötigen , wenn die Festplatte fehlerhafte Blöcke aufweist, die nicht durch eine "Kabeltrennung" verursacht würden. Wenn Sie Kabelprobleme haben, versuchen Sie einfach ein anderes Kabel ...
Frostschutz
@TommieC. Kannst du es ddrescuelog -t YourLog.txtin einem anderen Terminal versuchen ?
Simply_Me
@Simply_Me Bitte lesen Sie die aktualisierte Frage, die zwei Ergebnisse widerspiegelt.
Tommie C.
@frostschutz Weitere Informationen finden Sie in der aktualisierten Frage. Die unterbrochene Kabelverbindung trat beim Schreiben der Festplatte auf und verursachte Probleme mit der Partitionstabelle. Das Kabel selbst ist unbeschädigt.
Tommie C.
Die Kabeltrennung führt normalerweise zu logischen Fehlern (dh die Daten auf der Festplatte sind nicht zu 100% gültig), verursacht jedoch keine physischen Probleme mit dem Laufwerk - es sei denn, Sie haben es gleichzeitig gelöscht. ddrescuekann nur versuchen, physische Probleme zu beheben und hilft bei logischen Fehlern überhaupt nicht. Für letztere versuchen fsckoder gleich ..
Udo G

Antworten:

6

Obwohl die Frage vor 10 Monaten gestellt wurde, könnte die Antwort relevant sein, da der Wiederherstellungszyklus abhängig von einigen Faktoren möglicherweise noch läuft! Kein Wortspiel beabsichtigt.

Der Grund dafür ist, dass eine Zeitschätzung fast unmöglich ist, aber manchmal kann man sich eine grobe Vorstellung wie folgt machen. Einer der offensichtlichsten Gründe ist, dass Sie nicht vorhersagen können, wie lange das Laufwerk zum Lesen eines fehlerhaften Sektors benötigt. Wenn Sie möchten, dass ddrescue jeden einzelnen Sektor liest und erneut versucht, kann dies sehr lange dauern. Zum Beispiel führe ich derzeit eine Wiederherstellung auf einem kleinen 500-GB-Laufwerk durch, das seit über 2 Wochen läuft, und ich habe möglicherweise noch ein paar Tage Zeit. Aber meine ist eine kompliziertere Situation, weil das Laufwerk verschlüsselt ist und um alles erfolgreich zu lesen, muss ich sicherstellen, dass alle Sektoren mit Partitionstabellen, Bootsektoren und anderen wichtigen Teilen der Festplatte abgerufen werden. Ich benutze zusätzlich zu ddrescue Techniken, um meine Chancen für alle schlechten Sektoren zu verbessern. IOW,

Mit der Schätzung von "Schleifen" meinen Sie die Anzahl der Wiederholungsversuche anhand der von Ihnen verwendeten Parameter. Wenn Sie "Gesamtzahl der Durchgänge" meinen, können Sie dies leicht feststellen, indem Sie hier den Algorithmus lesen. > Man ddrescue </ Algorithmus: Wie ddrescue die Daten wiederherstellt

Ich werde speziell mit den Zahlen in den von Ihnen angegebenen Screenshots sprechen. In anderen Situationen können andere Faktoren zutreffen. Nehmen Sie diese Informationen als allgemeine Richtlinie.

In dem von Ihnen bereitgestellten Beispiel sehen Sie sich den laufenden Statusbildschirm von ddrescue an. Wir erhalten die gesamte "Schätzung" des Problems (Rettungsdomäne) durch "Fehlergröße". Dies ist die Datenmenge, die "noch zu lesen" ist. Im Beispiel sind es 345 GB. Die nächste Zeile rechts unten ist "Durchschnittsrate". In der Stichprobe sind es 583 kb / s

Wenn die "Durchschnittsrate" nahezu konstant bleiben soll, haben Sie noch 7 Tage Zeit. 345 GB / (583 kb * 60 * 60 * 24) = 7,18 Das Problem ist jedoch, dass Sie sich nicht auf die 583 kb / s verlassen können. In der Tat wird das Laufwerk langsamer, da es immer härtere Bereiche liest und mehr Wiederholungsversuche durchführt. Die Zeit bis zum Ende nimmt also exponentiell zu. All dies hängt davon ab, wie stark das Laufwerk beschädigt ist.

Das von Ihnen bereitgestellte Beispiel zeigt, dass ein "erfolgreicher Lesevorgang" vor über 10 Stunden stattgefunden hat. Das heißt, dass es über 10 Stunden lang nicht wirklich etwas von der Fahrt bekommt. Dies zeigt, dass Ihr Laufwerk möglicherweise Daten im Wert von 345 GB (oder einen Teil davon) enthält. Das sind sehr schlechte Nachrichten für Sie.

Im Gegensatz dazu wurde mein zweites 500-GB-Laufwerk, bei dem gerade "SMART" -Fehler aufgetreten waren, von Festplatte zu Festplatte kopiert (mit Protokolldatei auf einem anderen Laufwerk), und der gesamte Vorgang dauerte etwa 8 bis 9 Stunden. Der letzte Teil wurde langsamer. Aber das ist immer noch erträglich. Während das sehr schlechte Laufwerk, wie oben erwähnt, weit über 2 Wochen an 500 GB arbeitet und noch etwa 4-5% übrig sind, um sich zu erholen.

HTH und YMMV

LMSingh
quelle