Backup Automatizado (atualizado)
Publicado por Antônio Cláudio da Costa Ayres 20/10/2004 (última atualização em 05/08/2011)
[ Hits: 14.703 ]
Homepage: http://www.onlydesign.com.br
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ã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.
#!/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
Backup com TAR em LOG usando FITA LTO/DLT com filtro de arquivos, SPLIT em FITAS, envio de LOG por E
Plugin do Nagios para checar disco via SNMP
Remove Automaticamente os Kernel Antigos do GRUB
Ferramenta para o CBQ - parte 1
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Preciso resolver um erro de DPKG (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta