De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Sistema de Backup com dar

Colaboração: Willian Itiho Amano

Data de Publicação: 07 de Março de 2007

Há algum tempo atrás me deparei com um problema em um script de backup feito por um técnico que trabalhava na empresa antes de mim. Acabei por ter que procurar sobre esse sistema de backup chamado dar.

Como fiz algumas alterações no script e incorporei a parte de limpeza feita por um colega, e ainda tem pouca documentação sobre esse sistema resolvi escrever esse pequeno tutorial.

1. Dependências

O script de backup necessita de apenas o sistema dar além dos comandos normais do linux então baixe-o no site oficial ou ainda utilize o pacote disponibilizado pela sua distribuição.

Disk ARchive

Caso haja interesse ainda há uma interface gráfica para o sistema chamado kdar.

KDE Disk archiver

Não entrarei aqui em detalhes de como instalar o dar mas não é nada complicado. O padrão para instalção é:

  $ ./configure
  $ make
  # make install

2. Ambiente

O ambiente aqui utilizado foi um servidor suse 9.2. O diferencial está apenas que o backup é feito no mesmo servidor sendo guardado em outro hd montado no /mnt. Pode-se alterar o script para enviar para outro servidor por ssh, ftp ou algo do gênero.

3. Preparação

Algumas coisas precisaram ser feitas antes de colocar o script em funcionamento e é o que faremos nesta sessão.

3.1. Montando o hd

Aqui no meu caso estarei fazendo o backup em um outro hd no mesmo servidor montado em /mnt/hd-backup/.

Para insto instalei o hd como slave e iniciei o sistema. Ele foi reconhecido como hdb então vamos prepara-lo e colocar para montar no boot.

Com o comando cfdisk crie uma partição em reserfs que ficará como hdb1

Para formatar utilize o seguinte comando:

  # mkfs -t reiserfs /dev/hdb1

Crie o diretório /mnt/hd-backup.

  # mkdir /mnt/hd-backup

Feito isso adicione a seguinte linha no /etc/fstab para ser montado no boot da máquina:

  /dev/hdb1 /mnt/hd-backup reiserfs   acl,user_xattr        1 2

4. Criando arquivo com e-mails para notificação

Para poder ser notificado por e-mail do resultado do backup deverá ser criado o arquivo /etc/backupnotify-mail.list.

Neste arquivo deverá ser adicionado um e-mail por linha. Todos os e-mails contidos neste arquivo receberão a notificação do resultado desse e-mail

5. Script

Não explicarei cada detalhe do script pois ele está bem comentado. Caso alguem tenha dúvida posta me envie um e-mail que eu altero depois no script para ficar melhor de entender.

O script segue abaixo:

  #!/bin/bash
  #Funções: *Executa backup semanal                                  
  #         *Cria um arquivo de log                                  
  #         *Remove os arquivos com mais de 30 dias                  
  #         *Envia e-mail para os usuários cadastrados em 
  #          /etc/backupnotify-mail.list                           
  #                                                                  
  #Autores: denth0r  (zaq.tech@gmail.com)                            
  #         Jeronimo Vicente Farias  (jeronimovf@yahoo.com.br)       
  #         Willian Itiho Amano (itihoitiho@gmail.com)               
  #                                                                  
  #Última Alteração: 21/02/2007                                      
  #                                                                  
  
  #
  #                                      Variáveis                   
  #
  
  # Idade do arquivo em dias (+30 = acima de 30 dias)
  TIME="+30"
  
  #Diretório de Destino
  DIR_DESTINO=/mnt/hd-backup
  
  #formato da data
  DATA_FMT=$(/bin/date +%d%m%Y-%a)
  
  # Define o nome do arquivo de backup no formato <dia><mes><ano>-<dia_da_semana>-completo-ultimo
  ARQ_BACKUP=$DIR_DESTINO/$DATA_FMT-completo-ultimo
  
  # Define o nome do arquivo de log no formato <dia><mes><ano>-<diasemana>-completo.log
  ARQ_LOG=$DIR_DESTINO/$DATA_FMT-completo-ultimo.log
  
  # Diretório usado como raiz para o backup
  DIR_RAIZ=/
  
  # Diretórios que nao serão backupeados
  DIR_EXCLUSOES="-P var/backup-fs -P dev -P proc -P opt/kde3/share/doc -P usr/share/man -P media -P lib -P boot -P sys -P mnt -P tmp -P bin -P sbin -P usr/games -P usr/lib -P usr/bin -P usr/sbin -P var/games -P var/tmp -P var/spool -P var/cache"
  
  # Padrões de arquivo que não serão backupeados
  ARQ_EXCLUSOES='-X "*~" -X ".*~"'
  
  # Tamanho a partiro do qual os arquivos serão compactados
  COMP_APARTIR=1k
  
  # Padrões de arquivo que não serão compatados (mas serão backupeados normalmente)
  COMP_EXCLUSOES='-Z "*.Z" -Z "*.avi" -Z "*.bz2" -Z "*.gz" -Z "*.mov" -Z "*.mpg" -Z "*.pbm" -Z "*.pnm"'
  echo teste >>teste
  
  # Arquivo com emails para envio do sumário (um e-mail por linha)
  BACKUPNOTIFY_MAIL=/etc/backupnotify-mail.list
  
  # Nome completo do servidor para identifição da notificação por email
  SERV_NOME_COMPL=$(hostname -f)
  
  #
  #                                    Execução                      
  #
  
  # Remove o indicador de último dos arquivos referentes ao último backup completo
  /usr/bin/rename "-ultimo" "" $DIR_DESTINO/*
  
  # Executa o backup e cria o log
  /usr/bin/dar -v -m $COMP_APARTIR -y -R $DIR_RAIZ $COMP_EXCLUSOES $ARQ_EXCLUSOES $DIR_EXCLUSOES -c $ARQ_BACKUP -D -N >> $ARQ_LOG
  
  # Envia o sumário para os emails listados em BACKUPNOTIFY_MAIL
  (/bin/cat $BACKUPNOTIFY_MAIL) |
  while read MAILAC; do
  (/usr/bin/tail -n 17 $ARQ_LOG) |
  (/bin/mail -s "Sumario: backup servidor $SERV_NOME_COMPL - $ARQ_BACKUP"   $MAILAC);
  done
  
  # Compata o log em bz2 e remove o arquivo original
  /bin/tar -jcf $ARQ_LOG.tar.bz2 $ARQ_LOG
  /bin/rm -f $ARQ_LOG
  
  # Remove os backups antigos
  find $DIR_DESTINO -type f -mtime $TIME -delete
  
  #EOF

Este script deve ser colocado dentro do /sbin com o nome de backup.sh.

6. Testes

Para fazer o teste que seu sistema de backup está funcionando execute o seguinte comando:

  # backup.sh

Este comando vai demorar bastante pois vai fazer o backup de todo o seu sistema. Você pode especificar apenas uma parte do sistema alterando a variável $DIR_RAIZ.

Agora teste o arquivo criado com o comando dar -t.

  # dar -t /mnt/hd-backup/nome.1.dar

Com o comando dar -l você consegue listar o arquivos dentro do backup.

7. Automatizando o processo

Para automatizar o processo utilizaremos o tão famoso crond.

Não entrarei em detalhes de como utilizar este sistema pois existem centenas de tutoriais sobre o assunto. Na parte de referências tem um que eu utilizei.

Adicione a seguinte linha no arquivo /etc/crontab:

  30 21 * * 5 /sbin/backup.sh

Reparem que eu executo o backup às sexta-feiras iniciando as 21h30min.

8. Referências

9. Agradecimentos

Tenho de agradecer a duas pessoas pelo auxílio na construção desse script o logo do tutorial. São eles:

  • Jeronimo Vicente Farias (<jeronimovf (a) yahoo com br>) - Criador do script original.
  • denth0r (<zaq tech (a) gmail com>) - Auxílio na organização e acréscimo na parte de limpeza.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Willian Itiho Amano