terça-feira, 25 de outubro de 2011

Backup Remoto


Fonte: http://www.devin.com.br/backup_remoto/
Autor:Hugo Cisneiros (Eitch)
Um tutorial que explica como fazer um backup simples de arquivos no sistema (backups completos ou diferenciais) e armazenar em um servidor remoto via FTP.

Nem sempre as pessoas pensam em backup, só quando acontece alguma coisa com seu sistema. Um backup sempre é bom, mesmo que for bem simples. Vou apresentar através deste manual algumas formas de se fazer backup de arquivos do sistema Linux, opcionalmente armazenando estas cópias em um servidor remoto via FTP. Com isso os administradores de redes podem centralizer os backups em uma máquina, para depois armazenar ou em uma fita dat, ou em cd-rom, ou seja lá o que for.
Para fazer os backups, utilizaremos o clássico comando “tar“, que serve justamente para isso: armazenar arquivos em um arquivo. Vamos primeiro criar um exemplo de arquivo de backup:
# tar -cf maquina-backup-full-20030212.tar /etc /var/named /var/log
# bzip2 maquina-backup-full-20030212.tar

O que fiz foi armazenar os arquivos dos diretórios “/etc“, “/var/named” e “/var/log” no arquivo maquina-backup-20030212.tar, e depois compactá-lo no formato bzip2 (uma compactação melhor, mas que requer mais processamento), gerando então o arquivo “maquina-backup-20030212.tar.bz2“. Este mesmo comando pode ser feito em uma linha só:
# tar -jcf maquina-backup-full-20030212.tar.bz2 /etc /var/named /var/log

Com este arquivo, teremos um backup completo dos três diretórios especificados. Vamos à mais um exemplo:
# tar -zcf maquina-backup-full-20030212.tar.gz /etc /var/named /var/log
# tar -zcf maquina-home-full-20030212.tar.gz /home

Aqui eu criei dois arquivos. Um arquivo contém o backup que criamos anteriormente, e outro arquivo terá o backup do diretório “/home“, ou seja, o diretório dos usuários do sistema. A diferença aqui é que eu usei a opção “z” e não a “j“. Isso quer dizer que o tar vai usar o programa gzip ao invés do bzip2.

Agora vamos supor que eu alterei o conteúdo do diretório “/etc“, adicionando um arquivo chamado “teste” e modificando o arquivo “crontab“. Para não ter que fazer um backup total novamente, eu posso incrementar este backup somente com as modificações feitas. Para isso eu utilizo o seguinte comando:
# find /etc /var/named /var/log -mtime -1 -type f -print | \
tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Aqui o Linux vai procurar por arquivos modificados numa faixa de 1 dia (usado para backups incrementais diários) e armazená-los no arquivo “maquina-backup-incremental-20030212.tar.gz“. Vejamos agora um backup feito com os arquivos modificados numa faixa de uma semana:
# find /etc /var/named /var/log -mtime -7 -type f -print | \
tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Agora se você quiser automatizar, e poupar trabalho, use para a nomeação do arquivo o comando “date“, gerando assim a data no arquivo. Veja o exemplo dessa compactação:
# tar zcf backup-full-`date +%Y%m%d`.tar.gz /etc
# ls
backup-full-20030212.tar.gz

Agora que você já aprendeu a fazer os backups, vamos armazená-lo remotamente. Eu assumo que você já tenha configurado um servidor FTP em outra máquina, se você ainda não fez isso, faça. Depois adicione um usuário com uma certa senha para acessar este ftp. Aqui no tutorial vamos usar como usuário: “backup” e como senha: “segredo“. Utilize o seguinte script para automatizar o processo:
#!/bin/bash
#
DATA=`date +%Y_%m_%d`

# Dados do arquivo de backup
MAQUINA="sakura"
ARQUIVO="backup-full-$MAQUINA-$DATA.tar.gz"
DIRETORIOS="/etc /var/log"

# Dados do servidor FTP
HOST_FTP="192.168.0.1"
USUARIO_FTP="backup"
SENHA_FTP="segredo"

# A partir daqui não precisa mais editar.
# Cria o arquivo .tar.gz no /tmp (Temporário)
cd /tmp
tar zcf /tmp/$ARQUIVO $DIRETORIOS

# Acessa o FTP e coloca os arquivos
ftp -in <<EOF
   open $HOST_FTP
   user $USUARIO_FTP $SENHA_FTP
   bin
   lcd /tmp
   dele $ARQUIVO
   put $ARQUIVO
   bye
EOF

# Remove os arquivos temporarios
rm -rf /tmp/$ARQUIVO

Pronto! Lembre-se de proteger este arquivo aos olhos alheios, porque a senha do usuário do FTP está visível. Este pequeno script shell cria um backup dos diretórios “/etc” e “/var/log“, conecta ao servidor FTP e envia o arquivo. Você só precisará alterar as variáveis do começo do arquivo para as suas necessidades.

Com isso você terá o backup remoto que precisar. Modificando o script você pode criar também backups incrementais, e junto com o crontab, pode programar para as máquinas ficarem fazendo backups diários, semanais, mensais, ou como você quiser. Lembre-se sempre que os backups uma vez na máquina remota, devem ser colocados por segurança em uma mídia como fita DAT ou CD-ROM. Cabe à você decidir :) Bom proveito! Depois criarei mais dicas sobre o assunto.