Funktioniert die Komprimierungsoption -z mit rsync, um die Sicherung zu beschleunigen?


37

In rsync, -zwird Dateidaten während der Übertragung komprimieren.

Wenn ich das richtig verstehe, -zkomprimiere die Dateien vor der Übertragung und dekomprimiere sie dann nach der Übertragung. Übersteigt die Zeit, die während der Übertragung aufgrund der Komprimierung benötigt wird, die Zeit für Komprimierung und Dekomprimierung?

Hängt die Antwort auf die Frage davon ab, ob ich über USB (2.0 oder 3.0) auf eine externe Festplatte oder per SSH über das Internet auf einen Server sichere?


Denken Sie auch daran, wenn die komprimierte Datei sich in der Größe nicht wesentlich von der Originaldatei unterscheidet, kann dies einen enormen Aufwand bedeuten.
Heemayl

1
Um genauer zu sein, was heemayl sagt, wenn der Inhalt größtenteils aus Material besteht, das bereits in einem komprimierten Format vorliegt (JPEG, MPEG, Distributionspakete usw.), ist die Komprimierung viel weniger effektiv. Mir ist aufgefallen, man rsyncdass es tatsächlich eine Liste von Dateiendungen gibt, die auch mit -z(siehe --skip-compress) nicht komprimiert werden .
Goldlöckchen

Antworten:


46

Das ist eine allgemeine Frage. Verbessert die Komprimierung und Dekomprimierung an Endpunkten die effektive Bandbreite einer Verbindung?

Die effektive (wahrgenommene) Bandbreite einer Verbindung, die an Endpunkten Komprimierung und Dekomprimierung durchführt, ist eine Funktion von:

  1. wie schnell du komprimieren kannst (deine CPU Geschwindigkeit)
  2. Die tatsächliche Bandbreite Ihres Netzwerks

Die Funktion wird mit diesem 3D-Diagramm beschrieben, das Sie möglicherweise für Ihre spezielle Situation heranziehen möchten:

Bildbeschreibung hier eingeben

Das Diagramm stammt aus dem Artikel Compression Tools Compared 2005 von http://www.linuxjournal.com/ .


1
Ihre Art von Daten ist auch ein wichtiger Faktor (Faktor 3 fehlt in der Liste). Der verknüpfte Artikel verwendet einen typischen Datenmix. Ihre ist vielleicht nicht typisch. Wenn Sie zu 100% ZIP-Dateien (oder vorkomprimierte Daten) synchronisieren, möchten Sie wahrscheinlich keine Komprimierung. Wenn Sie zu 100% Textdateien synchronisieren, ist die Komprimierung möglicherweise schneller, auch wenn Ihr Netzwerk schnell und Ihre CPU langsam ist. Wägen Sie alle 3 Faktoren ab.
Richard Brightwell

13

Wenn Sie eine sehr langsame Verbindung haben (denken Sie an GPRS), möchten Sie Ihre Daten auf jeden Fall so weit wie möglich komprimieren, da Ihre Verbindung sonst die Geschwindigkeit senkt.

Wenn Sie eine sehr langsame CPU und eine schnelle Verbindung (wie ein eingebettetes Netzwerkgerät) haben, möchten Sie Ihre Daten normalerweise nicht komprimieren, da Ihre CPU sonst die Geschwindigkeit verringert.


3

Hängt davon ab, wie komprimierbar Ihre Daten sind und wie leistungsfähig Ihre Quelle und Ihr Ziel sind. Meiner Erfahrung nach wird ein vollständiges Festplatten-Backup auf etwa 30-50% seiner ursprünglichen Größe komprimiert, sodass es sich möglicherweise lohnt, es einmal auszuprobieren. Andernfalls stören Sie sich nicht an der Komprimierung. Es kann sich lohnen, die Komprimierungsrate mit zu testen pigz -c <your file> | wc -cund die zurückgegebene Größe mit der Originalgröße zu vergleichen.


2

Ja, die Geschwindigkeit der Verbindung bestimmt, ob die Dinge schneller werden. Dies ist nur für die USB-Sicherung mit Aufwand verbunden, da nicht die Datenträger die Daten aufblasen, sondern der Prozess, der die Daten schreibt. Dieselbe Maschine, die es liest und entleert, muss es also auch aufblasen und schreiben. Rsync ist immer noch zwei Prozesse, aber Ihr Speicher, um Daten von einem Prozess zum anderen zu übertragen, ist schnell genug und die CPU benötigt mehr Zeit, um sie zu komprimieren (während Sie sie in denselben Speicher einlesen, der sie später übergibt :).

Komprimierung hilft nur, wenn Sender und Empfänger synchronisiert sind und dazwischen ein langsameres Netzwerk liegt. 1 Gbit ist möglicherweise bereits schnell genug, wenn Sie beispielsweise ein lokales NAS haben. 10 Gbit ist bereits reine SATA-Geschwindigkeit. Daher ist eine Komprimierung nur bei einer Konnektivität von 100 MBit oder weniger erforderlich und nur dann sinnvoll, wenn die komprimierten Daten komprimierbar sind.

Ich denke, Rsync könnte feststellen, dass es nicht auf zwei Maschinen, sondern auf einer läuft und die Komprimierung überspringt, aber nicht sicher ist.


1

tl; dr Über langsame Übertragungsverbindungen komprimieren, sonst nicht. Unten finden Sie einen Test der Kompressionsgeschwindigkeit, einen Link zu einem Tool zur Bandbreitenumwandlung und einige Informationen.

Die Komprimierung mit rsyncbeschleunigt die Arbeit nur, wenn die Zwischenverbindung "langsam genug" ist, dh wenn die Maschine an einem Ende in der Lage ist, einen komprimierten Datenstrom schnell genug zu erzeugen, um die Kommunikationsverbindung zu sättigen.

Also, was ist die langsamste Verbindung, bei der ich die Komprimierung verwenden sollte, um etwas zu erreichen?

Das Folgende ist ein sehr unwissenschaftlicher Test, der zeigt, wie schnell gzipDaten erzeugt werden können und was dies für die allgemeine Komprimierung Ihrer Netzwerk-Massentransfers bedeutet.

Die Eingabedaten ändern das Ergebnis des Tests erheblich . Ich verwende eine unkomprimierte (!) Reguläre Datei auf meinem Computer, die für die Art von Daten repräsentativ sein kann, die ich normalerweise über Netzwerke übertrage. Das Verwenden /dev/zero(Erzeugen von unbegrenzten Nullen) wäre irreführend, da ein Strom von Nullen sehr leicht zu komprimieren wäre, und das Verwenden /dev/randomwäre aus dem entgegengesetzten Grund irreführend. Also verwende ich stattdessen eine tar-Datei meines $HOME/localVerzeichnisses, die Software enthält, die ich in meinem installiert habe $HOME. Die Datei ist an sich nicht komprimiert, enthält jedoch eine Mischung aus Binärdateien, kleinen komprimierten Dateien und Quell- / Textdateien. Würde ich sie mit der Standardeinstellung komprimieren gzip, würde sie um 67% von 64 MiB auf 22 MiB schrumpfen.

$ gzip -c local.tar | dd of=/dev/null
43092+4 records in
43093+1 records out
22063854 bytes transferred in 2.819 secs (7825741 bytes/sec)

Ich mache das ein paar Mal, um ein Gefühl dafür zu bekommen, wie hoch der Durchschnitt sein könnte, und es sind ungefähr 7800000 Bytes / s.

Dann verwende ich einen Netzwerkbandbreitenrechner, um zu sehen, in was dies konvertiert. In diesem speziellen Fall liegt die Kapazität einer verkabelten "100-MB-Ethernet" -Verbindung knapp unter der einer Internet-Uplink-Verbindung mit "VDSL-Download", die etwas schneller ist als eine drahtlose "802.11 [a / g]" -Verbindung und liegt irgendwo Zwischen "Bluetooth v3.0" (langsamer) und "USB 2.0" (schneller).

Dies bedeutet, dass die Komprimierung die Übertragung der Datei verlangsamt , wenn ich eine schnellere Komprimierung verwende.

rsyncmöglicherweise nicht über die Verwendung sein exakt gleichen Bibliotheken wie gzipKompression zu tun, aber die oben Sie zumindest ein wenig eine Andeutung geben würde.

rsyncWie Sie wissen, ist dies jedoch mehr als nur eine Komprimierung, und der eigentliche Geschwindigkeitszuwachs beruht darauf, dass nur [Bits von] Dateien übertragen werden, die sich geändert haben.

Nach meiner eigenen Erfahrung ist die Verwendung von Komprimierung mit rsyncin den letzten 10 Jahren immer weniger vorteilhaft geworden, da sich die Bandbreite der Netzwerke erhöht hat (wo ich mich gerade befinde).

Für inkrementelle Backups würde ich definitiv empfehlen, die --link-destOption zu untersuchen (dies hat nichts mit dem zu tun, was übertragen wird, sondern nur damit, wie Dinge auf dem Ziel gespeichert werden). Wenn Sie dies über SSH tun, verwenden Sie die Komprimierung nicht, wenn Ihre SSH-Verbindung bereits komprimiert ist, und komprimieren Sie aus den gleichen Gründen wie oben nur SSH-Verbindungen (Tunnel usw.), die über langsame Verbindungen laufen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.