Sistema de backup com dar

A algum tempo 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.

[ Hits: 24.784 ]

Por: Willian Itiho amano em 13/03/2007 | Blog: http://underlinux.com.br


Preparação



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 precisam ser feitas antes de colocar o script em funcionamento e é o que faremos nesta sessão.

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 prepará-lo e colocar para montar no boot.

Com o comando cfdisk crie uma partição em reiserfs 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

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ão ser adicionados um e-mail por linha. Todos os e-mails contidos neste arquivo receberão a notificação do resultado do backup.

Página anterior     Próxima página

Páginas do artigo
   1. Dependências
   2. Preparação
   3. Script
   4. Testes
Outros artigos deste autor

Gravando com cdrecord

Software livre, interoperabilidade, padronização e usuários leigos

Balanceamento e alta disponibilidade com Bonding

Clonando HDs via rede com G4U (Ghost for UNIX)

Dicionário pt-BR no Firefox 2.0

Leitura recomendada

Armazenamento de arquivos em Linux: um estudo de caso

GlusterFS - Um Sistema de Arquivos Distribuídos

Entendendo MBR e sistema de arquivos GNU/Linux

Entendendo o ReiserFS

Reparticionando ReiserFS via linha de comando

  
Comentários
[1] Comentário enviado por rbn_jesus em 23/03/2007 - 17:06h

Estou com um problema em LVM, creio que vc possa me ajudar...
tenho uma configuração lvm em apenas 1 dispositivo, da seguinte forma:
xda1 - /boot - ext3
xda2 - lvm (lvm1 - / - ext3; lvm2 - swap)

como recupero as informações da 1ª partição do lvm neste despositivo?

[2] Comentário enviado por adrianosb em 27/03/2007 - 13:44h

Tentei fazer mais não deu certo, tentei com Debian 3.1 ...

# ./backup.sh
Unknown option: u
Unknown option: l
Unknown option: t
Unknown option: i
Unknown option: m
Unknown option: o
Usage: rename [-v] [-n] [-f] perlexpr [filenames]
parse error on command line (or included files) : Cannot add an absolute path
./backup.sh: line 73: /bin/mail: No such file or directory
/bin/tar: Removing leading `/' from member names
find: invalid predicate `-delete'

[3] Comentário enviado por White_Tiger em 27/03/2007 - 14:26h

Adriano, tente executar os comandos manualmente e verifique certinho. Talvez alguem dependencia. Por esses erros eu não consegui identificar nada.

[4] Comentário enviado por adrianosb em 27/03/2007 - 17:10h

Mudei algumas coisas:

#!/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
DIR_DESTINO=/hd-backup

# formato da data
#DATA_FMT=$(/bin/date +%d%m%Y-%a)
DATA_FMT=`date +%Y%m%d-%H.%M` # ano mes dia hr min

# 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
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
ARQ_LOG="$ARQ_BACKUP".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"
DIR_EXCLUSOES="-P dev -P proc -P opt/ -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/tmp -P var/spool -P var/cache -P /hd-backup"

# 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
/usr/local/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


tentei executar e da um WARNING:

tales:/sbin# ./backup.sh
WARNING! The archive is located in the directory to backup, this may create an endless loop when the archive will try to save itself. You can either add -X "20070327-16.31-completo-ultimo.*.dar" on the command line, or change the location of the archive (see -h for help). Do you really want to continue? [return = OK | Esc = cancel]


O que deve ser agora?

[5] Comentário enviado por adrianosb em 27/03/2007 - 17:15h

o usr/local/bin/dar ficou assim:

/usr/local/bin/dar -v -m 1k -y -R / -Z "*.Z" -Z "*.avi" -Z "*.bz2" -Z "*.gz" -Z "*.mov" -Z "*.mpg" -Z "*.pbm" -Z "*.pnm" -X "*~" -X ".*~" -P dev -P proc -P opt/ -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/tmp -P var/spool -P var/cache -P /hd-backup -c /hd-backup/20070327-17.14-completo-ultimo -D -N >> /hd-backup/20070327-17.14-completo-ultimo.log

[6] Comentário enviado por White_Tiger em 27/03/2007 - 17:30h

na parte de DIR_EXCLUSOES no final está "-P /hd-backup"

Coloque "-P hd-backup"

Sem o / senão ele não exclue esse diretório e ficaria então num loop eterno.

Testa e posta o resultado ae.

[7] Comentário enviado por adrianosb em 27/03/2007 - 18:06h

Nada ...

/usr/local/bin/dar -v -m 1k -y -R / -Z "*.Z" -Z "*.avi" -Z "*.bz2" -Z "*.gz" -Z "*.mov" -Z "*.mpg" -Z "*.pbm" -Z "*.pnm" -X "*~" -X ".*~" -P dev -P proc -P opt -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/tmp -P var/spool -P var/cache -P hd-backup -c /hd-backup/20070327-18-05-completo-ultimo -D -N >> /hd-backup/20070327-18-05-completo-ultimo.log


tales:/sbin# ./backup.sh
WARNING! The archive is located in the directory to backup, this may create an endless loop when the archive will try to save itself. You can either add -X "20070327-18-04-completo-ultimo.*.dar" on the command line, or change the location of the archive (see -h for help). Do you really want to continue? [return = OK | Esc = cancel]

[8] Comentário enviado por White_Tiger em 27/03/2007 - 18:13h

autere

ARQ_BACKUP="$DIR_DESTINO"/"$DATA_FMT"-completo-ultimo

por

ARQ_BACKUP=$DIR_DESTINO/$DATA_FMT-completo-ultimo

Sem os "

[9] Comentário enviado por adrianosb em 28/03/2007 - 10:30h

Uma duvida, ele sempre vai fazer o backup completo do sistema? tem com fazer parcial? só fazer o backup do arquivo modificado no dia?

ex.:
DATA=`date +%Y%m%d`;
TMPDIR='/home/samba-files4/GeoPlus/Backup/';
FILETARREPOS=$TMPDIR$DATA'_BACKUP_REPOS.tar';

/usr/bin/find /usr/local/repositorios -type f -mtime -1 -exec /bin/tar -rf $FILETARREPOS {} \;

/usr/bin/bzip2 $FILETARREPOS;

[10] Comentário enviado por White_Tiger em 28/03/2007 - 11:02h

/usr/local/bin/dar -c /hd-backup/$(ate +%Y%m%d-%H.%M) -A /hd-backup/Backup-completo.1.dar

Esse é o resumo. Vc tem que colocar os mesmos parâmetros usados no backup completo.

O -A é o arquivo que ele usará para comparação e o -c é o arquivo que ele criará.

[11] Comentário enviado por adrianosb em 28/03/2007 - 11:15h

Ficaria +/- assim?

PREV=`/bin/ls $DIR_DESTINO/*.dar`

/usr/bin/dar -v -m $COMP_APARTIR -y -R $DIR_RAIZ $COMP_EXCLUSOES $ARQ_EXCLUSOES $DIR_EXCLUSOES -c $ARQ_BACKUP -D -N -A ${PREV%%.*} >> $ARQ_LOG

[12] Comentário enviado por White_Tiger em 28/03/2007 - 11:50h

Na verdade eu uso algo parecido. Se você percebeu no meu script ele cria os arquivos com "ultimo" no nome e antes de executar o backup ele remove este do nome dos arquivos existentes. Então o arquivo que tiver "ultimo" no nome é o mais atualizado e é ele que tem de ser utilizado para o diff.

Você pode testar o arquivo pela data também mas esse método é mais simples.

[13] Comentário enviado por adrianosb em 28/03/2007 - 14:28h

Mais uma pergunta, caso queria definir as pasta a fazer backup, fica assim?

-R /home -R /var/
Ficando assim:
DIR_RAIZ= "-R /home -R /usr/local -R /var"

é assim?

[14] Comentário enviado por White_Tiger em 28/03/2007 - 14:49h

Eu nunca tentei fazer assim. Teste e posta ae. Agora o que você pode fazer é colocar pra fazer backup do / e mandar ele não backupear todo o resto.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts