BTRFS - Gerenciamento de snapshot por quantidade

Publicado por Vinicius Mathias (última atualização em 15/09/2020)

[ Hits: 2.264 ]

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

Ferramenta de backup do HD para dispositivos externos

Criptografando arquivos para enviar pra sua nuvem

Backup Zabbix 2.0

Backup RSYNC

Backup Máquina do Tempo com Rsync


  

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