Backup Automatizado (atualizado)

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

[ Hits: 14.602 ]

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

SCRIPT PARA AUTOMAÇÃO DE ATUALIZAÇÃO EM AMBIENTE DEBIAN OU DERIVADOS.

Calculadora em phyton

Gerar senhas aleatórias de qualquer tamanho

Verifica espaço em disco

Compilação de módulos para VMware 12.5.7 no Fedora 26


  

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