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

96

Kann jemand die Unterschiede zwischen den --checksumund --ignore-timesOptionen von rsync erklären?

Mein Verständnis ist wie folgt:

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

--ignore-times
Übertragen Sie jede Datei, unabhängig davon, ob die Dateizeit an beiden Enden gleich ist. Da der Delta-Transfer-Algorithmus weiterhin verwendet wird, 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 mich frage, ist:

  • Was ist der praktische Unterschied zwischen den beiden Optionen?
  • In welchen Fällen würden Sie eher einen als den anderen verwenden?
  • Gibt es Leistungsunterschiede zwischen ihnen?
Andy Madge
quelle

Antworten:

99

Normalerweise werden rsyncDateien übersprungen, 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, rsyncdass der Inhalt von Dateien untersucht werden muss, die auf der Quell- und Zielseite höchstwahrscheinlich identisch sind.

--ignore-timesWeist rsyncan, die Heuristik für die Dateizeiten und -größen zu deaktivieren und somit ALLE Dateien bedingungslos von der Quelle zum Ziel zu übertragen. rsyncAnschließend wird jede Datei auf der Quellseite gelesen, da entweder der Delta-Übertragungsalgorithmus verwendet werden muss, oder es wird einfach jede Datei in ihrer Gesamtheit gesendet, je nachdem, ob die --whole-fileOption angegeben wurde.

--checksumÄndert auch die Heuristik für Dateizeiten und -größen, ignoriert hier jedoch 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 mit einer Prüfsumme versehen (mit MD5 in rsyncVersion 3.0.0+ oder mit MD4 in früheren Versionen), und diejenigen, bei denen unterschiedliche Summen festgestellt wurden, werden ebenfalls übertragen.

In Fällen, in denen die Quell- und Zielseite größtenteils identisch sind, --checksumwerden die meisten Dateien auf beiden Seiten mit einer Prüfsumme versehen. Dies kann lange dauern, aber das Ergebnis ist, dass das kleinste Datenminimum tatsächlich über die Leitung übertragen wird, insbesondere wenn der Delta-Übertragungsalgorithmus verwendet wird. Dies ist natürlich nur dann 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. Zumindest bedeutet dies jedoch nicht, dass die Quell- und Ziel-CPUs zusätzlich mit vielen kryptografisch starken Hashs belastet werden müssen. Ich würde erwarten, dass diese Option eine bessere Leistung erbringt, als --checksumwenn Ihre Netzwerke schnell und / oder Ihre CPU relativ langsam sind.

Ich denke, ich würde nur verwenden --checksumoder --ignore-timeswenn ich Dateien an ein Ziel übertragen würde, bei dem der Verdacht bestand, dass der Inhalt einiger Dateien beschädigt war, deren Änderungszeiten jedoch nicht geändert wurden. Ich kann mir keinen anderen guten Grund vorstellen, eine der beiden Optionen zu verwenden, obwohl es wahrscheinlich andere Anwendungsfälle gibt.

Steven Montag
quelle
12
Ich habe --checksumzusammen mit --itemize-changesfür die Überprüfung von Sicherungen nützlich gefunden . Von Zeit zu Zeit werden meine Backup-Skripte auf diese Weise vollständig verglichen, nachdem die aktuellen täglichen / wöchentlichen Aktualisierungen abgeschlossen sind. Ich erhalte eine als dringend gekennzeichnete E-Mail, wenn --itemize-changesetwas Unerwartetes ausgegeben wird. Daher weiß ich, dass ein potenzielles Problem vorliegt, das ich untersuchen sollte.
David Spillett
10
--checksum ist nützlich, wenn Sie in Git arbeiten und zwischen Zweigen mit geänderten Dateien wechseln. Dadurch werden die Aktualisierungszeiten für Dateien geändert, die Sie nicht von einem bestimmten Zweig aus senden möchten.
FriendlyDev
6
--ignore-times--checksumDies ist insbesondere dann erforderlich, wenn eine Ihrer "Dateien" ein Truecrypt-Dateicontainer ist, da der Zeitstempel der Datei standardmäßig nicht aktualisiert wird. Siehe 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 durchgeführt und ctime wird nicht verglichen, nur mtime. Zumindest auf dem Mac. Dies kann nützlich sein, um zu wissen. Aus diesem Grund habe ich so viele Probleme mit Windows-Dateisystemen, die die gleiche Zeit (ctime) für atime, mtime und ctime melden.
Edward Falk
Ist --checksumPrüfsumme nur die Quelldateinamen auf der Zielmaschine oder alle Dateien im Zielverzeichnis?
Greg
17

Die Prüfsumme ist auch nützlich, wenn Sie ein anderes System zum Synchronisieren von Dateien verwendet haben, bei dem Zeitstempel nicht beibehalten wurden. Die Prüfsumme überträgt nur Dateien, die unterschiedlich sind, UND aktualisiert alle Zeitstempel auf der empfangenden Seite so, dass sie übereinstimmen

Paulus
quelle
4

Ein Detail: Die Prüfsummenoption prüft eine ganze Datei an einem Ende und dann die ganze Datei am anderen Ende. Wenn Ihre Dateien etwas groß sind, wird die Parallelität auf diese Weise beendet.

Wenn Sie große Dateien haben, ist es am wahrscheinlichsten, dass Sie mit einem Timeout konfrontiert werden --checksum, mit dem Sie nicht konfrontiert werden -I.

François
quelle
2

In info rsyncBezug auf die --checksumOption - "Da diese Prüfsumme aller Dateien auf beiden Seiten der Verbindung zusätzlich zu den automatischen Prüfsummenüberprüfungen bei der Dateiübertragung auftritt, kann diese Option sehr langsam sein."

LeoB
quelle
1
Dieser Satz scheint nicht in meinen Manpages zu sein ... bedeutet dies, dass die Prüfsummenoption Prüfsummen verwendet, um festzustellen, ob die Dateien identisch sind, und wenn nicht, wird er übertragen, wodurch erneut Prüfsummen generiert werden Teil der Überweisung? Die Option --ignore-times überspringt nur die Prüfung und geht davon aus, dass sie sich geändert hat. Daher ist es in Bezug auf die Leistung besser, in kürzester Zeit dasselbe zu erreichen? Ich kämpfe immer noch darum, warum es 2 verschiedene Optionen gibt (abgesehen von der Tatsache, dass --checksum transparenter ist)
Andy Madge
Sie sollten sich die neueste Dokumentation ansehen, die bearbeitet wurde: gitweb.samba.org/…
Aleksandr Levchuk
2

Die --ignore-timesOption führt wahrscheinlich dazu, dass alle Dateien Delta-codiert sind und der Delta-Übertragungsalgorithmus (Delta-Codierung) mindestens so langsam ist wie die Prüfsumme.

Ich weiß nicht, ob rsync --ignore-timesintelligent genug ist, um die "automatische Überprüfung nach der Übertragung" zu vermeiden, wenn die Delta-Übertragung dazu führt, dass nichts übertragen wird.

Für --ignore-times:

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

Beide --checksumund --ignore-timeswerden "ziemlich langsam" sein, sind aber --ignore-timeswahrscheinlich noch langsamer (aufgrund der beiden oben genannten Möglichkeiten).

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

Aleksandr Levchuk
quelle
Ich verstehe was du meinst. Ich werde einige Tests durchführen und zurückschicken.
Andy Madge