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: Júnior Alex Mulinari
Data de Publicação: 23 de Julho de 2005
Uma dica de Shell Script para quem já teve problemas com espaço para armazenar backups. O script abaixo faz backups incrementais usando recursos do GNU/Tar.
Basicamente o script cria um arquivo no formato:
- - - - - .tar.gz
e outro com o mesmo nome mais e prefixo .log
, onde constam todos os
arquivos e diretórios daquele backup.
<IDENTIFICA> = é a identificação, caso você queira ter mais de um. No exemplo abaixo está como "Backup".
<número de incremento> = é a seqüência do incremento, como abaixo estamos dizer para fazer 7 dias, ele irá de 1 a 7.
<dia> = dia da realização do backup.
<mês> = mês da realização do backup.
<ano> = ano da realização do backup.
<dia da semana> = dia da semana da realização do backup, exemplo Sun (Domingo), Mon (Segunda), Tue (terça), ....
.tar.gz = é o formato de compactação e concatenação.
Você deve criar um arquivo ($PREFIX/etc/list.conf
)
com a lista de diretórios a serem backupeados. Na lista
deve conter o caminho completo do diretório, exemplo:
/usr/local/apache
.
Também é possível criar um arquivo ($PREFIX/etc/exclude.list
) com exceções
de backup, como por exemplo, arquivos de videos, musicas, etc.. exemplo:
*.mp3 *.avi
O formato do arquivo deve ser respeitado, colocando uma exclusão por linha.
Outras variáveis estão comentadas no script.
#!/bin/bash # # Identificação dos arquivos IDENTIFICA=Backup # Numero de dias do ciclo de backup DIAS=7 # E-mail do administrador ADMIN=junior@solis.coop.br # A partir de onde ficarão os arquivos PREFIX=/backup # Onde os arquivos de backup e logs ficarão armazenados DIR_DESTINO=/backup/arquivos # Lista de arquivos a não serem backupeados EXCLUDE=$PREFIX/etc/exclude.list # Arquivos temporário do script TEMP=/tmp/.backup.$$ # Arquivos de controle do GNU/Tar INC=$PREFIX/etc/incremental.conf # Formato da data DATA=$(date +%d-%m-%Y-%a) # Arquivo com a lista de diretórios a serem backupeados LISTA=$(cat $PREFIX/etc/list.conf | grep ^\/ | sort | uniq) # Arquivos gerado pelo script para controle de incremento CONFIG=$PREFIX/etc/backup.conf VOLTA=0 if [ ! -e $CONFIG ] ; then touch $CONFIG NUMERO=1 else cp -f $CONFIG $CONFIG.bak LINHAS=$(cat $CONFIG | grep ^[0-9] | wc -l) [ $LINHAS -eq $((DIAS+1)) ] && VOLTA=1 FIRST=$(cat $CONFIG | grep ^[0-9]- | head -1) LAST=$(cat $CONFIG | grep ^[0-9]- | tail -1) OLD=$(echo $LAST | cut -f1 -d"-") OLD=${OLD:-0} BACKUP_OLD=$(echo $FIRST | cut -f1 -d"-") FILE_OLD=$(echo $FIRST | cut -f- -d"-") if [ $OLD -eq $DIAS ] ; then NUMERO=1 mv -f $INC $INC.bak else NUMERO=$((OLD+1)) fi fi DESTINO=$DIR_DESTINO/$IDENTIFICA-$NUMERO-$DATA SEND_MAIL () { sendmail $ADMIN << FIMEMAIL Subject: Backup CL $(date +%d-%m-%Y) Backup realizado no arquivo: $DESTINO.tar.gz FIMEMAIL } df -h > $DESTINO.log tar --totals --ignore-failed-read --exclude-from=$EXCLUDE -zcvg $INC -f $DESTINO.tar.gz $LISTA >> $DESTINO.log 2>&1 df -h >> $DESTINO.log SEND_MAIL $DESTINO.log echo $NUMERO-$DATA >> $CONFIG if [ $VOLTA -eq 1 ] ; then rm -f $DIR_DESTINO/$IDENTIFICA-$FILE_OLD.tar.gz rm -f $DIR_DESTINO/$IDENTIFICA-$FILE_OLD.log sed 1d $CONFIG > $TEMP mv -f $TEMP $CONFIG fi
Estamos usando o script há mais de um ano, e não tivemos problemas com a execução, o que está faltando é um script que automatize a extração do backup.
Espero que seja útil para a comunidade.
Abraços,
Júnior
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 (1)
Ola Script muito bom, estou com seguinte problema não esta excluido o ultimo backup, como consigo corrigir ?