Por que meu rsync é tão lento em comparação com cp puro ou mesmo scp?

15

Estou transferindo os arquivos do Linux para o Windows 7 por meio de um compartilhamento montado (o compartilhamento é montado no Windows no Linux). Estou copiando muitos dados (ou seja, quase um TB) da antiga para a nova máquina na minha LAN . Já sou infeliz o suficiente para ter apenas 100 MBit. Naturalmente, usei cegamente o rsync, mas depois de um dia me perguntava por que parecia tão lento. A ativação do medidor de progresso mostrou uma taxa de transferência de cerca de 2 MB / s.

Então, peguei um arquivo grande razoável (800 MB) e acompanhei o tempo de transferência (1):

cp : 05:33
scp (2): 06:33
rsync : 21:51

1) apaguei os arquivos entre cada execução
2) scp via localhost para a mesma máquina Linux diretamente no compartilhamento; completamente inútil, mas forneceu um medidor de progresso

Os testes foram tão simples quanto

(cp|scp|rsync) <source> <destination>

Nenhum argumento especial, exceto host / porta para scp. Eu até tentei o -Wswitch para rsync, mas cancelei após dez minutos. O rsync é 3.0.3 rodando em Lenny. Ser capaz de interromper o processo de cópia a qualquer momento e continuar me leva ao rsync, mas agora acho que preciso seriamente reconsiderar esse requisito.

Como é possível uma diferença tão grande?

Atualização / Resolvido:

Graças ao rschuler , consegui resolver o problema: use o daemon rsync em vez da montagem smb por razões de eficiência. O referido DeltaCopy funciona, mas é preciso prestar atenção em algumas coisas

  • é um bom invólucro da GUI, mas se algo der errado, é bom saber como corrigi-lo. Parece que inseri minhas credenciais de usuário, nas quais executar o serviço rsync, estava errado na primeira vez, mas a GUI não me permitiu definir uma nova. Eu descobri que estava sendo executado como um serviço e foi capaz de definir as credenciais apropriadas lá
  • Necessário adicionar manualmente a porta ao firewall para permitir conexões
  • Gosto pessoal: garanta que os compartilhamentos sejam protegidos por senha ou, se estiverem sem, talvez garanta que o serviço não seja iniciado automaticamente pelo Windows; apenas no caso de
  • O binário rsync empacotado não é uma porta nativa do Windows, mas baseia-se no cygwin. No entanto, a DLL cygwin contida não manipula UTF8 corretamente e desconfigura caracteres não-ascii. Obtenha uma DLL corrigida em http://www.okisoft.co.jp/esc/utf8-cygwin/ .

Depois disso, a transferência classificada saltou de 2 MB / s para ~ 8 MB / s; absolutamente fantástico!

marca
fonte
Você excluiu o arquivo de destino entre cada execução de seu teste? Se o arquivo de destino já existisse e os metadados não estivessem corretos, seria necessário somar a origem e o destino.
Zoredache
@ Zoredache: apaguei os arquivos entre as execuções; também o -Wswitch deve ignorar isso
marque

Respostas:

18

(o compartilhamento é montado no Windows no Linux)

Esse é o seu problema. O rsync está rolando somas de verificação sobre o destino. As janelas compartilham. Você está puxando todos os dados pela rede para calcular as somas de verificação. (Possivelmente mais de uma vez).

O que você precisa fazer é ter o rsync em execução nas duas máquinas. Dessa forma, apenas as diferenças (e somas de verificação) serão transferidas pelo cabo de rede. DeltaCopy é um rsync com janelas. Tem documentos bons o suficiente para você continuar.

Veja a resposta votada para esta pergunta para uma explicação melhor por que eu acho que você pode estar usando mal o rsync.

Rodney Schuler
fonte
Bingo, sua resposta não poderia ser mais direta. Muito obrigado, eu aprendi minha lição.
marca