BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.298 ]
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.
Configuração de backup com rsync sem senha
Script para gravação de BKPs em DVDs-RW
Backup Database MySQL Automatizado
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Como colorir os logs do terminal com ccze
Instalação Microsoft Edge no Linux Mint 22
Como configurar posicionamento e movimento de janelas no Lubuntu (Openbox) com atalhos de teclado
Máquinas Virtuais com IP estático acessando Internet no Virtualbox
Não consigo por nenhuma distribuição do Linux ubunto (1)
logins simultaneos no windows para acessar o samba (5)
Tela GNU GRUP versão 2.12 ao reiniciar. Como posso resolver? (1)