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

Voltar