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
Last revision Both sides next revision
freebsd:zfshealthscript [2016/03/11 13:16]
tschulz [ZFS Scrub]
freebsd:zfshealthscript [2017/01/09 14:12]
tschulz [ZFS Rep]
Line 46: Line 46:
 </​file>​ </​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>​
freebsd/zfshealthscript.txt · Last modified: 2017/01/18 14:06 by tschulz