La risposta di @pdo è buona, ma si può aumentare la velocità con un buffer e una buona compressione e aggiungere una barra di avanzamento.
Spesso la rete è il collo di bottiglia e la velocità varia nel tempo. Pertanto, aiuta a bufferizzare i dati prima di inviarli sulla rete. Questo può essere fatto con pv
.
Inoltre, di solito si può aumentare la velocità con un algoritmo di compressione adeguato. Gzip (come usato sopra) è un algoritmo di compressione veloce, ma in generale zstandard ( zstd
) (e per rapporti di compressione elevati LZMA / LZMA2 ( xz
) comprimerà meglio e sarà più veloce allo stesso tempo. I nuovi xz e zstd hanno già il supporto multi core integrato Per usare gzip con più core è possibile utilizzare pigz.
Ecco un esempio per inviare dati con una barra di avanzamento, buffering e compressione zstandard su una rete:
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 -"
Il primo pv
è mostrare l'avanzamento ( p ), il tempo stimato ( e ), la velocità di trasferimento ( r ), la velocità media ( a ), i byte totali trasferiti ( b ). La dimensione totale è stimato con du
e aggiunto l'opzione di dimensione ( s ). L'avanzamento viene misurato prima della compressione e del buffering, quindi non è molto preciso, ma comunque utile.
zstd
viene utilizzato con l'impostazione di compressione 14 . Questo numero può essere ridotto o aumentato a seconda della velocità della rete e della CPU, quindi zstd è un po 'più veloce della velocità della rete. Con quattro core su una CPU Haswell 3.2 GHz 14 offre una velocità di circa 120 MB / s. Nell'esempio, viene utilizzata la modalità lunga 31 (utilizza una finestra da 2 GB, richiede molta RAM, ma è molto buona, ad esempio per comprimere i dump del database). Le opzioni T0 impostano la quantità di thread sul numero di core. Bisogna essere consapevoli del fatto che insieme alla modalità lunga queste impostazioni utilizzano molta memoria.
Un problema con zstd è che la maggior parte dei sistemi operativi non viene fornita con la versione> = 1.3.4. Questa versione è necessaria per un corretto supporto multi core e lungo. Se non disponibile, può essere compilato e installato da https://github.com/facebook/zstd con solo make -j4 && sudo make install
. Invece di zstd, si può anche usare xz o pigz. xz è lento ma si comprime molto bene (buono su connessioni lente), pigz / gzip è veloce ma non si comprime molto bene.
pv
viene quindi riutilizzato, ma per il buffering ( q
per quiet, C
per la modalità no splice [sempre necessaria per il buffering] e B
per impostare la dimensione del buffer).
Nell'esempio viene utilizzato anche un buffer sul lato ricevitore. Questo spesso non è necessario (poiché la velocità di decompressione e di scrittura sul disco rigido è per lo più superiore alla velocità della rete), ma di solito non danneggia neanche.