2008-09-12 11 views
5

Die gängigste Methode zum Korrigieren von komprimierten Dateien besteht darin, versehentlich eine FTP-Übertragung im ASCII-Modus durchzuführen, wodurch CR- und/oder LF-Zeichen um ein Vielfaches gelöscht werden.Beschädigte ZIP- oder GZIP-Dateien wiederherstellen?

Offensichtlich gibt es Informationsverlust, und der beste Weg, um dieses Problem zu beheben, ist die erneute Übertragung im binären FTP-Modus.

Allerdings, wenn das Original verloren ist, und es ist wichtig, wie wiederherstellbar sind die Daten?

[Eigentlich weiß ich bereits, was ich denke, ist die beste Antwort (es ist sehr schwierig, aber manchmal möglich - ich poste später mehr), und die gemeinsamen Nicht-Antworten (viele Standardprogramme für die Reparatur CRCs, ohne Daten zu reparieren), aber ich dachte, es wäre interessant, diese Frage während der Beta-Phase von StackOverflow auszuprobieren und zu sehen, ob jemand anderes den erfolgreichen Recovery-Pfad durchlaufen oder Tools entdeckt hat, von denen ich nichts weiß.]

Antwort

4

Von Bukys Software

Ungefähr 1 in 256 Bytes bekannt ist beschädigt zu sein, und die Korruption bekannt nur in Bytes mit dem Wert '\ 012' auftritt. So ist die Bytefehlerrate 1/256 (0,39% der Eingabe) und 2/256 Bytes (0,78% der Eingabe) sind verdächtig. Da aber nur drei Bits pro Byte betroffen sind, ist die Bitfehlerrate nur 3/(256 * 8): 0,15% ist schlecht, 0,29% ist verdächtig.

...

ist ein Fehler in der komprimierten Eingang stört den Dekomprimierungsvorgang für alle nachfolgenden Bytes ... Die Tatsache, dass die dekomprimiert Ausgabe erkennbar schlecht so schnell ist, ist Ursache für Hoffnung - Eine Suche nach der richtigen Antwort kann schnell falsche Antworten identifizieren.

Letztlich verschiedene Techniken waren erfolgreich kombiniert vernünftige Daten aus diesen Dateien zu extrahieren:

  • Domänenspezifische Analyse von Feldern und Strings in Anführungszeichen
  • Maschine aus früheren Daten mit geringer Wahrscheinlichkeit von Schäden Lernen
  • Toleranz für Dateischäden aufgrund anderer Ursachen (zFull Disk während logging)
  • Lookahead für entlang der höchsten Wahrscheinlichkeit die Suchpfade Führungs

Diese Techniken 75% der mit Sicherheit notwendigen Reparaturen zu identifizieren, und der Rest sind höchsten wahrscheinlichkeits erforscht zuerst, so dass plausible Rekonstruktionen sofort identifiziert werden.

1

Sie könnten versuchen, ein kleines Skript zu schreiben, um alle CRs durch CRLFs zu ersetzen (unter der Annahme, dass die Richtung des Löschens CRLF zu CR ist), indem Sie sie zufällig pro Block austauschen, bis Sie den richtigen CRC hatten. Unter der Annahme, dass die Daten nicht besonders groß waren, schätze ich, dass möglicherweise nicht die gesamte CPU verbraucht wird, bis der Hitzetod des Universums abgeschlossen ist.

Da gibt es definitiv Informationsverlust, ich weiß nicht, dass es einen besseren Weg gibt. Ein Verlust in der CR- in CRLF-Richtung könnte etwas leichter rückgängig gemacht werden.