Frage Rsync-Differenz zwischen Optionen --checksum und --ignore-times


Kann jemand die Unterschiede zwischen den --checksum und --ignore-times Optionen von rsync?

Mein Verständnis ist wie folgt:

--checksum
Wenn die Dateigröße und die Zeit übereinstimmen, führt es an beiden Enden eine Prüfsumme aus, um festzustellen, ob die Dateien wirklich identisch sind.

--ignore-times
'Übertrage' jede Datei, unabhängig davon, ob die Dateizeit an beiden Enden gleich ist. Da es immer noch den Delta-Transfer-Algorithmus verwendet, wird nichts übertragen, wenn eine Datei tatsächlich identisch ist.

Das ist der technische Unterschied, aber soweit ich das beurteilen kann, sind sie semantisch dasselbe.

Also, was ich frage mich ist:

  • Was ist der praktische Unterschied zwischen den beiden Optionen?
  • In welchen Fällen würdest du einen lieber als den anderen benutzen?
  • Gibt es einen Leistungsunterschied zwischen ihnen?

75
2017-12-09 20:15


Ursprung




Antworten:


Normalerweise, rsync Überspringt Dateien, wenn die Dateien auf der Quell- und Zielseite identische Größen und Zeiten haben. Dies ist eine Heuristik, die normalerweise eine gute Idee ist, da sie verhindert rsync von der Notwendigkeit, den Inhalt von Dateien zu untersuchen, die auf der Quell- und Zielseite sehr wahrscheinlich identisch sind.

--ignore-times erzählt rsync um die Datei-Zeit-und-Größen-Heuristik auszuschalten und somit bedingungslos alle Dateien von der Quelle zum Ziel zu übertragen. rsync wird dann fortfahren, jede Datei auf der Quellseite zu lesen, da sie entweder ihren Delta-Transfer-Algorithmus verwenden oder einfach jede Datei in ihrer Gesamtheit senden muss, abhängig davon, ob der --whole-file Option wurde angegeben.

--checksum Ändert auch die heuristische Datei-Zeit-und-Größe, aber hier ignoriert es Zeiten und untersucht nur Größen. Dateien auf der Quell- und Zielseite, die sich in der Größe unterscheiden, werden übertragen, da sie offensichtlich unterschiedlich sind. Dateien mit derselben Größe werden als Prüfsumme (mit MD5 in rsync Version 3.0.0+, oder mit MD4 in früheren Versionen), und diejenigen, die unterschiedliche Summen haben, werden ebenfalls übertragen.

In Fällen, in denen Quell- und Zielseite weitgehend identisch sind, --checksum wird dazu führen, dass die meisten Dateien auf beiden Seiten geprüft werden. Dies könnte lange dauern, aber das Ergebnis ist, dass das kleinste Minimum an Daten tatsächlich über die Leitung übertragen wird, insbesondere wenn der Delta-Transfer-Algorithmus verwendet wird. Natürlich ist das nur ein Gewinn, wenn Sie sehr langsame Netzwerke und / oder eine sehr schnelle CPU haben.

--ignore-timesAuf der anderen Seite werden mehr Daten über das Netzwerk gesendet, und alle Quelldateien werden gelesen, aber es wird zumindest nicht die zusätzliche Belastung mit sich bringen, viele kryptografisch starke Hashsummen auf den Quell- und Ziel-CPUs zu berechnen. Ich würde erwarten, dass diese Option besser ist als --checksum wenn Ihre Netzwerke schnell sind und / oder Ihre CPU relativ langsam ist.

Ich denke ich würde es immer nur benutzen --checksum oder --ignore-times wenn ich Dateien an ein Ziel übertrage, bei dem der Verdacht besteht, dass der Inhalt einiger Dateien beschädigt ist, deren Änderungszeiten jedoch nicht geändert wurden. Ich kann mir keinen anderen guten Grund vorstellen, beide Optionen zu verwenden, obwohl es wahrscheinlich andere Anwendungsfälle gibt.


83
2017-12-09 23:41



Ich habe gefunden --checksum nützlich zusammen mit --itemize-changes zum Überprüfen von Backups. Hin und wieder führen meine Backup-Skripte einen vollständigen Vergleich auf diese Weise aus, nachdem die aktuellen täglichen / wöchentlichen Updates abgeschlossen sind. Ich bekomme eine E-Mail, die dringend markiert ist, wenn --itemize-changes gibt etwas Unerwartetes aus, also weiß ich, dass es ein potenzielles Problem gibt, das ich untersuchen sollte. - David Spillett
--checksum ist nützlich, wenn Sie in Git arbeiten und zwischen Zweigen mit geänderten Dateien wechseln, wodurch sich die Aktualisierungszeiten von Dateien ändern, die Sie nicht von einer bestimmten Verzweigung senden möchten. - FriendlyDev
--ignore-times und speziell --checksum sind notwendig, wenn eine Ihrer "Dateien" ein Truecrypt-Dateicontainer ist, da der Zeitstempel der Datei standardmäßig nicht aktualisiert wird. Sehen productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs und ask-leo.com/why_wont_my_truecrypt_volume_backup.html - Marcus Junius Brutus
Hinweis: Ich habe ein schnelles Experiment gemacht, und ctime wird nicht verglichen, nur mtime. Zumindest auf Mac. Dies kann nützlich sein, um zu wissen. Deshalb habe ich so viele Probleme mit Windows-Dateisystemen, die die gleiche Zeit (ctime) für atime, mtime und ctime melden. - Edward Falk
Tut --checksum Prüfsumme nur die Quelldateinamen auf dem Zielrechner oder alle Dateien im Zielverzeichnis? - Greg


Prüfsumme ist auch nützlich, wenn Sie ein anderes System zum Synchronisieren von Dateien verwendet haben, das keine Zeitstempel gespeichert hat. Checksum überträgt nur Dateien, die unterschiedlich sind und aktualisiert alle Zeitstempel auf der Empfängerseite, so dass sie übereinstimmen


13
2017-07-24 08:37





Ein Detail: Die Prüfsummen-Option prüft eine ganze Datei an einem Ende, dann die ganze Datei am anderen Ende. Wenn Ihre Dateien etwas groß sind, tötet diese Art der Parallelität.

Wenn Sie große Dateien haben, ist es sehr wahrscheinlich, dass Sie eine Zeitüberschreitung bei --checksum, wie du nicht mit -I.


4
2018-06-03 14:43





Von info rsync in Bezug auf die --checksum option - "Da das gesamte Dateiprüfsummen aller Dateien auf beiden Seiten der Verbindung zusätzlich zu den automatischen Prüfsummenüberprüfungen während der Dateiübertragung auftritt, kann diese Option sehr langsam sein."


2
2017-12-09 20:34



Dieser Satz scheint nicht in meinen man-Seiten zu sein ... bedeutet das also, dass die Prüfsummen-Option Prüfsummen verwendet, um zu identifizieren, ob die Dateien identisch sind, und wenn sie nicht sind, wird sie übertragen, wodurch wiederum Prüfsummen erzeugt werden Teil der Übertragung? Die Option --ignore-times überspringt den Scheck einfach und nimmt an, dass sie sich geändert haben? Performance-weise - Signore-Zeiten ist daher ein besserer Weg, um das Gleiche zu erreichen? Ich kämpfe immer noch um zu sehen, warum es zwei verschiedene Möglichkeiten gibt (abgesehen davon, dass - checksum transparenter ist) - Andy Madge
Sie sollten sich die neueste Dokumentation ansehen: gitweb.samba.org/... - Aleksandr Levchuk


Das --ignore-times Die Option wird wahrscheinlich dazu führen, dass alle Dateien Delta-codiert sind und der Delta-Transfer-Algorithmus (Delta-Codierung) mindestens so langsam wie die Prüfsumme ist.

Ich weiß nicht, ob rsync --ignore-times ist schlau genug, um die "automatische Verifizierung nach der Übertragung" im häufigen Fall zu vermeiden, wenn die Delta-Übertragung dazu führt, dass nichts übertragen wird.

Zum --ignore-times:

  • Falls rsync nicht intelligent ist (oder der Delta-Kodierung nicht vertraut), wird die Überprüfung (Prüfsummen und Kodierung) zweimal durchgeführt.
  • Es könnte auch der Fall sein, dass die Delta-Codierung viel langsamer ist als die 128-Bit-MD4-Prüfsummierung.

Beide --checksum und --ignore-times wird "ziemlich langsam" aber sein --ignore-times ist wahrscheinlich noch langsamer (aufgrund der 2 Möglichkeiten oben).

Gute Frage - bitte posten Sie, wenn Sie Leistungsunterschiede in der Praxis feststellen.


2
2017-12-09 22:22



Ich verstehe was du meinst. Ich werde einige Tests durchführen und zurück posten. - Andy Madge