BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.203 ]
Homepage: https://www.linkedin.com/in/mathiasvinicius/
Estou usando o sistema BTRFS a pelo menos 2 anos, para realizar o versionamento dos meus arquivos no Samba e me proteger contra ransomware, já que os snapshots são feitos apenas como leitura. É possível recuperar os arquivos apagados ou criptografados. O consumo é baixo, tenho um servidor que armazena 365 dias de versionamento. E é veloz. E desenvolvi este script para realizar o controle dos snapshots no sistema BTRFS pela quantidade de snapshots.
Crontab:
#Btrfs Snapshot
30 12 * * * root /scripts/snapshots.sh
30 20 * * * root /scripts/snapshots.sh
Versionamento no Samba:
#Shadow Copies
vfs objects = shadow_copy2
shadow:snapdir = /mnt/DADOS/SnapShot
shadow:sort = desc
shadow:format = @SNPFILESERSAP_%Y.%m.%d-%H.%M.%S
shadow:localtime = yes
#!/bin/bash #DESENVOLVIDO POR VINICIUS MATHIAS. #viniciusm.mathias@gmail.com #SCRIPT DE GERENCIAMENTO DE SNAPSHOT POR QUANTIDADE #GLOBAL. HOJE=$(date --date "0 day ago " +%d.%m.%Y) HOSTNAME=`hostname` SNAPDATE=`date +%Y.%m.%d-%H.%M.%S` DIRLOG=/scripts/logs/btrfs/ LIST=/tmp/list.tmp #ARQUIVO TEMPORARIO. TIPO=$1 #Tipo do backup EMAILTO=backup@gmail.com #Email de destinatario. #Criar diretorio de log. if [ -e "/scripts/logs/btrfs" ] then echo " o diretorio existe" else echo " o diretorio não existe vamos criar o diretorio" mkdir -p /scripts/logs/btrfs chmod 777 -R /scripts fi SNAPNEW () { LOG=$DIRLOG$SNAPNAME$HOJE.log #CAMINHO DO LOG SNAPNAMET=$SNAPNAME\_ #PARA INCLUIR O _ NA VARIAVEL btrfs sub snap -r $DIRORI $SNAPDIR$SNAPNAMET$SNAPDATE >> $LOG; #CRIA O SNAPSHOT. echo "$SNAPNAMET"; } SNAPDEL () { LOG=$DIRLOG$SNAPNAME$HOJE.log #CAMINHO DO LOG CONT=$(btrfs sub list $BTRFSYS |grep $SNAPNAME | wc -l); #PEGA A QUANTIDADE TOTAL while [[ $CONT -gt $SNPMAX ]] ; do # ENQUANTO HOUVER UM NUMERO MAIOR DE SNAPSHOPS. echo $CONT; btrfs sub list $BTRFSYS |grep $SNAPNAME > $LIST # LISTA OS SNAPSHOTS EXISTENTES SNAP=$(awk -v i=9 -v j=1 'NR == j { print $i; exit; }' $LIST); # PEGA O NOME DO SNAPSHOP SNAP=$(sed -e 's/SnapShot\///g' <<< $SNAP); #REMOVE A INICIAL DA VARIAVEL. btrfs sub del $SNAPDIR$SNAP >> $LOG; #APAGA SNAPSHOT CONT=$(btrfs sub list $BTRFSYS |grep $SNAPNAME | wc -l); #PEGA NOVA QUANTIDADE NA LISTA done } MAIL () { ( echo "From: auto.mailer@gmail.com" echo "To: $EMAILTO" echo "Subject:|SNAPSHOT| SERVIDOR: ${HOSTNAME^^}" echo "Content-Type: text/html;charset=\"iso-8859-1\"" echo "<html>" echo "<head>" echo "</head>" echo "<body lang=\"pt-BR\"><b><Center> RESUMO DIARIO DOS SNAPSHOTS <br><br></center></b><pre>" echo "<b><left>" #Conteudo while read LINHA; do echo -e "$LINHA\n"; done < $LOG; echo "</b></left>" echo "<font face=\"Courier New, monospace\"><font size=\"2\" style=\"font-size: 10pt\">")| sendmail -t } #if [ "$TIPO" == "D" ] ; then ################################################### SNPMAX=365 #VERSOES PARA MANTER. DIRORI=/mnt/DADOS/file-server/ #DIRETORIO ORIGINAL DA PASTA. PARA CRIAÇÃO. SNAPDIR=/mnt/DADOS/SnapShot/ #DIRETORIO DOS SNAPSHOTS BTRFSYS=/mnt/DADOS/ #CAMINHO DO PONTO DE MONTAGEM. SNAPNAME=@SNPFILESERSAP #NOMECLATURA DOS SNAPSHOTS. #FUNÇÃO SNAPNEW; #FUNÇÃO CRIAR SNAPDEL; #FUNÇÃO APAGAR # MAIL; sleep 2m ################################################### #fi #MAIL; #ENVIA EMAIL AVISANDO.
Backup da pasta de usuário em sistemas GNU/Linux sem copiar os arquivos ocultos
Backup e envio do arquivo + md5sum para o FTP da escolha do usuário
Shell Script para gravar iso de xbox 360 para LT 3.0 burnisolt3
Limpeza dos dados do rConfig (ferramenta open-source de gerenciamento de configuração
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