Aperfeiçoar script de backup

1. Aperfeiçoar script de backup

Jonatas Prust
JPrust

(usa Ubuntu)

Enviado em 17/11/2017 - 11:16h

Olá,
Estou desenvolvendo um script para utilizar em um Orange Pi Plus 2, que servirá para realizar o backup de dados.
Incialmente configurei o cliente de emails mutt, para enviar emails, um cliente OpenVPN para me conectar ao servidor,e o compartilhamento NFS.
Depois desenvolvi o script:
O script faz a checagem das conexões , monta os compartilhamentos remotos e realiza o backup com o rsync.
Gostaria de aperfeiçoar o mesmo com o conhecimento que algumas pessoas do fórum possuem, segue script:
Aguardo suas dicas...

#!/bin/bash
#
#backupRaspberryPi.sh: Monta um compartilhamento NFS do servidor de arquivos da RGA através de uma VPN e realiza o
#backup completo dos dados em uma unidade acoplada ao mini-pc.
#Versão: 2.0
#-----------------XXX-------------------

#Variáveis
ipServidor=10.8.0.1
dispositivoHdLocal=/dev/sda1
pastaLocal=/backup
pastaLocalDados=/backup/dados
pastaLocalVms=/backup/vms
compartilhamentoDados=/sinc/dados
compartilhamentoVms=/sinc/virtual
pontoMontagemDados=/mnt/servidordados
pontoMontagemVms=/mnt/servidorvms
excluirPasta=emails

dataAtual=`date +%d-%m-%Y/%H:%M`

email=teste@gmail.com
servidorInternet=google.com
tunelVPN=tun0

dirBase=$(dirname "$0")
log=$dirBase/backup.log
msg_ok=$dirBase/ok.txt
msg_erro=$dirBase/erro.txt

backup=0

#Função para testar a existencia do arquivo de log e criar um se necessário.
function testarLog() {
arquivoLog=$1
if [ -e $arquivoLog ]; then
echo "Arquivo de log existente..." > $arquivoLog
else
touch $arquivoLog > /dev/null
echo "Arquivo de log criado." >> $arquivoLog
fi
}

#Funcao para testar a conectividade com a internet
function testarInternet() {
servidor=$1
if ping -c 5 $servidor > /dev/null; then
echo "Conectado a internet..." >> $log
backup=$(($backup + 1))
else
echo "Sem conexao a internet." >> $log
fi
}

#Funcao para testar a conectividade da VPN
function testarVPN() {
tunel=$1
ip=$2
if ifconfig $tunel >> /dev/null; then
echo "Conectado a VPN..." >> $log
if ping -c 5 $ip > /dev/null; then
echo "Conectado ao servidor..." >> $log
backup=$(($backup + 1))
else
echo "Sem comunicao com o servidor de arquivos." >> $log
fi
else
echo "Conexao VPN não estabelecida." >> $log
fi
}

#Funcao para montar a pasta de backup local
function montarCompartilhamentoLocal() {
dispositivo=$1
pasta=$2

if [ -d $pasta ] >> /dev/null; then
echo "Utilizando pasta local existente..." >> $log
else
echo "Criando pasta local..." >> $log
mkdir $pasta >> /dev/null
fi

if mount $dispositivo $pasta >> /dev/null; then
echo "Pasta local "$pasta" montada..." >> $log
backup=$(($backup + 1))
else
if df -h | grep /backup >> /dev/null; then
echo "Pasta local "$pasta" já montada." >> $log
backup=$(($backup + 1))
else
echo "Pasta local "$pasta" não pode ser montada." >> $log
fi
fi
}

#Funcao para montar o compartilhamento do servidor remoto
function montarCompartilhamentoRemoto() {
ip=$1
compartilhamento=$2
pontoMontagem=$3

if mount -t nfs $ip:$compartilhamento $pontoMontagem >> /dev/null; then
echo "Compartilhamento remoto "$compartilhamento" montado em "$pontoMontagem >> $log
backup=$(($backup + 1))
else
if df -h | grep $pontoMontagem >> /dev/null; then
echo "Compartilhamento remoto "$compartilhamento" já montado em "$pontoMontagem >> $log
backup=$(($backup + 1))
else
echo "Compartilhamento remoto "$compartilhamento" não pode ser montado em "$pontoMontagem >> $log
fi
fi

}

#Funcao para copiar os dados do servidor remoto
function realizarBackup() {
pontoMontagem=$1
pastaBackup=$2
excluir=$3
if df -h | grep $pontoMontagem >> /dev/null; then
echo "Realizando copia de arquivos de "$pontoMontagem":" >> $log
if rsync -avu --exclude $excluir --delete $pontoMontagem/ $pastaBackup >> $log; then
backup=$(($backup + 1))
echo "Cópia de arquivos de "$pontoMontagem" realizada com sucesso!" >> $log
else
echo "Cópia de arquivos de "$pontoMontagem" com falha. Verifique o arquivo de log" >> $log
fi
else
"Algo errado aconteceu, Verifique os logs" >> $log
fi
}

#funcao para enviar o email com o log.
function enviarEmail() {
emailDestino=$1

if [ $backup -eq 7 ]; then
mutt -s "Servidor de backup - Sucesso" -a $log -- $email < $msg_ok >> /dev/null
else
mutt -s "Servidor de backup - Erro" -a $log -- $email < $msg_erro >> /dev/null
fi
}

testarLog $log
echo $dataAtual >> $log
testarInternet $servidorInternet

if [ $backup -eq 1 ]; then
testarVPN $tunelVPN $ipServidor
else
echo "Script encerrado por falta de conexao a internet." >> $log
exit
fi

if [ $backup -eq 2 ]; then
montarCompartilhamentoLocal $dispositivoHdLocal $pastaLocal
else
echo "Script encerrado por falta de conexao a VPN ou ao servidor." >> $log
enviarEmail $email
exit
fi

if [ $backup -eq 3 ]; then
montarCompartilhamentoRemoto $ipServidor $compartilhamentoDados $pontoMontagemDados
montarCompartilhamentoRemoto $ipServidor $compartilhamentoVms $pontoMontagemVms
else
echo "Script encerrado por não conseguir montar a pasta local." >> $log
enviarEmail $email
exit
fi

if [ $backup -ge 5 ]; then
echo " " >> $log
realizarBackup $pontoMontagemDados $pastaLocalDados $excluirPasta
echo " " >> $log
# realizarBackup $pontoMontagemVms $pastaLocalVms
# echo " " >> $log
else
echo "Script encerrado por não conseguir montar as pastas remotas" >> $log
enviarEmail $email
exit
fi

echo "Hora de termino do backup:" >> $log
date +%H:%M >> $log
echo "--------xXx--------" >> $log
df -h >> $log
umount $pastaLocal >> /dev/null
umount $pontoMontagemDados >> /dev/null
umount $pontoMontagemVms >> /dev/null
enviarEmail $email

exit



  


2. Aperfeiçoar script

Jonatas Prust
JPrust

(usa Ubuntu)

Enviado em 17/11/2017 - 11:35h

Basta dar algumas dicas de programação, o que deve ser melhorado, retirado, etc.
Fico no aguardo.


3. Melhorias no script

Jonatas Prust
JPrust

(usa Ubuntu)

Enviado em 20/11/2017 - 10:40h

Eu fiz o script com várias funções, pois acredito que futuramente eu possa implementar essas funções, e colocar eles em arquivos diferentes, assim seriam vários scripts interligados e cada um com uma função bem específica. Assim vários scripts diferentes poderiam utilizar esses outros pequenos scripts sem a necessidade de reescrever o código.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts