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.
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.
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.
Caso haja interesse ainda há uma interface gráfica para o sistema chamado kdar.
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
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.
Algumas coisas precisaram ser feitas antes de colocar o script em funcionamento e é o que faremos nesta sessão.
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
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
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.
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.
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.
Tenho de agradecer a duas pessoas pelo auxílio na construção desse script o logo do tutorial. São eles:
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários