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.