Die effizienteste Methode zur Verwendung von Prüfsummen besteht darin, den Computer dazu zu bringen, alles zu erledigen. Verwenden Sie ein Dateisystem wie ZFS, das Prüfsummen verwendet (tatsächlich verwendet sie Hashes, die stärker als eine Prüfsumme sind), wenn alle Daten geschrieben werden, und überprüft sie bei jedem Lesen der Daten. Der Nachteil ist natürlich, dass ZFS nicht weiß, wann eine Datei gelöscht oder überschrieben wird. Dies ist ein Fehler und der normale Betrieb. Da ZFS jedoch Semantik für das Kopieren beim Schreiben verwendet, können Sie die Snapshotting-Funktion verwenden, um das Risiko zu minimieren .
ZFS kann auch Daten, für die eine Hash-Prüfung nicht erfolgreich ist, mithilfe der von Ihnen eingerichteten Redundanz automatisch wiederherstellen. Dabei kann es sich um eine Parität im Raid5-Stil, um Laufwerkspiegelungen oder um doppelte Kopien handeln (fügen Sie die Kopien = N-Eigenschaft in ein ZFS-Dateisystem ein und es werden N Kopien gespeichert von allen Daten, die Sie schreiben). Es speichert auch die Hashes in einem Merkle-Baum, wobei der Hashwert einer Datei von den Hashwerten der Blöcke abhängt, der Hash eines Verzeichniseintrags von den Hashwerten der darin enthaltenen Dateien und Verzeichnisse abhängt und vom Hash eines Dateisystems abhängt auf dem Hash des Wurzelverzeichnisses usw.
Unabhängig davon, mit welcher Lösung Sie am Ende arbeiten, Sie werden immer feststellen, dass der Prozess durch die Geschwindigkeit Ihrer Festplatten und nicht durch die Geschwindigkeit Ihrer CPU begrenzt ist.
Vergessen Sie auch nicht, die BER Ihrer Festplatten zu berücksichtigen. Es sind doch nur Teller mit Spinnrost. Ein Laufwerk auf Consumer-Ebene hat eine Fehlerrate von 1 falsch gelesenen Bit für alle 10 ^ 14-Bit-Lesevorgänge, was sich auf 1 Bit von jeweils 11 Terabyte auswirkt, die Sie lesen. Wenn Sie über einen Datensatz von 11 Terabyte verfügen und den Hashwert jeder Datei darin berechnen, haben Sie eine dieser Prüfsummen falsch berechnet und einen Block einer der Dateien im Datensatz dauerhaft beschädigt. ZFS kennt jedoch den Hashwert jedes Blocks, den er auf jede Festplatte in Ihrem Pool geschrieben hat, und weiß daher, welcher Block verloren ging. Es kann dann die Redundanz (Parität, Spiegelungen oder zusätzliche Kopien) in Ihrem Pool verwenden, um die Daten in diesem Block mit den korrekten Werten neu zu schreiben.
Ben bringt jedoch einen guten Punkt in den Kommentaren auf. ZFS macht keinen der Hashwerte, die es berechnet, für den Benutzer verfügbar, daher sollten Daten, die in ein ZFS-System ein- oder ausgehen, von Hashes begleitet werden. Ich mag die Art und Weise, wie das Internet-Archiv dies mit einer XML-Datei tut, die jedes Element im Archiv enthält. Siehe https://ia801605.us.archive.org/13/items/fakebook_the-firehouse-jazz-band-fake-book/fakebook_the-firehouse-jazz-band-fake-book_files.xml .