A resposta do @ pdo é boa, mas é possível aumentar a velocidade com um buffer e uma boa compactação e adicionar uma barra de progresso.
Muitas vezes, a rede é o gargalo e a velocidade varia com o tempo. Portanto, ajuda a armazenar em buffer os dados antes de enviá-los pela rede. Isso pode ser feito com pv
.
Além disso, geralmente é possível aumentar a velocidade com um algoritmo de compactação adequado. O gzip (como usado acima) é um algoritmo de compactação rápido, mas em geral o zstandard ( zstd
) (e para altas taxas de compactação, o LZMA / LZMA2 ( xz
) compacta melhor e fica mais rápido ao mesmo tempo. Os novos xz e zstd têm suporte para vários núcleos Para usar o gzip com múltiplos núcleos, o pigz pode ser usado.
Aqui está um exemplo para enviar dados com uma barra de progresso, buffer e compactação zstandard em uma rede:
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 -"
O primeiro pv
é mostrar o progresso ( p ), tempo estimado ( e ), taxa de transferência ( r ), taxa média ( a ), total de bytes transferidos ( b ). O tamanho total é estimada com du
e adicionou-se a opção (tamanho s ). O progresso é medido antes da compactação e do buffer, portanto, não é muito preciso, mas ainda é útil.
zstd
é usado com a configuração de compactação 14 . Esse número pode ser reduzido ou aumentado dependendo da velocidade da rede e da CPU, portanto o zstd é um pouco mais rápido que a velocidade da rede. Com quatro núcleos em uma CPU Haswell de 3,2 GHz 14, a velocidade é de cerca de 120 MB / s. No exemplo, o modo longo 31 (usa uma janela de 2 GB, precisa de muita RAM, mas é muito bom, por exemplo, para compactar despejos de banco de dados). As opções T0 configuram a quantidade de encadeamentos para o número de núcleos. Deve-se estar ciente de que, juntamente com o modo longo, essas configurações usam muita memória.
Um problema com o zstd é que a maioria dos sistemas operacionais não é fornecida com a versão> = 1.3.4. Esta versão é necessária para o suporte multi core e longo adequado. Se não estiver disponível, ele pode ser compilado e instalado em https://github.com/facebook/zstd com apenas make -j4 && sudo make install
. Em vez de zstd, também é possível usar xz ou pigz. xz é lento, mas compacta muito bem (bom em conexões lentas), pigz / gzip é rápido, mas compacta não tão bem.
pv
é usado novamente, mas para o buffer ( q
para silencioso, C
para o modo sem emenda [sempre necessário para o buffer] e B
para definir o tamanho do buffer).
No exemplo, um buffer também é usado no lado do receptor. Isso geralmente é desnecessário (porque a velocidade de descompactação e gravação no disco rígido é mais alta que a velocidade da rede), mas geralmente não causa danos.