rsync sobre SSH às vezes muito lento - outras vezes maximiza a largura de banda

2

Eu tenho um script bash configurado no computador A (Mac OS X) definido para ser executado a cada cinco minutos por meio de um cronjob. Este script verifica novos arquivos no computador remoto B (Gentoo Linux) e rsyncs qualquer novo arquivo para o computador A. Às vezes, essa sincronização (download) maximiza a minha conexão a 3 MB / s, no entanto, às vezes, talvez 10% do tempo, baixará na taxa extremamente baixa de 10-50 KB / s. Tenho 100% de certeza de que isso não acontece porque minha conexão com a Internet está acabando / diminuindo, então o que poderia estar com defeito?

O mais estranho é que os trabalhos de rsync que rodam devagar correm devagar o tempo todo. Isto é, se estiver rsincronizando um arquivo de 1 GB, ele sincronizará / baixará em sua velocidade extremamente lenta (10-50 KB / s) a duração total do trabalho até que o 1 GB seja totalmente descarregado. Isso me leva a acreditar que não está relacionado à carga da CPU ou à rede, mas ao script ou a qualquer outra coisa.

Meu script está abaixo.

# !/bin/sh

# Check if rsync has been timestampped and exit if it has
echo "Checking for local timestamp..." >> /Users/localuser/log/rsync.log
if [ -e /Users/localuser/scripts/.timestamp ]
then
        echo "Local timestamp already exists, exiting..." >> /Users/localuser/log/rsync.log
        exit
fi

# Timestamp rsync
echo "Local timestamp not found, continuing..." >> /Users/localuser/log/rsync.log
touch /Users/localuser/scripts/.timestamp

# Timestamp remote computer B
echo "Timestampping remote computer B" >> /Users/localuser/log/rsync.log
ssh remoteuser@remotecomputerb touch /home/remoteuser/finished/.timestamp

# Run rsync
echo "Starting rsync at $(date)" >> /Users/localuser/log/rsync.log
rsync -avzPL -e ssh remoteuser@remotecomputerb:/home/remoteuser/finished /share --log-file /Users/localuser/log/rsync.log

# Change permissions
echo "Changing permissions" >> /Users/localuser/log/rsync.log
chmod -Rf 775 /share
/usr/sbin/chown -Rf localuser:staff /share

# Delete sym links that are older than the remote computer B timestamp
echo "Deleting sym links on remote computer B" >> /Users/localuser/log/rsync.log
ssh remoteuser@remotecomputerb find /home/remoteuser/finished \! -newer /home/remoteuser/finished/.timestamp -type -l -delete

# Delete the rsync script timestamp
echo "rsync finished at $(date)" >> /Users/localuser/log/rsync.log
rm /Users/localuser/scripts/.timestamp

exit 0
    
por crsleeth 14.07.2015 / 23:36

1 resposta

0

Isso pode ser basicamente qualquer coisa, desde o congestionamento do link até o alto uso da CPU no computador remoto. No meio, todos os dispositivos de rede também podem estragar. Especialmente desde que você está bombardeando a porta ssh. Mas os problemas de buffer nos dispositivos de rede também podem ser os culpados.

Uma coisa: na próxima vez, verifique que o rsync não está sendo executado duas vezes. Sim, você criou soluções alternativas no script para evitar isso, mas nunca se sabe ... talvez a pasta seja somente leitura, talvez o sistema de arquivos se comporte de maneira estranha ...

Então, você entende, não temos informações suficientes para responder corretamente.

No entanto, , recomendo que você pare de usar rsync para este caso de uso. Isso é ineficiente e propenso a erros. Como o que você quer é a sincronização constante da pasta, dê uma olhada nos syncthings . Deve funcionar melhor, sem atrasos com a mesma quantidade de abertura e segurança. (o rsync é ótimo para fotos únicas e para backups periódicos, não para sincronizar constantemente pastas)

    
por 15.07.2015 / 00:00