Re: ZFS - automatické snapshoty s rotací

Marián Černý majo-users-l at cerny.sk
Thu Feb 16 10:27:09 CET 2017


> Potřeboval bych přes cron dělat pravidelné "zálohy" s rotací pomocí ZFS snapshotů.
> Pokud někdo něco takového děláte, jaký nástroj na to používáte?

Pouzivam vlastny skript (pozri nizsie), ktory spustam cez cron:

# ZFS Backups
2       1-23    *       *       *       root    sh /opt/sbin/zfs-backup.sh hourly
2       0       *       *       *       root    sh /opt/sbin/zfs-backup.sh daily
32      0       1       *       *       root    sh /opt/sbin/zfs-backup.sh monthly

Vytvara to hodinove snapshoty 24 hodin spat, denne 7 dni spat a mesacne 6 mesiacov spat.

@monthly-2016-09-01-00:00
@monthly-2016-10-01-00:00
@monthly-2016-11-01-00:00
@monthly-2016-12-01-00:00
@monthly-2017-01-01-00:00
@monthly-2017-02-01-00:00
@daily-2017-02-10-00:00
@daily-2017-02-11-00:00
@daily-2017-02-12-00:00
@daily-2017-02-13-00:00
@daily-2017-02-14-00:00
@daily-2017-02-15-00:00
@hourly-2017-02-15-11:00
@hourly-2017-02-15-12:00
@hourly-2017-02-15-13:00
@hourly-2017-02-15-14:00
@hourly-2017-02-15-15:00
@hourly-2017-02-15-16:00
@hourly-2017-02-15-17:00
@hourly-2017-02-15-18:00
@hourly-2017-02-15-19:00
@hourly-2017-02-15-20:00
@hourly-2017-02-15-21:00
@hourly-2017-02-15-22:00
@hourly-2017-02-15-23:00
@daily-2017-02-16-00:00
@hourly-2017-02-16-01:00
@hourly-2017-02-16-02:00
@hourly-2017-02-16-03:00
@hourly-2017-02-16-04:00
@hourly-2017-02-16-05:00
@hourly-2017-02-16-06:00
@hourly-2017-02-16-07:00
@hourly-2017-02-16-08:00
@hourly-2017-02-16-09:00
@hourly-2017-02-16-10:00

Mam k tomu este periodic cleanup script, ktory maze stare snapshoty, ktore tam zostanu, ked sa ten skript nespusti - napriklad kvoli vypadku serveru.

zfs-backup.sh:

set -e

type=$1

case "$type" in
        hourly)
                adjust=-24H
                format="%F-%H:00"
                ;;
        daily)
                adjust=-7d
                format="%F-00:00"
                ;;
        monthly)
                adjust=-6m
                format="%F-00:00"
                ;;
        *)
                echo Invalid type $type >&2
                exit 1
                ;;
esac

pools=`zpool list -H -o name`

#########################################
#  Delete old (rotating-out) snapshots  #
#########################################

old=$type-`date -v$adjust +$format`

for pool in $pools
do
        # Maly HACK ako sa vyhnut hlaske, ze snaphost s danym menom neexistuje.
        # Vytvorime si snaphost priamo na hlavny dataset poolu, ktory vzapeti
        # hned zmazeme.
        zfs snapshot $pool@$old

        zfs destroy -r $pool@$old
done

#########################################
#  Create new snapshot                  #
#########################################

datasets=`zfs list -d 1 -H -o name $pools | grep /`

new=$type-`date +$format`

for dataset in $datasets
do
        zfs snapshot -r $dataset@$new
done




More information about the Users-l mailing list