DDRescue-Protokolldatei ist nach 6-wöchiger Wiederherstellung beschädigt

650
Arnaud Paris

Ich habe DDRescue seit fast 2 Monaten auf einem 3-TB-Laufwerk ausgeführt. Ich hatte etwa 2,8 TB wiedergefunden, als das System abstürzte und die Protokolldatei, die ich verwendete, fehlerhaft war. Ich konnte einen Teil dieser Protokolldatei wiederherstellen, es besteht jedoch eine Lücke in den Sektoren des wiederhergestellten Protokolls, die dazu führt, dass DDRescue beim erneuten Starten einen Fehler zurückgibt. Hier ist ein Wetransfer-Link zum Anzeigen der Protokolldatei: https://we.tl/58aSOeCOJo

Ich habe versucht, die Protokolldatei zu bearbeiten, um die beschädigten Daten herauszunehmen. Da dies jedoch eine "Lücke" in der Sektronik der Sektoren schafft, scheint DDRescue das nicht zu mögen.

Vielen Dank für jede Hilfe, ich möchte wirklich vermeiden, DDRescue für weitere zwei Monate erneut laufen zu lassen, um dieses Laufwerk zu retten ...

0
Welchen Befehl verwenden Sie, wenn Sie ddrescue ausführen? Pimp Juice IT vor 6 Jahren 0
ddrescue -f -d -R -r3 / dev / sde / dev / sdf /mnt/somedir/logfiles/log3.log Arnaud Paris vor 6 Jahren 0
Hat jemand eine Idee, wie ich ddrescue von dem letzten Punkt an fortsetzen könnte, an dem es in der Protokolldatei endete? Welches scheint in Zeile 880828 zu sein, wo es "0x2BA923A0000 0x00010000 *" sagt Arnaud Paris vor 6 Jahren 0
"Ich habe versucht, die Protokolldatei zu bearbeiten, um die beschädigten Daten zu übernehmen" - wie haben Sie das gemacht? Das Löschen eines binären Speicherblocks reicht nicht aus, da die folgenden Zeilen nur halb gültig sind und frühere Zeilen wiederholen. Hast du sie auch gelöscht? Kamil Maciorowski vor 6 Jahren 0
Ja, ich habe versucht, die beschädigten Zeilen zu löschen, aber das hat nicht funktioniert. DDrescue würde sagen, dass in meiner Protokolldatei ein Problem mit der genauen Zeilennummer vorliegt, die ich gelöscht habe. Arnaud Paris vor 6 Jahren 0

1 Antwort auf die Frage

1
Kamil Maciorowski

Um diese Antwort für andere Benutzer mit ähnlichen Problemen zumindest teilweise nützlich zu machen, lassen Sie uns die entscheidenden Teile Ihres Protokolls hier anführen:

# Rescue Logfile. Created by GNU ddrescue version 1.18.1 # Command line: ddrescue -f -d -R -r3 /dev/sde /dev/sdf /mnt/somedir/logfiles/log3.log # Start time: 2017-08-14 10:22:44 # Current time: 2017-08-14 12:13:09 # Copying non-tried blocks... Pass 1 (backwards) # current_pos current_status 0x27BF0520000 ? # pos size status 0x00000000 0x02870000 + 0x02870000 0x001A0000 * 0x02A10000 0x00010200 + 0x02A20200 0x0005FE00 * # ... many lines here 0x2BA92360000 0x00040000 ? 0x2BA923A0000 0x00010000 * # binary garbage here 0xE4E1710000 0x00010000 * # ... many lines here 0x13D75970000 0x00000200 + 0x13D75970200 0x00 

Sie haben die Zeile unmittelbar vor dem Binärspeicher als die letzte gültige identifiziert. Er sagt, 0x2BA923A0000 0x00010000 *und es ist die Zeilennummer 880829 in Ihrem Fall. Es ist sinnvoll, weil die Zeilen hinter dem Müll niedrigere Positionen (erste Zahlen) haben, sie scheinen frühere Zeilen zu duplizieren.

Ich tat

<log3.txt head -n 880829 > log3new.txt 

und ausführen ddrescue(mit infileLoop-Gerät aus einer großen spärlichen Datei sollte es jedoch keine Rolle spielen). Es beschwerte sich über die Linie 583658.

Dies ist die Linie mit der Nachbarschaft:

# ... 0x186C6940000 0x00000200 + 0x186C6940200 A9520200 0x0001FE00 * # <- this line here 0x24AA9540000 0x00000200 + # ... 

Um dies zu beheben, sollten Sie den gesamten Bereich von 0x186C6940200bis abdecken 0x24AA9540000, so dass die Protokolldatei zusammenhängend ist. Die Länge ist 0x24AA9540000- 0x186C6940200= 0xC3E2BFFE00. Die gesamte Linie 583658 sollte sein:

0x186C6940200 0xC3E2BFFE00 ? 

wo ?bedeutet nicht erprobte Blöcke.

Ich habe eine Lösung mit gemacht

sed -i '583658s/.*/0x186C6940200 0xC3E2BFFE00 ?/' log3new.txt 

Die resultierende Protokolldatei ist gültig für ddrescue.


BEARBEITEN

Das Problem, das ich habe, ist, dass DDrescue den Eindruck hat, dass es nur 2041 GB wiederhergestellt hat, während der Absturz bei über 2800 GB lag und wie Sie sich vorstellen können, dass diese letzten 800 GB viele Wochen erholten.

Tatsächlich wissen wir nicht, ob es die gleichen 800 GB sind. Es gibt ein Tool ddrescueview (mit GUI, als ddrescueviewPaket in Ubuntu erhältlich), das Ihnen zeigt, wo genau diese nicht getesteten Blöcke sind, die wir eingeführt haben. Beachten Sie, dass sich die aktuelle Position an anderer Stelle befindet:

ddrescueview screenshot


Ich frage mich also, ob die Informationen nach dem Müll vielleicht etwas damit zu tun haben? Wie können wir es in die Protokolldatei aufnehmen?

Ich habe diesen Teil "nach dem Müll" isoliert, die letzten 129289 Zeilen:

tail -n 129289 log3.txt > extra.txt 

Dieser Befehl zeigt Ihnen Zeilen an, die in, extra.txtaber nicht in log3new.txt:

diff --suppress-common-lines extra.txt log3new.txt | grep -e '^<' 

Die Ausgabe ist

< 0x13D75970200 0x00 

Es bedeutet, dass nur die letzte (unvollständige) Zeile hinter dem Müll vor dem Müll im Original nicht vorhanden ist log3.txt. Sorry, es scheint mir log3new.txtschon das Beste zu sein, was man bekommen kann.

Danke Kamil, das war sehr hilfreich! Ich konnte die Protokolldatei ändern und von DDrescue akzeptieren lassen. Das Problem, das ich habe, ist, dass DDrescue den Eindruck hat, dass es nur 2041 GB wiederhergestellt hat, während der Absturz bei über 2800 GB lag und wie Sie sich vorstellen können, dass diese letzten 800 GB viele Wochen erholten. Ich frage mich also, ob die Informationen nach dem Müll vielleicht etwas damit zu tun haben? Wie können wir es in die Protokolldatei aufnehmen? Danke nochmal für deine Hilfe! Arnaud Paris vor 6 Jahren 0
@ArnaudParis Ich habe meine Antwort erweitert. Kamil Maciorowski vor 6 Jahren 0
Ich verstehe ... Ich denke, ich muss den Prozess von 2.04 TB neu starten und hoffe, dass diese 800 GB nicht die sind, die sich am längsten erholt haben. Nochmals vielen Dank für Ihre Erklärung. Dies macht den gesamten Prozess für mich so viel klarer. Eine weitere Frage, die ich zu all dem hatte, ist, dass die wiederherzustellende Festplatte Teil eines RAID-Arrays ist und alle Laufwerke in diesem Array 3 TB haben. Das Laufwerk, auf das ich kopiere, ist 4 TB, aber wenn ich das, was ich bisher kopiert habe, auf ein 3-TB-leeres Laufwerk übertragen möchte, um es an das ursprüngliche Laufwerk anzupassen, wäre es möglich, dies mit DDrescue zu tun? Arnaud Paris vor 6 Jahren 0
Und gibt es in DDrescue eine Option, die es mir erlaubt, zwei Antriebe Sektor für Sektor zu "vergleichen"? Arnaud Paris vor 6 Jahren 0
@ArnaudParis "Wenn ich das, was ich bis jetzt kopiert habe, auf ein 3-TB-Rohling übertragen möchte, um es dem ursprünglichen Laufwerk anzupassen, wäre es möglich, dies mit DDrescue zu tun?" -- Ja. Wenn die Festplatten gesund sind, dann wäre "dd" oder sogar "cat" die richtige Wahl, "ddrescue" ist jedoch die sichere Wahl. - "Und gibt es in DDrescue eine Option, mit der ich zwei Antriebe Sektor für Sektor" vergleichen "kann? - Das glaube ich nicht. Wenn Sie dieses 4-TB-Laufwerk mit dem neuen 3-TB-Laufwerk vergleichen möchten, nachdem Sie in dieses kopiert haben, verwenden Sie "cmp" mit der Option "-n". Die Anzahl der zu vergleichenden Bytes entspricht der genauen Kapazität des kleineren Laufwerks. Kamil Maciorowski vor 6 Jahren 0