#!/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