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