BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.521 ]
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.
Lisa - sistema de backup com rsync
Criptografando arquivos para enviar pra sua nuvem
Backup de arquivos e banco de dados com envio de e-mail
Customizar a Instalação do Linux Debian com Preseed
Atualizando o Passado: Linux no Lenovo G460 em 2025
aaPanel - Um Painel de Hospedagem Gratuito e Poderoso
Um modo leve de ouvir/ver áudio/vídeo da internet em máquinas pererecas
Resolver algumas mensagens de erro do SSH
Instalar módulo de segurança do Banco do Brasil Warsaw do tipo .run
Bora fazer um teste? mbti (10)
Instalação de Certificados .Cer no Ubuntu 24.04 (0)
O que você está ouvindo agora? [2] (193)
Procrastinação e autossabotagem são problemas muito comuns na sociedad... (8)