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/

Download snapshots.sh




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

  



Esconder código-fonte

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


Scripts recomendados

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

Script de Backup para MariaDB

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


  

Comentários
[1] Comentário enviado por maurixnovatrento em 15/09/2020 - 19:45h


Muito bom.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts