Ich hatte vor ungefähr 5 Tagen einen Festplattenabsturz von 500 GB. Ich habe ddrescue
die wichtige Partition vor ein paar Tagen verwendet und sie ist nun seit fast 2 Tagen auf "Fehlerhafte Blöcke trimmen".
Ursprünglicher Befehl:
ddrescue -n /dev/rdisk1s2 /Volumes/OSXBackup/rdisk1s2.img /Volumes/OSXBackup/rdisk1s2.log
Aktueller Output:
Initial status (read from logfile)
rescued: 248992 MB, errsize: 1007 MB, errors: 15867
Current status
rescued: 249021 MB, errsize: 978 MB, current rate: 17408 B/s
ipos: 44405 MB, errors: 15866, average rate: 2784 B/s
opos: 44405 MB, time from last successful read: 0 s
Trimming failed blocks...
Der ursprüngliche Befehl verwendete den ddrescue -n
Parameter, und ich habe den Prozess nach Bedarf einige Male neu gestartet (und er schien jedes Mal genau dort anzukommen, wo er aufgehört hat).
Gibt es eine Möglichkeit, diesen Prozess zu beschleunigen?
Edit: Sechs Stunden später ist dies der aktuelle Status:
rescued: 249079 MB, errsize: 920 MB, current rate: 409 B/s
ipos: 39908 MB, errors: 15851, average rate: 2698 B/s
opos: 39908 MB, time from last successful read: 0 s
Trimming failed blocks...
Es sieht so aus, als würden "Fehler" unglaublich langsam abwärts zählen, während ipos / opos abwärts zählen, wie viele Daten es durchlaufen muss, und es scheint mit einer Geschwindigkeit von 750 MB / Stunde zu arbeiten. Bei dieser Geschwindigkeit dauert es ca. 53 Stunden. Huch.
Edit # 2: Zwei Tage später läuft noch. Es gibt jedoch Hoffnung. Es wurde über den Abschnitt "Fehlgeschlagene Blöcke abschneiden" hinaus in die nächste Phase "Fehlgeschlagene Blöcke aufteilen" verschoben. Wenn überhaupt, sollte man davon absehen, dass dies definitiv lange dauert, wenn es sich um eine große Menge von Daten / Fehlern handelt. Meine einzige Hoffnung ist, dass ich einige wichtige Daten erfolgreich wiederherstellen kann, wenn alles gesagt und getan ist.
rescued: 249311 MB, errsize: 688 MB, current rate: 0 B/s
ipos: 26727 MB, errors: 15905, average rate: 1331 B/s
opos: 26727 MB, time from last successful read: 20 s
Splitting failed blocks...
quelle
-M
nur für den Fall, dass die Neustarts und das Dist-Upgrade heute Morgen etwas Durcheinander gebracht haben.)Antworten:
Ich habe festgestellt, dass die Verwendung der
-n
Option (keine Teilung) zusammen mit-r 1
(einmalige Wiederholung) und der Einstellung-c
(Clustergröße) auf einen kleineren Wert hilfreich sein kann.Mein Eindruck ist, dass der Aufteilungsschritt sehr langsam ist, da
ddrescue
die beschädigten Bereiche immer wieder aufgespalten werden. Dies nimmt viel Zeit inddrescue
Anspruch, da versucht wird, sehr kleine Teile der Daten wiederherzustellen. Also, ich ziehe zu verwenden-n
(no-split) zusammen mit-c 64
,-c 32
,-c 16
, asoWahrscheinlich sollte die
-n
(no-split) immer für einen ersten Durchgang in Vorwärts- und Rückwärtsrichtung verwendet werden. Es scheint, dass das Klonen umso langsamer vonstatten geht, je mehr Daten aufgeteilt wurden, obwohl ich mir nicht sicher bin. Ich gehe davon aus, dass je größer die nicht behandelten Bereiche sind,ddrescue
desto besser ist es, wenn sie erneut ausgeführt werden, da mehr zusammenhängende Sektoren geklont werden sollen.Da ich eine Protokolldatei verwende, zögere ich nicht, den Befehl mit Ctrl+ abzubrechen, Cwenn die Datenlesegeschwindigkeit um zwei verringert wird.
Ich benutze auch den
-R
(Rückwärts-) Modus und nach einem ersten Durchgang kann ich oft schneller rückwärts als vorwärts lesen.Mir ist nicht klar, wie bereits wiederholte Sektoren (
-r N
) behandelt werden, wenn derddrescue
Befehl erneut ausgeführt wird, insbesondere wenn Vorwärts- (Standard) und Rückwärts- (-R
) Klonbefehle abgewechselt werden. Ich bin nicht sicher, ob die Anzahl der Versuche in der Protokolldatei gespeichert ist und die Arbeit wahrscheinlich wieder unbrauchbar gemacht wird.Wahrscheinlich kann das
-i
Flag (Eingabeposition) auch helfen, die Dinge zu beschleunigen.quelle
Es kann sehr schwer sein, den Fortschritt zu sehen
ddrescue
, aber es gibt einen weiteren Befehl namensddrescuelog
.Ein einfacher Befehl
ddrescuelog -t YourLog.txt
gibt diese netten Infos aus:Du kannst es sogar benutzen, während
ddrescue
es läuft ...quelle
errsize: 289420 MB, errors: 34926 ( 7.23%) non-trimmed: 288130 MB, in 105407 area(s) ( 7.20%) non-split: 1243 MB, in 185 area(s) ( 0.03%) bad-sector: 47490 kB, in 92728 area(s) ( 0.00%)
(... aber vielen Dank für den Befehl!Eine weitere Möglichkeit, den Fortschritt von ddrescue zu überwachen (zumindest unter Linux), ist die Verwendung von strace.
Ermitteln Sie zunächst die PID für den ddrescue-Prozess mit "ps aux | grep ddrescue".
Führen Sie dann "strace" gegen diesen Prozess aus. Du wirst etwas sehen wie:
...und so weiter. Die Ausgabe ist schnell und hässlich, also leite ich sie durch "grep", um das herauszufiltern, was mir wichtig ist:
In diesem Beispiel entspricht "1702212676608" der Datenmenge, die noch auf der 2-TB-Festplatte verarbeitet werden muss, die Sie retten möchten. (Yeah. Autsch.) Ddrescue spuckt in seiner Bildschirmausgabe eine ähnliche Zahl aus - wenn auch "1720 GB".
strace bietet Ihnen einen VIEL höher granularen Datenstrom, den Sie untersuchen können. Dies ist eine weitere Möglichkeit, die Geschwindigkeit von ddrescue zu bewerten und ein Fertigstellungsdatum zu schätzen.
Es ist wahrscheinlich ein schlechter Plan, es ständig laufen zu lassen, da es mit ddrescue um die CPU-Zeit konkurrieren würde. Ich habe es auf "head" umgestellt, damit ich die ersten 10 Werte erfassen kann:
Hoffe das hilft jemandem.
quelle
strace -e lseek …
dafür - obwohlpv -d <pid>
schöner sein könnte.Wenn Sie den Großteil der Daten intakt erhalten möchten, können Sie die Extraktion beschleunigen. Wenn Sie jedoch wirklich so viele Daten wie möglich retten möchten, müssen Sie ddrecue an jedem einzelnen Punkt nibbeln lassen.
quelle
Ich habe herausgefunden, dass man mit dem -K-Parameter die Dinge beschleunigen kann. Nach allem, was ich gesehen habe, wenn ddrescue beim Ausführen mit der Option -n einen Fehler feststellt, wird versucht, eine feste Anzahl von Sektoren zu überspringen. Wenn es immer noch nicht lesen kann, springt es doppelt so groß. Wenn Sie große beschädigte Bereiche haben, können Sie einen großen K-Wert (z. B. 100 M) angeben, so dass das Springen auf einen Fehler beim ersten Mal größer wird und es einfacher wird, problematische Bereiche in der ersten Vergangenheit schnell zu vermeiden.
Übrigens gibt es eine wunderbare grafische Anwendung, um das Protokoll zu analysieren.
http://sourceforge.net/projects/ddrescueview/
quelle
In welchem Dateisystem der Festplatte speichern Sie das Rettungsimage und die Protokolldatei? Ich habe gerade die Erfahrung gemacht, dass das Retten einer internen 500-GB-Festplatte (über SATA verbunden) auf einem Laptop mit Linux Mint von einem USB-Stick, das Speichern des Rettungsimages und der Protokolldatei auf einer
exFat
formatierten USB-Festplatte, ziemlich langsam begann (1-2 MB / s). sec), aber nach ca. 250 GB wurde nur mit <100 KB / s gecrawlt. Es schien langsamer zu werden, je größer die Rettungsimagedatei wurde.Dann habe ich das Rettungsimage und die Protokolldatei an einen anderen temporären Ort verschoben, die USB-Festplatte mit dem
ext4
Dateisystem neu formatiert , die Dateien wieder darauf verschoben und den ddrescue-Prozess fortgesetzt - und jetzt läuft sie wieder mit 1-20 MB / s (schwankend) aber um die 7MB / sec im Durchschnitt)!Scheint
exFat
bei sehr großen Dateien (mehrere hundert Gigabyte) nicht sehr gut zu funktionieren.quelle
Für eine schnellere und schnellere Möglichkeit, die CD zu retten, können Sie eine sh-Skriptdatei verwenden und die Datei mit "sh filename.sh" ausführen. Diese Zeile wird angezeigt. Wiederholen Sie "sudo ddrescue" und "sleep 3" noch einige Male. Der Ruhezustand wird verwendet, um das Laufwerk einige Sekunden lang in den Ruhezustand zu versetzen. Dies kann aus verschiedenen Gründen hilfreich sein:
Das -r0 hat keine Antworten. Das -e +0 ist für das Beenden bei 1 Fehler. Die -T 1s wird mit 1 Sekunde fehlgeschlagenem Lesevorgang beendet. Es gibt Optionen, die als -d für direct und -n für no scrape verwendet werden können, was die Geschwindigkeit erhöhen kann.
Sie können -R nach dem Beenden mit der Option -A einmal verwenden, wodurch alle Fehlergrößen umgekehrt und beseitigt werden und der Vorgang rückwärts fortgesetzt wird. Bedeutet, dass Fehler anders gelesen werden.
quelle
dd_rhelp ist ein Shell-Skript, das dd_rescue verwendet "[...] auf Ihrer gesamten CD, ABER es wird versucht, die maximal gültigen Daten zu sammeln, bevor es jahrelang versucht, auf Gruppen von fehlerhaften Sektoren zuzugreifen".
Es ist ziemlich alt (2012), funktioniert aber immer noch. habe ddrescue noch nicht ausprobiert.
quelle