Como acelerar o rsync para arquivos pequenos

14

Estou tentando transferir milhares de arquivos pequenos de um servidor para outro usando o seguinte comando:

rsync -zr --delete /home/user/ [email protected]::backup

Atualmente, a transferência demora muito tempo (eu não a sincronizei). Existe maneira de tornar isso mais rápido? Devo estar usando outra ferramenta? Devo estar usando o rsync sobre o ssh em vez de usar o protocolo rsync?

    
por Noodles 01.03.2012 / 02:29

5 respostas

13

Você precisa determinar o gargalo. Não é rsync. Provavelmente não é a largura de banda da sua rede. Como @Zoredache sugeriu que é muito provável que o enorme número de iops gerados por todas as chamadas stat() . Qualquer ferramenta de sincronização precisará dos arquivos. Enquanto sincroniza, execute iostat para verificar.

Então a questão se torna; como otimizar stat? Duas respostas fáceis:

  1. obtenha um subsistema de disco mais rápido (nos dois hosts, se necessário) e
  2. ajuste seu sistema de arquivos (por exemplo, para montagem ext3 com noatime e adicione dir_index ).

Se por algum acaso não for o seu limite de disco que é o limite, você pode experimentar dividir a árvore dir em várias árvores distintas e executar vários rsyncs.

    
por 01.03.2012 / 03:24
5

A compactação não é muito útil para arquivos pequenos (digamos, menos de 100 bytes). Para arquivos pequenos, às vezes, a versão compactada pode ser ainda maior que a original. Experimente o comando rsync sem o sinalizador -z .

ssh é bom para segurança, mas não agiliza a transferência. Na verdade, isso tornaria a transferência mais lenta devido à necessidade de criptografia / descriptografia.

rsync pode não parecer rápido na primeira vez em que é executado, pois há muitos dados para transferir. No entanto, se você planeja executar esse comando periodicamente, as execuções subseqüentes podem ser muito mais rápidas, pois rsync é esperto em não transferir arquivos que não foram alterados.

    
por 01.03.2012 / 02:39
1

Qual versão do rsync você está usando? Qualquer coisa mais antiga que a 3.0.0 (em ambas as extremidades) não tem o recurso de lista de arquivos incremental, o que acelera grandes transferências.

    
por 01.03.2012 / 03:30
0

Adicione -v --progress à sua linha de comando do rsync

O rsync é feito em duas etapas:

  1. navegue por todos os arquivos em ambas as plataformas para comparar seu tamanho e data
  2. faça a transferência real

Se você estiver rsync com milhares de arquivos pequenos em diretórios aninhados, pode ser simplesmente que o rsync gasta a maior parte desse tempo indo para subdiretórios e localizando todos os arquivos

Se o tempo não for gasto para navegação, o tempo pode ser simplesmente devido à adição de todas as latências a partir de cada nova transferência de arquivos.

    
por 01.03.2012 / 11:01
0

Caso os sistemas de arquivos ext3 ou ext4 estejam envolvidos, verifique se ambos têm o recurso dir_index ativado! Isso triplicou o throughput rsync no meu caso.

Veja os detalhes na minha resposta em: link

    
por 24.02.2016 / 12:01

Tags