Binärvergleich von Dateien (Verzeichnisweise)

  • Hallo,


    ich suche nach einer Möglichkeit Dateien in einem QNAP-Verzeichnis und einem Verzeichnis auf einer externen Festplatte zu vergleichen und (falls vorhanden) Unterschiede zu protokollieren. Der Vergleich soll dabei nicht anhand des Speicherdatum oder der Dateigrößen geschätzt werden, sondern tatsächlich mit dem Dateiinhalt Byte für Byte geschehen.


    Ziel des ganzen Aufwandes ist, langzeitarchivierte Dateien alle paar Monate oder einmal im Jahr zu testen und (z. B. Speicher-) Fehler zu erkennen, so lange sie anschließend (manuell) noch korrigierbar sind. Die Dateien sollen also vollständig gelesen und verglichen werden. Als Ergebnis ist nur interessant ob irgendwo eine Datei fehlt bzw. bei welchem Datei-Paar auf Binär-Ebene Unterschiede bestehen. Welche Unterschiede das sind, ist nicht interessant.


    Der Vergleich sollte auf dem QNAP laufen ohne extern angeschlossenen Rechner. Gerne über eine App oder über ein Script. Idealerweise rekursiv für ganze Datei-Strukturen über mehrere TByte an Speicher hinweg. Einzelne Dateien können bis zu 200 MByte groß sein.


    Hat jemand eine Idee, wie dies auf einem QNAP realisiert werden könnte?


    Danke und Ciao

  • Interessantes Problem...

    Vor längerem habe ich Beyond Compare für den gleichen Zweck benutzt, das ist allerdings eine Windows Software und es ging mir nur um eine einmalige Überprüfung. Diese Überprüfung hat elend lange gedauert. In deinem Fall wäre diese Software vermutlich nicht praktikabel, weil sie, wenn ich mich richtig erinnere, nicht automatisierbar ist.


    Man könnte einmalig md5 Hashes der Dateien generieren und aufbewahren, dann müssten später bei den turnusmäßigen Überprüfungen 'nur noch' die md5 Hashes der Kopieen erzeugt und mit den vorher berechneten md5 Hashes verglichen werden. Dadurch könnte die Hälfte der Lesevorgänge eingespart werden.


    Eine fertige Lösung, noch dazu eine die auf dem Qnap läuft, kenne ich dafür aber leider auch nicht.

  • Hallo eren,


    je länger ich über die MD5 Variante nachdenke, desto besser gefällt sie mir. Ich glaube, das ist eine ziemlich gute Idee. Danke schon mal für die Anregung.


    Trotzdem würde ich gerne nochmal bei dem Binärvergleich bleiben. Auch wenn es nicht die Standardmethode zur Überprüfung des Archivs sein wird, würde ich diese Methode trotzdem in meinen Werkzeugkasten für die Archivpflege aufnehmen. Anregungen sind noch herzlich willkommen.


    Ciao

  • Wenn es ein Dateivergleich sein soll, gibt das das Command-Line-Tool "diff" (sollte über Entware-ng auch den QNAPs laufen.


    Der wesentlich bessere Ansatz von eren per checksum, nutze ich selbst. Ich verwende dazu "cfv" ein Pythonprogramm, welches sich auch auf den QNAPs ausführen lässt.

    Dabei werden checksums in einer zentralen Datei abgelegt und später mit den aktuellen Werten verglichen. Das funktioniert auch rekursiv.

    So überprüfe ich regelmäßig meine Backuparchive.

  • so, Linux ist komplett neu für mich. Nach der anfänglichen Euphorie, was in Linux eigentlich gehen müsste folgt nun die Ernüchterung, was in QTS alles nicht geht.


    "find -exec" scheint schon mal nicht zu funktionieren. Okay, das kann man anders lösen.

    Aber kann es sein, das QTS zwar "md5sum" kennt aber "md5sum -c" nicht? Das wäre schon sehr ernüchternd.

  • Die Tools auf dem NAS sind abgespeckte Versionen aus Busybox. Die "großen" Versionen aller Linux-Tools können via Entware nachgerüstet werden. Eine Anleitung gibts hier: [HowTo] Entware-ng und Linux-Pakete installieren


    Das aktuell empfohlene Entware-Paket (es gibt mehrere Entware-Versionen, wobei aktuell nur eine weiterentwickelt wird) ist Entware-std. Zu finden ist Entware-std im Qnapclub-AppCenter, was sich auch im QTS-AppCenter integrieren lässt:

    AppCenter mit Anleitung: https://qnapclub.eu/de

    Entware-std: https://qnapclub.eu/de/qpkg/556

  • Hallo warpcam,


    vielen Dank für Deine Mühe und die Links, aber ich fürchte, das übersteigt meine Fähigkeiten. Ich habe ja gestern erst Linux, Putty und die Konsole kennen gelernt und würde bereits daran scheitern, welches Paket für den Atom-Rechner meines TS-859 Pro das richtige ist. Und ich denke, von Euch wird niemand Lust und Zeit haben, mir eine Anleitung-für-Dummies zu schreiben.


    Also war das eine Sackgasse. Was noch bleibt ist, dass ich eine Art Master-Datei für alle MD5-Hashes aller Dateien in einem Verzeichnis-Baum anlegt (der "md5sum" Befehl funktioniert ja) und beim Verify den Vorgang wiederhole. Die beiden Hash-Files muss ich dann eben extern vergleichen (womit wir wieder beim Dateivergleich wären). Das ist um ein Vielfaches aufwändiger als der "md5sum -c" Befehl und der eine oder andere wird die Nase rümpfen, dass Windows retten muss, was die Low-Budget-Linux Variante nicht auf die Reihe bekommt, aber was soll ich denn sonst machen?


    Danke und Ciao

  • Wir können das zusammen durchgehen, aber leider erst nächste Woche.

    Wenn das funktioniert, schreibst du das HowTo.

  • danke, können wir gerne probieren. Ich würde dazu meinen TS-459 Pro II nutzen (gleiche CPU), der bis dahin nochmal extra ge-backupt ist ... falls etwas schief geht.

  • Hallo HaPeRieger

    von mir aus kann es los gehen.

    Wäre schön, wenn du kurz beschreibst, wie weit du gekommen bist bzw. wo es klemmt.

  • Super, danke schön.


    Die Aufgabenstellung: Ein TS-859 Pro mit 8*6 TByte Festplatten (als RAID 5) soll als Backup-Server genutzt werden für fünf PCs verschiedener Personen, mehrere Cloud-Dienste die Daten online synchronisieren sowie einen TS-459 Pro II (der zig-tausende von Fotos aus fünf Jahrzehnten und fünf Kontinenten enthält) und einen HS-251, der Filme und Multimedia-Präsentationen für das lokale Netz bereit stellt. Von den Daten auf dem Backup-Server sollen (in passenden Intervallen) Backups auf mehrere externe Festlatten gezogen werden und extern gelagert werden.


    Kernstück der ganzen Archivierungsstrategie ist, dass ein Datenverlust (warum auch immer) rechtzeitig erkannt und behoben werden muss. Zu diesem Zweck sollen pro Verzeichnisbaum (sinnvoller und handhabbarer Größe) eine Datei mit allen MD5-Hash Werten der einzelnen enthaltenen Dateien erstellt und im Verzeichnisbaum mit archiviert werden. Ziel (Wunsch) ist es, durch erneute Erstellung der Hash-Datei (auf dem Original-Rechner, dem Backup-Server, oder auf der externen Festplatte) jederzeit feststellen zu können, ob die Backup-Instanz noch valide ist oder ob Handlungsbedarf besteht.


    Die Kommando-Sprache von Linux ist zwar etwas eigenwillig, aber ich könnte mich daran gewöhnen. Zentrales Problem ist, das QTS offensichtlich von Hause aus nur einen Bruchteil der Befehle bzw. Befehlsoptionen kennt. "md5sum" erstellt rekursiv genau die Liste, die ich benötige, Eine Liste mit "md5sum -c" überprüfen geht aber schon mal nicht. Und so stoße ich permanent an irgend welche Einschränkungen.


    Soweit ich verstanden habe, ist es möglich, ein einigermaßen vollwertiges Linux auf einen QNAP nachzuinstallieren. Von "Entware" habe ich keine Ahnung und bei den warpcam verlinkten Seiten verstehe ich nur Bahnhof. Es ist mir unklar, wie ich auf Linux überhaupt irgend etwas installieren kann. Und es ist mir auch nicht ganz klar, in wie weit ich mit solchen Installationen meine QNAPs destabilisiere. An dieser Stelle habe ich also zunächst erst gar nicht weiter gesucht.


    Was habe ich bisher gemacht? Auf den Windows-PCs kann ich mit dem Tool md5Summer (http://www.md5summer.org/) eine Datei mit md5-Hashes erstellen, die schon sehr nahe an der md5sum Liste von Linux ist. Diese Datei archiviere ich zusammen mit dem Verzeichnisbaum auf dem Backup-Server, entferne dort über ein Script (soweit bin ich schon ... immerhin) in der Datei überflüssige Kommentare und Leerzeilen und es wird inhaltlich wird noch etwas angepasst (String-Fragmente werden ersetzt). Nun wird über md5sum die (hoffentlich gleiche) Liste auf dem QNAP erzeugt und als Datei abgelegt. Aus beiden Hash-Dateien werden die Zeilen der vorhandenen Hash-Dateien selbst entfernt und beide Dateien werden nach irgend einem Kriterium zeilenweise sortiert. Soweit bin ich im Augenblick prototypisch. Im Ergebnis sollten dann beide Hash-Dateien inhaltlich identisch sein. Ob das so ist, möchte ich (egal ob auf dem NAS oder einem PC) über ein passendes Tool überprüfen.


    Wenn das so ist und wenn der gleiche Verzeichnisbaum auf allen Backup-Festplatten ebenfalls okay ist, betrachte ich das Archiv als konsistent und valide für diesen Verzeichnisbaum. Wenn alle Verzeichnisbäume nach dieser Methode okay sind, betrachte ich das ganze Archiv mit allen PCs, QNAPs und verteilten externen Festplatten als okay. Es wird zunächst etwa 50 solche Verzeichnisbäume geben mit bis zu 10000 Dateien pro Baum. Etwas Automatisierung tut also sicher Not.


    Probleme habe ich, weil meine Bash-Dateien inzwischen ellenlang sind, da ich immer wieder an eine die Grenzen von QTS durch die nicht komplett umgesetzten Linux-Kommandos stoße. Und meine Workarounds sind so unkreativ, das ich früher oder später ganz sicher an eine unüberwindbare Grenze komme. Problem ist auch, weil das Verfahren (soweit zumindest) nur funktioniert, wenn in den Verzeichnis- und Dateinamen keine Leer- und Sonderzeichen und keine Umlaute enthalten sind (md5Summer und md5sum gehen damit unterschiedlich um). Das kann ich bei dem Fotoarchiv zwar sicherstellen, bei den Zulieferungen der anderen Nutzern aber nicht.


    Soweit der Stand der Dinge.


    Ciao

    HaPe

  • Zugegeben, ich habe den Thread und besonders den letzten Post noch nicht ganz verinnerlicht, aber spontan kommt mir da eine ganz andere dumme Idee...


    Warum mountest Du nicht die Freigaben des NAS auf einem echten Linux Host und kannst da ohne Restriktionen die Shell-Scripte laufen lassen?


    Gruss

  • Wow das sind ja reichlich Daten. Deshalb wird das Erstellen der md5-Summen und auch der spätere Vergleich viel Zeit in Anspruch nehmen.

    Wenn wir eigene Skripte oder andere Anwendungen auf der QNAP verwenden möchten, brauchen wir einen geeigneten Speicherort.

    Ich selbst habe dazu eine Freigabe angelegt, mit dem Namen „admin“ und dort ein Verzeichnis „scripts“ erstellst. Das kann aber jeder handhaben wie er möchte.

    Wir benötigen Putty, um uns mit Command-Line userer QNAP zu verbinden.

    Eine Anleitung gibt es hier Wenn du soweit bist, melde dich bitte wieder.

  • FSC830: Wäre eine Lösung, allerdings keine allzu performante, weil dann alle Daten dann erstmal über das Netz übertragen werden müssen. Ob auf der anderen Seite dann ein Linux- oder ein Windows-Rechern sitzt, wäre dann auch wieder egal. Gestern haben ich 2,5 TByte übers Netz übertragen (einige große, aber auch viele kleine Dateien) und das hat 14 Stunden gedauert. Nur mal so als Hausnummer.


    frosch2: Ja, das müssen wir dann sehen, wie es sich im großen Maßstab anfühlt. Script-Verzeichnis existiert und auch ein Übungs-Verzeichnisbaum. Putty hatte ich gestern schon in Betrieb genommen. Das ist alles soweit erledigt.

  • Ok, dann holst du dir das QPKG-Entware und installierst es im App-Center

    entware.png


    Dann mit Putty auf die Konsole und folgenden Befehl ausführen:

    opkg install coreutils-md5sum md5deep

    Jetzt kontrollieren wir ob und welche Version von Python installiert ist:

    python --version

    Das Ergebnis sollte größer sein als 2.6

    jetzt wechselst du in das Skriptverzeichnis. Bei mir sieht das so aus:

    cd /share/admin/scripts

    Nun das eigentliche Programm holen. Es ist ein Pythonskript:

    wget https://download.netzweg.com/cfv.py

    Ausführbar machen:

    chmod +x cfv.py

    Weiter mit einem Wechsel in dein Testbackupverzeichnis:

    /share/Backup/test oder wie es bei heißen möge.

    Jetzt steigt die Spannung:

    python /share/admin/scripts/cfv.py -C -t md5 -rr -L -f compare.db

    Jetzt solltest du eine Vortschrittanzeige sehen. Es werden nun die md5-Summen in die Datei compare.db geschrieben.

    Hier noch der Link zum Programm cfv.

    Einmal editiert, zuletzt von frosch2 ()