+ grep ^${local_pool}/${remote_fs}@ |
+ awk '{gsub(/^${local_pool}./,"",$1); print$1}' > $local_list
+if [[ $? != 0 ]]; then
+ echo "-E- local $zfs list command failed"
+ exit 1
+fi
+
+if [ $use_legacy_replicate == 0 ]; then
+ # Destroy the current backup marker snapshot on the remote system if it exists
+ grep -q ${current_backup_marker} $remote_list
+ if [ $? == 0 ]; then
+ ssh $remote $zfs destroy ${current_backup_marker}
+ if [[ $? != 0 ]]; then
+ echo "-E- remote $zfs destroy command failed"
+ exit 1
+ fi
+ fi
+ # Create the current backup marker snapshot on the remote system
+ ssh $remote $zfs snapshot ${current_backup_marker}
+ if [[ $? != 0 ]]; then
+ echo "-E- remote $zfs snapshot command failed"
+ exit 1
+ fi
+
+ # Check to see if the previous backup marker exists in the remote snapshot list.
+ # Check to see if the previous backup marker exists in the local snapshot list.
+ # If the previous backup markers exists, perform an incremental replicate.
+ # Otherwise, perform a full replicate.
+ grep -q ${previous_backup_marker} $remote_list
+ full=$?
+ grep -q ${previous_backup_marker} $local_list
+ full=$(($full || $?))
+
+ if [[ $full == 0 ]]; then
+ ssh $remote $zfs send -R -I${previous_backup_marker} ${current_backup_marker} |
+ $zfs receive -vF -d ${local_pool}/${remote_fs%/*}
+ if [[ $? != 0 ]]; then
+ echo "-E- remote incremental $zfs send command failed"
+ exit 1
+ fi
+ else
+ ssh $remote $zfs send -R ${current_backup_marker} |
+ $zfs receive -vF -d ${local_pool}/${remote_fs%/*}
+ if [[ $? != 0 ]]; then
+ echo "-E- remote full $zfs send command failed"
+ exit 1
+ fi
+ fi
+
+ # destroy the previous backup markers now that we've replicated past them
+ $zfs destroy ${local_pool}/${previous_backup_marker} > /dev/null 2>&1
+ ssh $remote $zfs destroy ${previous_backup_marker} > /dev/null 2>&1
+
+ # Rename the current backup marker to be the previous backup marker
+ $zfs rename ${local_pool}/${current_backup_marker} ${local_pool}/${previous_backup_marker}
+ if [[ $? != 0 ]]; then
+ echo "-E- local $zfs rename command failed"
+ exit 1
+ fi
+ ssh $remote $zfs rename ${current_backup_marker} ${previous_backup_marker}
+ if [[ $? != 0 ]]; then
+ echo "-E- remote $zfs rename command failed"
+ exit 1
+ fi
+
+else
+ # See what the most recent snapshot on the remote end is.
+ latest=$(tail -n 1 $remote_list)