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?


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.


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/


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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.