FreeBSD
Backup
rsync
Fazer backup e ter certeza de que ele funciona é uma das coisas mais
importantes que podem ser feitas para proteger os dados armazenados em um servidor.
Geralmente não se pode prever acidentes, ataques, desastres e outros
tipos de eventos que irão prejudicar os dados ou o próprio hardware.
Quanto ao hardware, podemos consertar, utilizar outra máquina ou mesmo
receber outra do seguro, ou seja, é algo que tem preço, pode ser
comprado. Já os dados e arquivos dos usuários na maioria das vezes
são insubstituíveis, podendo representar anos de trabalho, e a
sua perda é algo que pode parar uma empresa ou ao menos afetar muito
o andamento dos processos. Aí está a importância de existir
um backup recente que possa ser restaurado no caso de qualquer incidente.
A estratégia de backup adotada nesta seção é simples e barata. Temos uma segunda máquina, que será o servidor de backup, conectada via rede ao servidor do qual será feito o backup, que será denominado cliente de backup. O backup será feito no disco rígido do servidor de backup. O programa utilizado será o rsync, cuja finalidade é prover um sistema de transferência de arquivos rápido e incremental. No primeiro backup o rsync irá copiar todos os arquivos para a máquina destino. Após isso, em cada backup ele irá apenas atualizar os arquivos que estão no backup, sincronizando-os com os originais. Desta forma são transferidos pela rede apenas as diferenças entre os arquivos original e backup, tornando o processo mais rápido. A página do rsync é rsync.samba.org.
Efetue o download do source da última versão do rsync a partir de http://samba.org/ftp/rsync/. A versão atual é 2.6.0 e seu arquivo chama-se rsync-2.6.0.tar.gz. Descompacte este arquivo no /tmp. Será criado o diretório /tmp/rsync-2.6.0, acesse-o e digite os comandos abaixo:
# ./configure
# make
# make install
O executável será instalado em /usr/local/bin/rsync. Remova
agora o diretório /tmp/rsync-2.6.0.
O rsync é um programa muito versátil, veja suas funcionalidades
na sua man page (man rsync). Iremos utilizá-lo da seguinte forma: o servidor
de backup irá rodar o rsync como um daemon, com módulos diferentes
para cada servidor do qual se deseja fazer backup (clientes de backup). Os módulos
são locais de armazenamento pré-definidos em que apenas determinado
usuário e senha terão acesso. Cada cliente de backup terá
agendado no seu Cron um processo rsync que irá sincronizar os arquivos
originais com os arquivos do seu módulo no servidor de backup.
O rsync deverá ser instalado no servidor de backup e também em
cada cliente.
Configuração no servidor de backup
No servidor de backup, crie o arquivo /usr/local/etc/rsyncd.conf, seguindo e adaptando o exemplo abaixo. A man page deste arquivo é acessível através de "man rsyncd.conf".
-------------------- Arquivo rsyncd.conf --------------------
# rsyncd.conf
# Usuario sob o qual o rsync
ira rodar.
uid=root
# Grupo sob o qual o rsync
ira rodar.
gid=wheel
# Arquivo de log.
log file = /var/log/rsyncd.log
# Modulo para o servidorz.
[servidorz]
# Caminho onde fica o espaco
para este modulo.
path = /backup/servidorz
# Usuario(s) autorizado(s).
auth users = servidorzbak
# Arquivo de senhas.
secrets file = /usr/local/etc/rsyncd.secrets
# Permitir gravacao.
read only = false
# Nao incluir este modulo
quando solicitada a listagem.
list = false
# Hosts permitidos a conectar.
Especificar o IP do
# cliente de backup.
hosts allow = 10.2.3.4
# Modulo para o servidorb.
[servidorb]
path = /backup/servidorb
auth users = servidorbbak
secrets file = /usr/local/etc/rsyncd.secrets
read only = false
list = false
hosts allow = 10.5.6.7
-------------------- Fim do arquivo rsyncd.conf --------------------
Para cada "path" especificado deverá ser criado o diretório
correspondente. Neste exemplo, devemos criar manualmente os diretórios
/backup, /backup/servidorz e /backup/servidorb, e atribuir a permissão
700 a todos. O dono destes diretórios deve ser o root.
Deverá ser criado ainda o arquivo /usr/local/etc/rsyncd.secrets, que
contém as senhas dos usuários de cada módulo. Estes usuários
não precisam existir no sistema.
-------------------- Arquivo rsyncd.secrets --------------------
# rsyncd.secrets
# Formato:
# usuario:senha
servidorzbak:senhaX
servidorbbak:senhaY
-------------------- Fim do arquivo rsyncd.secrets --------------------
Os arquivos rsyncd.conf e rsyncd.secrets deverão ter permissão 600.
Crie um script de inicialização para o rsync, com os seguintes comandos para inicialização e shutdown, respectivamente:
/usr/local/bin/rsync --daemon --config=/usr/local/etc/rsyncd.conf
e
killall rsync
Configuração no cliente de backup
No servidor ou máquina da qual se deseja fazer backup (cliente de backup), crie um script como o exemplo abaixo, com a permissão 700. Adapte-o para cada cliente de backup e também para incluir todos os locais que se deseja fazer backup:
-------------------- Arquivo backup.sh --------------------
#!/bin/sh
# Comando rsync.
RSYNC='/usr/local/bin/rsync -avR --delete --numeric-ids --password-file=/usr/local/etc/rsync.password'
# Destino do backup. Ajuste
o ip do servidor de backup.
# Formato: login_do_modulo@ip_do_servidor_backup::modulo/
DEST='servidorz@10.20.30.40::servidorz/'
# Arquivo de log.
LOG='/var/log/backup.log'
# Grava a data/hora de inicio
do backup.
echo -e "\nInicio do backup - `date`\n" >> $LOG
##########
# Para fazer backup do /home.
$RSYNC /home $DEST >> $LOG 2>&1
# Para fazer backup do /usr/local/apache2/htdocs.
$RSYNC /usr/local/apache2/htdocs $DEST >> $LOG 2>&1
##########
# Grava a data/hora de fim
do backup.
echo -e "\nFim do backup - `date`\n" >> $LOG
-------------------- Fim do arquivo backup.sh --------------------
Crie ainda o arquivo /usr/local/etc/rsync.password. O conteúdo deste arquivo deverá ser apenas uma linha com a senha que foi configurada no servidor de backup para este módulo. Atenção na permissão deste arquivo, deverá ser 600.
Por fim, agende a execução do backup no Cron. Edite o arquivo /etc/crontab e adicione uma linha para executar o script na freqüência desejada. O exemplo abaixo irá executar nas segundas, quartas e sextas-feiras às 2 horas:
0 2 * * 1,3,5 root /usr/local/script/backup.sh
Para executar o backup todo dia, insira uma linha como a seguinte:
0 2 * * * root /usr/local/script/backup.sh
Outro ponto a ser observado é que o arquivo de log pode se tornar demasiado
grande, neste caso implemente um script que faça a rotação
desse log e agende sua execução no Cron.
Atualizado em 13/05/04.
Heini Thomas Geib.
http://www2.unijui.edu.br/~heini