BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.720 ]
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 de diretórios do sistema Linux
Backup Ubiquiti com usuários e senhas SSH diferentes
Backup de MySQL para uso no cron / cPanel
LazyDocker – Interface de Usuário em Tempo Real para o Docker
Instalando COSMIC no Linux Mint
Turbinando o Linux Mint: o poder das Nemo Actions
Inteligência Artificial no desenvolvimento de software: quando começar a usar?
O widget do Plasma 6 Área de Notificação
[Resolvido] Algo deu errado ao abrir seu perfil
Quando vocês pararam de testar distros? (14)
Problema com som no laptop (3)
Não estou conseguindo fazer funcionar meu Postfix na versão 2.4 no Deb... (2)









