Setzen Sie ddrescue aus einer beschädigten Protokolldatei fort

Setzen Sie ddrescue aus einer beschädigten Protokolldatei fort

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:

  • 0xC5651400ist der Anfang des neuen Blocks, der durch die Summierung der Startposition des vorherigen Blocks in Zeile 4091 0xC5651200und der Größe dieses Blocks ermittelt wird 0x00000200.
  • ?Dies bedeutet, dass die Blöcke, die bei beginnen 0xC5651400, 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/sdb3Partition und dem Start-Offset in Zeile 4092 (also 0xC5651400).

Die Größe Ihrer dev/sdb3Partition können Sie durch Terminalbefehle wie fdisk -loder 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.

verwandte Informationen