X-Git-Url: http://git.pippins.net/embedvideo/.git/?a=blobdiff_plain;ds=sidebyside;f=zfs-replicate;h=8b53d1fb0d4e7a53f4475778cb21c02fc4047251;hb=e27e0c7b91fd87d322736b79974f5488490dd20f;hp=a082ce3fe9de2214ca9d07e2c9dbf5f7fe76ac25;hpb=471f2873d53eebe62223121be58bc3f795511a12;p=zfs-nexenta%2F.git diff --git a/zfs-replicate b/zfs-replicate index a082ce3..8b53d1f 100755 --- a/zfs-replicate +++ b/zfs-replicate @@ -1,4 +1,4 @@ -#/bin/bash +#!/bin/bash # Author: Carl Baldwin & Alan Pippin # Description: This script replicates a remote zfs filesystem to a local zfs pool. @@ -36,9 +36,24 @@ cleanup() { } fatal_and_exit() { echo -e 2>&1 "$1" + # Destroy the backup markers on the local filesystem if they exist + if [[ -n "$current_backup_marker" ]]; then + zfs list -t snapshot ${local_pool}/${current_backup_marker} > /dev/null 2>&1 + if [ $? == 0 ]; then + $zfs destroy ${local_pool}/${current_backup_marker} + fi + fi + if [[ -n "$previous_backup_marker" ]]; then + zfs list -t snapshot ${local_pool}/${previous_backup_marker} > /dev/null 2>&1 + if [ $? == 0 ]; then + $zfs destroy ${local_pool}/${previous_backup_marker} + fi + fi + # send email notification if [[ -n "$2" ]]; then echo -e "$1" | $mailx -s "zfs replicate on $hostname failed" "$2" fi + # exit exit 1 } trap fatal_and_exit INT @@ -77,7 +92,7 @@ set -x # Create the remote lockdir before continuing with the replicate # Spinlock on creating the lock maxsleeptime=60 -maxattempts=100 +maxattempts=500 attempts=0 while true; do ssh $remote mkdir "$lockdir" >/dev/null 2>&1 @@ -162,8 +177,13 @@ if [ $no_markers == 0 ]; then fatal_and_exit "-E- remote incremental $zfs rollback command failed" $mailto fi # Now it should be safe to send the snaps - ssh $remote $zfs send -R -I${previous_backup_marker} ${current_backup_marker} | - $zfs receive -vF -d ${local_pool}/${remote_pool} + if [[ $throttle_enable == 1 && -e $throttle ]]; then + ssh $remote $zfs send -R -I${previous_backup_marker} ${current_backup_marker} | + $throttle $throttle_opt | $zfs receive -vF -d ${local_pool}/${remote_pool} + else + ssh $remote $zfs send -R -I${previous_backup_marker} ${current_backup_marker} | + $zfs receive -vF -d ${local_pool}/${remote_pool} + fi if [ $? != 0 ]; then fatal_and_exit "-E- remote incremental $zfs send command failed" $mailto fi @@ -182,8 +202,13 @@ else if [[ -n "$common" ]]; then # We found a common snapshot, incrementally send the new snaps - ssh $remote $zfs send -R -I${common/*@/@} ${current_backup_marker} | - $zfs receive -vF -d ${local_pool}/${remote_pool} + if [[ $throttle_enable == 1 && -e $throttle ]]; then + ssh $remote $zfs send -R -I${common/*@/@} ${current_backup_marker} | + $throttle $throttle_opt | $zfs receive -vF -d ${local_pool}/${remote_pool} + else + ssh $remote $zfs send -R -I${common/*@/@} ${current_backup_marker} | + $zfs receive -vF -d ${local_pool}/${remote_pool} + fi if [ $? != 0 ]; then fatal_and_exit "-E- remote incremental $zfs send command failed" $mailto fi @@ -205,8 +230,13 @@ else fi fi # Send the full filesystem - ssh $remote $zfs send -R ${current_backup_marker} | - $zfs receive -vF -d ${local_pool}/${remote_pool} + if [[ $throttle_enable == 1 && -e $throttle ]]; then + ssh $remote $zfs send -R ${current_backup_marker} | + $throttle $throttle_opt | $zfs receive -vF -d ${local_pool}/${remote_pool} + else + ssh $remote $zfs send -R ${current_backup_marker} | + $zfs receive -vF -d ${local_pool}/${remote_pool} + fi if [ $? != 0 ]; then fatal_and_exit "-E- remote full $zfs send command failed" $mailto fi