X-Git-Url: http://git.pippins.net/embedvideo/.git/?a=blobdiff_plain;f=zfs-replicate-wrapper-local;fp=zfs-replicate-wrapper-local;h=1f21c5ed3ec8bd5649b0510ae8c46907c970603c;hb=e5bbf1952d51ab406d73ddb49496422c2d7ebb61;hp=0000000000000000000000000000000000000000;hpb=2829ebd14041598193f7291c472380a257afda7d;p=zfs-nexenta%2F.git diff --git a/zfs-replicate-wrapper-local b/zfs-replicate-wrapper-local new file mode 100755 index 0000000..1f21c5e --- /dev/null +++ b/zfs-replicate-wrapper-local @@ -0,0 +1,87 @@ +#!/bin/bash + +# Author: Alan J. Pippin +# Description: This script calls zfs-replicate for each filesystem needing +# to be backed up, or replicated, to another ZFS pool. + +# Setup some default values +replicate="/usr/local/etc/bin/zfs-replicate" +logfile_parser="/usr/local/etc/bin/zfs-log-parser" +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 INT + +# Auto snapshot every zfs filesystem on the system specified below +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 +