Lisa - sistema de backup com rsync
Publicado por Slackjeff (última atualização em 25/06/2018)
[ Hits: 2.538 ]
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 de servidor CentOS com cPanel/WHM para servidor VPS Windows Server 2008
Script Backup com Log e envio por Email
Backup Ubiquiti com usuários e senhas SSH diferentes
Backup e envio do arquivo + md5sum para o FTP da escolha do usuário
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Estou com sede em aprender sobre o nosso querido Linux. (1)
big linux sem audio como resolver (2)
Como faz para dar um update-grub por shell script [RESOLVIDO] (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta