X-Git-Url: http://git.pippins.net/embedvideo/.git/static/git-logo.png?a=blobdiff_plain;f=zfs-replicate-wrapper;h=5e4e44a6a1a71d152cced9d70005e39e60fa2181;hb=fbf2b5b666f478f05b11bf4e4dac64151d55a9cb;hp=cd815936454c31f8ad4bc10262a271277cc2453a;hpb=59139f41987ad571014f898e7750269aeaedf9c6;p=zfs-nexenta%2F.git diff --git a/zfs-replicate-wrapper b/zfs-replicate-wrapper index cd81593..5e4e44a 100755 --- a/zfs-replicate-wrapper +++ b/zfs-replicate-wrapper @@ -7,43 +7,54 @@ # Setup some default values replicate="/usr/local/etc/bin/zfs-replicate" logfile_parser="/usr/local/etc/bin/zfs-log-parser" -logfile="/var/log/zfs-replicate.log" +logfile="/var/log/zfs/zfs-replicate.log" lockdir="/tmp/zfs-admin-lock" +mailto=root destpool="backups" maxsleeptime=60 +maxattempts=600 released_lock_date=0 +date=`date` # Setup our cleanup and exit trap cleanup() { rm -rf "$lockdir" if [ $released_lock_date == 0 ]; then + zpool export $destpool + /usr/local/etc/bin/usb-drive-power off echo `date` ZFS admin lock released >> $logfile fi + exit } -trap cleanup EXIT +trap cleanup INT # Auto snapshot every zfs filesystem on the system specified below -date=`date`; echo "$date Polling for ZFS admin lock" >> $logfile # Poll for a lock on the zfs subsystem, and make the lock once we can do so +attempts=0 while true; do if ! mkdir "$lockdir" >/dev/null 2>&1; then # Another zfs admin tool is running. # Wait a random amount of time and try again ransleep=$(($RANDOM % $maxsleeptime)) sleep $ransleep + ((attempts=attempts+1)) else # No other zfs admin tool is running, we can now. break fi + if [[ $attempts -gt $maxattempts ]]; then + # We've exceeded our maximum while loop count + ls -ld $lockdir | /usr/bin/mailx -s "zfs-replicate-all unable to obtain zfs admin lock" $mailto + exit 1 + fi done date=`date`; echo "$date ZFS admin lock obtained" >> $logfile # Poweron the destpool and import it -/usr/local/bin/br -x /dev/ttyd0 A3 ON -sleep 10 +/usr/local/etc/bin/usb-drive-power on >> $logfile zpool import $destpool # List the filesystems to replicate @@ -62,7 +73,7 @@ $replicate tank/backup $destpool # Export the destpool and power it down zpool export $destpool -/usr/local/bin/br -x /dev/ttyd0 A3 OFF +/usr/local/etc/bin/usb-drive-power off >> $logfile # Release our lock released_lock_date=1 @@ -70,3 +81,7 @@ echo `date` ZFS admin lock released >> $logfile # Parse the log file and extract our backup stats $logfile_parser "$logfile" "$date" >> $logfile + +# clean things up and exit +cleanup +