Criando rotinas de Backup Full e Diferencial com Shellscript

Share:


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

 # 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   

e adicione as linhas

 # 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   


:)

6 comentários:

  1. Matheus, boa noite.
    Acompanho 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.

    ResponderExcluir
    Respostas
    1. Anderson, boa tarde.
      Pode me auxiliar de como faço essa rotina de verificação e o envio para evidenciar por email?

      Excluir
  2. preciso fazer este mesmo script com origem /etc*
    o 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?


    ResponderExcluir
  3. Este comentário foi removido pelo autor.

    ResponderExcluir
  4. Olá, 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