Bei großen Dateien erst komprimieren, dann übertragen oder rsync -z? welches wäre das schnellste

14

Ich habe eine Menge relativ kleiner Datendateien, aber sie nehmen ungefähr 50 GB auf, und ich muss sie auf einen anderen Computer übertragen. Ich habe versucht, den effizientesten Weg zu finden, um dies zu erreichen.

Ich dachte, ich sollte das Ganze gzipen, es dann rsynchen und dekomprimieren, mich auf rsync -z für die Komprimierung verlassen, gzip dann rsync -z verwenden. Ich bin nicht sicher, welches am effizientesten ist, da ich nicht sicher bin, wie genau rsync -z implementiert ist. Irgendwelche Ideen, welche Option die schnellste wäre?


quelle

Antworten:

11

Sie können nicht "das Ganze gzipen", da gzip nur eine Datei komprimiert. Sie können auch eine TAR-Datei erstellen und gzipen, um das Ganze gzipen zu können. Sie verlieren jedoch die rsync-Fähigkeit, nur geänderte Dateien zu kopieren.

Die Frage ist also: Ist es besser, Dateien zu speichern, die ich zum rsync-Gzipen benötige, oder sich auf die Option -z von rsync zu verlassen?
Die Antwort ist wahrscheinlich, dass Sie die Datei nicht auf Ihrem Server entpacken möchten? Ich schätze ja, deshalb sehe ich nicht, wie Sie es schaffen könnten, eine GZIP-Datei zu erstellen, bevor Sie den Rsync durchführen.

Benötigen Sie möglicherweise nicht die rsync-Funktion, um nur geänderte Dateien zu kopieren? In diesem Fall, warum sollten Sie rsync verwenden, anstatt einen scp einer tar.gz-Datei zu erstellen, die Ihre Daten enthält?

Wie auch immer, um die Frage zu beantworten, ist rsync gzip etwas weniger effizient als das Gziping von Dateien mit gzip. Warum ? Da rsync Datenblock für Block gzipt, wird ein kleinerer Satz von Daten verwendet, um die Tabelle zu erstellen, die gzip für die Komprimierung verwendet, ein größerer Satz von Daten (gzip würde die gesamte Datei auf einmal verwenden) ergibt eine bessere Komprimierungstabelle. Aber der Unterschied ist in den meisten Fällen sehr, sehr gering, aber in sehr seltenen Fällen kann der Unterschied wichtiger sein (wenn Sie eine sehr große Datei mit sehr langen Partern haben, die viele Male auf der Datei wiederholen, aber weit voneinander entfernt sind) ein sehr vereinfachtes Beispiel)

Radius
quelle
1
Wie ich seine Frage gelesen habe, wird er komprimieren, um sie über den Draht zu bekommen, und dann die andere Seite dekomprimieren. Ich würde mit Rsync native Komprimierung über gzip gehen, einfach weil das Komprimieren und Dekomprimieren von 50 GB sehr viel Zeit in Anspruch nehmen kann. Wenn es sich bei den Dateien jedoch hauptsächlich um Text handelt, werden sie gut komprimiert. Dritte Option: Kopieren Sie die Dateien auf ein USB-Laufwerk.
3
@Randolph Potter: ja Zeit 50GB verloren lokal zu komprimieren , dann wären rsync höher als die Verwendung von rsync -z, trotzdem , wenn er den Vorteil von rsync nehmen will selbst ( das Kopieren nur geändert Datei) Kompression kann vorher noch nicht gemacht werden
Radius
sehr guter Punkt. +1 für dich :-)
Denken Sie auch daran, dass gzip ein Stream-Kompressor ist.
Falcon Momot
6

Wenn Sie die Daten nur einmal kopieren, ist rsync kein großer Gewinn für sich. Wenn Sie gzip (oder tar + gzip, da Sie viele Dateien haben) mögen, könnten Sie Folgendes ausprobieren:

tar -cz /home/me/source/directory | ssh target tar -xz --directory /home/you/target/directory

Das würde die Komprimierung erhalten, die Sie suchen, und nur direkt kopieren, ohne rsync zu involvieren.

Slartibartfast
quelle
Ich würde dafür wahrscheinlich --lzop anstelle von gzip verwenden ... viel schnellerer und geringerer CPU-Overhead und immer noch gute Komprimierungsraten für Text
unterschreiten den
5

@radius, eine kleine nit zu holen , wie gzipWerke - gzipist ein blockbasierte Kompressionsalgorithmus und eine ziemlich einfache Sorte. Die gesamte Datei wird nicht für die Komprimierungstabelle berücksichtigt - nur für jeden Block. Andere Algorithmen können den gesamten Inhalt der Datei verwenden, und es gibt einige, die den Inhalt mehrerer Blöcke oder sogar unterschiedlich großer Blöcke verwenden. Ein faszinierendes Beispiel ist lrzipderselbe Autor wie rsync!

Der gzipAlgorithmus des Skinny On .

Zusammenfassend rsync -zergibt die Verwendung wahrscheinlich die gleiche Komprimierung wie die gziperste - und wenn Sie eine differenzielle Übertragung durchführen, ist dies aufgrund des rsyncabweichenden Algorithmus besser .

Das heißt, ich denke, man wird feststellen, dass normale scphandliche Beats rsyncfür nicht-differentielle Übertragungen - weil sie viel weniger Overhead haben als rsyncder Algorithmus (der scpsowieso unter der Haube verwendet würde!)

Wenn Ihr Netzwerk nicht zu einem Engpass wird, dann würden Sie Kompression auf dem Draht verwendet werden sollen.

Wenn Ihre Festplatten der Engpass sind, ist das Streaming in eine komprimierte Datei am besten. (zum Beispiel netcatvon einer Maschine zur nächsten, in die gestreamt wird gzip -c)

In der Regel ist das Komprimieren einer vorhandenen Datei im Vorfeld verschwenderisch, wenn die Geschwindigkeit entscheidend ist.

TIMTOWTDI, YMMV, IANAL usw.

Hercynium
quelle
2

Laut diesem Typ ist es möglicherweise nur schneller zu bedienen rsync -z, obwohl ich vermute, dass es fast so effizient ist, als würde man jede Datei zuerst komprimieren, bevor man sie überträgt. Es sollte schneller als das Komprimieren des Teerstroms sein, wie von anderen vorgeschlagen.

Von der Manpage:

          Note  that  this  option  typically  achieves better compression
          ratios than can be achieved by using a compressing remote  shell
          or  a  compressing  transport  because it takes advantage of the
          implicit information in the matching data blocks  that  are  not
          explicitly sent over the connection.
Insyte
quelle
1
Ich würde vorschlagen, --compress-level = 1 mit rsync -z zu verwenden, wenn Sie ein schnelles Netzwerk haben. Sie möchten, dass das Netzwerk Ihr Engpass ist und nicht die CPU- oder Festplatten-E / A, um die Gesamtübertragungszeit zu minimieren. Wenn das Netzwerk langsam ist, kann die Verwendung der Standardeinstellung -z (die meiner Meinung nach gzip -6 entspricht) das Prozessnetzwerk weiterhin binden.
Malayter
1

Da sowohl scp von komprimierten Dateien als auch rsync sehr ähnliche Übertragungszeiten benötigen, ist die "effizienteste Möglichkeit" die direkte Komprimierung und nicht die Komprimierung und Übertragung.

Neben der "Echtheit" umfassen andere Überlegungen:

rsync kann einfach neu gestartet werden, wenn nicht alle Dateien übertragen werden.

Mit rsync können die Dateien auf dem Remotecomputer verwaltet werden.

Für lokales tar oder gzip ist lokaler Speicher erforderlich.

Überlegungen zur Portnutzung sowohl für den Zielcomputer als auch für die Firewalls: 1) scp verwendet Port 22 (standardmäßig), was möglicherweise nicht akzeptabel ist. 2) rsync users port 873 (standardmäßig)

Ich bin nicht sicher, warum Radius erwartet, dass das Originalposter keine entpackten Dateien gespeichert haben möchte.

DGerman
quelle