@pdos Antwort ist gut, aber man kann die Geschwindigkeit mit einem Puffer und einer guten Komprimierung erhöhen und einen Fortschrittsbalken hinzufügen.
Oft ist das Netzwerk der Engpass und die Geschwindigkeit variiert mit der Zeit. Daher ist es hilfreich, die Daten vor dem Senden über das Netzwerk zu puffern. Dies kann mit erfolgen pv
.
Außerdem kann man die Geschwindigkeit normalerweise mit einem geeigneten Komprimierungsalgorithmus erhöhen. Gzip (wie oben verwendet) ist ein schneller Komprimierungsalgorithmus, aber im Allgemeinen komprimiert zstandard ( zstd
) (und für hohe Komprimierungsraten LZMA / LZMA2 ( xz
)) besser und ist gleichzeitig schneller. Neue xz und zstd unterstützen bereits mehrere Kerne Zur Verwendung von gzip mit mehreren Kernen kann pigz verwendet werden.
Hier ist ein Beispiel zum Senden von Daten mit einem Fortschrittsbalken, Pufferung und zStandard-Komprimierung über ein Netzwerk:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
Der erste pv
ist, den Fortschritt ( p ), die geschätzte Zeit ( e ), die Übertragungsrate ( r ), die Durchschnittsrate ( a ) und die insgesamt übertragenen Bytes ( b ) anzuzeigen . Die Gesamtgröße wird geschätzt , mit du
und auf die Größe Option hinzugefügt ( s ). Der Fortschritt wird vor dem Komprimieren und Puffern gemessen, daher ist er nicht sehr genau, aber dennoch hilfreich.
zstd
wird mit der Komprimierungseinstellung 14 verwendet . Diese Anzahl kann je nach Netzwerk und CPU-Geschwindigkeit verringert oder erhöht werden, sodass zstd etwas schneller ist als die Netzwerkgeschwindigkeit. Mit vier Kernen auf einer Haswell-3,2-GHz-CPU erreicht 14 eine Geschwindigkeit von rund 120 MB / s. Im Beispiel wird der lange Modus 31 (verwendet ein 2-GB-Fenster, benötigt viel RAM, ist aber sehr gut, um z. B. Datenbank-Dumps zu komprimieren) verwendet. Mit der Option T0 wird die Anzahl der Threads auf die Anzahl der Kerne festgelegt. Man sollte sich darüber im Klaren sein, dass diese Einstellungen zusammen mit dem Langzeitmodus viel Speicher beanspruchen.
Ein Problem mit zstd ist, dass die meisten Betriebssysteme nicht mit Version> = 1.3.4 ausgeliefert werden. Diese Version ist für eine ordnungsgemäße Unterstützung mit mehreren Kernen und für eine lange Lebensdauer erforderlich. Falls nicht verfügbar, kann es von https://github.com/facebook/zstd mit just kompiliert und installiert werden make -j4 && sudo make install
. Anstelle von zstd kann auch xz oder pigz verwendet werden. xz ist langsam, komprimiert aber sehr gut (gut über langsame Verbindungen), pigz / gzip ist schnell, komprimiert aber nicht so gut.
pv
wird dann wieder verwendet, aber zum Puffern ( q
für leise, C
für den No-Splice-Modus [immer zum Puffern benötigt] und B
zum Einstellen der Puffergröße).
Im Beispiel wird auch empfängerseitig ein Puffer verwendet. Dies ist häufig unnötig (da die Dekomprimierungs- und Festplatten-Schreibgeschwindigkeit meistens höher ist als die Netzwerkgeschwindigkeit), schadet aber normalerweise auch nicht.