BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.490 ]
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.
Shell Script para gravar iso de xbox 360 para LT 3.0 burnisolt3
Enviando e-mail localmente após o backup para monitoramento
Script de backup MySQL [melhorado]
MySQL - Script para backup automatizado
Aprenda a Gerenciar Permissões de Arquivos no Linux
Como transformar um áudio em vídeo com efeito de forma de onda (wave form)
Como aprovar Pull Requests em seu repositório Github via linha de comando
Visualizar arquivos em formato markdown (ex.: README.md) pelo terminal
Dando - teoricamente - um gás no Gnome-Shell do Arch Linux
Como instalar o Google Cloud CLI no Ubuntu/Debian
Mantenha seu Sistema Leve e Rápido com a Limpeza do APT!
Procurando vídeos de YouTube pelo terminal e assistindo via mpv (2025)
Alguém já usou o framework Avalonia para desenvolver interfaces de usu... (2)
Gestão de Ambiente em uma rede Linux (3)