Diese Antwort ist eine Kombination aus @ lechlukasz und @ db48x , die auch einige Punkte aus Kommentaren sowie einige meiner eigenen Gedanken enthält.
Der einfache Weg nach vorne ist ein kombinierter Ansatz aus Dateisystem und separaten Metadaten.
Wenn Sie ein Dateisystem wie ZFS oder Btrfs verwenden, das Daten-Hashing und -Validierung im laufenden Betrieb ausführt (beachten Sie, dass Btrfs zwar große Fortschritte erzielt hat, aber derzeit noch nicht als produktionsbereit eingestuft wird), können Sie vernünftig sein Stellen Sie sicher, dass, wenn die Daten von der Festplatte gelesen werden können, ohne dass das Betriebssystem einen Fehler macht, die gelesenen Daten in der vom Dateisystem vorgesehenen Weise auf die Festplatte geschrieben wurden. Durch Ausführen von periodischen "Scrub" -Operationen werden alle Daten gelesen und mit der Vorstellung des Dateisystems verglichen, wie sie sein sollten.
Dies schützt jedoch nur vor einer Beschädigung der Festplatte (unlesbare Blöcke, direkte Hardwareschreibfehler, ungültige Schreibvorgänge, die Teile der Daten direkt auf dem Blockgerät beschädigen usw.). Es schützt nicht vor einem Softwarefehler, einer fehlerhaften Benutzeroperation oder bösartiger Software, die über die vorgesehenen Betriebssystemeinrichtungen zum Arbeiten mit Dateien funktioniert, vorausgesetzt, diese Einrichtungen sind frei von solchen Fehlern.
Zum Schutz vor letzterem benötigen Sie eine weitere Schutzschicht. Prüfsummen- oder Hashing-Daten aus Sicht einer Benutzeranwendung schützen vor vielen der oben genannten Risiken, müssen jedoch separat ausgeführt werden (entweder als integrierte Prozessaktion in der Software oder als vollständig separater Prozess).
Mit der heutigen Hardware und den praktischen Funktionen zum Speichern großer Datenmengen (Festplatten mit rotierendem Plattenteller im Gegensatz zu Solid-State-Festplatten / SSDs) sind selbst komplexe Hashing-Algorithmen wie SHA1 weitgehend E / A-gebunden - das heißt, die Geschwindigkeit Die Geschwindigkeit, mit der die Daten gehasht werden, hängt von der Lesegeschwindigkeit des Speichersystems ab und nicht von der Fähigkeit des Computerprozessors, den Hash zu berechnen. Ich habe ein Experiment mit einem MD5-Hashing-Prozess auf Benutzerbasis mit einer Datenmenge von ca. 150 GB auf einem Mid-Tier-Consumer-PC im Jahr 2012 durchgeführt und es wurde beendet, nachdem die Festplatte im Wesentlichen ohne Unterbrechung etwa 40 Minuten lang getestet worden war. Wenn Sie diese Zahlen auf das 100-fache skalieren, erhalten Sie die MD5-Hashes einer 15-TB-Sammlung in ungefähr drei Tagen auf derselben Hardware. Durch Hinzufügen der Leseübertragungsrate (die leicht erreicht werden kann, zRAID 0 ist beispielsweise Striping ohne Redundanz und wird häufig verwendet, um eine höhere Lese- / Schreibleistung zu erzielen, möglicherweise in Kombination mit RAID 1 ( RAID 10 ). Die Zeit bis zur Fertigstellung kann bei gleicher Datenmenge verkürzt werden.
Wenn Sie beides kombinieren, erhalten Sie das Beste aus beiden Welten: Das Dateisystem gibt Ihnen die Gewissheit, dass das, was Sie beim Lesen der Datei erhalten haben, das tatsächlich Geschriebene ist, und ein separater Fixitätsprüfungsprozess kann die gesamte Sammlung durchlaufen, um sicherzustellen, dass die Daten vorhanden sind gespeichert stimmt noch mit dem überein, was in das Archiv aufgenommen wurde. Jegliche Inkonsistenz zwischen beiden (Dateisystem sagt, dass die Datei in Ordnung ist, Fixitätsprüfung sagt, dass dies nicht der Fall ist) weist auf eine Datei hin, die außerhalb des beabsichtigten Betriebsmodus des Archivs, jedoch innerhalb der Einrichtungen des Betriebssystems geändert wurde, wodurch eine Wiederherstellung von einem sekundären System veranlasst wird kopieren (sichern). Der Fixity Check kann somit in einem längeren Zeitintervall durchgeführt werden, was für sehr große Archive unabdingbar ist. Bei einem erfolgreichen Lesevorgang ist jedoch sichergestellt, dass Online-Zugriffe auf der Hardware nicht verfälscht werden. Allgemein gesagt, Die Archivierungssoftware kann sich darauf verlassen, dass das Dateisystem Inkonsistenzen als Lesefehler meldet und im Hintergrund eine separate Fixitätsprüfung durchführt, wenn der Benutzer mit der Datei arbeitet und eine entsprechende Meldung anzeigt, die darauf hinweist, dass die Datei nicht mit der aufgenommenen Datei übereinstimmt in das Archiv. Bei Verwendung eines Block-Hashing-Dateisystems würde ein solches Schema nur minimale Auswirkungen auf die wahrgenommene Leistung haben und dennoch sicherstellen, dass der Inhalt korrekt ist.