quinta-feira, agosto 19, 2010

Backup full agendado em HD Externo no Ubuntu Server 10.04

image

Bom, vamos lá.

Cenário: Servidor instalado com Ubuntu 10.04 LTS Server, rede com máquinas Windows (Vista e Seven), no servidor rodando Samba como servidor de arquivos e gerenciador de impressão (Ainda com problemas para detectar os grupos secundários, mas funcionando na base da lista de usuários direto).

Problema: fazer o backup full dos arquivos do samba, agendado.

Comprei um case da Akasa, para conexão via USB, que pode receber HDs externos SATA 2,5” ou 3,5”, montei um HD de 2,5” de 160Gb, para ser o HD para guardar os backups, que era o meu antigo HD do notebook que foi trocado por outro de 750Gb, este HD está com sistema NTFS pois rodava Windows Vista, o novo agora roda Windows 7 Ultimate, nem me dei ao trabalho de formatar com ext3 ou outro sistema de unix, mantive o mesmo, só apaguei todos os dados do HD.

O case da Akasa é este aqui:

image

Akasa Duo Dock, ref: AK-IC008B-BKAM, custa por volta de R$ 130,00, suporta HDs de 2,5”e 3,5”, tem conexão eSata ou USB, funciona 100% no Ubuntu.

O bixinho é bão, viu?

 


   O processo é bem simples, conecta o Akasa via USB do servidor, ele reconhece automaticamente, aí é só descobrir onde que ele conectou, no meu servidor, conectou com /dev/sdc1 pois o servidor já tem 2 HDs de 500Gb.
   Para descobrir onde está o seu HD externo, basta digitar o comando fdisk –l:
# sudo fdisk –l

   Ele vai listar as unidades conectadas, e você poderá identificar o HD, aí é só montar o dito cujo, no meu caso eu decidi chamar de akasa mesmo, para saber que é o dock que está montado:
# sudo mount /mnt/akasa /dev/sdc1

  Ok, agora o HD externo será acessível sempre via /mnt/akasa, porém teremos um problema, teremos que verificar quando o HD externo estará montado, pois isso só vai ocorrer nos dias do backup, nos outros dias o HD estará armazenado fora da empresa, lógico, mas graças ao comando mountpoint podemos verificar quando o case estiver conectado, vamos agora fazer o script para rodar o backup periódicamente:

Obs.: procurei comentar o script para facilitar a compreensão.

-----------------------------------------------------------------------------
#/bin/sh

# Para conter a data do arquivo de backup que sera gerado
DTABKP=`date +%Y-%m-%d`
# Para conter o nome do mes para o arquivo de log - vamos fazer um log por mes
MESLOG=`date +%B`

# Diretorio que deve ser origem para o backup.
DIRORIGEM="/home/rede/ServPat"

# Arquivo para gravar o log do backup
ARQLOG="/var/log/backup/bkpServPat_log.$MESLOG"

# Verifica se o case esta montado no ponto definido, ou seja
#    se o HD externo esta conectado no case via usb

if mountpoint -q /mnt/akasa
then

# A sintaxe do TAR e : tar [parametros] [-f arquivo] [-C diretorio] [arquivos...].

#Parametros:

#    * -c - cria um novo arquivo tar;
#    * -M - cria, lista ou extrai um arquivo multivolume;
#    * -p - mantem as permissoes originais do(s) arquivo(s);
#    * -r - acrescenta arquivos a um arquivo tar;
#    * -t - exibe o conteudo de um arquivo tar;
#    * -v - exibe detalhes da operacao;
#    * -w - pede confirmacao antes de cada acao;
#    * -x - extrai arquivos de um arquivo tar;
#    * -z - comprime ou extrai arquivos tar resultante com o gzip;
#    * -j - comprime ou extrai arquivos tar resultante com o bz2;
#    * -f - especifica o arquivo tar a ser usado;
#    * -C - especifica o diretorio dos arquivos a serem armazenados.
     # Compacta a pasta da rede e joga para o diretorio do HD que esta no case USB
     tar -czvf /mnt/akasa/Backups/bkpServPat_$DTABKP.tar.gz $DIRORIGEM

    # Variavel para retorno das operacoes, para pegar algum erro
    RETORNO=$?

    # SE o retono de erro != 0, esta com erro

    if [ $RETORNO != "0" ]
           then
    # Grava o LOG com o codigo do Erro encontrado

      echo "================================================" >> $ARQLOG
      echo "            ********  E R R O ********" >> $ARQLOG
      echo "Erro na gravacao do backup da rede = $RETORNO" >> $ARQLOG
      echo `date` >> $ARQLOG
      echo "================================================" >> $ARQLOG

   else
      # Senão  esta sem erro
      # Grava no log informando que esta tudo OK
      echo "================================================" >> $ARQLOG
      echo "Backup da rede esta OK" >> $ARQLOG
      echo `date` >> $ARQLOG
      echo "================================================" >> $ARQLOG

   fi

fi

     Pronto, agora é só colocar o script no cron do Linux, e voilá, é sossegado.
      Não é um sistema de backup a prova de furacões e quedas de meteoros, mas é bem seguro.

Dica: Além do webmin (o meu preferido) para administrar o servidor remotamente, uso também o putty que permite um acesso direto ao terminal do server, baixe de http://www.putty.org .