Neste artigo iremos abordar como criar rotinas de backup manualmente utilizando Shellscript e Crontabs. Neste ambiente simulado estarei efetuado tratando o fileserver com Samba como um storage de produção.
Neste exemplo estaremos realizando o Backup de dois modos: Full e diferencial, no qual estaremos realizando o diferencial todos os dias às 23h00 e o full toda sexta-feita às 18h00
Considerando o ambiente:
- Servidor Linux CentOS 7 ou Debian 8 com Samba
- HD de Storage
- HD de Backup Full
- HD Espelho
Criando estrutura de pastas
# mkdir /var/scripts
# mkdir -p /var/log/backups/full/
# mkdir -p /var/log/backups/rsync
Configurando o Backup Full do Fileserver
Dentro da pasta /var/scripts, crie o arquivo backup-full.sh, de forma que o caminho cru dele seja /var/scripts/backup-full.sh. Dentro do arquivo, altere as variáveis de origem e destino respectivamente para o caminho do storage e do diretório de backup. Este scripts será responsável por criar um arquivo tar.gz do diretório do storage no HD de backup. # vim /var/scripts/backup-full.sh
#SCRIPT DE BACKUP FULL REALIZADO DO FILESERVER
#VARIAVEIS
INICIO=`date +%d/%m/%Y-%H:%M:%S`
LOG=/var/log/backups/full/`date +%Y-%m-%d`_log-backup-full.txt
#DEFINA AQUI O DIRETÓRIO QUE SERÁ EFETUADO O BACKUP
ORIGEM=/mnt/backup-rsync/
#DEFINA AQUI O DIRETÓRIO ONDE O ARQUIVO SERÁ GRAVADO JUNTO COM O SEU NOME
DESTINO=/mnt/backup-full/backup-`date +%Y-%m-%d`.tar.gz
#CRIA O ARQUIVO DE LOGS
echo " " >> $LOG
echo " " >> $LOG
echo "|-----------------------------------------------" >> $LOG
echo " Backup iniciado em $INICIO" >> $LOG
#CRIA O BACKUP
tar cvf $DESTINO $ORIGEM >> $LOG
FINAL=`date +%d/%m/%Y-%H:%M:%S`
echo " Backup finalizado em $FINAL" >> $LOG
echo "|-----------------------------------------------" >> $LOG
echo " " >> $LOG
echo " " >> $LOG
#FIM DO SCRIPT
Configurando o Backup por Rsync
Agora iremos configurar um script que irá fazer um backup via Rsync, ou seja, ele irá pegar todos os arquivos e fazer uma comparação diferencial. Sou seja, ele irá ver o local do backup e o local do storage, pegar só o que estiver diferente e realizar a cópia.
Crie o arquivo em /var/scripts/backup-rsync.sh
Crie o arquivo em /var/scripts/backup-rsync.sh
# vim /var/scripts/backup-rsync.sh
#!/bin/bash
#BACKUP CRIADO POR: Matheus Fidelis
#Github - https://github.com/msfidelis/
#Twitter - @fidelisauro
#Blog - http://www.nanoshots.com.br
#SCRIPT DE BACKUP DIFERENCIAL REALIZADO NO FILESERVER
#VARIAVEIS
INICIO=`date +%d/%m/%Y-%H:%M:%S`
LOG=/var/log/backups/full/`date +%Y-%m-%d`_log-backup-rsync.txt
#DEFINA AQUI O DIRETÓRIO QUE SERÁ EFETUADO O BACKUP
ORIGEM=/mnt/dados/
#DEFINA AQUI O DIRETÓRIO ONDE O ARQUIVO SERÁ GRAVADO JUNTO COM O SEU NOME
DESTINO=/mnt/backup-rsync/
#CRIA O ARQUIVO DE LOGS
echo " " >> $LOG
echo " " >> $LOG
echo "|-----------------------------------------------" >> $LOG
echo " Sincronização iniciada em $INICIO" >> $LOG
#CRIA O BACKUP
rsync -Cravzp $ORIGEM $DESTINO >> $LOG
FINAL=`date +%d/%m/%Y-%H:%M:%S`
echo " Sincronização Finalizada em $FINAL" >> $LOG
echo "|-----------------------------------------------" >> $LOG
echo " " >> $LOG
echo " " >> $LOG
#FIM DO SCRIPTS
Criando as Crontabs
Agora vamos editar as crontabs para agendar a execução dos horários de cada script.
Lembrando que o backup full será realizado toda sexta-feira às 18h00 e o diferencial será realizado todos os dias a partir das 23h00
Como root, digite
# crontab -e
# BACKUP DIFERENCIAL POR RSYNC
00 23 * * * /var/scripts/backup-rsync.sh
#BACKUP FULL
00 18 * * 5 /var/scripts/backup-full.sh
Testando os scripts e visualizando os logs
Execute os dois scripts para ver se vai rodar tudo Ok e criar os logs dentro da pasta /var/logs/backups/full e /var/logs/backups/rsync/
# /var/scripts/backup-full.sh
# /var/scripts/backup-rsy.sh
Espere terminar e visualize os logs
# cat /var/log/backup/full/2015-**.txt
Metodo 2 - Instalação via Git
Criei um repositório com os códigos do Backup e um pequeno instalador para a criação dos Crontabs e da estrutura de pastas
# git clone https://github.com/msfidelis/PlanoBackup.git
# cd PlanoBackup/
# chmod +x setup.sh
# ./setup.sh
Agora edite os arquivos de configuração do backup e altere a origem e destino dos backups.
# vim /var/scripts/backup-full.sh
# vim /var/scripts/backup-rsync.sh
Caso queira alterar os horários dos crontabs
# crontab -e
:)
Lindo brother!
ResponderExcluirMatheus, boa noite.
ResponderExcluirAcompanho suas publicações showw de bola, eu tenho um backup dessa forma nele coloquei uma rotina para verificar se o backup foi concluído 100%
Veja:
md5sum /backup/compactado/bkp_$DIA.tar.gz |md5sum --check >> $LOG
A saída jogo em um arquivo de log em seguida envia por e-mail, fica muito bacana dessa forma, já tive vários problemas quando não era da forma.
Faltou a rotina do diferencial.
Abraço
Anderson.
Anderson, boa tarde.
ExcluirPode me auxiliar de como faço essa rotina de verificação e o envio para evidenciar por email?
preciso fazer este mesmo script com origem /etc*
ResponderExcluiro destino é para o pendrive (ele será montado em mnt/pedrive)
o nome do arquivo de script é backup.sh
pode me explicar como ficaria? não entendi 100% a logica
como vou setar o log? seria no final da linha 5 substituindo o seu _log-backup-full.txt por backup.log?
Este comentário foi removido pelo autor.
ResponderExcluirOlá, acredito que foi algum engano, mas o backup utilizando o rsync acima mencionado é um backup incremental, acredito que seja somente um erro de interpretação. Muito legal a sua explicação.
ResponderExcluir