User Tools

Site Tools


freebsd:zfs_rep

This is an old revision of the document!


ZFS Replication Script

On primary node and backup node

  • set pool
  • link to /etc/periodic/daily/
/scripts/clean_snaps.sh
#`date -v -1d +"$type%Y-%m-%d"`
 
pool="zvol1/vol1"
 
# iterate i from 15 to 62
# any snapshot older than 2 weeks (14 days) or (15-62 days) old is deleted
for i in 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
do
        CLEANDATE=`date -v -${i}d +"$type%Y-%m-%d"`
 
        CLEAN_SNAP="${pool}@${CLEANDATE}"
        #echo $CLEAN_SNAP
        if zfs list -H -o name -t snapshot | sort | grep "$CLEAN_SNAP" > /dev/null;
        then
                zfs destroy -r $CLEAN_SNAP
        fi
done

On primary node

  • set pool, host, and destination
  • link to /etc/periodic/daily/
/scripts/zfs_rep.sh
#!/bin/sh
 
pool="zvol1/vol1"
destination="zvol1"
host="10.1.0.79"
 
today=`date +"$type%Y-%m-%d"`
yesterday=`date -v -1d +"$type%Y-%m-%d"`
 
# create today snapshot
snapshot_today="$pool@$today"
# look for a snapshot with this name
if zfs list -H -o name -t snapshot | sort | grep "$snapshot_today$" > /dev/null; then
        echo " snapshot, $snapshot_today, already exists"
        exit 1
else
        echo " taking todays snapshot, $snapshot_today"
        zfs snapshot -r $snapshot_today
fi
 
# look for yesterday snapshot
snapshot_yesterday="$pool@$yesterday"
if zfs list -H -o name -t snapshot | sort | grep "$snapshot_yesterday$" > /dev/null; then
        echo " yesterday snapshot, $snapshot_yesterday, exists lets proceed with backup"
 
        zfs send -R -i $snapshot_yesterday $snapshot_today | ssh root@$host zfs receive -Fduv $destination
 
        echo " backup complete"
        exit 0
else
        echo " missing yesterday snapshot aborting, $snapshot_yesterday"
        exit 1
fi
freebsd/zfs_rep.1393516141.txt.gz · Last modified: 2014/02/27 09:49 by tschulz