it-swarm.com.de

Rsync Unterschied zwischen den 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 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.

Ich frage mich also:

  • Was ist der praktische Unterschied zwischen den beiden Optionen?
  • In welchen Fällen würden Sie eher das eine als das andere verwenden?
  • Gibt es einen Leistungsunterschied zwischen ihnen?
105
Andy Madge

Normalerweise überspringt rsync 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, dass rsync den Inhalt von Dateien untersuchen muss, die auf der Quell- und Zielseite sehr wahrscheinlich identisch sind.

--ignore-times Weist rsync an, die Heuristik für Dateizeiten und -größen zu deaktivieren und somit ALLE Dateien bedingungslos von der Quelle zum Ziel zu übertragen. rsync liest dann jede Datei auf der Quellseite, da entweder der Delta-Transfer-Algorithmus verwendet oder einfach jede Datei vollständig gesendet werden muss, je nachdem, ob --whole-file Option wurde angegeben.

--checksum Ändert auch die Heuristik für Dateizeiten und -größen, ignoriert hier jedoch die 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 rsync Version 3.0.0+ oder mit MD4 in früheren Versionen), und Dateien mit unterschiedlichen Summen werden ebenfalls übertragen.

In Fällen, in denen die Quell- und Zielseite größtenteils identisch sind, führt --checksum Dazu, dass die meisten Dateien auf beiden Seiten einer Prüfsumme unterzogen werden. Dies kann lange dauern, aber das Ergebnis ist, dass das geringste Minimum an Daten tatsächlich über die Leitung übertragen wird, insbesondere wenn der Delta-Übertragungsalgorithmus verwendet wird. Dies ist natürlich nur dann ein Gewinn, wenn Sie über sehr langsame Netzwerke und/oder eine sehr schnelle CPU verfügen.

--ignore-times Sendet andererseits mehr Daten über das Netzwerk und bewirkt, dass alle Quelldateien gelesen werden, aber es wird zumindest nicht die zusätzliche Belastung für die Berechnung vieler kryptografisch starker Hashsums auf dem Netzwerk bedeuten Quell- und Ziel-CPUs. Ich würde erwarten, dass diese Option eine bessere Leistung als --checksum Erbringt, wenn Ihre Netzwerke schnell und/oder Ihre CPU relativ langsam sind.

Ich denke, ich würde immer nur --checksum Oder --ignore-times Verwenden, wenn ich Dateien an ein Ziel übertragen würde, an dem der Verdacht bestand, dass der Inhalt einiger Dateien beschädigt war, dessen Ä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.

112
Steven Monday

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

18
Paulus

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

Wenn Sie über große Dateien verfügen, tritt bei --checksum Höchstwahrscheinlich eine Zeitüberschreitung auf, da dies bei -I Nicht der Fall ist.

4
Francois

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

2
LeoB

Die Option --ignore-times Führt wahrscheinlich dazu, dass alle Dateien delta-codiert werden und der Delta-Übertragungsalgorithmus (Delta-Codierung) mindestens so langsam ist wie die Prüfsumme.

Ich weiß nicht, ob rsync --ignore-times Intelligent genug ist, um die "automatische Überprüfung nach der Übertragung" in dem häufigen Fall zu vermeiden, in dem 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 kann auch vorkommen, dass die Delta-Codierung viel langsamer ist als die 128-Bit-MD4-Prüfsumme.

Sowohl --checksum Als auch --ignore-times Werden "ziemlich langsam" sein, aber --ignore-times Ist wahrscheinlich noch langsamer (aufgrund der beiden oben genannten Möglichkeiten).

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

2