La réponse de @ pdo est bonne, mais on peut augmenter la vitesse avec un tampon et une bonne compression et ajouter une barre de progression.
Le réseau est souvent le goulot d’étranglement et la vitesse varie avec le temps. Par conséquent, il est utile de mettre les données en mémoire tampon avant de les envoyer sur le réseau. Cela peut être fait avec avec pv
.
De plus, on peut généralement augmenter la vitesse avec un algorithme de compression approprié. Gzip (comme utilisé ci-dessus) est un algorithme de compression rapide, mais en général zstandard ( zstd
) (et pour des taux de compression élevés, LZMA / LZMA2 ( xz
) se compressera mieux et sera plus rapide en même temps. Les nouveaux xz et zstd ont déjà un support multi-core intégré Pour utiliser gzip avec plusieurs noyaux, vous pouvez utiliser pigz.
Voici un exemple pour envoyer des données avec une barre de progression, une mise en mémoire tampon et une compression zstandard sur un réseau:
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 -"
La première pv
consiste à afficher la progression ( p ), la durée estimée ( e ), le taux de transfert ( r ), le débit moyen ( a ), le nombre total d'octets transférés ( b ). La taille totale est estimée avec du
et ajouté à l'option de taille ( s ). La progression est mesurée avant la compression et la mise en mémoire tampon. Par conséquent, elle n’est pas très précise mais reste utile.
zstd
est utilisé avec le réglage de compression 14 . Ce nombre peut être réduit ou augmenté en fonction du réseau et de la vitesse du processeur, ainsi zstd est un peu plus rapide que la vitesse du réseau. Avec quatre cœurs sur un processeur Haswell à 3,2 GHz 14, la vitesse est d’environ 120 Mo / s. Dans l'exemple, le mode long 31 (utilise une fenêtre de 2 Go, nécessite beaucoup de mémoire vive, mais est très utile, par exemple, pour compresser les vidages de base de données). Les options T0 définissent le nombre de threads sur le nombre de cœurs. Il faut savoir que, avec le mode long, ces paramètres utilisent beaucoup de mémoire.
Un problème avec zstd est que la plupart des systèmes d'exploitation ne sont pas livrés avec la version> = 1.3.4. Cette version est nécessaire pour un support multi-core et long correct. S'il n'est pas disponible, il peut être compilé et installé à partir de https://github.com/facebook/zstd avec just make -j4 && sudo make install
. Au lieu de zstd, on peut aussi utiliser xz ou pigz. xz est lent mais compresse très bien (bon pour les connexions lentes), pigz / gzip est rapide mais compresse moins bien.
pv
est ensuite utilisé à nouveau, mais pour la mise en mémoire tampon ( q
pour le mode silencieux, C
pour le mode sans raccordement (toujours nécessaire pour la mise en mémoire tampon) et B
pour définir la taille de la mémoire tampon).
Dans l'exemple, un tampon est également utilisé du côté du récepteur. Cela est souvent inutile (car la vitesse de décompression et d’écriture sur le disque dur est généralement supérieure à la vitesse du réseau), mais ne nuit généralement pas non plus.