Quão? Ou TL; DR
O método mais rápido que encontrei é uma combinação de tar
, mbuffer
e ssh
.
Por exemplo:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Com isso, obtive transferências sustentadas de rede local acima de 950 Mb / s em links de 1Gb. Substitua os caminhos em cada comando tar para ser apropriado para o que você está transferindo.
Por quê? mbuffer!
O maior gargalo na transferência de arquivos grandes por uma rede é, de longe, a E / S do disco. A resposta para isso é mbuffer
ou buffer
. Eles são amplamente similares, mas mbuffer
têm algumas vantagens. O tamanho padrão do buffer é 2 mbuffer
MB e 1 MB buffer
. Buffers maiores têm maior probabilidade de nunca ficarem vazios. Escolher um tamanho de bloco que seja o menor múltiplo comum do tamanho de bloco nativo no sistema de arquivos de destino e de destino dará o melhor desempenho.
O buffer é a coisa que faz toda a diferença! Use-o se tiver! Se você não tiver, pegue! Usar (m}?buffer
mais qualquer coisa é melhor do que qualquer coisa por si só. é quase literalmente uma panacéia para transferências lentas de arquivos de rede.
Se você estiver transferindo vários arquivos, use-os tar
para "agrupá-los" em um único fluxo de dados. Se for um único arquivo, você poderá usar cat
o redirecionamento de E / S. A sobrecarga de tar
vs. cat
é estatisticamente insignificante, então eu sempre uso tar
(ou zfs -send
onde posso), a menos que já seja um tarball . Não é garantido que nenhum desses fornece metadados (e, em particular cat
, não). Se você quiser metadados, deixarei isso como um exercício para você.
Finalmente, o uso ssh
de um mecanismo de transporte é seguro e carrega muito pouco em cima. Novamente, a sobrecarga de ssh
vs. nc
é estatisticamente insignificante.