Script de backup
Publicado por Ivan Moretto 01/03/2009 (última atualização em 12/09/2009)
[ Hits: 6.829 ]
Criei este script para efetuar backup nos servidores que administro. Você pode informar os diretórios de origem e destino, excluir diretórios do backup etc. Ele enviará um email caso existam erros em alguma etapa do backup.
Obs.: É necessário baixar também o script para envio de email: http://www.vivaolinux.com.br/script/Envio-de-email-via-console
#! /bin/sh
####################################################################
# Nome do Script: backup.sh
# Desenvolvido por: Ivan Moretto
# Data : 15/02/2009
# Versao : 1.0
####################################################################
# * * * * * * * * * * * * * IMPORTANTE * * * * * * * * * * * * * * #
# Para executa-lo na crontab eh necessario que sejam informados os #
# arquivos de saida 1> e 2> como no exemplo abaixo. #
# 00 20 * * * /etc/bin/backup.sh 1>/var/log/backup/saida1.log 2>/var/log/backup/saida2.log
# O 1> e' o resultado da gravacao do cd/dvd e o 2> e' o resultado #
# do mkisofs, se nao for colocado o script nao funciona no crontab.#
# Pode acreditar, apanhei uma semana para descobrir porque o danado#
# funcionava quando startava na linha de comando e quando startava #
# pelo cron ele nao concluia a geracao do ISO e consequentemente a #
# gravacao. #
####################################################################
# Definicao das variaveis utilizadas neste script
ORIGEM="/trabalho /etc /home" #coloque aqui todos os diretorios a serem copiados
PREFIXO="trabalho-etc-home" #prefixo do nome do arquivo
DESTINO="/backup" #Onde o arquivo tar sera armazenado
ISO="/backup-iso" #Onde o arquivo ISO sera armazenado
TAR="/bin/tar" #O binario que iremos utilizar
AUXILIAR="/backup-aux" #Guarda backups anteriores
LOGS="/var/log/backup" #Diretorio de Logs
OPCOES1="--exclude="*.jpeg"" #
OPCOES2="--exclude=".wav"" # Opcoes a serem passadas para o tar
OPCOES3="--exclude=".mp3"" #
OPCOES4="--exclude="outlook"" #
OPCOES5="-cjvf" #
NOME_SCRIPT="/etc/bin/backup.sh" #Caminho absoluto do script de backup
###################################################################
# Funcao para atualizar data e hora da variavel DATA_DO_BACKUP
atualiza_data () {
#Cria data e hora no formato AAAA/MM/DD HH:MM:SS
DATA_DO_LOG=`date +%Y\/%m\/%d\ %H\:%M\:%S`
DATA_DO_BACKUP=`date +%Y-%m-%d-%H-%M-%S`
}
atualiza_data
NOME_COMPLETO_ARQUIVO_BACKUP=$HOSTNAME"_"$PREFIXO"_"$DATA_DO_BACKUP".tar.bz2"
#Limpa arquivo parte.log
echo "" > $LOGS/parte.log
clear
# Se nao existir o diretorio de log e destino para backup ele cria o conteudo $LOGS
if ! ls $LOGS ; then
mkdir $LOGS
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE LOG $LOGS " >> $LOGS/parte.log
fi
if ! ls $DESTINO ; then
mkdir $DESTINO
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO DE DESTINO $DESTINO" >>$LOGS/parte.log
fi
if ! ls $AUXILIAR ; then
mkdir $AUXILIAR
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO AUXILIAR $AUXILIAR" >>$LOGS/parte.log
fi
if ! ls $ISO ; then
mkdir $ISO
atualiza_data
echo "$DATA_DO_LOG - #### CRIADO DIRETORIO ISO $ISO" >>$LOGS/parte.log
fi
#Remove Backup com data de 30 dias (Pode ser alterado conforme necessidade)
DATA30DIAS=$(date +%Y-%m-%d --date '30 days ago')
rm $AUXILIAR/$HOSTNAME"_"$PREFIXO"_"$DATA30DIAS*
#Move backup anterior para diretorio auxiliar
mv $DESTINO/* $AUXILIAR
#Remove Imagem ISO anterior
rm $ISO/* -f
#Entrando no diretorio destino
cd $DESTINO
echo " " >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG ==============================================================" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Backup iniciado ..." >>$LOGS/parte.log
echo "$DATA_DO_LOG - Backup do(s) diretorio(s) $ORIGEM" >>$LOGS/parte.log
echo "$DATA_DO_LOG - $TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM" >>$LOGS/parte.log
$TAR $OPCOES1 $OPCOES2 $OPCOES3 $OPCOES4 $OPCOES5 $NOME_COMPLETO_ARQUIVO_BACKUP $ORIGEM >$LOGS/tar.log
if ! ls $NOME_COMPLETO_ARQUIVO_BACKUP ; then
atualiza_data
echo "$DATA_DO_LOG - ERRO - BACKUP NAO EFETUADO. ???" >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME " "$DATA_DO_LOG - ERRO - BACKUP NAO EFETUADO. ???" $LOGS/parte.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - O arquivo gerado encontra-se no diretorio $DESTINO" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Backup concluido ***" >>$LOGS/parte.log
atualiza_data
echo "$DATA_DO_LOG - Gerando imagem ISO ..." >>$LOGS/parte.log
mkisofs -o $ISO/backup.iso -JrT $DESTINO
if [ "$?" != "0" ]; then # Checa se houve erro na criacao da imagem ISO
atualiza_data
echo "$DATA_DO_LOG - Erro durante criacao da imagem ISO ..." >>$LOGS/parte.log
/etc/bin/email.sh "backup - $HOSTNAME" "$DATA_DO_LOG - Erro durante a criacao da imagem ISO ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
#desmonta midia caso esteja montada
umount /media/cdrom
sleep 3
atualiza_data
echo "$DATA_DO_LOG - Formatando CD/DVD ..." >>$LOGS/parte.log
dvd+rw-format -force /dev/dvd
if [ "$?" != "0" ]; then # Checa se houve erro na formatacao
atualiza_data
echo "$DATA_DO_LOG - Erro durante formatacao do CD/DVD ..." >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG - Erro durante formatacao do CD/DVD ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - Gravando imagem ISO no CD/DVD ..." >>$LOGS/parte.log
# Utilizar opcoes de gravacao conforme sua unidade (CD ou DVD)
# e Informar onde esta instalada sua unidade (/dev/hda)
growisofs -dvd-compat -speed=4 -Z /dev/dvd=/$ISO/backup.iso
# dd if=$DESTINO"/"NOME_COMPLETO_ARQUIVO_BACKUP of=/dev/hda
if [ "$?" != "0" ]; then # Checa se houve erro na gravacao
atualiza_data
echo "$DATA_DO_LOG - Erro durante gravacao do CD/DVD ..." >>$LOGS/parte.log
/etc/bin/email.sh "BACKUP - $HOSTNAME" "$DATA_DO_LOG - Erro durante gravacao do CD/DVD ..." $LOGS/parte.log
cat $LOGS/parte.log >>$LOGS/backup.log
exit 1
fi
atualiza_data
echo "$DATA_DO_LOG - Gravacao do CD/DVD concluida ..." >>$LOGS/parte.log
eject
cat $LOGS/parte.log >>$LOGS/backup.log
exit 0
Trocando plano de fundo no flux de forma gráfica
Backup do banco de dados Postgresql
Cluster multi-master com MariaDB 10.1 + Galera
Nenhum comentário foi encontrado.
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
Como fazer a conversão binária e aplicar as restrições no Linux
Como quebrar a senha de um servidor Linux Debian
Como bloquear pendrive em uma rede Linux
Um autoinstall.yaml para Ubuntu com foco em quem vai fazer máquina virtual
Instalar GRUB sem archinstall no Arch Linux em UEFI Problemático









