Como sincronizar um arquivo grande, com o mínimo possível de despesas de CPU e largura de banda?

13

Eu tenho um arquivo de 500 GB que pretendo fazer backup remotamente. O arquivo muda frequentemente. Vou sincronizá-lo de uma área de trabalho para um servidor. Ambos podem executar o cliente ou servidor rsync.

Qual é o comando adequado para isso? As que eu tentei sofar estão demorando para sempre ou simplesmente agem de forma estranha.

Exemplo e resultados:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

Parece funcionar, mas somente se eu fizer duas vezes (?!). Além disso, lento.

O comando acima faz a soma de verificação nos dois computadores ou apenas no envio? Está correto de outra forma?

Johan Allgoth
fonte
Um arquivo tão grande que muda frequentemente? Você obterá resultados muito, muito decepcionantes com o rsync ...
Ignacio Vazquez-Abrams
Alguma outra sugestão? Eu deveria ser factível com algum aplicativo, o cliente proprietário do Dropbox faz isso muito bem. Veja forums.dropbox.com/topic.php?id=17631
Johan Allgoth
--inplace implica --partial ver: linux.die.net/man/1/rsync
Ray Hulha

Respostas:

12

Nunca será rápido, porque o rsync terá que ler / somar o arquivo inteiro e ler 500 GB levará muito tempo, a menos que você o armazene em SSDs ou algo assim.

Experimentar rsync -vhz --partial --inplace <file/server stuff> .

-csignifica que ele soma o arquivo inteiro antes de fazer transferências, em vez de usar o carimbo de data e hora para ver se ele foi alterado, o que significa ler o arquivo inteiro duas vezes. Se o carimbo de data e hora não estiver sendo alterado (deveria), você poderá apenastouch o arquivo antes de executar o rsync.

Se isso não estiver com script, você poderá adicioná --progress-lo para ver como está o desempenho enquanto é executado.

Dentrasi
fonte
Sim, eu sei 'arquivo grande == manipulação longa'. Mas sinto que estou perdendo alguma coisa aqui, veja o comentário acima. Se o Dropbox pode fazer isso, nós também podemos! =) Eu não disse, mas também tentei sem -c, ainda lento.
Johan Allgoth
2
também --inplaceimplica #--partial
2

Embora não seja rsync, dependendo do que você está tentando fazer, isso pode funcionar melhor. Eu estava fazendo uma tarefa de backup semelhante e foi definitivamente mais rápida.

Use o netcat para fazer um tubo de alcatrão de uma máquina para outra.

Na sua máquina de origem:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

Você está criando um tarball preserva permissões e tempo e, em seguida, canaliza-o para o netcat na porta 45454

Na sua máquina de backup

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = endereço IP local da sua máquina de origem.

Para mim, isso funcionou bem. Ele rodava de 25 a 30 MB / s na LAN com fio, em oposição a 2-3 MB / s com o rsync. A desvantagem é: não sincroniza, apenas copia o que está na sua fonte. No entanto, para um backup que você está descrevendo - um arquivo de 500 GB - ele pode funcionar muito bem.

Você pode ter que fazer isso como root para evitar problemas de permissão ou pode ter sorte.

FWIW, eu aprendi inicialmente sobre isso aqui: http://www.screenage.de/blog/2007/12/30/using-netcat-and-tar-for-network-file-transfer/

SteveLambert
fonte
1
taré melhor do que rsyncquando você tem muitos arquivos pequenos para transferir. Usando nctambém melhora a taxa de transferência quando em uma conexão rápida, porque você não tem a sobrecarga de SSH-criptografia (que eu não preciso de uma conexão peer-to-peer)
jornane
0

Para evitar a sobrecarga da rede, use o protocolo rsync e não o SSH. Por padrão, o rsync usa SSH ao especificar um URL como hostname: / path. Use rsync: // hostname / path em vez de usar o protocolo rsync mais rápido. Nenhum truque com tar / netcat é necessário dessa maneira. O algoritmo rsync delta deve ser muito mais rápido.

Veja também https://gergap.wordpress.com/tag/rsync/ para obter mais informações.

gergap
fonte