netzwerkdude
Goto Top

Rsync datenvolumen reduzieren mit -fuzzy

Moin,

aus der Kategorie "Häufig übersehene Parameter":
Meistens benutzt kaum jemand den --fuzzy Parameter von rsync, und er taucht kaum im Anleitungen auf, schade, denn er kann viel netzwerktraffik sparen.

fuzzy dient dazu dateien im ziel ggf. aus bereits vorhandenen dateien (im selben Ordner) zu konstruieren, ohne die Dateien über die Leitung zu schicken, ein Beispiel:

Wir erstellen auf dem Remotesystem (Quelle) ein zufälliges 10MB Textfile:
base64 /dev/urandom | head -c 0000000 > v1.txt

Und transferieren es auf unser lokales System (Ziel):
rsync -avhP --stats --fuzzy -e ssh:192.0.2.1:/remotequellordner /lokalerzielordner

Ergebnis:

receiving incremental file list
./
v1.txt
10.00M 100% 86.70MB/s 0:00:00 (xfr#1, to-chk=0/2)

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 0
Number of deleted files: 0
Number of regular files transferred: 1
Total file size: 10.00M bytes
Total transferred file size: 10.00M bytes
Literal data: 10.00M bytes
Matched data: 0 bytes
File list size: 51
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 19.04K
Total bytes received: 10.00M

sent 19.04K bytes received 10.00M bytes 1.82M bytes/sec
total size is 10.00M speedup is 1.00

Wie zu erwarten ist, wurden 10MB übertragen, okay

Jetzt machen wir vom v1.txt eine Kopie und hängen sagen wir mal hinten noch ein zufälliges MB dran und nennen die neue Datei v1+1mb.txt
cat v1.txt <(base64 /dev/urandom | head -c 1000000) > v1+1mb.txt

und führen den selben rsync lauf nochmal aus, das Ergebnis:
(...)
Total file size: 21.00M bytes
Total transferred file size: 11.00M bytes
Literal data: 1.00M bytes
Matched data: 10.00M bytes
Total bytes received: 1.01M
(...)
Oh! Es wurden 11MB transferiert aber nur 1.01MB Empfangen - Magick!


Nun hintendran kann man immer Zeug anhängen, wir ändern jede 10000ste Zeile und schauen was passiert:
cat v1.txt | sed '0~10000 s/^/jede10000ste/' > v1mod.txt  
Und transferrieren das ganze mit dem selben rsync befehl:
(...)
Total file size: 31.00M bytes
Total transferred file size: 10.00M bytes
Literal data: 38.05K bytes
Matched data: 9.96M bytes
Total bytes received: 50.88K
(...)
Auch hier 10MB tranferiert, aber nur 50,88KB über die Leitung übertragen


Nun, Textfiles sind ja langweilig, wie schauts aus in der Praxis?
Hier ein Backup das ich tägliche fahre (Alle möglichen Files auf einem Allzweckfileserver)
(...)
Total file size: 19.69T bytes
Total transferred file size: 739.05G bytes
Literal data: 29.37G bytes
Matched data: 709.68G bytes
Total bytes sent: 99.05M
Total bytes received: 29.59G
(...)
--> 739GB übertragen, dabei ganze 709,68GB matched - pretty nice face-smile


Wann lohnt sich also fuzzy?
Wenn ihr genügend Storage und CPU Performacne habt, aber nur eine dünne Leitung zwischen den Servern

Bei welchen files funktioniert fuzzy?
Schlecht bei binarys, gut bei "lesbaren" Dateien - so z.B. auch bei AutoCAD Files im ASCII: 1GB Spaceship_v1 und 1GB Spaceship_v2 -> werden nur die Ändeurngen übertragen.

Noch einige Limitationen des Verfahrens bzw. grundsätzliche Anmerkungen:
- Sind die ändeurungen zu kleinteilig, werden Sie nicht mehr erfasst, also ersetzt man z.B. jedes vorkommende "A" durch "B" im File, wird das ganze File übertragen.
- Heißt die neue Datei nicht mehr "ähnlich" wie die Vergleichsdateien (also z.B. wir machen eine leicht modifizierte Datei, nennen Sie aber "ABABABABABABAABABABABABABAABA.txt") greift auch hier der Vergleichalgorithmus nicht mehr.
- fuzzy nimmt auch umbenennungen mit, daher stecken in der oberen Statistik auch "simple" umbennennungen drin
- am besten mit --delete-delay kombinieren, weil dann auch gelöschte Dateien berücksichtig werden beim Vergleich
- natürlich immer auch mit anderne Parametern kombinierbar, wie kompression (-z) usw.
- lest die manpages von rsync face-smile

MFG
N-Dude

Content-ID: 586547

Url: https://administrator.de/contentid/586547

Printed on: December 14, 2024 at 16:12 o'clock

monstermania
monstermania Aug 04, 2020 at 10:06:04 (UTC)
Goto Top
Hmm,
ich werde das demnächst mal austesten, sehe aber im Augenblick nicht den großen Vorteil, den das bringen soll.
rsync arbeitet ja eh schon blockbasierend, so dass bei großen Dateien nur geänderte Dateiblöcke übertragen werden. Von daher sind Deine Tests nicht aussagekräftig, da Deine Messungen nichts mit 'fuzzy' zu tun haben.

So wie ich die fuzzy-option verstehe, bringt das nur etwas, wenn auf der Quelle ganze Datei- oder Ordnerstrukturen umbenannt wurden. Hier wird dann auf bereits im Ziel vorhandene Dateien gematcht.