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 (ainda não cronometrei). Existe maneira de tornar isso mais rápido? Devo estar usando outra ferramenta? Devo usar o rsync sobre ssh em vez de usar o protocolo rsync?
stat()
.-a
mas-r
?Respostas:
Você precisa determinar o gargalo. Não é rsync. Provavelmente não é a largura de banda da sua rede. Como o @Zoredache sugeriu, é provavelmente o grande número de Iops gerados por todas as
stat()
chamadas. Qualquer ferramenta de sincronização precisará declarar os arquivos. Durante a sincronização, executeiostat
para verificar.Então a questão se torna; como otimizar stat? Duas respostas fáceis:
noatime
e adicione adir_index
).Se, por algum motivo, não for o seu IOP de disco que é o limite, experimente dividir a árvore de diretórios em várias árvores distintas e executar vários rsyncs.
fonte
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. Tente o
rsync
comando sem a-z
bandeira.ssh
é bom para segurança, mas não agiliza a transferência. De fato, 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, porque 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, poisrsync
é inteligente não transferir arquivos que não foram alterados.fonte
rsync
cliente, ele usará o SSH nos bastidores. Você precisa fazer o possível para desativar a criptografia ao usar o rsync. Veja: stackoverflow.com/a/1821574/64911Qual versão do rsync você está usando? Qualquer coisa mais antiga que a 3.0.0 (nas duas extremidades) não possui o recurso de lista de arquivos incremental, que acelera grandes transferências.
fonte
Adicione
-v --progress
à sua linha de comando rsyncO rsync é feito em 2 etapas:
Se você estiver executando o rsync milhares de arquivos pequenos em diretórios aninhados, pode ser que o rsync passe a maior parte do tempo entrando em subdiretórios e localizando todos os arquivos
Se não houver tempo gasto na navegação, o tempo pode ser simplesmente devido à adição de todas as latências iniciando cada nova transferência de arquivo.
fonte
Caso estejam envolvidos sistemas de arquivos ext3 ou ext4, verifique se ambos têm o recurso dir_index ativado! Isso triplicou o rendimento do rsync no meu caso.
Veja os detalhes na minha resposta em: /server//a/759421/80414
fonte