User Tools

Site Tools


freebsd:zfshealthscript

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
freebsd:zfshealthscript [2016/03/11 13:16]
tschulz [ZFS Scrub]
freebsd:zfshealthscript [2017/01/18 14:06] (current)
tschulz [ZFS Rep]
Line 44: Line 44:
         echo "​It'​s not Saturday, exiting"​         echo "​It'​s not Saturday, exiting"​
 fi fi
 +</​file>​
 +
 +===== ZFS Rep =====
 +<file bash zfs_rep.sh>​
 +#!/bin/sh
 + 
 +pool="​tank/​vol2"​
 +destination="​zroot"​
 +remote_pool="​zroot/​vol2"​
 +host="​10.1.0.61"​
 + 
 +today=`date +"​%Y-%m-%d"​`
 +#​yesterday=`date -v -1d +"​$type%Y-%m-%d"​`
 +yesterday="​2017-01-07"​
 + 
 +# 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"​
 +snapshot_yesterday_r="​$remote_pool@$yesterday"​
 +snapshot_today_r="​$remote_pool@${today}"​
 +
 +#echo $snapshot_yesterday
 +if  ssh root@$host "zfs list -H -o name -t filesystem | sort | grep \"​${remote_pool}\""​ > /dev/null; then
 +    echo " Pool found on remote"​
 +else
 +    echo " Pool missing on remote, aborting"​
 +    exit 1;
 +fi
 +if zfs list -H -o name -t snapshot | sort | grep "​${snapshot_yesterday}"​ > /dev/null; then
 + echo " yesterday snapshot, ${snapshot_yesterday},​ exists locally"​
 + if ssh root@$host "zfs list -H -o name -t snapshot | sort | grep \"​${snapshot_yesterday_r}\""​ > /dev/null; then
 + echo " yesterday snapshot, ${snapshot_yesterday_r},​ exists on destination"​
 + if ssh root@$host "zfs list -H -o name -t snapshot | sort | grep \"​${snapshot_today_r}\""​ > /dev/null; then
 +            echo " Remote already has today'​s snapshot aborting sync"
 +            exit 2
 + else
 +            echo " proceeding with incremental sync"
 +            zfs send -R -i ${snapshot_yesterday} ${snapshot_today} | ssh root@$host "zfs receive -Fduv ${destination}"​
 +            echo " sync complete"​
 +            exit 0;
 +        fi
 + else
 + echo " yesterday snapshot, ${snapshot_yesterday_r},​ missing on destination"​
 + if ssh root@$host "zfs list -H -o name -t snapshot | sort | grep \"​${snapshot_today_r}\""​ > /dev/null; then
 +            echo " Remote already has today'​s snapshot aborting sync"
 +            exit 2
 + else
 +            echo " proceeding with full sync"
 +            zfs send ${snapshot_today} | ssh root@$host "zfs receive -Fduv ${destination}"​
 +            echo " sync complete"​
 +            exit 0;
 +        fi
 + fi
 +else
 + echo " missing yesterday snapshot aborting, ${snapshot_yesterday}"​
 + exit 1
 +fi
 +
 +</​file>​
 +
 +===== ZFS Clean Snapshots =====
 +<file bash>
 +#!/bin/sh
 +
 +pool="​zroot/​vol2"​
 +
 +# 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
 </​file>​ </​file>​
  
freebsd/zfshealthscript.1457723785.txt.gz · Last modified: 2016/03/11 13:16 by tschulz