Ich habe ddrescue gestartet, um ein defektes 2-TB-WD-Laufwerk von meinem NAS wiederherzustellen. Obwohl ich eine Protokolldatei angegeben hatte, führte ich Ubuntu leider im Testmodus von einem bootfähigen Flash-Laufwerk aus und schrieb die Protokolldatei nicht auf ein separat gemountetes Laufwerk. Als also der Strom bei etwa 11 % ausfiel, stellte ich fest, dass ich meine Protokolldatei verloren hatte.
In Kapitel 14 des Handbuchs sah es so aus, als ob der Generierungsmodus funktionieren könnte, also habe ich Folgendes ausgeführt:
ddrescue --generate-mode infile outfile mapfile
Das Laufwerk, auf dem ich die Daten wiederherstelle, ist brandneues Laufwerk und daher hatte ich Hoffnung, dass es klappen würde, da auf dem Laufwerk keine alten Daten vorhanden waren.
Ich verwende jetzt Ubuntu, das auf einer SSD installiert ist, also habe ich die generierte Map-Datei verwendet, um ddrescue erneut mit Folgendem auszuführen:
ddrescue -f -n -r1 /dev/sda /dev/sdb /tmp/ddrescue.log
Dies scheint größtenteils funktioniert zu haben, da der Wiederherstellungsprozess bei etwa 11,5 % genau dort neu gestartet wurde, wo er aufgehört hatte. Meine Sorge ist jedoch, dass ddrescue vor dem Absturz einen Lesefehler erkannt und etwa 20 MB nicht getrimmte Blöcke angezeigt hatte, aber beim Starten des Prozesses mit der neuen Map-Datei waren 0 Lesefehler und 0 nicht getrimmte Blöcke markiert. Jetzt, nach 8 Stunden Betrieb, zeigt es 2 Fehler und 29696 B nicht getrimmte Blöcke an, aber ich gehe davon aus, dass dies neue Lesefehler sind, da ddrescue die alten Datenteile, die bereits als gerettet markiert waren, nicht durchsieht.
Wird ddrescue den ursprünglichen Lesefehler bei einem nachfolgenden Durchgang entdecken, oder ist dieser endgültig verschwunden und die einzige Möglichkeit, diese Blöcke zu finden und erneut zu versuchen, besteht darin, mit einer neuen Map-Datei ganz von vorne zu beginnen?
Ich möchte so viel wie möglich, wenn nicht sogar alles, vom alten Laufwerk wiederherstellen und bin daher bereit, bei Bedarf von vorne zu beginnen.
Vielen Dank für jede Hilfe hierzu.
Antwort1
Um --generate-mode
:
Ddrescue kann in einigen Fällen eine ungefähre Kopie
mapfile
voninfile
und die (Teil-)Kopie in erstellenoutfile
, die fast so gut ist wie eine genaue Kopiemapfile
. Dies geschieht, indem einfach angenommen wird, dass Sektoren, die nur Nullen enthalten, nicht gerettet wurden.
(Quelle)
Beim ersten Versuch wurde der Sektor der Zielfestplatte, der dem fehlerhaften Sektor der Quellfestplatte entsprach, nicht beschrieben. Ebenso wurden die Sektoren, die dem übersprungenen Sektor entsprachen, nicht beschrieben. Vorausgesetzt, die Zielfestplatte gibt alle Nullen aus den noch nicht beschriebenen Sektoren zurück, ddrescue --generate-mode
klassifizierte der spätere Versuch alle diese Fragmente als „nicht gerettet“.
--generate-mode
kann nicht sagen, ob ein Sektor voller Nullen ist, weil er einem nicht getesteten Sektor einer Quellfestplatte entspricht, nicht getrimmt, nicht gescrapt oder ein fehlerhafter Sektor ist; oder einem gesunden Sektor, der kopiert wurde, aber zufällig nur Nullen enthält. Es weiß nur, dass ein Sektor voller Nullen möglicherweise outfile
nicht gelesen wurde, währendVielleichtes kann gelesen werden. --generate-mode
klassifiziert einen solchen Sektor beim Erstellen eines ungefähren einfach als nicht versucht mapfile
, sodass ein Future ddrescue
, das tatsächlich verwendet, mapfile
versucht (oder erneut versucht), den Sektor zu lesen.
Das Ultimate ddrescue
liest möglicherweise einige Sektoren unnötigerweise erneut; Sektoren, die gelesen wurden, aber zufällig nur Nullen enthielten und daher --generate-mode
wie nicht ausprobierte Sektoren aussahen. Dies ist normalerweise nur eine kleine Unannehmlichkeit, wenn überhaupt.
Sie müssen nicht von vorne beginnen, es sei denn, es gab beim Start Sektoren auf der Zielfestplatte, die nicht auf Null gesetzt waren. Solche Sektoren würden --generate-mode
den Eindruck erwecken, dass es sich um gerettete Daten handelt, auch wenn dies nicht der Fall ist. Sie glauben, dass Ihre Zielfestplatte (als brandneue Festplatte) nur Nullen enthält. Wenn Ihre Annahme richtig ist, müssen Sie nicht von vorne beginnen.
Wenn Ihre Annahme richtig ist, wurde der fehlerhafte Sektor aus dem ersten Versuch als „nicht gerettet“ klassifiziert --generate-mode
und Ihr ultimativer (immer noch laufender) Rechner ddrescue
hat entweder versucht oder ist dabei, ihn erneut zu lesen.