#!/bin/sh
pool="tank/vol1"
destination="tank"
remote_pool="tank/vol1"
host="192.168.0.10"
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}"
snapshot_start=""
snapshot_end=""
ss_list_local="`zfs list -H -o name -t snapshot | grep ${pool} | cut -d \"@\" -f2 | sort -r`"
ss_list_remote="`ssh root@${host} \"zfs list -H -o name -t snapshot | grep ${remote_pool} | cut -d \"@\" -f2 | sort -r\"`"
#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"
for l in $ss_list_local
do
for r in $ss_list_remote
do
if [ "$l" == $r ]; then
snapshot_start="$l"
fi
done
if [ "$snapshot_start" != "" ]; then
break
fi
done
if [ "$snapshot_start" != "" ]; then
echo " found common ss at: ${snapshot_start}"
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"
echo "zfs send -R -i ${pool}@${snapshot_start} ${snapshot_today} | lzop | ssh root@$host \"lzop -d | zfs receive -Fduv ${destination}\""
zfs send -R -i ${pool}@${snapshot_start} ${snapshot_today} | lzop | ssh root@$host "lzop -d | 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