Recover korrupte zip oder gzip-Dateien?
Frage
Die gängigste Methode für komprimierte Dateien korrumpieren ist versehentlich eine ASCII-Modus FTP-Übertragung zu tun, die ein verursacht viele-zu-eins Wegwerfen von CR und / oder LF-Zeichen.
Natürlich gibt es Informationsverlust, und der beste Weg, um dieses Problem zu beheben ist, wieder zu übertragen, in FTP-Binär-Modus.
Wenn jedoch das Original verloren geht, und es ist wichtig, wie erzielbare sind die Daten?
[Eigentlich weiß ich schon, was ich denke, ist die beste Antwort (es ist sehr schwierig, aber manchmal möglich - werde ich später mehr schreiben) und die gemeinsamen Nicht-Antworten (viele off-the-shelf-Programme für CRCs Reparatur ohne Daten zu reparieren), aber ich dachte, es wäre interessant, diese Frage während der Stackoverflow beta-Phase zu testen und sehen, ob jemand auf dem erfolgreichen Wiederherstellungspfad oder entdeckt Werkzeuge, die ich weiß nicht, über.]
Lösung
Von Bukys Software
Etwa 1 von 256 Bytes ist bekannt wird beschädigt, und die Korruption nur in Bytes auftreten mit den bekannten value '\ 012'. So die Byte-Fehlerrate beträgt 1/256 (0,39% des Eingangs) und 2/256 Bytes (0,78% des Eingangs) ist verdächtig. Da aber nur drei Bits pro zertrümmert Byte betroffen sind, die Bitfehlerrate ist nur 3 / (256 * 8): 0,15% ist schlecht, 0,29% suspekt ist.
...
Ein Fehler in dem komprimierten Eingang stört die Dekompression für alle nachfolgenden Bytes ... Die Tatsache, dass der dekomprimierte Ausgang so schnell erkennbar schlecht ist Ursache für Hoffnung - die Suche nach dem richtigen Antwort kann falsche Antworten identifizieren schnell.
Schließlich verschiedene Techniken waren kombiniert erfolgreich zu extrahieren vernünftige Daten aus diesen Dateien:
- Domain-spezifische Analyse der Felder und Strings in Anführungszeichen
- Maschine aus früheren Daten mit geringer Wahrscheinlichkeit von Schäden zu lernen
- Toleranz für Dateischäden durch andere Ursachen (z Platte voll, während logging)
- Die Look-Ahead zum Führen der Suche entlang der höchsten Wahrscheinlichkeit Wege
Diese Techniken identifizieren 75% der notwendige Reparaturen mit Sicherheit und der Rest sind erforscht höchste Wahrscheinlichkeit zuerst, so dass plausible Rekonstruktionen sind sofort identifiziert.
Andere Tipps
Sie könnten versuchen, ein kleines Skript zu schreiben mit CRLFs alle den CRs zu ersetzen (die Richtung des trashing angenommen wurde CRLF zu CR), sie nach dem Zufall pro Block tauschen, bis die richtige crc hatte. Unter der Annahme, dass die Daten nicht besonders groß waren, denke ich, dass nicht alle Ihre CPU bis zum Wärmetod des Universums verwenden könnte abzuschließen.
Da es bestimmten Informationsverlust ist, ich weiß nicht, dass es ein besserer Weg gibt. Der Verlust in der Tschechischen Republik zu CRLF Richtung könnte etwas leichter sein, zurück zu rollen.