Ich versuche, eine (MySQL-) Datenbank von einer abgestürzten Festplatte wiederherzustellen. Es gibt eine Reihe von aktuellen Dumps, bei denen es sich um beschädigte bz2-Dateien handelt. Da sich die Datenbank nicht häufig ändert, sollten die Speicherauszüge nahezu identisch sein. bzip2recover
Etwa 70-80% der Chunks wurden aus den Dateien wiederhergestellt, sodass die meisten, wenn nicht alle Daten wiederhergestellt werden konnten, indem die Überlappungen in den Dateien gefunden und zusammengefügt wurden. Zum Beispiel:
dump1: |-----------------|xxxxxxxxxxxxxxxx|------------------|
dump2: |-------------|----------------|xxxxxxxxxxxxxxxxxxxxxx|
dump3: |xxxxxxxxxxxxxxxxxxxxxx|---------------|xxxxxxxxxxxxxx|
hier kann ich feststellen, dass der erste Block in dump1 durch den zweiten in dump2 fortgesetzt wird, der durch den zweiten in dump3 fortgesetzt wird, der durch den dritten in dump1 fortgesetzt wird. Durch das Zusammenfügen dieser vier Dateien habe ich die Daten wiederhergestellt.
Das Problem ist, dass es Tausende von Dateien gibt (ich habe zehn Speicherauszüge mit jeweils ~ 400 1M-Blöcken). Gibt es ein Tool, das diesen Prozess oder zumindest Teile davon automatisieren könnte (wie ein Linux-Befehl, der nach der längsten Überlappung zwischen dem Ende einer Datei und dem Anfang einer anderen sucht)?
bzip2recover
eine CRC32-Prüfung durch, bevor die Chunks extrahiert werden. Das Bild ist etwas irreführend: Ich kenne den Datenbereich bzip2
nicht genau, teile die Datei vor der Komprimierung in ungefähr (aber nicht genau) 900 KB lange Blöcke auf, bzip2recover
extrahiere alle diese Blöcke und dekomprimiere die gültigen. Ich kenne also die gültigen Daten und ihre grobe Position, aber ich kenne nicht die genaue Länge der ungültigen Blöcke (sonst wäre dies viel einfacher).