Eu não usei programas dedicados para isso, mas é muito fácil organizar e ajustar com uma combinação de cron, bash, tar ( dumps incrementais ) e / ou rsync. Na minha opinião, existem duas soluções ótimas e eu uso ambas ou uma delas, dependendo do contexto. Eu acho que o primeiro será mais apropriado para você, mas vou descrever os dois aqui.
Arquivos de tar incrementais
O núcleo dessa solução é um script que pode se parecer com isso:
#!/bin/bash
# You will need to set the variables $EXCLUDE, $DATA and $BACKUPS
# as environment variables, in ~/.bashrc or somewhere.
OPTS="--create --no-check-device --bzip2 --verbose -X $EXCLUDE"
for d in 'ls $DATA'; do
SNAPSHOT=$BACKUPS/$d.snar
if [ $1 == full ]; then
echo "Archiving $d (full)..."
rm -rvf $SNAPSHOT
ARCHIVE=$DATA/$d.'date --iso-8601'.full.tar.bz2
tar $OPTS --file=$ARCHIVE --listed-incremental=$SNAPSHOT $DATA/$d
fi
if [ $1 == increment ]; then
echo "Archiving data/$d (increment)..."
ARCHIVE=$DATA/$d.'date --iso-8601'.tar.bz2
tar $OPTS --file=$ARCHIVE --listed-incremental=$SNAPSHOT $DATA/$d
fi
done
Isto assume que existem subdiretórios em $DATA
e backups cada um em um arquivo separado. Se sua configuração for diferente, personalize o script.
Você pode agendar o backup no seu crontab assim:
# m h dom mon dow command
44 1 1 */2 * ~/bin/backup_data full > ~/backups/data/logs/'date --iso-8601'.full.log 2>&1
44 5 * * * ~/bin/backup_data increment > ~/backups/data/logs/'date --iso-8601'.log 2>&1
Como você pode ver, neste caso, um backup completo é criado uma vez a cada dois meses, e backups incrementais a partir desse despejo completo são criados todos os dias. Problemas com arquivos incrementais no tar começam quando você perde um arquivo ou até mesmo altera um timestamp. Portanto, é prudente criar um despejo completo de vez em quando.
No que diz respeito à sincronização entre máquinas e a remoção de arquivos antigos, você deve separar essa tarefa do backup em si, já que ela é realmente ortogonal. Claro, use o rsync para sincronização, sem a opção --delete
, para que você não perca nenhum dado na unidade externa grande. Então, seu comando para isso pode ser:
rsync -av /backups/data /mnt/external
se a unidade externa estiver montada no laptop. Caso contrário, você precisará fazer isso pela rede da seguinte forma:
rsync -av /backups/data user@external:/backups/data
Se você quiser limpar os arquivos com mais de 90 dias do seu laptop, faça o seguinte:
find /path/to/files -type f -mtime +90 -delete
Novamente, coloque essas coisas no seu crontab.
Backups incrementais com rsync
Você pode usar o rsync sozinho para fazer um backup incremental das coisas. Eu gosto especialmente de usar snapshots com timestamp e hardlinks para isso, e é apenas um comando. Aqui está um exemplo próximo ao que eu uso normalmente:
rsync --verbose --progress --stats --human-readable --archive --link-dest=/backups/data/'date --iso-8601 -d "one day ago"' /data/ /backups/data/'date --iso-8601'/
que basicamente cria links físicos para o instantâneo do dia anterior (aquele dado por --link-dest
) para arquivos que não foram alterados. Se você estiver executando irregularmente, você pode usar um link simbólico que aponte para o último snapshot, e atualizar esse symlink após o backup, da seguinte forma:
rsync --verbose --progress --stats --human-readable --archive --link-dest=/backups/data/last /data/ /backups/data/'date --iso-8601'/ && rm -rvf /backups/data/last && ln -vs /backups/data/'date --iso-8601'/ /backups/data/last
Além disso, você precisará organizar a sincronização com a unidade externa e excluir os instantâneos antigos. Isso, geralmente, é feito da mesma maneira que na primeira solução descrita acima. No entanto, ao rsyncing instantâneos entre máquinas, certifique-se de usar as opções -H
para preservar os hard links.
Resumo
Em comparação com a solução que usa tar
, a segunda em minha mente é um pouco mais simples de gerenciar e tem todos os arquivos disponíveis o tempo todo. A utilização de arquivos, por outro lado, faz uso da compactação, usa menos inodes e possui outras vantagens em máquinas que não são servidores.
Novamente, faça tudo isso no crontab sempre que possível, para que você não precise se lembrar disso. Se você não tiver o laptop ligado o tempo todo, escolha um horário em que ele seja usado com frequência e, talvez, faça isso várias vezes ao dia, para que pelo menos algumas das tarefas do cron iniciem. Melhor ainda, use algo como anacron .
Você também pode executar o script de backup manualmente e detalhar as datas nos nomes de arquivos / diretórios se quiser fazer incrementais mais de uma vez por dia. Obviamente, você precisará brincar com essas soluções para ajustá-las ao seu caso de uso. Espero que isso ajude.
Atualizar : uma essência com um script de exemplo: link