Warum verwendet rsync keine Delta-Übertragung für lokale Dateien?

25

Ich habe ein großes ISO-Image, das derzeit von einem Torrent-Client mit aktivierter Speicherplatzreservierung heruntergeladen wird: Das bedeutet, dass sich die Dateigröße nicht ändert, während sich einige Chunks in (4 Mib) aufgrund eines Downloads ständig ändern.

Bei 90% Download mache ich den ersten Rsync, um später Zeit zu sparen:

$ rsync -Ph DVD.iso / media / another-hdd /
Senden einer inkrementellen Dateiliste

DVD.iso
       2.60G 100% 40.23MB / s 0:01:01 (xfer # 1, to-check = 0/1)

Gesendete 2.60 GByte empfangen 73 Bytes 34.59 MByte / Sek
Gesamtgröße ist 2.60G Beschleunigung ist 1.00

Wenn die Datei vollständig heruntergeladen ist, synchronisiere ich sie erneut:

total size is 2.60G   speedup is 1.00

Speedup = 1 besagt, dass Delta-Transfer nicht verwendet wurde, obwohl sich 90% der Datei nicht geändert haben. Das Zielverzeichnis befindet sich auf einem anderen FS und das Kopieren dauert mehrere Minuten. Warum wird nicht versucht, die Übertragung zu beschleunigen ?! Wie kann ich rsyncdie Verwendung von Delta-Transfer erzwingen ?

kolypto
quelle
6
Was Sie tun, ergibt keinen Sinn. Der Zweck von rsync besteht darin, die Übertragung von Dateien über das Netzwerk zu beschleunigen, nicht lokal. Um die Unterschiede zu finden, müssen sowohl die Quelle als auch das Ziel gelesen werden. In der Zeit, die erforderlich ist, um das Ziel lokal zu lesen, um die Unterschiede zu ermitteln, können Sie auch einfach eine normale Kopie erstellen. Laden Sie einfach die Datei in den Zielordner herunter, anstatt sie zu kopieren.
Psusi
1
Delta-xfer wird einfach nicht verwendet, da es bei lokaler Arbeit schneller zu kopieren ist als Hashes zu berechnen. Wenn ja - poste die Antwort bitte :)
kolypto
9
Das Lesen kann unter bestimmten Umständen schneller sein als das Schreiben auf eine lokale Festplatte. Es kann auch den Verschleiß einer SSD verringern. Dies ist sicherlich eine berechtigte Frage und die Antwort ist für mich sehr wertvoll.
HRJ
2
@psusi Betrachten Sie neben dem obigen Kommentar von HRJ auch den Fall, in dem die Zieldatei neu verknüpft wurde (z. B. auf btrfs oder ocfs2). Das Minimieren von Schreibvorgängen während der Synchronisierung kann einen enormen Unterschied für die allgemeine Speichernutzung bedeuten.

Antworten:

20

Laut der Manpage hat psusi recht:

-W, --whole-file : Die Übertragung kann schneller sein, wenn diese Option verwendet wird, wenn die Bandbreite zwischen Quell- und Zielcomputern höher ist als die Bandbreite zur Festplatte (insbesondere, wenn die "Festplatte" tatsächlich ein vernetztes Dateisystem ist). Dies ist die Standardeinstellung, wenn sowohl die Quelle als auch das Ziel als lokale Pfade angegeben sind, jedoch nur, wenn keine Stapelschreiboption aktiviert ist.

liganisch
quelle
10
Oh danke! Ich habe diese Zeile vertuscht :) Um Delta-Trasfer einzuschalten, benutze-no-W
kolypto
1
Auf meinem System -no-Wfunktioniert nur die lange Option nicht -no-whole-file. Ich benötige diesen Schalter, wenn ich ein Backup erstelle und große Dateien (z. B. Images) habe, die nicht dieselbe Änderungszeit haben. Es ist VIEL schneller, die Geschwindigkeit ist 163,26, um diese Dateien mit der Delta-Übertragung auf meinem lokalen Dateisystem zu synchronisieren.
Jesse the Wind Wanderer
6
@JessetheWindWanderer, die lange Option ist --no-whole-file(bitte beachte das Doppel --am Anfang).
Eddie C.
Vielen Dank Eddie C. Ich würde meinen Kommentar ändern, wenn ich herausfinden könnte, wie :-(
Jesse the Wind Wanderer
17

Die direkte Antwort auf diese Frage lautet:

Verwenden Sie das --no-WFlag, um die Delta-Komprimierung zu erzwingen, egal ob lokal oder remote.

Update: Anscheinend steckt in der Geschichte noch mehr. Das delta compressionscheint nur zwischen Empfangs- und Sendevorgang von rsync möglich zu sein. Wenn Sie die Datei in das Dateisystem ausgeben, wird rsyncmöglicherweise die gesamte (n) Datei (en) auch bei eingeschalteter Delta-Komprimierung geschrieben.

Siehe "Wakan Tankas" Untersuchung hier .

HRJ
quelle
2
--no-Win meinem fall immer die ganze datei übertragen. Bitte überprüfen Sie unix.stackexchange.com/questions/291156/…
Wakan Tanka
@ WakanTanka Das ist interessant! Ich habe meine Antwort aktualisiert.
HRJ
3

Standardmäßig erstellt rsync aus verschiedenen Sicherheitsgründen zunächst eine neue Kopie der Zieldatei und ersetzt diese anschließend. Sie können dies außer Kraft setzen, indem Sie --inplacezusammen mit angeben --no-whole-file. Dadurch wird rsync angewiesen, die Zieldatei direkt zu bearbeiten und dabei die verschiedenen Risiken zu berücksichtigen (in der Regel geringfügig in dieser Situation), die in der Manpage dokumentiert sind.

kartik_subbarao
quelle
0

Standardmäßig rsyncwird eine Kopie der Datei am Ziel erstellt und anschließend das Original durch die neue Kopie ersetzt. Dies erfolgt aus Sicherheitsgründen. Was Sie suchen, ist die --inplaceOption, die dazu führt, dass rsyncnur die Teile der Zieldatei geändert werden, die sich im Verhältnis zur Quelle geändert haben.

Für den Anwendungsfall des OP empfehle ich, die Vorbelegung ebenfalls zu deaktivieren, damit eine spärliche Kopie synchronisiert werden kann, was viel schneller ist. Sorgen Sie sich beim Herunterladen nicht um Fragmentierung, es sei denn, Sie verwenden ein sehr altes Dateisystem wie VFAT. Insbesondere Mediendateien werden nicht mit der maximalen Leistung der Speichermedien gelesen, so dass das Defragmentieren eine Verschwendung ist.

Um Ihr Download-Verzeichnis sparsam auf das Ziel-Volume zu kopieren, empfehle ich diese Flags und Operationen in dieser Reihenfolge:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

Beim ersten Durchgang werden neue Dateien sparsam an das Ziel kopiert. Beim zweiten Durchgang werden vorhandene Dateien direkt aktualisiert und nur die Änderungen kopiert

Da es sich um spärliche und direkte Delta-Kopien handelt, können Sie diese wiederholt ausführen, ohne dass viel zusätzliche E / A anfallen. Selbst wenn 20 Torrents gleichzeitig ausgeführt werden, werden die Schreibvorgänge am Ziel nicht verstärkt und die Quell- / Ziel-Volumes werden nicht zerstört.

Wil
quelle
Was meinst du hier mit "spärlich", Wil? Soweit ich das beurteilen kann, spiegelt es nicht wirklich die tatsächliche Bedeutung des Wortes wider.
Julius
@Julius: Das bedeutet genau das, was es bedeutet: Kopieren Sie die Dateien mit vollständiger Unterstützung für eine sparsame Zuweisung. So belegen beispielsweise Ihre 40-GB-HDR-Filme am Zielort nicht mehr Speicherplatz als an der Quelle. Dasselbe gilt für VirtualBox-Festplattenimages. Wie bereits erwähnt, müsste das OP die Vorabzuweisung deaktivieren, damit dies funktioniert.
Wil,