Als ich nur Windows kannte, hab ich gerne zidrav benutzt. Das war sehr hilfreich, wenn man z.B. eine große Datei runtergeladen hat, die jedoch irgendwie kaputt war.
Um nicht nochmal die komplette Datei zu laden, konnte man mit Zidrav von seiner kaputten Datei eine Signatur erstellen und diese jemandem geben, der noch eine vollständige Kopie der Datei hatte. Mit der Signatur wurde dann verglichen, an welchen Stellen sich die Dateien unterscheiden und daraufhin ein kleines Patchfile erzeugt.
Wendet man dieses dann auf seine kaputte Datei an, werden die unterschiedlichen Stellen angeglichen.
Trotz dass zidrav mittlerweile recht alt ist, konnte ich es unter Debian kompilieren, aber irgendwas funktionierte nicht richtig.
Heute fand ich eine Alternative in den Debian Repos: rdiff
Unlike most diff programs, librsync does not require access to both of the files when the diff is computed. Computing a delta requires just a short "signature" of the old file and the complete contents of the new file. The signature contains checksums for blocks of the old file. Using these checksums, rdiff finds matching blocks in the new file, and then computes the delta.
Beispiel
-rw-r--r-- 1 root root 6616022 Oct 8 20:25 original.avi
- Wir kopieren uns die Datei und machen sie unbrauchbar
cp original.avi corrupted.avi truncate -s 6600000 corrupted.avi
-rw-r--r-- 1 root root 6600000 Oct 8 22:00 corrupted.avi -rw-r--r-- 1 root root 6616022 Oct 8 20:25 original.avi
Öffnet man jetzt corrupted.avi, dann verweigert z.B. VLC die Wiedergabe mit der Fehlermeldung This AVI file is broken.
Und so repariert man sie:
- Signatur der kaputten Datei erstellen und in corrupted.sig speichern.
rdiff signature corrupted.avi corrupted.sig
- Patchfile erzeugen und in corrupted.patch speichern.
rdiff delta corrupted.sig original.avi corrupted.patch
- Den Patch auf die kaputte Datei anwenden und das Ergebnis als fixed.avi speichern.
rdiff patch corrupted.avi corrupted.patch fixed.avi
Voila!
-rw-r--r-- 1 root root 6600000 Oct 8 22:00 corrupted.avi -rw-r--r-- 1 root root 17383 Oct 8 22:01 corrupted.patch -rw-r--r-- 1 root root 38688 Oct 8 22:01 corrupted.sig -rw-r--r-- 1 root root 6616022 Oct 8 22:01 fixed.avi -rw-r--r-- 1 root root 6616022 Oct 8 20:25 original.avi 5e57b320f843564511b1b4bdd9b15be0 corrupted.avi 4b00077b79bfa89194966259367a1fc9 original.avi 4b00077b79bfa89194966259367a1fc9 fixed.avi