Ich nehme eine kleine Änderung an einer sehr großen Bilddatei vor (nur ein paar Pixel Unterschied), deren Übertragung über das Netzwerk lange dauert.
Gibt es eine Möglichkeit für rsync, den Unterschied in der Datei zu erkennen und nur den kleinen Unterschied über das Netzwerk zu senden?
Antwort1
rsync
Der Delta-Transfer-Algorithmus tut dies standardmäßig.rsync-Manpage:
BESCHREIBUNG
Rsync ist ein schnelles und außerordentlich vielseitiges Tool zum Kopieren von Dateien. Es kann lokal, von/zu einem anderen Host über eine beliebige Remote-Shell oder von/zu einem Remote-Rsync-Daemon kopieren. Es bietet eine große Anzahl von Optionen, die jeden Aspekt seines Verhaltens steuern und eine sehr flexible Spezifikation der zu kopierenden Dateimenge ermöglichen.Es ist bekannt für seinen Delta-Transfer-Algorithmus, der die über das Netzwerk gesendete Datenmenge reduziert, indem nur die Unterschiede zwischen den Quelldateien und den im Ziel vorhandenen Dateien gesendet werden.. Rsync wird häufig für Backups und Spiegelungen und als verbesserter Kopierbefehl für den alltäglichen Gebrauch verwendet.
Wenn Sie es deaktivieren möchten, müssen Sie die Option -W
oder verwenden --whole-file
.
-W, --whole-file
Diese Option deaktiviert den Delta-Transfer-Algorithmus von rsync, der dazu führt, dass alle übertragenen Dateien vollständig gesendet werden. Die Übertragung kann schneller sein, wenn diese Option verwendet wird, wenn die Bandbreite zwischen Quell- und Zielcomputer höher ist als die Bandbreite zur Festplatte (insbesondere, wenn die „Festplatte“ tatsächlich ein vernetztes Dateisystem ist). Dies ist die Standardeinstellung, wenn sowohl Quelle als auch Ziel als lokale Pfade angegeben sind, aber nur, wenn keine Option zum Stapelschreiben aktiviert ist.
Wenn Sie wirklich wissen, wie stark sich Ihre Datei geändert hat, können Sie dieses Delta-Übertragungsverhalten sogar optimieren, indem Sie Ihre Delta-Blockgröße anpassen:
-B, --block-size=BLOCKGRÖSSE
Dadurch wird die im Delta-Transfer-Algorithmus von rsync verwendete Blockgröße auf einen festen Wert gesetzt. Normalerweise wird sie basierend auf der Größe jeder zu aktualisierenden Datei ausgewählt. Weitere Einzelheiten finden Sie im technischen Bericht.
Und wenn Sie weitere Informationen zum Algorithmus selbst wünschen, finden Sie diese hier:Der Rsync-Algorithmus
Antwort2
Sie haben nach den Optionen --partial
und gesucht --inplace
. Ich habe diese gestern gefunden, da ich einzelne Dateien von 100 GB bis 300 GB über das Netzwerk aktualisieren muss. Es funktioniert auch am besten mit neueren Versionen von rsync. Die in Cygwin scheint überhaupt nicht gut zu funktionieren. Aber von jedem halbmodernen Linux zu Linux ist die Grenze nicht das Netzwerk, sondern die Geschwindigkeit, mit der jedes Ende die bereits übertragenen Dateien lesen kann.
Ich verwende insbesondere dies:
rsync -avPHx --inplace --partial src/foo remote_host:/target/path/
Bearbeiten - Quelle warhttps://fedoramagazine.org/kopieren-großer-dateien-mit-rsync-und-einigen-misconceptions/- Beachten Sie, dass --append
, wie im Quellartikel erwähnt, gefährlich sein kann, da es --append
nicht wie erwartet funktioniert, wenn die Datei wächst UND Änderungen in der Mitte aufweist. Verwenden Sie es im Wesentlichen nur --append
für Dinge wie Protokolldateien, an die immer nur Anhänge angehängt werden.
Antwort3
Was alle über die Funktionsweise von rsync sagen, ist wahr, aber die einzigen Formate, bei denen eine kleine Änderung am Bild wahrscheinlich auch eine kleine Änderung an der Datei zur Folge hat, sind rohe Bitmap-Formate (.bmp, .pnm, einige Arten von .tif). Die üblichen .png- oder JPEG- oder Gimp- oder Photoshop-.xcf- oder .psd-Dateien sind bereits komprimiert, sodass eine kleine Bildänderung höchstwahrscheinlich zu einer fast völlig anderen Datei auf der Festplatte führen würde. Aus diesem Grund scheint der Delta-Algorithmus von rsync ziemlich ineffektiv zu sein.