Backup inteligente com RSync
Existem milhares de scripts de backup por aí. Neste exemplo, eu vou mostrar como utilizar o rsync, para fazer backup do seu diretório /home em ou outro disco montado em /mnt/backup.
O Rsync é uma ferramenta muito útil, extremamente flexível e com algumas características bem interessantes, como por exemplo:
– Verifica a integridade dos arquivos copiados;
– Transfere apenas as diferenças dos arquivos (não transfere o arquivo inteiro, apenas os bits diferentes!);
– Mantém cópias idênticas entre 2 diretórios distintos, apagando os “excessos”;
– No caso de cópias remotas, pode usar compressão para diminuir o uso de banda;
Uma outra particularidade deste script é em relação à retenção do backup.
Utilizaremos a opção %u do comando date, para que o local de armazenamento do backup fique em uma pasta com o nome correspondente ao dia da semana em que foi criada.
Este parâmetro %u, utiliza uma numeração de 1 à 7 para cada dia da semana, sendo 1 para Domingo e assim por diante.
Neste exemplo, colocaremos o script em /etc/cron.daily, para que ele rode diariamente. Por padrão, o /etc/cron.daily é executado por padrão às 04:02 da manhã (confira no /etc/crontab – 02 4 * * * root run-parts /etc/cron.daily)
Desta forma, quando o script rodar por exemplo, no domingo, ele vai armazenar o conteúdo em /mnt/backup/bkp_home/day-1. Assim , o backup será mantido até a próxima semana, quando ele rodar novamente e sobrescrever o conteúdo em mnt/backup/bkp_home/day-1, nos dando uma retenção de 7 dias.
A cada execução, é gerado um log da operação em /mnt/backup/logs, seguindo o mesmo padrão. Ou seja, em /mnt/backup/logs/day-1, estará o registro do backup realizado no Domingo, que só será sobrescrito no próximo domigo.
Vamos ao script:
#!/bin/sh
BKPHDMOUNT=”/mnt/backup”
if [ ! -d “$BKPHDMOUNT” ]; then
echo “backup HD wasnt mounted”;
exit 0;
fi
date >> $BKPHDMOUNT/logs/backup_home.`date +day-%u`
/usr/bin/rsync -av /home/ /mnt/backup/bkp_home/`date +day-%u` >> $BKPHDMOUNT/logs/backup_home.`date +day-%u` 2>&1
Explicando:
-
Primeiro, criamos a variável que aponta para /mnt/backup.
-
Em seguida temos um bloco com if, para verificar que realmente o HD esteja montado para evitar problemas. Caso não esteja montado, o script não é executado.
-
Escrevemos a data atual no arquivo de log salvo em /mnt/backup/logs/[dia-em-que-foi-executado]
-
Rodamos o Rsync. O parâmetro -v é para verbose, o -a é o modo de arquivamento. Se equivale às opções -rlptgoD. Para mais detalhes, #man rsync. No caso, estou fazendo backup do diretório /home para /mnt/backup/bkp_home/day-X, onde o X vai ser substituído pelo dia da semana em que rodou. Toda a operação é registrada no log em /mnt/backup/logs/backup_home.day-X.
Entendeu?! Qualquer dúvida entre em contato. Um abraço pessoal!
Deixe um comentário