X-Git-Url: http://git.pippins.net/embedvideo/.git/static/gitweb.js?a=blobdiff_plain;f=zfs-replicate-wrapper;fp=zfs-replicate-wrapper;h=4d7ff14eb1625bce79992435e54cd2e86b165dea;hb=8745c98ce0deffd90e2227d8019c4de3ef5ac7af;hp=0000000000000000000000000000000000000000;hpb=cf5e9c6fa15fb2c337c5d74ef6bd92092cb2e709;p=zfs-nexenta%2F.git diff --git a/zfs-replicate-wrapper b/zfs-replicate-wrapper new file mode 100755 index 0000000..4d7ff14 --- /dev/null +++ b/zfs-replicate-wrapper @@ -0,0 +1,61 @@ +#!/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-replicate.log" +lockdir="/tmp/zfs-admin-lock" +destpool="backups" +maxsleeptime=60 +released_lock_date=0 + +# Setup our cleanup and exit trap +cleanup() { + rm -rf "$lockdir" + if [ $released_lock_date == 0 ]; then + echo `date` ZFS admin lock released >> $logfile + fi +} +trap cleanup EXIT + +# 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 +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 + else + # No other zfs admin tool is running, we can now. + break + fi +done +date=`date`; +echo "$date ZFS admin lock obtained" >> $logfile + +# 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/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/backup $destpool + +# 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