Enviado em 17/11/2017 - 11:16h
Olá,
#!/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
Como gerar qualquer emoji ou símbolo unicode a partir do seu teclado
Instalar e Configurar o Slackware Linux em 2025
Como configurar os repositórios do apt no Debian 12 em 2025
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Muitas dificuldades ao instalar distro Linux em Notebook Sony Vaio PCG-6131L (VPCEA24FM)
Slackpkg+ (Slackpkg Plus) está de volta!
Como dividir duas janelas igualmente e lado-a-lado na sua tela
Configurando o Conky para iniciar corretamente no sistema
3 configurações básicas que podem melhorar muito a sua edição pelo editor nano
Minha rede tem um espaço invisível que não dá pra digitar o nome da re... (1)
Pedagogia no brasil não passa de alfabetização por m4sturbação mental ... (2)
compilação samba 4.22 rock linux 9.5 (3)
Erro de segmentação «Segmentation fault (core dumped)» ao retornar obj... (7)