This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | Next revision Both sides next revision | ||
freebsd:zfshealthscript [2016/03/11 13:16] tschulz [ZFS Scrub] |
freebsd:zfshealthscript [2017/01/09 14:12] tschulz |
||
---|---|---|---|
Line 46: | Line 46: | ||
</file> | </file> | ||
+ | ===== ZFS Rep ===== | ||
+ | <file> | ||
+ | #!/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> |