Cópia mais rápida de arquivos dentro do diretório sshfs (rsync?)

2

Eu tenho um diretório em um servidor remoto remote1 , montado via sshfs. Eu estou instalando novas versões de alguns dos arquivos no diretório remoto, que são bastante grandes (~ 50M).

Atualmente estou usando

rsync -a --in-place local/file.so remote1/file.so~new

para copiar os arquivos para o diretório remoto e, em seguida,

rsync -a --in-place remote1/file.so~new remote1/file.so .

O segundo rsync é mais lento do que eu gostaria e eu suspeito que ele esteja baixando os dados do arquivo via ssh antes de reenviá-los, ao invés de copiar no sistema remoto.

Eu preferiria manter o arquivo file.so~new como backup (estou alternando entre o arquivo novo e original), e é por isso que não estou usando mv .

Eu não tenho um programa rsync no host remoto, e é por isso que não estou usando um comando rsync padrão, mas estou usando o rsync para evitar recopiar quando o arquivo já estiver no lugar.

Existem opções de linha de comando que melhorarão a velocidade de cópia? Eu estaria melhor usando scp ou sftp? Em caso afirmativo, como eu verificaria se o arquivo não foi alterado (tempo e tamanho), para que eu não copie desnecessariamente se o arquivo já estiver no lugar.

Minha melhoria mais recente é fazer upload de duas novas cópias e, em seguida, usar mv para renomear uma delas. Não há melhor maneira?

    
por Mark Perryman 19.01.2016 / 17:56

1 resposta

3

Quando rsync acredita que está acessando a origem e o destino no mesmo host, ele não usa a transferência incremental. Em vez disso, copia simplesmente o arquivo inteiro.

Esta é a situação no seu caso. Como resultado, seu segundo comando está copiando o file.so~new em seu link de fusível ssh para o host local e copiando-o imediatamente de volta.

Há algo errado em usar isso?

mv remote1/file.so~new remote1/file.so

Para obter a velocidade mais rápida, você não deve tentar executar rsync over sshfs , mas sim permitir que ele converse diretamente com o servidor remoto (acima de ssh ). Você poderia então usar a variante simples:

rsync -av local/file.so remote:path/to/file.so

O novo arquivo não será instalado até que tenha sido completamente copiado e você tenha a vantagem de poder usar a biblioteca antiga como base para a nova.

    
por 19.01.2016 / 21:35