BTRFS - Gerenciamento de snapshot por quantidade
Publicado por Vinicius Mathias (última atualização em 15/09/2020)
[ Hits: 2.539 ]
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.
Realiza backup de VMs ligadas no XenServer 6.5
Backups de servidor CentOS com cPanel/WHM para servidor VPS Windows Server 2008
Script Backup com Log e envio por Email
Servidor de Backup com Ubuntu Server 24.04 LTS, RAID e Duplicati (Dell PowerEdge T420)
Visualizar câmeras IP ONVIF no Linux sem necessidade de instalar aplicativos
Atualizar Debian Online de uma Versão para outra
Proteja seu Linux Mint com o Timeshift: Restaure o sistema mesmo que ele não inicie!
Instalando Google Chrome no Debian 13
Alguém pode me recomendar um editor de textos? (0)
meus dois pen drives não são mais reconhecidos pelo meu PC apos tentar... (1)