Lisa - sistema de backup com rsync

Publicado por Slackjeff (última atualização em 25/06/2018)

[ Hits: 2.888 ]

Homepage: https://slackjeff.com.br

Download lisa




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

  



Esconder código-fonte

#!/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
   

Scripts recomendados

Realiza backup de VMs ligadas no XenServer 6.5

Backup Zabbix 2.0

Backup com Shell Script

Backup de uma base MYSQL específica.

Script de Backup do Perfil dos Usuários do Sistema em Batch do Windows


  

Comentários
[1] Comentário enviado por albfneto em 25/06/2018 - 22:53h

mais um bom script.
Favoritado.
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].


Contribuir com comentário