você está aqui: Home  → Arquivo de Mensagens

Dicas de Backup na Prática

Colaboração: Renato Rudnicki

Data de Publicação: 08 de Maio de 2007

Há diversas maneiras e tipos para se fazer um backup. As principais foram descritas no meu artigo anterior. Porém este tem como objetivo descrever algumas dicas para soluções práticas que enfrentamos no dia-a-dia. Não sou especialista em backups e sei que existem diversas outras formas do mesmo ser feito. Aqui, estou tentando passar um pouco de conhecimento prático e algumas dicas mais funcionais e simples para implementar seu backup.

1. Como Planejar um Backup

Dependendo do investimento em que a empresa está disposta a fazer em relação as rotinas de backup, você poderá fazer um Backup Full, Incremental ou Diferencial, como está explicado em meu artigo anterior. Os principais fatores que devemos levar em conta ao planejar um backup, são: Custo/Benefício, Investimento da empresa, Tipo de armazenamento, Local de armazenamento (rede, hd, servidor de backups, etc) tamanho que terá o backup, tempo que vai demorar para fazer o backp, confiabilidade e facilidade em seu uso (principalmente restauração). Claro que, geralmente seu chefe irá pedir para fazer o melhor backup com o menor investimento possível.

1.1. Tamanho dos Dados

Empresas que tem poucos dados para se armazenar (consdere pouco, menos de 30GB) pode-se usar dvd ou um outro hd para armazenar os arquivos. Já em uma empresa de médio porte, (backups entre 30G a 100GB) as soluções que mais se encaixam seriam armazenamento em fitas Dat ou em um servidor específico para backups. Empresas de grande porte, há outras técnicas que poderiam ser usadas, como, a de adquirir um robo de backups.

1.2. Investimento da empresa

Mas como a maioria das coisas na vida gira em torno do dinheiro, seria totalmente desnecessário e inviável adquirir um robo de backups em uma empresa que não tem mais de 10 computadores na rede. E, com certeza seu chefe será o maior incentivador para você gastar o mínimo possível ao criar o backup.

{div align="center"} {/div}

Abaixo, vou dar algumas sugestões de maneiras de fazer um backup em empresas de pequeno e médio porte.

1.3. Empresa de Pequeno Porte

Provavelmente, por se tratar de pouca quantidade de dados, não haveria necessidade de um backup diário total. Seria interessante fazer um backup Diferencial ou Incremental durante um horário que ninguém estiver utlizando os arquivos (a hora de almoço é altamente indicada para deixar fazendo o backup nesses casos). Aqui poderia ser utilizado o rsync para fazer o backup diferencial. Um backup semanal poderia ser gravado em um dvd-rw.

Caso o tamanho do backup ultrapasse a capacidade do dvd, você tem 2 alternativas, ou compactar o backup, ou usar o comando split para dividir o arquivo em 2 ou 3 partes, para que caiba cada parte em seu respectivo DVD.

Caso você ache que seria melhor armazenar o backup em um hd, seria interessante gerar um script de backup utilizando o tar para que não ocupe tanto espaço em disco. Atualmente, com a tecnologia dos hds sendo inovada a cada dia, uma boa idéia seria usar um hd USB, assim, não seria necessário nem ter um servidor de backups, apenas seria necessário concectá-lo em uma estação com suporte a usb, e deixar o script agendado no sistema. Abaixo, estou inserindo um "script" em que geraria o backup e compactaria no formato bzip2 (uma compactação melhor, mas que requer mais processamento), gerando então o arquivo de backup localmente, com a data em que foi feito.

  tar zcf backup-full-`date +%Y%m%d`.tar.gz /home/Dados

Mas, para não termos que fazer um backup full todos dias, poderiamos usar a forma Incremental com o seguinte comando:

  find /home/Dados -mtime -1 -type f -print | \
  tar zcvf server-bkp-incremental-20060212.tar.gz -T -

Aqui o comando find vai procurar por arquivos modificados numa faixa de 1 dia (usado para backups incrementais diários) e armazená-los no arquivo server-bkp-incremental-20060212.tar.gz.

1.4. Empresa de Médio Porte

Aqui mostrarei algumas técnicas que podem ser utilizadas em empresas que germa mais de 30 gb de Dados em sua rede. Nesse caso, seria interessante fazer um investimento um pouco maior, e ter um servidor de backups para faze-los diariamente. Algumas maneira de fazer isso, seria através de ftp, ssh, rsync, softwares como o amanda, ou mesmo o bom e velho shell script combinado com o tar. Abaixo, estou disponibilizando o script de backup que eu utilizo na empresa em que eu trabalho.

  cd /home/
  tar -zcf - Dados | ssh renato@192.168.3.15 "cat > bkp_servidor-`date +%Y%m%d`.tar.gz"

O que eu faço é que uso meu computador como segundo servidor de backup (o primeiro é o servidor que gera os backups em fitas Dat). O servidor se conecta atraves de ssh no meu computador jogando o backup do diretório /home/Dados compactado com a data em que o backup foi feito. Com isso, eu não gasto espaço do hd do servidor, e tenho um backup totalmente automatico (o backup é feito de segunda a sexta as 23:00) e que se torna muito fácil de restaurar em caso de algum acidente. Abaixo, segue mais três modelos de backup, o primeiro sendo um script muito eficiente que gera o backup localmente, e os outros 2, modelos de scripts através de ftp e ssh.

2. Script Backup

  Script Backup (Desenvolvido por Vanderlie Pollon)
  
  #! /bin/sh
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
  # #
  # Nome do Script: bkp.sh #
  # Data ???: dd/mm/aa #
  # Disciplina ?: SCO/ADS #
  # Desenvolvido por ?: Vanderlei Pollon #
  # Versao ??.: 1.0 #
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
  
  # Finalidade deste script: #
  # Este script gera um pacote TAR com o conteúdo do diretorio /home.#
  # A ideia e utiliza-lo para backup (o nome ja diz isso). O pacote #
  # gerado deve conter todos os arquivos do /home, exceto aqueles que#
  # contenham a string "lixo" no seu nome e aqueles cujo nome finali-#
  # ze por ".ant". O arquivo gerado deve ser compactado pelo gzip e o#
  # seu nome deve seguir o modelo bkp_home_nameserver_dd-mm-aaaa.tgz #
  # Onde: #
  # nameserver= nome do servidor (sem o dominio) #
  # dd-mm-aaaa= data da backup #
  # #
  # Este script, sempre que rodar, deve verificar se esta incluido na#
  # agenda do sistema. Se este script nao estiver na agenda do sis- #
  # tema deve se auto-instalar para rodar, todos os dias, as 22:00, #
  # exceto aos domingos (pois aos domingos o nosso servidor esta des-#
  # ligado). #
  # Suponha que este script esta no diretorio /usr/bin #
  # #
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
  # #
  # Seguindo esta filosofia, este script esta todo baseado en varia- #
  # veis que estao definidas a seguir.
  # #
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
  # OBS -> lembre-se de que para executar este script e necessario que #
  # ele esteja com a permissao "x". Utilize o comando chmod. #
  # #
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>
  
  # Definicao das variaveis utilizadas neste script
  
  DATA_DO_BACKUP=`date +%d-%m-%Y` #Data do backup.
  NOME_DO_SERVIDOR=`hostname -a` #Nome da maquina, sem o dominio
  NOMEFIXO="bkp_home" #A parte fixa do nome do pacote
  DIRETORIO="/opt" #Onde o arquivo tar sera armazenado
  TAR="/bin/tar" #O binario que iremos utilizar
  OPCOES1="?exclude "*.ant"" #Exclui os arquivos com final ".ant"
  OPCOES2="?exclude "*lixo*"" #Exclui os arquivos com a string "lixo"
  OPCOES3="-zcvf" #Opcoes para a gerar e compactar
  ARQ_CRON="/etc/cron.daily/bkp.sh" #Arquivo da agenda do sistema
  NOME_SCRIPT="/usr/bin/bkp.sh" #Caminho absoluto do script de backup
  USER="root" #Usuario que rodara o script na cron
  AGENDA="00 22 * * 1-6? #Data/hora na cron para rodar o script
  #(cinco campos separados por um espaco)
  LINHA=$AGENDA" "$USER" "$NOME_SCRIPT #Linha que sera incluida na cron
  < A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>< A NAME="note" HREF="#textnote">< SUP>###
  
  # Vamos iniciar.
  # Limpamos a tela.
  clear
  
  #Vamos para o diretorio onde o pacote gerado ficara
  cd $DIRETORIO
  
  echo "Iniciando a geracao do pacote tar ?."; sleep 1
  
  $TAR $OPCOES1 $OPCOES2 $OPCOES3 "$NOMEFIXO"_"$NOME_DO_SERVIDOR"_"$DATA_DO_BACKUP".tgz /home
  
  # Testa o codigo da saida (se o comando foi feliz)
  
  if [ $DIRETORIO -ne 0 ]; then
  echo "Alguma coisa saiu errada ?."
  echo ""
  echo "Contate o administrador do sistema.";sleep 1
  exit 1
  fi
  echo "Ufa, terminei :)"
  echo ""
  echo " O arquivo gerado encontra-se no diretorio $DIRETORIO"
  # Verifica se este script esta ativo na crontab do sistema
  cat $ARQ_CRON |grep $NOME_SCRIPT |grep -v "#" >/dev/null
  if [ $NOME_SCRIPT -ne 0 ]; then
  echo "Este script nao esta ativo na agenda do sistema"
  echo "Vou inclui-lo para voce ?"; sleep 1
  echo "$LINHA">>$ARQ_CRON
  fi
  exit 0

2.1. ssh

O SSH permite você acessar máquinas remotamente, e seus dados trafegam criptografados. Além disso, ele também permite transferir arquivos pelo protocolo e isso dá uma segurança ainda maior para seus backups, na hora de transferí-los remotamente. Para trasnferir o arquivo de backup para a máquina remota, utilize o comando:

  scp arquivo.tar.gz usuario@host:/diretorio

O programa irá lhe perguntar a senha do usuário do host remoto. Indique-a e o arquivo será transferido. Devido ao arquivo estar sendo transferindo de forma criptografada, o seu sistema utilizará um pouco mais de processador para criptografar os dados para a máquina remota. O mesmo acontece com o servidor remoto, que precisa descriptografar para receber o arquivo. O SSH sempre pede senha para conectar remotamente (óbvio), mas para automatizar esse processo em shell-scripts, você pode criar chaves de confiança entre máquinas para que elas loguem-se entre si sem necessitar de senha alguma. Consulte a documentação do ssh e outros tutoriais para saber como fazer isso.

2.2. FTP

Aqui 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.

3. Midias

As mídias mais comuns para se fazer backup são DVD, Fitas DAT's e HD. Porém, os Dvd's são uma solução apenas para empresas de pequeno porte. Seria totalmente inviável uma empresa que tem mais de 30 gb armazenar seus backups em dvd's. As fitas dats são uma solução barata e com grande capacidade de armazenamento. Porém, tem alguns incovenientes, como de ser muito demorado os backups que utilizam este típo de mídia, tem uma vida útil não muito longa, e a que eu acho a pior de todas, é de se você tiver que restaurar um backup, tera que restaurar todo conteúdo da fita, para depois restaurar a pasta ou arquivo que você precisa. Mas lembre-se, cada caso é um caso. Em relação a fazer backups em hds, é o tipo de mídia que eu considero a mais fácil de usar, rápida e barata. Por exemplo, você precisa fazer o backup diário de arquivos que no total soman 40 gb. Montar um servidor com um hd de 300 ou 400 gb já resolveria a solução, e não custaria mais do que uns R$ 4.000.00. Você pode achar esse valor alto, porém, pense na possibilidade de ter que restaurar 40 gb por causa que um usuário deletou uma pasta importante da rede, que não tinha mais de 15 MB. Sem falar no tempo de vída util. Dependendo do caso, Você pode até pensar em fazer backups usando um servidor dedicado com Raid.

4. Algumas Dicas de um Backup eficiente

Aqui tem algumas dicas que podem ser uteis no momento de se pensar nas rotinas de backup para sua rede. Pode ser dicas simples, mas que muitas vezes fazem a diferença.

5. Restauração

Nesses momentos, é que vemos se o investimento e tempo gasto na implantação de backup valeu mesmo a pena. De que adianta ter um backup funcional, se na hora que você mais precisa dele, você tem que ficar horas e horas restaurando ele, ou pior, tem dificuldades ou até mesmo recebe erros ao tentar restaurá-lo ? Para isso, devemos pensar na questão custo/benefício.

5.1. Tempo que leva

Dependendo da quantidade de arquivos que precisa-se fazer backup, pode-se ficar horas e horas rodando o seu script. Então deve-se pensar em um horário que de tempo suficiente para que no dia seguinte ele tenha sido concluído com sucesso. De preferência, faça os backups em um horário que não tem nimguem em serviço, pois além de se tornar mais rápido, diminui as chances de ter algum arquivo corrompido e de ser 100% atualizado.

5.2. Data dos backups

Sempre que faça backups, coloque a data nos arquivos / fitas / dvds, etc. É bem provavel que um dia, seu chefe lhe peça para restaurar o backup de 3 dias atrás. Além de ter um bom sistema de backup, organização é extremamente importante.

5.3. Confiabilidade / Testes

Faça testes periodicamente para ter certeza que tudo funciona perfeitamente. Não seria nem um pouco bom, descobrir que seu backup não está funcionando corretamente quando você precisar restaurar ele.

5.4. Política e Documentação

Crie uma política de backup e documente os horários que são feitos os backups, quanto tempo em média demoram, quanto tempo levaria para uma restauração, que tipo de backup é feito, quanto tempo ele será armazenado. Documentação nunca é demais.



 

 

Veja a relação completa dos artigos de Renato Rudnicki

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script