Ich habe gerade 2.000.000 Dateien (3 TB) von einem RAID auf ein anderes synchronisiert.
Ich möchte sicherstellen, dass meine Daten intakt sind.
rsync -c
dauert sehr lange.
diff
zeigt mir nicht, was es tut.
Gibt es eine Alternative, die (a) schneller ist und (b) mir Fortschritte beim Vergleichen zeigt?
(Ich bin auf dem Mac und brew search diff
gebe mir apgdiff colordiff diffstat diffutils fmdiff libxdiff open-vcdiff podiff rfcdiff vbindiff
bsdiff diffpdf diffuse dwdiff kdiff3 ndiff perceptualdiff rdiff-backup tkdiff wdiff
... würde einer von diesen den Job machen?)
rsync
die Daten mit etwa 150 MB / s kopiert wurden, aberdiff
nur mit 60 MB / s verglichen wurden ...?rsync
ist schneller. B / C verwendetrsync
standardmäßig keine Prüfsummen zum Vergleichen von Dateien. Es werden Informationen zu Größe und Datum angezeigt. Wenn Siersync -c
alle Dateien verwenden, müssen deren Prüfsummen berechnet werden, was eine lästige Aufgabe ist, weshalb dies nicht die Standardaufgabe ist.Antworten:
Korrektur & Optionsklarheit - Ich habe '--brief' vergessen
und fügen Sie je nach dem, was Sie vergleichen, weitere Geschmacksoptionen hinzu:
diff -rs liest jedes Byte des Originals und der Kopie und gibt die gleichen Dateien aus.
Das Diff-Ausgabeformat wird von POSIX definiert und ist daher ziemlich portabel. Möglicherweise möchten Sie Folgendes hinzufügen:
| tee diff-out.1 | grep -v -Ee 'Dateien. * und. * sind identisch'
Sie könnten Chksums oder Hashes verwenden, aber dann müssen Sie sie mit den Dateibäumen synchronisieren, damit Sie ohnehin wieder jedes Byte jeder Datei lesen können.
BEARBEITEN - zu lang, um ein Kommentar zu sein, als Antwort auf:
Möglicherweise möchten Sie diese Diff-Option ausprobieren: --speed-large-files
Es ist möglich, dass das von Ihnen verwendete Diff mit sehr großen Dateien (z. B. größer als der Systemspeicher) nicht gut zurechtkommt und daher Unterschiede zwischen Dateien meldet, die tatsächlich gleich sind.
Ich hatte geglaubt, es gäbe eine -h-Option oder einen 'bdiff', der bei großen Dateien besser funktioniert, aber ich kann keinen in Fedora finden. Ich glaube, dass die --speed-large-files-Optionen ein Nachfolger einer '-h'-Option zum "halbherzigen Vergleichen" sind.
Ein anderer Ansatz wäre, den von Ihnen verwendeten Befehl rsync mit '-vin' zu wiederholen (verbose, itemize, no_run). Dies würde alle Unterschiede melden, die rsync findet - und es sollte keine geben.
Um einige Dateien zu verschieben, betrachten Sie ein Skript wie:
aber ich empfehle das nicht. Die zugrunde liegende Frage lautet: "Wie kann ich sicher sein, dass rsync eine Dateihierarchie korrekt kopiert hat?" und wenn Sie sich selbst beweisen können, dass rsync mit diff oder einem anderen Tool gut funktioniert, können Sie sich einfach auf rsync verlassen, anstatt es zu umgehen.
rsync -vin vergleicht basierend auf den anderen von Ihnen angegebenen Optionen. Ich dachte, es wäre standardmäßig die Prüfsumme, aber Sie haben Recht, dafür ist -c oder --checksum erforderlich.
Das Dienstprogramm diff ist eigentlich für Dateien mit Textzeilen gedacht, sollte jedoch für Binärdateien "identische" Unter-Werte angeben.
Der --brief sollte jegliche Ausgabe von Dateiinhalten unterdrücken - ich entschuldige mich dafür, dass ich ihn früher übersehen habe - er wurde in einem hässlichen Skript halb vergraben.
quelle
mv
jeder Datei zu bringen, die es in einem "überprüften" Ordner im Stammverzeichnis des Laufwerks findet, wobei der vollständige Pfad erhalten bleibt? Wenn z. B./disk1/a/b/c/file1
identisch mit ist/disk2/a/b/c/file1
, verschieben Sie es nach/disk1/verified/a/b/c/file1
. Dann könnte ich nur die schlecht kopierten Dateien haben. (Bisher sind viele Dateien über 10 GB nicht überprüft, was beängstigend ist.)rsync -vin
- führt das einen byteweisen oder einen Prüfsummenvergleich durch? Ich dachte, Rsync nur verglichen Größe / Datum, wenn Sie hinzufügen-c
. Und von dem, was ich gelesen habe,speed large files
scheint das nur bei nicht-binären Dateien einen Unterschied zu machen ... oder irre ich mich?diff
gibt mir Ergebnisse in Form von"Files __ and ___ differ"
... und ich führe das durchsed -e "s/Files /cp -afv /" -e "s/ and / /" -e "s/ differ$//"
, um zu versuchen, ein Skript zum erneuten Kopieren der fehlerhaften Dateien zu generieren. Die Ausgabe von diff ist jedoch nicht zitiert und funktioniert daher nicht. Kann ich es mir zitierte Pfade geben lassen?Hier ist ein
diff
Fortschrittsbericht basierend auf der Anzahl der Dateien:Sie benötigen pv (pipe viewer): http://www.ivarch.com/programs/pv.shtml
Erläuterung:
diff -r
Verzeichnis und Unterverzeichnisse rekursiv vergleichen.diff -q
Nur Dateinamen von Dateien unterscheiden sich. drucken Sie keine tatsächlichen Unterschiede aus.diff -s
Drucken Sie auch Dateinamen von Dateien aus, die sich nicht unterscheiden. Dies ist wichtig für die Fortschrittsinformation.pv -l
berichte den Fortschritt basierend auf der Zeilenzahl.pv -s count
Geschätzte Zeit bis zur Fertigstellung basierend auf der Anzahl.logfile
ist für hübsche Ausgabe. Andernfalls wird die Ausgabe vondiff
mit der Statuszeile von gemischtpv
.Verwenden Sie den folgenden Befehl, um die Anzahl der Dateien zu ermitteln:
Filtern Sie die Protokolldatei nach Dateien, die unterschiedlich sind:
Diese Variante druckt Dateien, die sich in Echtzeit unterscheiden, und protokolliert gleichzeitig alles in
logfile
:Alternativ können Sie nur Dateien protokollieren, die unterschiedlich sind:
Hinweis: Die obigen Befehle geben den Fortschritt basierend auf der Anzahl der Dateien an. Dies funktioniert am besten, wenn es viele kleinere Dateien gibt. Wenn Sie ein paar große Dateien haben, werden Sie nicht viel Spaß damit haben.
Leider kenne ich keine einfache Möglichkeit, den Fortschritt anhand der verglichenen Bytes zu melden.
Wenn Sie Ihre Ruhe finden, indem Sie nur die Metadaten (und nicht den tatsächlichen Inhalt der Dateien) vergleichen, können Sie rsync verwenden. Dies wird erheblich schneller sein.
Für mehr Details:
quelle
Ich würde eine Art Hash-Anwendung verwenden, um die Datenintegrität zu überprüfen. Ich weiß, dass viele Dienstprogramme zur Suche nach doppelten Dateien Hashes verwenden, um doppelte oder nicht doppelte Dateien zu identifizieren. Scheint mir, dass dies eine Untersuchung ist, die sich lohnen könnte.
quelle
Sie können dazu rdiff-backup verwenden . Wenn Sie es auf beiden Servern installieren, werden die Prüfsummen intelligent verglichen und die noch nicht vorhandenen Daten synchronisiert.
quelle