Gibt es in Ubuntu / Linux einen Befehl zum Kopieren und Überprüfen?

23

Ich speichere alle meine digitalen Fotos an ein paar Orten. Ich habe den Befehl cp verwendet, mich aber angesichts des persönlichen Werts gefragt, ob es einen zuverlässigeren Weg gibt. Ich bin kein Unbekannter für Linux, Bash, Perl usw., also könnte ich etwas schreiben, um md5-Hashes zu kopieren und zu vergleichen, aber ich habe mich gefragt, ob etwas bereits existiert (Neuerfindung, Räder und was nicht).

Die meisten meiner Kopier- und Überprüfungsvorgänge (| valid | check | hash | confirm) führen zu rsync. Soweit ich das beurteilen kann, verwendet rsync jedoch nur Hashes, um festzustellen, ob eine Datei aktualisiert werden muss. Anschließend wird kein Hash-Vergleich durchgeführt.

Für diesen Zweck sind die Dateien binär und in der Regel 8-10 MB groß. Alle Empfehlungen für Dienstprogramme oder Anleitungen für DIY-Lösungen wäre sehr dankbar.

N13
quelle
Wie wäre es mit unisono ? Es wird für die bidirektionale Synchronisation verwendet, prüft jedoch mit Sicherheit die Prüfsumme einer Datei.
Verjüngung

Antworten:

19

Von man rsync, unter -cOption:

-c, --checksum: Überspringe basierend auf der Checksumme, nicht der Mod-Zeit und der Größe

Beachten Sie, dass rsync immer überprüft, ob jede übertragene Datei auf der Empfängerseite korrekt rekonstruiert wurde, indem eine Prüfsumme für die gesamte Datei überprüft wird, die beim Übertragen der Datei generiert wird. Die automatische Überprüfung nach der Übertragung hat jedoch nichts mit diesen Optionen zu tun vor der Übertragung "Muss diese Datei aktualisiert werden?" prüfen.

icyrock.com
quelle
7
Einige Leute haben herausgefunden, dass das rsync-Handbuch über die Standardprüfung nach dem Kopieren irreführend ist: unix.stackexchange.com/a/66702/148560 Es scheint keine solche Prüfung zu geben. Um alle Kopien zu überprüfen, müssen Sie eine weitere rsync-Operation mit der Option --checksum ausführen.
Rotareti
5

Vor einigen Jahren hatte ich die gleichen Anforderungen wie Sie. Die von mir gewählte Lösung bestand darin, ZFS über den ZFS-FUSE-Treiber auf meinem Speicherserver zu verwenden. Ich dachte, dass meine persönlichen Fotos, gescannten Dokumente und andere ähnliche Dateien Dinge sind, auf die ich nur gelegentlich zugreifen kann. Es kann also sehr lange dauern, etwa ein Jahr oder länger, bis ich feststelle, dass eine Datei aufgrund von beschädigt wurde ein Laufwerksfehler oder dergleichen.

Zu diesem Zeitpunkt sind alle Sicherungskopien, die ich habe, möglicherweise diese Version der Datei (en).

ZFS hat gegenüber RAID-5 den Vorteil, dass es Fehler in den auf den einzelnen Datenträgern gespeicherten Daten erkennen und beheben kann, auch wenn die Laufwerke beim Lesen der Daten keinen Lesefehler melden. Über Prüfsummen erkennt es, dass eine der CDs fehlerhafte Informationen zurückgegeben hat, und verwendet die Redundanzdaten, um diese CD zu reparieren.

Aufgrund der Art und Weise, wie die Prüfsumme in ZFS aufgebaut ist, konnte ich mich darauf verlassen, dass selten verwendete Daten über einen längeren Zeitraum hinweg gespeichert werden. Jede Woche führe ich ein "zpool scrub" durch, das alle Daten erneut liest und die Prüfsummen überprüft.

ZFS-FUSE hat sich in den letzten Jahren für mich sehr gut entwickelt.

In der fernen Vergangenheit habe ich für einen Client ein Datenbanksystem implementiert, das Prüfsummeninformationen für alle Dateien speichert, die in einem bestimmten Verzeichnis gespeichert sind. Ich hatte dann ein anderes Skript, das regelmäßig ausgeführt und die Datei anhand der in der Datenbank gespeicherten Prüfsumme überprüft wurde. Damit konnten wir schnell eine beschädigte Datei erkennen und von Backups wiederherstellen. Wir haben im Grunde die gleichen Arten von Prüfungen implementiert, die ZFS intern durchführt.

Sean Reifschneider
quelle
Warum runter stimmen? Da kein Kommentar hinterlassen wurde, gehe ich davon aus, dass es ein "-1, nicht einverstanden" ist. :-)
Sean Reifschneider
... aber dann: welcher Teil ist nicht einverstanden? Das klingt für mich solide, obwohl es bei der Frage vielleicht ein bisschen unangebracht ist. Daher hoffe ich, dass die Ablehnung "keine Antwort auf die Frage" war, anstatt uns über einen wirklichen Fehler in dem oben Gesagten im Klaren zu sein ...
Arjan
Mir wurde heute Morgen klar, dass ich davon ausgegangen bin, dass icyrock wegen der Sorge um Bit-Rot nachfragt, was mein Anliegen ist. Aber vielleicht ist es irgendwie anders. Obwohl ich mir nicht vorstellen kann, was der Anwendungsfall wäre, der den Dateiinhalt legitim ändern würde, ohne die Dateizeiten zu ändern.
Sean Reifschneider
Ich denke, die Sorge des OP galt der Beschädigung von Daten während des Transports. Sie kopieren eine Datei und die Kopie unterscheidet sich letztendlich vom Original.
Jon Bentley
btrfs? Das hat Prüfsummen und ist native ...
Dmitry Kudriavtsev
1

Ich habe dieses Dienstprogramm gefunden (Linux und Windows), das genau das tut, was Sie wollen (Hash-Kopie + Hash-Überprüfung mit Protokoll): http://sourceforge.net/projects/quickhash/

Der einzige Nachteil ist, dass es nur als GUI existiert (kein Kommandozeilenzugriff)

Seit v1.5.0 kann ein ausgewählter Quellordner gehasht, dann kopiert und in einen Zielordner rekonstruiert werden, in dem der Inhalt zur Überprüfung erneut gehasht wird. Seit 1.5.5 können auch ausgewählte Dateimasken verwendet werden (* .doc; * .xls etc).

2072
quelle
0

Wenn Sie die Datei lokal kopieren (wie durch Ihren Verweis auf cpanstelle von scpetc angedeutet ), dann nur cmpdie Quell- und Zieldateien ... aber realistisch, wenn cpkein Fehler ausgegeben wird (entweder in der Befehlszeile oder in der Rückgabewert der Ausführung) gibt es keinen Grund zu der Annahme, dass es nicht funktioniert.

Wenn Sie in der Tat ein redundantes Backup benötigen, ziehen Sie eine Remote-Lösung wie Dropbox in Betracht .

Brad Clawsie
quelle
+1. Es ist nicht klar, warum diese Antwort herabgestimmt wurde, da sie (wie mir scheint) eine vollkommen gültige Lösung für das Problem darstellt, obwohl sie eher zwei als einen Befehl erfordert.
Jon Bentley
Sie müssen wirklich ein Skript mit einer Schleife schreiben, um diese Antwort zu verwenden, da nicht mehrere Dateien und Ordner berücksichtigt werden.
Gringo Suave