Quão? Ou TL; DR
O método mais rápido que encontrei é uma combinação de tar, mbuffere 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 é mbufferou buffer. Eles são amplamente similares, mas mbuffertêm algumas vantagens. O tamanho padrão do buffer é 2 mbufferMB 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}?buffermais 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 tarpara "agrupá-los" em um único fluxo de dados. Se for um único arquivo, você poderá usar cato redirecionamento de E / S. A sobrecarga de tarvs. caté estatisticamente insignificante, então eu sempre uso tar(ou zfs -sendonde 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 sshde um mecanismo de transporte é seguro e carrega muito pouco em cima. Novamente, a sobrecarga de sshvs. ncé estatisticamente insignificante.