Ich habe ddrescue vor einigen Tagen in meiner 180-GB-Partition ausgeführt, aber nach drei Tagen (und 99,91 % Rettung und beim letzten Mal in Phase 3) ist das System eingefroren, sodass ich den Computer durch Gedrückthalten der Ausschalttaste ausgeschaltet habe.
Beim Einschalten habe ich eine Sicherungskopie der Image-Datei und der Protokolldatei erstellt, die Protokolldatei wurde jedoch nicht vollständig kopiert. Es wurde angezeigt, dass beim Kopieren ein Fehler aufgetreten ist, aber 104 KB von 106 KB wurden aus der Protokolldatei kopiert (seltsame Sache).
Und als ich den Befehl ddrescue erneut ausführte, erschien die Meldung „Fehler in Mapfile discoC.Logfile, Zeile 4092“.
Befehl:
sudo ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
Das ist meinunvollständiges Logfile auf PasteBin, die Zeile 4092 ist die letzte. Dies ist ein Ausschnitt aus der Protokolldatei:
# Mapfile. Created by GNU ddrescue version 1.23
# Command line: ddrescue -d -r0 /dev/sdb3 discoC.img discoC.Logfile
# Start time: 2021-12-15 01:56:33
# Current time: 2021-12-18 20:11:51
# Scraping failed blocks... (forwards)
# current_pos current_status current_pass
0xC5A65E00 / 1
# pos size status
0x00000000 0x00003400 -
0x00003400 0x00000200 +
0x00003600 0x00000800 -
0x00003E00 0x00000800 +
0x00004600 0x00000200 -
0x00004800 0x00000200 +
0x00004A00 0x00000400 -
....... (Lot of - and +)........
0xC564C600 0x00000400 +
0xC564CA00 0x00000600 -
0xC564D000 0x00000200 +
0xC564D200 0x00000200 -
0xC564D400 0x00000800 +
0xC564DC00 0x00000400 -
0xC564E000 0x00000600 +
0xC564E600 0x00000200 -
0xC564E800 0x00001A00 +
0xC5650200 0x00000200 -
0xC5650400 0x00000E00 +
0xC5651200 0x00000200 -
0xC
Können Sie mir helfen, damit der Vorgang von dort aus fortgesetzt werden kann?
Antwort1
Entsprechendhttps://www.electric-spoon.com/doc/gddrescue/html/Mapfile-structure.htmlDas Mapfile (Logfile) lässt sich mit einem Texteditor ganz einfach interpretieren und bearbeiten.
Ich wäre geneigt, eine Kopie davon zu erstellen und die Zeilen 4091 und 4092 zu entfernen. Ich gehe davon aus, dass ddrescue dadurch am letzten protokollierten Punkt weitermachen kann.
Es scheint wirklich sehr oft zu versagen. Ich frage mich, ob man einen Datenblock schneller erfassen kann, wenn man es vom Ende her rückwärts ausführt (also den Schalter -R hinzufügt). (Es kann nicht schaden, das zu versuchen.)
Antwort2
Entschuldigen Sie, dass ich die Frage so spät lese.
Es wäre einfach, für die fehlende Zeile 4092 etwas Gültiges wiederherzustellen:
0xC5651400 <remaining-size> ?
Wo:
0xC5651400
ist der Anfang des neuen Blocks, der durch die Summierung der Startposition des vorherigen Blocks in Zeile 40910xC5651200
und der Größe dieses Blocks ermittelt wird0x00000200
.?
Dies bedeutet, dass die Blöcke, die bei beginnen0xC5651400
, noch nicht ausprobiert wurden und daher ein Klonen an ihnen versucht werden muss.<remaining size>
: siehe unten.
So berechnen Sie den Wert für <remaining size>
:
- wenn Ihre Logdatei eine Zeile 4093 enthält: die Differenz zwischen dem Start-Offset in Zeile 4093 und dem berechneten Start-Offset in Zeile 4092 (also
0xC5651400
), in hexadezimaler Form - oder, wenn Zeile 4093 nicht vorhanden ist: die Differenz zwischen der Größe Ihrer
dev/sdb3
Partition und dem Start-Offset in Zeile 4092 (also0xC5651400
).
Die Größe Ihrer dev/sdb3
Partition können Sie durch Terminalbefehle wie fdisk -l
oder durch Starten eines Klonvorgangs in eine andere Image-Datei und ohne Protokolldatei in eine andere Protokolldatei ermitteln. ddrescue sollte eine Meldung wie „N Bytes werden kopiert“ anzeigen. Möglicherweise müssen Sie nach Sektorgröße (z. B. 512) teilen und in Hexadezimalzahlen umwandeln.