backup completo ou incremental de grande número de arquivos

5

Eu tenho uma grande quantidade de arquivos em quantidade e tamanho total de arquivo. (estamos falando de alguns terabytes). Gostaria de sincronizar esses arquivos / pastas uma vez com um sistema de backup externo e, em seguida, executar uma tarefa diária que reconfigurará o backup com base nas alterações diárias. As mudanças não são tão frequentes, mas em alguns dias podemos ter um diferencial de cerca de 300 GB (para cerca de 1,5 mil arquivos).

Eu tenho considerado rsync ou rdiff-backup ou rsnapshot como algumas ferramentas, mas eu queria executar alguns testes com o rsynch primeiro. Eu tive um grande problema com o rsync e isso é:

A verificação de arquivos existentes para alterações demora muito. Estamos falando de mais de 20h, o que torna o backup diário inútil. Isso está usando rsync -rvhzP ou -rvhP. Parece que basta digitalizar todos os arquivos e leva horas a fio, mesmo que nenhum arquivo tenha sido adicionado / alterado / excluído.

Estou fazendo algo errado? Algum dos outros sistemas que mencionei (rdiff-backup ou rsnapshot) funciona melhor? Eu estava indo sob a suposição de que eles eram baseados em rsync de qualquer maneira.

Obrigado antecipadamente.

Atualize com informações adicionais: Temos cerca de 2600 diretórios e 100k arquivos, totalizando cerca de 3,5 TB, executamos os testes usando rsync version 3.0.9 protocol version 30 . No que diz respeito às mudanças diárias, geralmente há 10 alterações de arquivo por dia, mas pode atingir um pico de 1.5K alterações / adições / exclusões de arquivo e cerca de 300Gb em volume (embora esses picos não sejam tão frequentes, e geralmente espalhados)

    
por D.Mill 16.10.2014 / 18:13

2 respostas

5

Supondo que os registros de data e hora de modificação em seus arquivos de origem são legítimos (e estão sendo atualizados quando os arquivos são modificados), acho que faz sentido adicionar o argumento -t para sincronizar os horários. Quoth a página rsync man :

-t, --times
This tells rsync to transfer modification times along with the files and update them on the remote system. Note that if this option is not used, the optimization that excludes files that have not been modified cannot be effective; in other words, a missing -t or -a will cause the next transfer to behave as if it used -I, causing all files to be updated (though rsync's delta-transfer algorithm will make the update fairly efficient if the files haven't actually changed, you're much better off using -t).

Basicamente, você está perdendo a otimização, na qual rsync pode usar o registro de data e hora de modificação do arquivo como sentinela para indicar que o arquivo foi modificado. Se os carimbos de data e hora de modificação divergirem entre o emissor e o receptor, o algoritmo de cópia delta será usado e o conteúdo do arquivo será digitalizado. Com um corpo tão grande quanto você está falando, será um longo processo de digitalização, como você está vendo.

Se os carimbos de hora de modificação dos seus arquivos não estiverem sendo atualizados quando os arquivos forem alterados (por algum motivo bizarro), isso não será efetivo e você terá que fazer varreduras completas de arquivos. Se você precisar que os registros de data e hora de modificação dos arquivos remotos reflitam quando eles foram sincronizados, em vez do registro de data e hora da modificação dos arquivos de origem, isso também não será uma solução viável.

Eu suspeito que esta opção irá radicalmente acelerar suas sincronizações.

    
por 17.10.2014 / 09:33
3

Você pode querer ir uma camada para baixo, usando instantâneos lvm e lvmsync .

Nesta solução, os instantâneos saberão o que foi alterado, não é necessária nenhuma verificação. A desvantagem é que esta solução não entende os arquivos, apenas transfere blocos.

A outra solução seria um daemon que usa inotify e armazena informações sobre quais arquivos foram alterados. Então você pode apenas rsync apenas arquivos na lista. O Lsyncd parece um software que você está procurando.

    
por 17.10.2014 / 10:13