Eu precisava transferir um arquivo vdisk de 20 GB KVM , armazenando o sistema de arquivos raiz de uma VM do CentOS 6.5, de um servidor de laboratório para outro. O tamanho do arquivo grande e o fato de eu ter compactado um arquivo vdisk para algumas centenas de mega-bytes me instintivamente ativaram a compactação, scp
mas fiquei surpreso ao ver uma velocidade de transferência bastante baixa. Então eu tentei bzip2
em combinação com ssh
e fiquei cat
surpreso. Aqui está o resumo dos métodos e da taxa de transferência média.
scp -C vm1-root.img [email protected]:/mnt/vdisks/
, 11 MB / s.bzip2 -c vm1-root.img | ssh -l root 192.168.161.62 "bzip2 -d -c > /mnt/vdisks/vm1-root.img"
, 5 MB / s. Esse resultado ainda mais baixo levou à pesquisa na Internet.scp -c arcfour -C vm1-root.img [email protected]:/mnt/vdisks/
13 MB / s. Esse uso de-c arcfour
como foi sugerido em uma resposta em falha do servidor. Isso dificilmente ajudou. Por fim, desativei a compactação.scp vm1-root.img [email protected]:/mnt/vdisks/
23 MB / s.
A compressão não deveria ter sido mais rápida?
Edição: Eu não sei por que a questão foi votada. Eu pensei que há algo a ser aprendido aqui.
Depois de receber a ssh(1)
dica da página de manual do @sven, tentei alguns métodos alternativos de transferência de arquivos que não envolviam compactação, ambos com melhores resultados.
cat vm1-root.img | ssh -l root 192.168.161.62 "cat > /mnt/vdisks/vm1-root.img"
, 26 MB / s.nc -l 5678 > /mnt/vdisks/vm1-root.img
no receptor enc 192.168.161.62 5678 < vm1-root.img
no transmissor, 40 MB / s. A porta5678
é arbitrária e estava disponível.
Usar nc
acabou sendo o método de cópia mais rápido!
No passado, scp -C
funcionava muito bem sempre que eu pensava. Por exemplo, ao transferir syslogs ( /var/log/messages*
) de poucos GBs de tamanho. Uma taxa de transferência não compactada de algumas centenas de KB / s aumentaria para 1-2 MB / s. Este exemplo ocorre no caso de uma conexão lenta, como foi indicado na página do manual.
Eu tenho um caso em que, uma imagem vdisk recém-criada para uma partição de 20 GB tem um tamanho compactado de apenas 200 MB. Com uma taxa de transferência de cerca de 25 MB / s, poderíamos fazer a cópia em apenas 8 segundos, em vez de mais de 13 minutos! Claramente, scp
sem compactação é ineficiente nesse caso e scp -C
é ainda pior.
Acho que a principal lição aprendida aqui é que isso scp -C
deve ser pensado apenas como uma conveniência. Se um arquivo puder ser compactado significativamente, é melhor compactá-lo primeiro na origem, transferir o formulário compactado e finalmente descompactar no destino. As ferramentas que executam a compactação e descompactação rapidamente (por exemplo, pbzip2 ) serão de grande ajuda.
fonte
scp
inclui o tempo gasto na compactação / descompactação. Os valores relatados pareceriam surpreendentes se não fosse esse o caso.Além disso, além da compactação, o nc obtém a melhor taxa porque também não criptografa. E a compactação sem perdas depende da localização de seções redundantes dos dados, que, quando feitas no nível da rede, você pode ver no máximo [bytes de tamanho do buffer] bytes, quando, quando feito com o arquivo inteiro primeiro, são bytes [do tamanho do arquivo] dentro do qual caçar e processar frases de bytes duplicadas.
Também para mover imagens de disco, você deve usar uma ferramenta compatível com o sistema de arquivos, como ntfsclone / partclone, porque mesmo a compactação não consegue superar os blocos não alocados - sua taxa de transferência é infinita se você não precisar transferir nenhum dado. Além disso, não se esqueça de destruir os arquivos de troca e hibernação em uma partição do Windows ou, se você estiver copiando o lixo, ele será descartado e recriado de qualquer maneira.
fonte