Prüfsumme für die Neuerstellung der Datei

778
Damon

Gibt es eine Dateiprüfsumme, die speziell für die Wiederherstellung einer einzelnen Datei (Archiv) mit Datenbeschädigung entwickelt wurde? So einfach wie ein Hash, mit dem die Datei wiederhergestellt werden kann

Ich versuche, einige Backups von Privat- und Geschäftsdateien (nicht Mediendateien) zu archivieren, indem ich sie komprimiere und datiere. Das größte Archiv läuft derzeit etwa 250 GB. Nachdem ein Archiv erstellt wurde, habe ich eine MD5-Prüfsumme darauf erstellt, das Archiv auf ein anderes Laufwerk übertragen, dann mit dem MD5 überprüft, ob Dateien korrekt übertragen wurden, und die MD5-Hashes mit den Archiven für die spätere Überprüfung gespeichert. Ich habe vor, diese Backups 1-2-mal pro Jahr zu archivieren und sie auf Budget und Festplatte zu speichern.

Aktuelles Archivformat ist "Zipx" mit höchsten Einstellungen.

Angesichts des Informationsvolumens von etwa 1-2 TB pro Jahr sehe ich vor, dass es mit einer Art Datenkorruption zu tun hat; Diese Dateien befinden sich insbesondere auf Consumer-Laufwerken. Hinzu kommt, dass Backups von Laufwerk zu Laufwerk, auf Band und umgekehrt übertragen werden, sodass ein anfängliches 250-GB-Archiv tatsächlich viele Terabytes an geschriebenen und gelesenen Daten enthalten kann, was das Risiko einer Datenbeschädigung erhöht. Die Überprüfung von MD5s nach jeder Übertragung erhöht die Zeit, da die MD5-Prüfung E / A-begrenzt ist. Eine MD5-Prüfung in einem 250-GB-Archiv erfordert eine lange Zeit, multipliziert mit allen Archiven, und MD5s werden zwangsläufig nicht so oft geprüft, wie sie es brauchen.

Die Annahmen sind also:

  1. Daten werden beschädigt
  2. Wir werden erst danach erfahren.
  3. Aufgrund von Budgeteinschränkungen und des Fehlens von "geschäftskritisch" verfügen wir nicht über mehrere Kopien derselben Sicherungsarchive, sondern nur über verschiedene Iterationen von Sicherungen.
  4. Wir möchten die Kopien unserer Backups minimieren und gleichzeitig vor Datenbeschädigung schützen.
  5. Wenn ein oder zwei Dateien in einem Archiv beschädigt werden, verlieren wir die Daten, wenn wir versuchen, die Daten wiederherzustellen. das Leben geht weiter. Dies ist keine missionskritische Sache.
  6. Die Archive sind ein sekundäres Backup und werden hoffentlich nicht mehr als ein paar Mal in einem Jahrzehnt oder weniger verwendet. Eine Live-Sicherung ist nicht komprimiert.

Wie schützen wir uns mit dieser Annahme vor der Datenkorruption?

Wenn Sie den MD5-Hash speichern, können Sie nur wissen, ob die aktuellen Daten mit den Originaldaten übereinstimmen oder nicht. Es erlaubt niemandem, die Daten zu reparieren oder in irgendeiner Weise zu helfen. Das heißt, wenn ich aus einem Backup wiederherstellen muss und Daten auf der Datei oder den Dateien, die ich benötige, beschädigt wurde, ist ein MD5 praktisch unbrauchbar.

Gibt es also eine Prüfsumme, die speziell dafür ausgelegt ist, Daten nicht nur zu überprüfen, sondern auch zu reparieren? Ein bisschen wie ECC für Speicher, aber für Dateien?

Hinweis: Ich habe Parchive gefunden, scheint aber nicht aktuell und zuverlässig verwendbar zu sein. Auch wenn mir vielleicht nicht gefällt, wie sie Dinge implementiert haben, ist im Allgemeinen genau das, was ich suche, aber nicht finden kann. Gibt es etwas parchivistisches, das "serienreif" ist?

Update: Es scheint, dass einige Archivformate die Wiederherstellung unterstützen, obwohl das einzige Mainstream- Format WinRAR zu sein scheint. Es wäre vorzuziehen, nicht einfach für diese eine Option in ein Format eingeschlossen zu werden, da die meisten Archivierungsformate (75% +/- in der verknüpften Liste) die Wiederherstellung scheinbar nicht unterstützen.

1
ECC fügt Redundanz hinzu, während Kompressoren dazu neigen, diese auf ein Minimum zu reduzieren. Ein 1-Bit-Fehler in einer komprimierten Datei ändert wahrscheinlich mehrere Dateien. Wenn MD5 sich unterscheidet, welches ist fehlerhaft? :) levif vor 8 Jahren 0
Art meines Punktes. Aus diesem Grund suche ich nach etwas, das die Daten außerhalb des Archivs wiederherstellen könnte, um Probleme zu vermeiden, die das Archiv im Vergleich zu den Rohdateien angibt. Es müsste auf der Bitebene gegenüber der Dateiebene arbeiten. Es scheint, was auch immer es ist, würde Reed-Solomon-Fehlerkorrektur verwenden. Aber nichts, was ich finde, scheint benutzerfreundlich, einfach, langjährig und / oder einsatzbereit zu sein. Alles scheint alt oder nicht unterstützt, kompliziert usw. Damon vor 8 Jahren 0

1 Antwort auf die Frage

1
gaborous

Ich habe für diesen Zweck eine Reihe von Tools erstellt, die Reed-Solomon verwendet, und pyFileFixity genannt ( die Liste der enthaltenen Tools finden Sie hier ). Es funktioniert meistens von der Kommandozeile aus, aber es wird eine experimentelle Benutzeroberfläche bereitgestellt, wenn Sie es wirklich ausprobieren möchten (verwenden Sie einfach die --guiKommandozeile).

Ich habe dieses Tool so entwickelt, dass es Open Source und zuverlässig ist. Es wurde mit 83% getestet (Filialabdeckung). Die gesamte Bibliothek ist ausführlich kommentiert, und ich habe den Reed-Solomon-Codec selbst entwickelt, alles in reinem Python (dh das gesamte Projekt ist eigenständig, es gibt keine externe Bibliothek) und ist somit zukunftssicher (sofern Sie einen Python 2 haben.) Interpreter, aber eine Python 3-Version ist in Arbeit ). Es sollte produktionsreif sein, ich verwende es regelmäßig selbst und hatte mehrere positive Rückmeldungen, und jedes zusätzliche Feedback ist sehr willkommen!

Das von mir entwickelte ecc-Format sollte SEHR stabil und unempfindlich gegen Beschädigungen sein, da sogar die ecc-Dateien korrigiert werden können (siehe repair_ecc.py und die Indexdateien). Das Projekt gibt Ihnen alles, um Ihre Daten zu kuratieren UND um Ihr Kuratierungsschema zu testen (siehe filetamper.py und resilency_tester.py. Sie können das gesamte Kuratierungsschema mit einer makefileähnlichen Datei testen, in der das Kuratierungsschema beschrieben wird Dateikonvertierungen, ZIP-Komprimierung, pyFileFixity ecc-Berechnung oder ein anderes ecc-Berechnungsschema usw. und testen, ob Ihre Kurationspipeline einem gewissen Ausmaß an zufälliger Datenbeschädigung standhalten kann.

Die Einschränkung besteht jedoch darin, dass die Berechnungen einige Zeit in Anspruch nehmen werden. Derzeit liegt die Rate bei ~ 1 MB / s, obwohl ich vorhabe, die Geschwindigkeit mit Parallelität zu vervierfachen. Trotzdem kann man dies als Einschränkung sehen, und leider glaube ich nicht, dass es einen schnelleren Fehlercode für die Fehlerkorrektur gibt (Reed-Solomon ist so ziemlich der einzig reife, LDPC kommt aber noch nicht).

Wenn Sie nicht die WHOLE-Datenintegrität, sondern die meisten Datenintegrität sicherstellen müssen, besteht die Alternative darin, einen nicht soliden Archivierungsalgorithmus wie ZIP DEFLATE zu verwenden und dann den ECC-Hash nur im Header mithilfe von header_ecc.py zu berechnen ( in pyFileFixity bereitgestellt). Dadurch wird sichergestellt, dass Ihr Archiv immer geöffnet werden kann und die meisten Daten darin nicht komprimierbar sind. Es können jedoch nicht alle Datentampfer korrigiert werden.

Es gibt auch das DAR-Archivformat, eine Alternative zu TAR, die eine unkomprimierte Komprimierung (damit eine teilweise Dekomprimierung beschädigter Archive möglich ist) und eine auf PAR2 basierende Wiederherstellungs-Hashberechnung ermöglicht. Daten wie Verzeichnisbaum separat als Backup gespeichert). Aber ehrlich gesagt glaube ich nicht, dass Sie mit PAR2 an Geschwindigkeit gewinnen werden, und Sie werden viel an Redundanz verlieren (das PAR2-Format basiert ebenfalls auf Reed-Solomon, hat aber viele Einschränkungen, die meine Bibliothek kennt nicht, und auch PAR2 ist irgendwie tot ...).

Sie müssen also darüber nachdenken, ob Sie mehr kosten müssen, um Daten zu kopieren (Speicherplatz) oder einen ecc-Hash (CPU-Zeit und Stromverbrauch) zu berechnen. In Bezug auf den Speicher kann der ecc-Hash eine beliebige Größe haben, aber normalerweise sind 20% - 30% eine Menge Schutz (optische Discs haben nur ~ 5%, Festplatten haben weniger und funktionieren bereits sehr gut!) .

Wenn Sie die Duplizierung als Alternative überdenken, können Sie auch Ihre Daten korrigieren, wenn Sie sicherstellen, dass Sie mindestens 3 Kopien Ihres Archivs erstellen. Sie können dann eine bitweise Mehrheit für die Wiederherstellung der Datenkorruption verwenden (pyFileFixity stellt dazu ein Python-Skript bereit: replication_repair.py). Dies ist nicht so belastbar wie ein ecc-Code, auch wenn die Ausfallsicherheitsrate gleich ist: 3 Kopien geben Ihnen eine Ausfallsicherheitsrate von 33% (dh 2 redundante Kopien von 3 geteilt durch 2, dies ist die theoretische Grenze), aber das FensterDer Schutz ist nur 1 Byte "ecc" (eher "Spare Byte") für 3 Bytes, während bei einem echten Ecc-Code mit pyFileFixity oder PAR2 das Fenster bis zu 255 Bytes umfasst: Sie schützen 255 Bytes, indem Sie 168 Bytes als Ecc-Bytes zuweisen ( Sie haben also (255-168) = 87 Bytes, die durch 168 ecc-Bytes geschützt sind, zu jedem Zeitpunkt in einer beliebigen Datei. In der Tat ist die Resilienzrate = 0,5 * von ecc-Bytes, also benötigen Sie ein Verhältnis von 66% ecc-Bytes, um eine Ausfallsrate von 33% zu erhalten. Am Ende haben Sie jedoch ein Duplizierungsschema, das die doppelte Größe des Originalarchivs benötigt, um ein geschütztes Fenster von 1/3 Byte zu erhalten, während das ecc-Schema nur 0,66x zusätzlichen Speicherplatz benötigt, um ein geschütztes 87/255 Byte zu erreichen. Intuitiv bedeutet das:

  • Wenn beim Duplikationsschema mehr als 1 Byte beschädigt ist, geht das Byte verloren.
  • Für das ecc-Schema müssen Sie jedoch mehr als 87 Bytes hintereinander beschädigt bekommen, um sie zu verlieren. Wenn die beschädigten Bytes über das gesamte Archiv verteilt sind, ist dies kein Problem, da die Beschränkung auf 87 Bytes pro Fenster auf 255 aufeinanderfolgende Bytes beschränkt ist.

Zusammenfassend sind ecc-Schemata fast immer zuverlässiger, weil sie eine größere Fenstergröße haben . Die Duplizierung ist jedoch der schnellste und in der Regel billigste Weg, um Dateikorrekturen durchzuführen (da Speicherplatz heutzutage billig ist).

Das ist großartig. Du bist toll. Ich habe irgendwie aufgegeben und habe einfach WinRAR ausprobiert und werde mich wahrscheinlich mit $$$ überreden, da es technisch das tut, was wir brauchen. Obwohl ich es sehr schätze, dass Sie Ihr letztes Plug-in für ECC sceme vs. Ich bin einfach groß. Zugegeben, wir werden bald mit dem Aufbau einer Bandbibliothek beginnen (brauchen das Bandlaufwerk) und werden mehr "Duplizieren" und weniger Archivierung durchführen. In manchen Fällen ist es jedoch eine gute Archivierungsoption, die robust genug ist, um keine willkürlichen Duplikate zu benötigen. Damon vor 7 Jahren 0
@Damon Froh, dass du meine Antwort nützlich gefunden hast :) Über WinRAR, sei vorsichtig, das [.rar-Format ist nur solide] (https://www.winrar-france.fr/winrar_instructions_for_use/source/html/HELPArcSolid.htm), so Das heißt, wenn die Wiederherstellung nicht erfolgreich ist, können Sie nichts aus dem Archiv extrahieren! Möglicherweise versuchen Sie DAR, das ist das einzige Format, von dem ich weiß, dass es sowohl Nicht-Solid als auch ecc unterstützt (wenn also die Wiederherstellung fehlschlägt, können Sie immer noch das extrahieren, was Sie aus dem Archiv können (dies wird im Allgemeinen als "partielle Extraktion" bezeichnet), aber zuletzt Als ich DAR versuchte, war es ein bisschen kompliziert, damit es funktioniert: / gaborous vor 7 Jahren 0
Vielen Dank für die Einsicht. Es klingt, als sei die echte Lösung zur Vereinfachung doppelt vorhanden und wenn nötig archiviert. Ich werde definitiv in DAR nachsehen. Vielen Dank! Damon vor 7 Jahren 0
Das von mir verwendete WinRAR hat eine Option für ein solides Archiv, es wird jedoch standardmäßig nicht geprüft. Es besteht auch die Möglichkeit, einen Wiederherstellungsdatensatz hinzuzufügen, der theoretisch vor Korruption schützen soll. Ich verwende nur die höchste verfügbare Komprimierungseinstellung für einen Wiederherstellungsrekord. Ich mag es einfach nicht, in proprietärer Software eingeschlossen zu sein, wenn ich es nicht brauche. Damon vor 7 Jahren 0
@Damon Ja, ich denke, dies ist eine gute Strategie. Die Duplizierung ist schnell und bietet einige Reparaturmöglichkeiten. Außerdem werden Sie dazu gezwungen, auf verschiedenen Datenträgern zu speichern. Wenn Sie eine zusätzliche Schutzschicht für praktisch keine Kosten wünschen, können Sie das Unterwerkzeug `header_ecc.py` von pyFileFixity verwenden, um die magischen Bytes Ihrer Dateien zu schützen. Dies sollte für die Berechnung schnell genug sein (da Sie nur den Header (~ 1 KB / Datei) schützen) und sicherstellen, dass Ihre Dateien immer lesbar sind (selbst wenn sie beschädigt sind, wird die Datei nicht als Archiv gespeichert.) msgstr "Fehler, wenn Sie versuchen, sie nach einer Beschädigung zu öffnen). gaborous vor 7 Jahren 0
@Damon Ah, dann können Sie einfach die Option "solides Archiv" in WinRAR deaktivieren, dies ist das Beste im Fall von Korruption. Wenn Sie sich jedoch im Hinblick auf die teilweise Extraktion und Wiederherstellbarkeit im Fall von Korruption sicher sein möchten, können Sie es selbst ausprobieren. PyFileFixity bietet zwei Tools dafür. Sie können jedoch nur einen Hexadezimal-Editor öffnen und zufällige Bytes selbst ändern, um zu sehen, ob das Archiv vorhanden ist ist immer noch extrahierbar, je nachdem, wie viel Sie manipulieren (versuchen Sie es natürlich mit einem Dummy-Archiv, das Sie nicht verlieren möchten, oder erstellen Sie Testkopien). Glauben Sie nicht den Ansprüchen, testen Sie es selbst, Sie werden sich sicherer fühlen. gaborous vor 7 Jahren 0