Controllo snapshot zfs

Nelle mie strategie di backup zfs ha un ruolo importante, viste le feature del filesystem, ed in particolare, del supporto degli snapshot. Per la gestione uso come linee guida questo script bash:

#!/bin/bash
# snapctl 1.3 (C) Giorgio Rutigliano 2015
#
POOL="zfs-pool"
BASE="/mnt/storage/"
LOGF="/var/log/backup/snaplog"

function purgesnap()
# cancella gli snap con radice $1 a partire dalla posizione $5 in elenco
{
#echo $1, $2
SNAPS="$(ls -lad $BASE/.zfs/snapshot/$1* | awk -F '/' '{print $NF}' | sort -nr | tail -n +$2)"
for SNAP in $SNAPS
do
zfs destroy $POOL@$SNAP
echo "cancellazione $SNAP"
done
}
function timer()
{
if [[ $# -eq 0 ]]; then
echo $(date '+%s')
else
local  stime=$1
etime=$(date '+%s')

if [[ -z "$stime" ]]; then stime=$etime; fi

dt=$((etime - stime))
ds=$((dt % 60))
dm=$(((dt / 60) % 60))
dh=$((dt / 3600))
printf '%d:%02d:%02d' $dh $dm $ds
fi
}

TODAY=$(date +%Y-%m-%d)
TRM=$(timer)
GDS=$(date +%a)
GDM=$(date +%d)
echo ">>> Inizio $TODAY -----------" >>$LOGF
#
# snapshot mensile
#
if [ $GDM -eq 1 ]
then
zfs snapshot $POOL@montly-$TODAY >>$LOGF
else
#
# snapshot settimanale
#
if [ $GDS == "Sun" ]
then
zfs snapshot $POOL@weekly-$TODAY >>$LOGF
else
#
# snapshot giornaliero
#
zfs snapshot $POOL@daily-$TODAY >>$LOGF
fi
fi
purgesnap "daily" 8
purgesnap "weekly" 5
purgesnap "montly" 13

zfs list -t snapshot>>$LOGF
echo -e "<<< Fine -- $(date) -- Tempo impiegato: $(timer $TRM) \n" >>$LOGF

Il codice è lanciato via cron alla mezzanotte. Crea uno snapshot e cancella quelli vecchi, tenendo in linea gli ultimi 7 giorni, le ultime quattro settimane e gli ultimi dodici mesi, rendendo possibile il recupero di file vecchi con una certa granularità.

Pubblicato in Linux, Script, ZFS Taggato con: ,

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*