domingo, 20 de janeiro de 2008

Backup: Uma solução para Windows, Linux e BSD's

Todo administrador de rede sabe que:

Quem tem um backup, não tem nenhum.
Pode parecer brincadeira, mas quando os problemas aparecem, não aparecem sozinhos. Então, um único backup, pode ser pouco, uma vez que podem ocorrer problemas ao restaurá-los.

Um administrador de sistemas muitas vezes se depara em unificar um método para fazer os backups de seus servidores, principalmente se eles forem de ambientes mistos (por exemplo, Windows e Linux - o mais comum).

Este tutorial não é específico para servidores. Pode ser utilizado para fazer backup de estações Windows (9x/NT/2000/XP), Linux e BSD's (FreeBSD, OpenBSD, NetBSD).

Ao contrário de soluções proprietárias, que são caras por sinal, neste artigo, pretendo descrever uma maneira simples para criar um sistema de backup de dados descentralizados. Por exemplo, você tem uma rede heterogênea e precisa fazer o backup de todos os seus servidores Linux, Windows, BSD's.

Neste pequeno tutorial pretendo mostrar como é fácil criar uma rotina de backup homogênea e simples para facilitar a vida de muitos administradores de sistema.

O que você vai precisar
  • Servidor(es) Windows NT4/2000/2003;
  • Servidor(es) Linux (qualquer distribuição);
  • Servidor(es) BSD's (FreeBSD, OpenBSD, NetBSD);
  • cwRsyncServer (para servidores Windows);
  • rSync (para servidores Linux);
  • Script para o backup;
  • Dispositivo de armazenamento (neste tutorial utilizaremos o HD de nosso servidor encarregado dos backups).
Download, instalação e configuração do cwRSyncServer O primeiro passo é baixar o cwRsyncServer:
Sua instalação segue o padrão de instalação de qualquer aplicação Windows (Next-Next-Finish :P ).

Apenas um detalhe: durante a instalação será exibido um quadro informando a senha utilizada para o serviço criado do cwRsyncServer. Anote-a e guarde-a em local seguro caso precise dela em algum momento.

OBS: Esta senha é aleatória e difere em cada instalação do cwRSyncServer.

Configuração do cwRSyncServer

No diretório onde foi instalado o cwRSyncServer você encontrará o arquivo rsyncd.conf. Basta modificar o arquivo para atender as suas necessidades e iniciar/reiniciar o serviço do cwRSyncServer.

Para maiores detalhes sobre os parâmetros a serem utilizados no arquivo de configurações do rsync, consulte a página man do rsync, disponível em: Exemplo do rsyncd.conf

Abaixo, temos um exemplo de configuração do cwRSyncServer:
use chroot = false
strict modes = false
hosts allow = 172.30.31.253/255.255.255.255 127.0.0.1/255.255.255.0
log file = rsyncd.log
pid file = rsyncd.pid
#Tratamento de caracteres acentuados.
charset=iso8859-1

[Compartilhamentos]
path = /cygdrive/c/Compartilhamentos
comment = Documentos
read only = true
transfer logging = no
OBS: Note que no PATH temos "/cygdrive/" antes de "c/compartilhamentos". Esta é a convenção utilizada pela cygwin.

Rsync Geralmente nas distribuições Linux você já pode encontrar o rsync pré-instalado. Assim como fizemos no cwRSyncServer, você deverá editar o arquivo rsyncd.conf.

Este arquivo tem sua localização variada, dependendo da distribuição Linux/BSD utilizada. Na maioria dos casos está localizada no /etc. Caso esteja em outra localização, consulte a documentação do rsync (man rsyncd.conf ou man rsync).

Juntando tudo

Agora que você já tem o rsync/cwRSyncServer instalado e configurado nos equipamentos que sofrerão backup, basta criar um script para fazer o backup e agendar no cron.

Eis um exemplo de script para backup de várias máquinas:
#!/bin/bash
#
# backup.sh
#
# Faz o backup dos servidores da rede, criando um subdiretório para cada
# um dos diretórios exportados via rsyncd.
#
# Autor: Luis Fernando Kieça
# Criado em: 14/10/04
# Última modificação em: 14/10/05
#

BACKUP_DIR"=/mnt/hdc1/backup"
BACKUP_SERVERS="172.30.31.250 172.30.31.251 172.30.31.252 172.30.31.253 172.30.31.254"

for SERVER in ${BACKUP_SERVERS}; do
# cria o diretório do backup se não existir
if [ ! -d ${BACKUP_DIR}/${SERVER} ]; then
mkdir ${BACKUP_DIR}/${SERVER}
fi

# entra no diretório do servidor correspondente
cd ${BACKUP_DIR}/${SERVER}

# descobre os diretórios exportados
SHARES=`rsync ${SERVER}:: | awk "{ print $1 }"
for SHARE in $SHARES; do
# Cria o diretório para cada compartilhamento (se não existir) e entra nele.
if [ ! -d ${BACKUP_DIR}/${SERVER}/${SHARE} ]; then
mkdir ${BACKUP_DIR}/${SERVER}/${SHARE}
fi
cd ${BACKUP_DIR}/${SERVER}/${SHARE}

# Faz o backup do compartilhamento
rsync -vurgoapl --iconv=utf8,iso88591 --delete-excluded${SERVER}::${SHARE} .
done
done

OBS: Não esqueça de colocar a permissão para execução no script. :)

Agora, com o script criado, basta agendar a tarefa no crontab (ou no próprio agendador de tarefas do Windows).

Considerações finais

Num primeiro momento, puxo todos os arquivos para o disco rígido do servidor encarregado do backup. Após isto ter sido concluído, efetuo a cópia em meio removível. Desta maneira, o servidor não demora para executar os backup diários (incrementais + diferenciais). Será demorado apenas na sua primeira execução (a máquina que conterá os arquivos precisará ter uma cópia de tudo o que possui nas demais máquinas).

Algumas coisas para se implementar nesta rotina:
    Segurança (esta rotina não utiliza-se de nenhuma validação de usuário/senha);
    Criptografia (os dados trafegam sem criptografia);
    Compressão (para não congestionar sua rede e poder executar o script nos horários de expediente e possuir mais de um backup por dia);
    Retorno do backup (pode-se exportar o diretório onde acontecem os backups via Samba para que esteja disponível facilmente via rede ao retornar os arquivos).

Mas estes itens, deixo para você, leitor, implementar em seus servidores...

Conclusão

Com este artigo procurei mostrar como é simples e fácil implementar um backup em seus servidores de modo a centralizar o backup e torná-lo mais homogêneo, facilitando o retorno da informação e minimizando as perdas no caso de um desastre.

O que você achou desta rotina?

Nenhum comentário: