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
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Pastas da raiz foram para a área de trabalho (4)
usb's param de funcionar do nada (6)
Como criar condições de monitoria de 2 IPs no Zabbix (0)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)