Prüfsumme und Überprüfung aller Dateien in einem Dateisystem

1920
Waxhead

Ich möchte sha1sum oder md5sum für alle meine Dateien rekursiv ausführen, die Ergebnisse in einer Datei (oder ein paar Dateien) speichern und dann in der Lage sein, die Dateien erneut zu durchsuchen, um die Integrität der Dateien zu überprüfen.

Werkzeuge wie sha1sum / md5sum erlauben keine Rekursion, und ich möchte auch die Last verteilen, so dass mehr als ein CPU-Kern verwendet wird.

Ich fühle mich noch nicht sicher, meine Dateien auf BTRFS zu stellen, und außerdem funktioniert BTRFS auf raid5 / 6 noch nicht richtig. Daher suche ich nach einer "schnellen" Möglichkeit, alle meine Dateien zu überprüfen und sie zu überprüfen, wann immer ich möchte. Auf diese Weise würde ich zumindest wissen, ob eine unbeaufsichtigte Datenbeschädigung meine Dateien behindert hat.

Gibt es Werkzeuge, die für diesen Zweck entwickelt wurden (ja, mir ist SnapRAID bekannt)?

0
Wie wäre es mit ZFS? Es ist auch unter Linux verfügbar, was ich gehört habe. Ich meine, ich würde manuelle periodische Skripte vermeiden. Das ist nicht sehr zuverlässig. Martin Sugioarto vor 7 Jahren 0
Was ist mit `find -f / - exec md5sum {} \; > logfile.md5sum`? und benutzen Sie diese Datei nach? Hastur vor 7 Jahren 0
@Hastur: In Debian funktioniert Ihr Befehl nicht. Wenn überhaupt, muss es so aussehen: 'find -type f / path / -exec md5sum {} \; > Prüfsummen 'und zur Überprüfung können Sie' md5sum -c Prüfsummen | verwenden grep ": FAILED"> Prüfsummenfehler " Waxhead vor 7 Jahren 0

2 Antworten auf die Frage

1
juris

Diese Tools sind für mehr oder weniger diesen Anwendungsfall gedacht:

http://md5deep.sourceforge.net/

Hashdeep ist besonders nützlich. Danke für das Teilen! MariusMatutiae vor 7 Jahren 0
1
Nicola Mingotti

Oder Sie könnten selbst etwas schreiben;) Ich habe dieses Skript in Python geschrieben und dabei andere Schnipsel aus dem Web zusammengeführt. Es kann ein Ausgangspunkt sein.

#! / usr / bin / python  import os import hashlib von Joblib import Parallel, verzögert Import Json  BASE_DIR = "/ home / p / music" NUM_PROC = 2 OUT_FILE = "hashes.json"  # Liste der zu verarbeitenden Dateien file_list = [] für root, dir, Dateien in os.walk (BASE_DIR): für Namen in Dateien: file_list.append (os.path.join (root, name))   # - md5sum Berechnung für eine einzelne Datei  def hashOne (f): BLOCKSIZE = 65536 hasher = hashlib.md5 () mit open (f, 'rb') als afile: drucken f buf = afile.read (BLOCKSIZE) während len (buf)> 0: hasher.update (buf) buf = afile.read (BLOCKSIZE) return hasher.hexdigest ()  # Parallele Berechnung von MD5sum  md5 = parallel (n_jobs = NUM_PROC) (verzögert (HashOne) (f) für f in file_list)   # Hash aus Dateinamen machen -> md5sum out_hash = {} für i in range (len (file_list)): out_hash [file_list [i]] = md5 [i]  # Schreibe den Hash "Dateiname -> md5sum" auf die Festplatte für die Zukunft  dump = json.dumps (out_hash) mit open (OUT_FILE, "wb") als Datei: file.write (dump)