Imprimir
Categoria: Linux
Acessos: 4607

Script de Backup Domestico Com Rsync




 Galera nesse artigo vamos ver um script de backup básico porem muito funcional, ideal para ambiente domestico e pequena empresa utilizando o rsync. Em breve vou estar postando um artigo sobre o Bacula que é uma ferramenta de backup profissional e bastante robusta, mas vamos ao que interessa.... Pressupondo que você tenha uma máquina com o samba rodando, ou ate mesmo uma máquina onde você simplesmente salva seus arquivos vamos em frente. Iremos precisar de um segundo HD na máquina para servir de backup.


 Vamos nos basear que o HD principal é o /dev/sda e o secundário é o /dev/sdb, verifique em seu sistema quais são os dispositivos com o comando “fdisk -l”, se você não formatou o HD e ele não possui nenhuma partição criada formate-o com o comando “cfdisk /dev/sdb”, primeiro iremos criar o diretório onde será o ponto de montagem de nosso HD:

 # mkdir /mnt/backup-diferencial

 Agora vamos fazer um teste e montar a unidade para ver se esta tudo numa boa.

 # mount /dev/sdb1 /mnt/backup-diferencial

 Verifique com o comando abaixo se o HD foi montado com sucesso:

 # df –h

 A saída devera ser mais ou menos assim:
 Sist. Arq.            Size  Used Avail Use% Montado em
 /dev/sdb1         0,0G     0  0,0G   0% /mnt/backup-diferencial

 Depois crie a pasta de log dos backup:

 # mkdir /mnt/backup-diferencial/logs

 Com tudo funcionando vamos configurar para nosso hd ser montado automaticamente durante o boot, adicione a seguinte linha ao final no arquivo /etc/fstab:

 /dev/sdb1 /mnt/backup-diferencial  ext3 defaults,user,auto 0 0

 Depois disso é só reiniciar a máquina para ver se o HD foi montado. Se tudo estiver certo vamos proseguir.

 Agora vamos começar configuração, primeiramente instale o rsync:

 # apt-get install rsync

 Depois crie o diretório onde irá ficar os arquivos de configurações

 # mkdir /etc/backup

 Agora precisamos criar o arquivo dir2bkp e adicionar todos os diretório que queremos fazer backup.

 # pico /etc/backup/dir2bkp

 /etc
 /arquivos
 /var/profiles
 Etc... adicione os diretórios de acordo com sua necessidade

 Crie o arquivo que terá as informações do ultimo backup.

 # touch /etc/backup/bkp-ultimo

 Agora iremos criar o script de backup

 # pico /etc/backup/backup.sh

 Adicione as seguintes linhas no mesmo:

 # Caminho onde este script foi instalado
 MY_PATH=\"/etc/backup\"

 AGORA=`date +%d-%m-%Y-%H:%M:%S`

 # Caminho onde este script foi instalado
 MY_PATH=\"/etc/backup\"

 AGORA=`date +%d-%m-%Y-%H:%M:%S`
 ULTIMOFILE=\"$MY_PATH/bkp-ultimo\"

 DIR2BKP=\"$MY_PATH/dir2bkp\"
 AGORAESTATICO=\"$AGORA\"

 LOGBACKUP=\"/mnt/backup-diferencial/logs/\"$AGORAESTATICO\".txt\"
 EMAIL=\"/etc/backup/email.sh\"
 PATH_DESTINO=\"/mnt/backup-diferencial\"

 # Se o diretorio de destino nao existir, entao o backup nao sera feito
 if [ ! -d $PATH_DESTINO ]
         then
                 exit 0
 fi

 ULTIMO=`cat $MY_PATH/bkp-ultimo`

 mkdir -p $PATH_DESTINO/$AGORAESTATICO

 for DIRS in `cat $DIR2BKP`
         do

 rsync -av -R --delete --delete-excluded --link-dest=$PATH_DESTINO/$ULTIMO $DIRS $PATH_DESTINO/$AGORAESTATICO >> $LOGBACKUP

         echo \"\" >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         echo \"--------------------------------------------------\" >> $LOGBACKUP


 done

         echo \"\" >> $LOGBACKUP
         echo \"Tamanho dos Backups ja Realizados\" >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         du -hs /mnt/backup-diferencial/* >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         echo \"--------------------------------------------------\" >> $LOGBACKUP

         echo \"\" >> $LOGBACKUP
         echo \"Espaco Disponivel no HD\" >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         df -h  >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         echo \"--------------------------------------------------\" >> $LOGBACKUP


         echo \"\" >> $LOGBACKUP
         echo \"Backup Criado Com Sucesso\" >> $LOGBACKUP
         echo \"\" >> $LOGBACKUP
         echo \"--------------------------------------------------\" >> $LOGBACKUP


 echo $AGORAESTATICO > $ULTIMOFILE

 $EMAIL \"Relatorio de Backup do Dia \"$AGORAESTATICO\"\" \"\" $LOGBACKUP

 Salve o arquivo e de permissão de execução ao mesmo

 # chmod 755 backup.sh

 Agora iremos criar o script de email para nos enviar os logs

 # pico /etc/backup/email.sh

 #!/bin/bash


 EMAIL_FROM=\"email_de_origem \"  # usuario de email que se autentica no servidor SMTP
 EMAIL_TO=\"email_de_destino\" # usuario que receber. os emails

 #Servidor SMTP e porta utilizada
 SERVIDOR_SMTP=\"smtp.seu_dominio:25\" #endere.o no servidor SMTP, observar no exemplo o yahoo utiliza a porta 587
 SENHA=senha_do_email_de_origem    #informe aqui a senha de autentica..o no servidor SMTP

 ASSUNTO=\"$HOSTNAME - $1\"
 MENSAGEM=$2

 if [ \"$1\" == \"\" ] ;then
    ASSUNTO=\"SEM ASSUNTO\"
 fi
 if [ \"$2\" == \"\" ] ;then
    MENSAGEM=\"SEM MENSAGEM\"
 fi
 if [ \"$3\" != \"\" ] ;then
    MENSAGEM=\"$2  `cat $3`\"
 fi


 sendEmail -f $EMAIL_FROM -t $EMAIL_TO -u \"$ASSUNTO\" -m \"$MENSAGEM\" $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_FROM -xp $SENHA

 Salve o arquivo e de permissão de execução ao mesmo

 # chmod 755 email.sh

 Instale o cliente de email:

 # aptitude install sendemail

 Pronto feito isso é só executar o script de backup para criar o primeiro backup full, provavelmente não iremos receber o primeiro email com os logs pois como se trata do primeiro backup o log fica muito grande e existe um limite para enviar os logs por email, mas a partir do segundo já começamos a receber normalmente.

 # /etc/backup/backup.sh

 Podemos automatizar esse processo inserindo a linha a baixo no final do arquivo /etc/crontab

 00 20   * * *   root    /etc/backup/backup.sh

 Dessa forma o backup será realizado todos os dias as 20:00 horas.

 Reinicie o cron

 # /etc/init.d/cron restart

 Esse pequeno script cria uma política de backup diferencial , um backup diferencial fornece um backup dos arquivos que foram alterados desde que foi realizado um backup completo, ele salva os arquivos que são diferentes ou um novo desde o último backup completo.

 Bem pessoal é isso ae, espero que seja útil para todos, até a próxima!!!....... :)