BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.701 ]
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 usando o tar com o gzip
Backup de Roteadores e Switches
Backup do PostgreSQL 8.3 e aviso por e-mail
Script de Backup do Perfil dos Usuários do Sistema em Batch do Windows
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Script de montagem de chroot automatica
Atualizar Linux Mint 22.2 para 22.3 beta
Jogar games da Battle.net no Linux com Faugus Launcher
Como fazer a Instalação de aplicativos para acesso remoto ao Linux
Conky, alerta de temperatura alta (12)
De volta para o futuro - ou melhor, para o presente (parte 2) (2)
Por que passar nas disciplinas da faculdade é ruim e ser reprovado é b... (7)









