[FUG-BR] Sistema de backup remoto
Joao Rocha Braga Filho
goffredo em gmail.com
Seg Jan 16 18:43:11 BRST 2006
Eu faço remotamente por rsh, mas sei que no meio não tem ninguém
para "escutar" indevidamente o tráfego.
Na máquina que vai receber o backup eu crio o disco com poucos i-nodes
e blocagem de 64K. Assim eu uso pouco disco para meta-dados do sistema
de arquivos e sobra mais para os dados. Algo assim com o newfs:
newfs -O2 -b 65535 -m 6 -I 15000000 /dev/<label do disco>
Configuro o rsh no /etc/inetd e inicio o inetd.
Configuro o /etc/hosts.allow para aceitar somente conexões rsh da máquina
que vai enviar o backup:
shell : IP da máquina : allow
shell : IP da outra máquina: allow
shell : ALL : deny
Teve um lugar que eu ainda levantei o firewall, para permitir somente as
máquinas que interessavam acessarem a este serviço.
Crio uma conta e um grupo para cada máquina que vai depositar o backup,
isolando assim cada uma delas, e dou "chmod o-rwx" nos homes destas
contas, para garantir que uma não veja o conteúdo da outra. Este isolamento
é uma medida de segurança, para diminuir o que pode ser lido por um
atacante que tenha comprometido uma das máquinas.
No home de cada conta crio o .rhosts com o seguinte conteúdo:
IP da máquina root
Assim somente o root da máquina em questão pode fazer qualquer coisa
no destino do bakcup.
No home de cada conta eu crio o diretório backup.
Se não me engano, aqui termina o que tem que ser feito na máquina que
vai receber o backup.
Agora na máquina que vai receber o backup tem que se fazer um ou dois
scripts, para rodar como root. Estes scripts devem rodar como root, para
que tenham acesso a tudo. Eu uso o crontab do root. Ainda crio o diretório
/var/log/backup.
O script para o backup full está abaixo:
--- corte aqui --- cut here --- 8x ---
#!/bin/sh
umask 077
agora=`date '+%Y-%m-%d %H:%M'`
hoje=`date '+%Y-%m-%d'`
dir=/var/log/backup
usuario="conta que representa esta máquina"
destino="endereço da máquina que recebe o backup"
rm /tmp/fifo 2> /dev/null
mkfifo /tmp/fifo
sleep 120
echo "$agora" > "$dir"/full.date
cp "$dir"/full.date "$dir"/mensal.date
cp "$dir"/full.date "$dir"/semanal.date
cp "$dir"/full.date "$dir"/diario.date
log="$dir"/bkp.log-"$hoje"
# Rotação do backup.
rsh -l "$usuario" "$destino" rm -r backup/ciclo-2
rsh -l "$usuario" "$destino" mv backup/ciclo-1 backup/ciclo-2
rsh -l "$usuario" "$destino" mv backup/ciclo-0 backup/ciclo-1
rsh -l "$usuario" "$destino" mkdir backup/ciclo-0
rsh -l "$usuario" "$destino" cat '>' backup/ciclo-0/bkp_f-"$hoje".tbz2
< /tmp/fifo
rm /tmp/fifo
) &
cd /
tar -clvSyf /tmp/fifo \
--exclude $log \
--exclude /usr/src \
--exclude /usr/ports \
--exclude /usr/obj \
--exclude /usr/share \
--exclude /bin \
--exclude /sbin \
--exclude /etc/defaults \
--exclude /usr/bin \
--exclude /usr/sbin \
/ /usr /var /home > $log
gzip $log &
--- corte aqui --- cut here --- 8x ---
Como pode ver acima, muita coisa é ignorada no backup, mas é proposital,
para poupar disco no destino e por que podem ser restauradas com facilidade.
Outra coisa a notar é que não está usando snapshots. É por que este script
é entigo, e roda em um FreeBSD 4.x.
Para o backup diário uso o seguinte script:
--- corte aqui --- cut here --- 8x ---
#!/bin/sh
umask 077
agora=`date '+%Y-%m-%d %H:%M'`
hoje=`date '+%Y-%m-%d'`
dir=/var/log/backup
partida=`cat "$dir"/semanal.date`
usuario="conta que representa esta máquina"
destino="endereço da máquina que recebe o backup"
rm /tmp/fifo 2> /dev/null
mkfifo /tmp/fifo
sleep 120
echo "$agora" > "$dir"/diario.date
log="$dir"/bkp.log-"$hoje"
(
rsh -l "$usuario" "$destino" cat '>' backup/ciclo-0/bkp_d-"$hoje".tbz2
< /tmp/fifo
rm /tmp/fifo
) &
cd /
tar -clvSyf /tmp/fifo \
--newer-mtime "$partida" \
--newer "$partida" \
--exclude $log \
--exclude /usr/src \
--exclude /usr/ports \
--exclude /usr/obj \
--exclude /usr/share \
--exclude /bin \
--exclude /sbin \
--exclude /etc/defaults \
--exclude /usr/bin \
--exclude /usr/sbin \
/ /usr /var /home > $log
gzip $log &
--- corte aqui --- cut here --- 8x ---
Estes scripts podem ser melhorados, mas já funcionam bem.
Espero que sejam úteis. Desculpe-me tem enviado para a lista,
mas acho que podem ser úteis a mais de uma pessoa.
Abraços,
João Rocha.
--
"Sempre se apanha mais com as menores besteiras. Experiência própria."
goffredo em goffredo.eti.br
goffredo em gmail.com
http://www.goffredo.eti.br
_______________________________________________
Freebsd mailing list
Freebsd em fug.com.br
http://mail.fug.com.br/mailman/listinfo/freebsd_fug.com.br
Mais detalhes sobre a lista de discussão freebsd