Eu tentei escrever um programa de backup "perfeito" (abaixo), mas corri para problemas (também abaixo). Existe uma versão eficiente / funcional disto ?:
Suposições: você está fazendo backup de 'local', que você possui e tem espaço em disco limitado para 'remoto', que tem espaço em disco infinito e pertence a outra pessoa, então você precisa de criptografia. Largura de banda de rede é finito.
'local' mantém um banco de dados de arquivos de backup com esses dados para cada arquivo:
nome do arquivo, incluindo o caminho completo
hora da última modificação do arquivo (mtime)
sha1sum do conteúdo não criptografado do arquivo
sha1sum do conteúdo criptografado do arquivo
Tendo em conta uma lista de arquivos para backup (alguns talvez já backup), o programa executa 'find' e obtém o caminho completo / mtime para cada arquivo (isso é bastante eficiente; por outro lado, computando o valor de cada arquivo NÃO seria eficiente)
O programa descarta arquivos cujo nome de arquivo e mtime estão no banco de dados 'local'.
O programa agora calcula o sha1sum do (conteúdo não criptografado de cada arquivo restante.
Se o sha1sum corresponder a um no banco de dados 'local', criamos uma entrada especial no 'local' db que aponta este arquivo / mtime para o arquivo / mtime do entrada existente. Efetivamente, estamos dizendo "nós temos um backup disso conteúdo do arquivo, mas sob outro nome de arquivo, então não há necessidade de suportá-lo novamente ".
Para cada arquivo restante, criptografamos o arquivo, pegamos o sha1sum de o conteúdo do arquivo criptografado, rsync o arquivo para o seu sha1sum. Exemplo: se o sha1sum criptografado do arquivo era da39a3ee5e6b4b0d3255bfef95601890afd80709, nós rsync-lo para / some / path / da / 39 / a3 / da39a3ee5e6b4b0d3255bfef95601890afd80709 em 'controlo remoto'.
Quando a etapa acima for bem-sucedida, adicionamos o arquivo ao banco de dados 'local'.
Note que evitamos eficientemente o cálculo de sha1sums e criptografia a menos que seja absolutamente necessário.
Observação: não especifique o método de criptografia: essa seria a escolha do usuário.
Os problemas:
Precisamos criptografar e fazer backup do banco de dados 'local' regularmente. No entanto, 'local' db cresce rapidamente e arquivos criptografados rsync'ing é ineficiente, uma vez que uma pequena mudança na 'local' db significa uma grande mudança na criptografada versão do 'local' db.
Criamos um arquivo em 'remote' para cada arquivo em 'local', que é feio e excessivo.
Nós consultamos o db 'local' com frequência. Mesmo com índices, essas consultas são lento, já que muitas vezes estamos fazendo uma consulta para cada arquivo. Seria bom para acelerar isso por lotes de consultas ou algo assim.
Provavelmente outros problemas que eu esqueci agora.
Tags backup incremental-backup