BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.806 ]
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.
Backups de servidor CentOS com cPanel/WHM para servidor VPS Windows Server 2008
Script de backup MySQL [melhorado]
Script de Backup do Perfil dos Usuários do Sistema em Batch do Windows
Backup Ubiquiti com usuários e senhas SSH diferentes
Faça suas próprias atualizações de pacotes/programas no Void Linux e torne-se um Contribuidor
Como rodar o Folding@home no Linux
Criando um painel de controle (Dashboard) para seu servidor com o Homepage
O Abismo entre o Código e o Chão: Saltos Tecnológicos e a Exclusão Estrutural no Brasil
Instalar e Configurar a santíssima trindade (PAP) no Void Linux
Pisando no acelerador do Linux Mint: Kernel XanMod, zRAM e Ajustes de Swap
Como compilar kernel no Linux Mint
Lançamento do Brutal DOOM test 6
Consertando o erro no Brave de webgl
Solução para ter de volta as bordas e barra de títulos das janelas em zenity no Debian 13.x
Seno, Coseno, Tangente em CLIPPER (0)
Inserir uma URL num arquvo pelo Ubuntu (CLIPPER) (0)
VMWare Player não conecta na rede nem consigo intercambiar arquivos (1)









