Lisa - sistema de backup com rsync
Publicado por Slackjeff (última atualização em 25/06/2018)
[ Hits: 2.771 ]
Homepage: https://slackjeff.com.br
Lisa é um sistema de backup que utiliza o rsync como principal forma de backup e sincronismo 'Origem/Destino'.
Criada especialmente para fazer backups 'localmente' em dispositivos removíveis ou não, pendrives, HD, HD externo.
Mais informações: https://notabug.org/jeffersonrocha/lisa
#!/usr/bin/env bash
#<SHELL STANDARD>
#------------HEADER-----------------------------------------------------------|
#AUTOR
# Jefferson Rocha <lrcjefferson@gmail.com>
#
#PROGRAMA
# Lisa
#
#VERSÃO
# 1.0
#
#LICENÇA
# MIT
#
#DESCRIÇÃO
# Lisa é um sistema de backup que utiliza o rsync como principal forma de
# backup e sincronismo 'Origem/Destino'.
# Criada especialmente para fazer backups 'localmente' em dispositivos
# removiveis ou não, Pendrives, HD, HD Externo.
#
#NOTA
# A Lisa não utiliza os nomes de dispositivos, exemplo (/dev/sdb) (/dev/sdc)
# ao invés disto é utilizado o UUID do dispositivo.
# Com a informação do UUID do dispositivo fica menos sucessivel a falhas
# existem vários problemas relacionados principalmente com HD's Externo,
# as vezes montamos como /dev/sdb por exemplo, e ao desmontar é trocado para
# /dev/sdc, com isto é gerado uma falha no backup, prefira indiciar o UUID.
#
# Para conseguir o UUID do dispositivo rode o comando 'lsblk -l' para
# saber qual é o seu dispositivo. Em seguida rode o comando
# 'blkid', para conseguir o UUID.
# Copie o UUID do dispositivo e adicione em /etc/fstab
# o ponto de montagem, exemplo de um HD externo em fstab:
#
# UUID=d4569c6f-2750-4128-a049-f225985aa812 /media/hd_externo ext4 auto 0 0
#
# Salve, desmonte todos dispositivos do fstab em seguida monte novamente:
# umount -a
# mount -a
#
#CHANGELOG:
#
#-----------------------------------------------------------------------------|
#------VARS--------------------------------------#
# ADICIONE A UUID DO SEU DISPOSITIVO AQUI!
# Rode o comando 'lsblk -l' para identificar qual
# o seu dispositivo em seguida rode 'blkid' e
# pegue a UUID referente e adicione nesta
# váriavel!
UUID="d4569c6f-2750-4128-a049-f225985aa812"
dispositivo_base="$(blkid -U $UUID)" # NÃO MEXER
diretorio_de_montagem="/mnt/backup-lisa" # Qual diretorio será montado o Dispositivo?
diretorio_para_envio="/home/slackjeff" # Qual diretorio enviar?
log="/tmp/backup-lisa.log" # Especifique qual diretorio de login
# Ative as opções que desejar, estas opções
# podem ser ativas em linha caso você não
# queira ficar mexendo no fonte do programa.
verbose="" ; [[ "${VERBOSE:-sim}" = "sim" ]] && verbose="--verbose" # Modo Verboso
update="" ; [[ "${UPDATE:-sim}" = "sim" ]] && update="--update" # Pula arquivos se são iguais c/data posterior origem/destino
delete="" ; [[ "${DELETE:-sim}" = "sim" ]] && delete="--delete" # Não tem na origem? destino é excluido tambem!
human="" ; [[ "${HUMAN:-sim}" = "sim" ]] && human="--human-readable" # Leitura para humanos Kbytes,Mega, Giga etc...
archive="" ; [[ "${ARCHIVE:-sim}" = "sim" ]] && archive="--archive" # Modo de arquivamento, Copias de forma recursiva com preservação
recursive="" ; [[ "${RECURSIVE:-nao}" = "sim" ]] && recursive="--recursive" # Cópia de forma recursiva, não preserva timestamp, permissão
compress="" ; [[ "${COMPRESS:-sim}" = "sim" ]] && compress="--compress" # Compressão no envio, arquivos mais leves.
progress="" ; [[ "${PROGRESS:-sim}" = "sim" ]] && progress="--progress" # Ativar progresso no envio
linksymbols="" ; [[ "${LINKSYMBOLS:-nao}" = "sim" ]] && linksymbols="--safe-links" # Ignorar Links Symbolicos do envio
perms="" ; [[ "${PERMS:-nao}" = "sim" ]] && perms="--perms" # Preservar Permissões dos arquivos/diretorios
quiet="" ; [[ "${QUIET:-nao}" = "sim" ]] && quiet="--quiet" # Modo silencioso
# Vamos fazer algumas verificações
# para não dar conflito!
#--------------------------------------------#
# Verificando se DELETE/UPDATE está ativo.
# Se caso o update está ativo e a opção
# delete for ativada, não dará muito certo
#--------------------------------------------#
[[ "$delete" = "--delete" ]] && update="" # Desabilitando update
[[ "$update" = "--update" ]] && delete="" # Desabilitando delete
#--------------------------------------------#
# Verificando se VERBOSE/QUIET está ativo.
# Se caso a verbose está ativa e a opção
# quiet for ativada, não dará muito certo,
# precisamos desabilitar algum, para não
# entrar em conflieto.
#--------------------------------------------#
[[ "$verbose" = "--verbose" ]] && quiet="" # Desabilitando quiet
[[ "$quiet" = "--quiet" ]] && verbose="" # Desabilitando verbose
#-------------------------------------------------#
# Caso deseje Excluir Diretorios ou arquivos
# que NÃO são necessários, como diretorios
# de caches e arquivs etc... da sua sincronização
# desmarque os exclude necessáros e adicione
# o diretorio ou arquivo...
# Há um padrão a seguir, siga o padrão para não
# ter erros, template de exemplo:
# exclude0="--exclude="*.mp3""
#-------------------------------------------------#
exclude1="--exclude=".*""
exclude2="--exclude="Downloads""
exclude3="--exclude="Desktop/ZeroBundle""
#exclude4=""
#exclude5=""
#exclude6=""
#exclude7=""
#exclude8=""
#exclude9=""
#exclude10=""
#--------------FIM VAR------------------------------#
#--------------TESTES---------------------------#
[[ $(id -u) -ne "0" ]] && exit 1 # É Root?
[[ $(which rsync) ]] || { echo "Necessita do rsync..." ; exit 1 ;} # Rsync ta no sistema?
#------------------------------#
# Montando dispositivo,
# vamos fazer 10 tentativas...
#------------------------------#
if ! df -h | grep -o "$dispositivo_base"; then
dispositivo="off" # Iniciando váriavel
contadora="1" # Iniciando váriavel com 1
while [[ "$dispositivo" = "off" ]]; do
if mount "$dispositivo_base" "$diretorio_de_montagem"; then
dispositivo="on"
else
echo "###################################oooooooooooooi"
fi
[[ "$contadora" -eq "10" ]] && exit 1 || let contadora++
done
fi
#-------------FIM TESTES-------------------------------#
set -e # Deu erro parou.
inicio="$(date +%H:%M:%S--%d/%m/%Y)" # Pegando Hora de Inicio
if rsync \
"$verbose" \
"$update" \
"$delete" \
"$human" \
"$archive" \
"$recursive" \
"$compress" \
"$progress" \
"$linksymbols" \
"$perms" \
"$quiet" \
"$exclude1" \
"$exclude2" \
"$exclude3" \
"$exclude4" \
"$exclude5" \
"$exclude6" \
"$exclude7" \
"$exclude8" \
"$exclude9" \
"$exclude10" \
"$diretorio_para_envio" \
"$diretorio_de_montagem"; then
# Enviando Log caso o rsync NÃO falhe
fim="$(date +%H:%M:%S--%d/%m/%Y)" # Pegando Hora de Fim
echo "" >> "$log"
echo "#-------------------------------------------#" >> "$log"
echo -e "Iniciado em: $inicio \nFinalizado em: $fim" >> "$log"
echo ">>BACKUP REALIZADO COM SUCESSO." >> "$log"
echo "Gravado em $dispositivo_base" >> "$log"
echo "#-------------------------------------------#" >> "$log"
fi
Backups automáticos de rádios Intelbras APC5
Backup dinâmico de banco de dados MySQL
Limpeza dos dados do rConfig (ferramenta open-source de gerenciamento de configuração
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
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)
Alternativas ao Multilogin para gerenciamento de múltiplas contas/prof... (0)









