X-Git-Url: http://git.pippins.net/embedvideo/.git/static/git-logo.png?a=blobdiff_plain;f=zfs-replicate-wrapper;h=1f21c5ed3ec8bd5649b0510ae8c46907c970603c;hb=0bc0c53b75f7b4aa0724c5da22caed66fe69de8f;hp=4d7ff14eb1625bce79992435e54cd2e86b165dea;hpb=8745c98ce0deffd90e2227d8019c4de3ef5ac7af;p=zfs-ubuntu%2F.git diff --git a/zfs-replicate-wrapper b/zfs-replicate-wrapper index 4d7ff14..1f21c5e 100755 --- a/zfs-replicate-wrapper +++ b/zfs-replicate-wrapper @@ -7,55 +7,81 @@ # 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/ext-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/etc/bin/ext-drive-power on >> $logfile +zpool import $destpool + # List the filesystems to replicate # The parent filesystems MUST be listed ahead # of the children filesystems. # Pool root filesystems must end with a slash. $replicate tank/ $destpool +$replicate tank/var $destpool $replicate tank/usr $destpool $replicate tank/usr/home $destpool $replicate tank/usr/videos $destpool $replicate tank/usr/local $destpool $replicate tank/usr/local/etc $destpool +$replicate tank/usr/local/var $destpool $replicate tank/backup $destpool +# Export the destpool and power it down +zpool export $destpool +/usr/local/etc/bin/ext-drive-power off >> $logfile + # Release our lock released_lock_date=1 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 +