Backup Automatizado (atualizado)
Publicado por Antônio Cláudio da Costa Ayres 20/10/2004 (última atualização em 05/08/2011)
[ Hits: 14.957 ]
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
Acompanhamento de log squid com hora real
Automação para midias removíveis
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
Instalação dualboot Windows 11 e Debian 13 (14)
Ubunto não reconhece rede ethernet (1)









