Backup Automatizado (atualizado)

Publicado por Antônio Cláudio da Costa Ayres 20/10/2004 (última atualização em 05/08/2011)

[ Hits: 14.707 ]

Homepage: http://www.onlydesign.com.br

Download backup.tar.gz

Download 1311774552.backup.sh (versão 2)




Script de Backup automatizado atualizado (mudei um pouco desde o último).

Agora ele salva de forma mais bem organizada criando diretórios com a data.
Ele checa se você invocou corretamente o programa (passando 2 parâmetros) depois checa se você é root. Feito isto aguarda 15 segundos caso queira cancelar e faz o backup completo colocando num diretorio com a data. Gera 3 logs: Log completo, log de erros e md5sum do arquivo.
Uso: backup.sh <origem> <destino>
Ex: ./backup.sh /var/spool /mnt/backup

  



Versões atualizadas deste script

Versão 2 - Enviado por Ernander Lataliza em 27/07/2011

Changelog: Implementação do Bloco que não contemplava a Busca de diretórios e arquivos com espaços.

Download 1311774552.backup.sh


Esconder código-fonte

#!/bin/sh
# Script automatizado de backup
# Autor: Antonio Claudio da Costa Ayres (LedStyle)
# Visite: www.tuxresources.org
# Data de criacao: 09/10/2004
# Previsao da proxima atualizacao: Arrumar o "FOR" para salvar subdiretorios em arquivos distintos

# Declaracao das variaveis
DATA=`date +%d%m%Y` # Variavel para armazenar a data atual do sistema em formato utilizavel para o nome do backup
SUCESSO=$? # Variavel que retorna se o ultimo comando foi executado com sucesso ou nao
ORIGEM=$1 # Variavel que armazena a origem do backup. Neste caso o primeiro parametro passado
DESTINO=$2 # Variavel que armazena o destino do backup. Neste caso o segundo parametro digitado
DIRETORIO=`basename $1`-$DATA # Variavel que armazena o nome do diretorio a ser criado para se jogar o backup dentro
CONTADOR=15 # Variavel que armazena o numero de segundos que o backup deve aguardar antes de iniciar caso queira cancelar

# Funcao Principal. Tem por objetivo dar inicio ao processo
Principal()
{
   Root # Chama a funcao Root
}

# Funcao Root. Tem por objetivo testar se o usuario e root ou nao
Root()
{
   if [ $UID -ne 0 ]; then # Testa se o usuario e root
      echo "Apenas o root pode disparar uma rotina de backup. Abortando..."
      exit 1
   else
      Permicoes # Chama a funcao Permicoes
   fi
}

# Funcao Permicoes. Tem por objetivo testar as permissoes de escrita no diretorio de destino
Permicoes()
{
   if [ -d $DESTINO ]; then # Testa se o diretorio de destino existe
      Preeliminar # Chama a funcao Preeliminar
   else
      echo "Nao foi possivel realizar o backup. O diretorio $DESTINO nao existe."
      exit 2
   fi
}

# Funcao Preeliminar. Tem por objetivo exibir todas as informacoes antes de executar a rotina
Preeliminar()
{
   echo "------------------------------------------------------------" # Meus creditos
   echo "|                        `date +%d/%m/%Y`                        |"
   echo "|                    Backup Automatizado                   |"
   echo "|                       Por LedStyle                       |"
   echo "------------------------------------------------------------"
   echo
   sleep 1
   echo "Voce optou por fazer um backup do diretorio $ORIGEM e todo o seu conteudo"
   echo "O backup sera armazenado em $DESTINO/$DIRETORIO/"
   sleep 1
   echo "Irei iniciar o processo de backup em $CONTADOR segundos."
   sleep 1
   echo "Pressione Ctrl + C caso queira cancelar..."
   printf "[ "
   while [ $CONTADOR -ne "0" ] # Imprime na tela uma barrinha com base no contador de segundos. Isto serve para aguardar um numero determinado de segundos caso queira cancelar
   do
      printf ". "
      sleep 1
      CONTADOR=`expr $CONTADOR - 1`
   done
   printf " ]"
   echo
   echo "Iniciando o backup. Isto pode demorar dependendo do tamanho e tipo de arquivos a serem salvos..."
   Backup # Chamando a funcao Backup
}

# Variavel Backup. Tem por objetivo disparar o processo de backup e armazenar os logs
Backup()
{
   mkdir -p $DESTINO/$DIRETORIO # Criando diretorio onde o backup sera armazenado
   echo "Log gerado automaticamente pelo script de Backup Automatizado." > $DESTINO/$DIRETORIO/backup.log
   echo "Seja livre, use Linux!" >> $DESTINO/$DIRETORIO/backup.log
   echo "Data e hora do inicio do backup: `date`" >> $DESTINO/$DIRETORIO/backup.log # Armazena a data e hora de inicio do processo no arquivo de log
   echo "Diretorio de origem: $1" >> $DESTINO/$DIRETORIO/backup.log
   echo "Diretorio de destino: $2" >> $DESTINO/$DIRETORIO/backup.log
   echo >> $DESTINO/$DIRETORIO/backup.log
   echo >> $DESTINO/$DIRETORIO/backup.log
   echo ------------------------------------------------------------------ >> $DESTINO/$DIRETORIO/backup.log
   echo >> $DESTINO/$DIRETORIO/backup.log
   echo >> $DESTINO/$DIRETORIO/backup.log
   tar -czvf $DESTINO/$DIRETORIO/$DIRETORIO.tar.gz $ORIGEM >> $DESTINO/$DIRETORIO/backup.log 2>> $DESTINO/$DIRETORIO/erros.log # Faz o backup comprimindo num tar.gz, canaliza a saida para o arquivo backup.log e ainda canaliza os erros para o arquivo erros.log
      if [ $? -ne 0 ]; then # Testa se o ultimo comando foi execudado com sucesso. Para se certificar que o backup foi realmente realizado
         echo "Nao foi possivel fazer o backup. Para maiores detalhes consulte o arquivo $DESTINO/$DIRETORIO/erros.log" #Imprime a mensagem de erro caso o ultimo comando nao tenha sido executado com sucesso
         echo "Abortando..."
         exit 2
      else # Em caso de sucesso no backup...

########################################################
# Este bloco ainda nao foi implementado pois caso haja algum arquivo ou diretorio com espacos em seu nome a variavel "$i" recebe apenas a primeira parte como parametro. Entao nao e possivel comprimir estes arquivos pois o tar nao os encontrara. Exemplo:
# Se um arquivo chama "meu arquivo.txt" para a variavel $i se chamarao 2 arquivos: "meu" e "arquivo.txt". O tar nao encontrara o arquivo "meu" nem mesmo o "arquivo.txt" e estes nao serao backupeados.
########################################################
#   for i in `ls $ORIGEM`;
#   do
#      echo "Fazendo backup de $i"
#      echo >> $DESTINO/$DIRETORIO/backup.log
#      tar -czvf $DESTINO/$DIRETORIO/"$i".tar.gz $ORIGEM/"$i" >> $DESTINO/$DIRETORIO/backup.log 2>> $DESTINO/$DIRETORIO/erros.log
#      if [ $? -ne 0 ]; then
#         echo "Nao foi possivel fazer o backup. Para maiores detalhes consulte o arquivo $DESTINO/$DIRETORIO/erros.log"
#        echo "Abortando..."
#        exit 3
#      else
#      md5sum $DESTINO/$DIRETORIO/$i > $DESTINO/$DIRETORIO/$1.md5
#      echo >> $DESTINO/$DIRETORIO/backup.log
#      echo >> $DESTINO/$DIRETORIO/backup.log
#      echo ------------------------------------------------------------------ >> $DESTINO/$DIRETORIO/backup.log
#      echo >> $DESTINO/$DIRETORIO/backup.log
#      echo >> $DESTINO/$DIRETORIO/backup.log
#      fi
#   done
########################################################
         md5sum $DESTINO/$DIRETORIO/$DIRETORIO.tar.gz >> $DESTINO/$DIRETORIO/$DIRETORIO.md5 # Gera um md5sum do arquivo de backup para futuras consultas de consistencia
         echo "Termino do backup: `date`" # Loga a data e hora do termino do backup no arquivo de log
         echo "Backup realizado com sucesso!" # Informa o termino do processo
         sleep 1
         echo
         echo "Voce pode conferir o log completo em $DESTINO/$DIRETORIO/backup.log" # Exibe o caminho para o log
         echo "Antes de voltar um backup nao se esqueca de conferir o MD5SUM que se encontra em $DESTINO/$DIRETORIO/$DIRETORIO.md5" # Exibe o caminho para o md5sum
         sleep 1
         echo "Obrigado por utilizar o script automatizado de backup"
      fi
}

# Inicio do Script. Aqui chamo a funcao Principal para inicio do processo
clear # Limpa a tela
if [ "$#" -ne 2 ] ; then # Testa se o usuario passou 2 parametros: <origem> <destino>
   echo
   echo
   echo "Utilize corretamente este script de backup conforme o modelo a seguir:"
   sleep 1
   echo
   echo "Uso: `basename $0` [origem] [destino]"
   echo
   exit 0 # Aborta caso o usuario nao tenha passado 2 parametros
else
   Principal # Chama a funcao Principal

Scripts recomendados

Simples inventário de máquinas em Shell Script

Script Firewall Iptables + compartilhar internet

Listando usuários em um grupo

Impedir duas ou mais conexões por usuário

backup criptografado


  

Comentários
[1] Comentário enviado por joaofalcao em 18/11/2005 - 09:40h

Parabéns meu caro, exatamente o que eu estava precisando, simples e obletivo.

[2] Comentário enviado por texugo89 em 22/03/2006 - 13:02h

Pô cara, legal esse Script.
Ele me deu uma base bem legal para fazer um aqui na empresa em que eu trabalho.
Me economizou um tempão!

Obrigado.

##T3%U60##

[3] Comentário enviado por Nick em 02/11/2007 - 15:45h

Da uma olhada no final do script. Tem uma linha (uma nao, varias) copiada e colada que nao esta fazendo o script funcionar.

[4] Comentário enviado por paulocamboim em 04/05/2009 - 14:12h

Muito bom o script... Parabens =)

[5] Comentário enviado por renatolmorais em 05/08/2011 - 20:08h

Muito bom o script.
Só não entendi aquela parte do bloco não implementado.
Você disse que se o arquivo contiver espaços no nome, o tar vai entender que são 2 arquivos. Mas no próprio comando você utiliza aspas na varíavel ("$i"). Isso já elimina o problema.
O tar vai entender como um arquivo "meu arquivo.txt".


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts