From: Alan J. Pippin Date: Sat, 17 Jan 2009 04:20:03 +0000 (-0700) Subject: Renamed zfs-replicate wrapper script X-Git-Url: http://git.pippins.net/embedvideo/static/%27%20%20%20%20.%20%24GLOBALS%5B%27phpgw%27%5D-%3Elink%28%27inc/jquery/%7Bedit%7D?a=commitdiff_plain;h=a88b8f570c5a8add46b3ec98cbb8c5556561741e;p=zfs-nexenta%2F.git Renamed zfs-replicate wrapper script --- diff --git a/zfs-replicate-all b/zfs-replicate-all new file mode 100755 index 0000000..8dc4a05 --- /dev/null +++ b/zfs-replicate-all @@ -0,0 +1,107 @@ +#!/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. + +# source our configuration +config="${0%/*}/zfs-scripts.conf" +[ -e "${config}.dist" ] && . ${config}.dist +[ -e "${config}" ] && . ${config} + +# Setup some default values +logfile="$logdir/zfs-replicate.log" +mylogfile="$logdir/zfs-replicate-all.log" +date=`date` +starttime=`date +%s` + +# This function checks to see if our runtime has exceeded our stoptime +timeexceeded() { + if [[ $maxruntime == 0 ]]; then + return 0 + fi + currenttime=`date +%s` + elapsedtime=$(($currenttime - $starttime)) + stoptime=$(($maxruntime*60)) + if [[ $elapsedtime -gt $stoptime ]]; then + #echo "$elapsedtime > $stoptime" + return 1 + fi + #echo "$elapsedtime < $stoptime" + return 0 +} + +# This function cleanup and exit trap +cleanup_and_exit() { + #echo "cleanup and exit" + rm -rf "$lockdir" + exit 0 +} +trap cleanup_and_exit INT + +# This function executes the replicate command and checks the stoptime +replicate() { + zfs-replicate $* >> $logfile 2>&1 + timeexceeded + if [ $? == 1 ]; then + cleanup_and_exit + fi +} + +# This function obtains the date a given snapshot was created in epoch seconds +snapshot_age() { + snapshot=${local_pool}/${1}${previous_backup_marker} + $zfs list -t snapshot ${snapshot} > /dev/null 2>&1 + if [ $? == 0 ]; then + $zfs get creation ${snapshot} > /dev/null 2>&1 + if [ $? == 0 ]; then + snap_creation=`$zfs get creation ${snapshot} | grep $1 | awk '{ print $3" "$4" "$5" "$6" "$7 }'` + snap_age=`date -d "$snap_creation" +%s` + echo "$snap_age" + else + echo "0" + fi + else + echo "0" + fi +} + +# Obtain the zpool guid for the local pool +local_pool_guid=`zpool get guid $local_pool 2>&1 | grep $local_pool | awk '{ print $3 }'` +zpool get guid $local_pool > /dev/null 2>&1 +if [ $? != 0 ]; then + echo >&2 "-E- Unable to extract the guid for the local pool: $local_pool" + exit 1 +fi + +# Setup our backup marker names +current_backup_marker=@current-backup-${local_pool_guid} +previous_backup_marker=@previous-backup-${local_pool_guid} + +# Auto snapshot every zfs filesystem on the system specified below +echo "$date ZFS replicate started" >> $logfile +echo "$date ZFS replicate started" | tee -a $mylogfile + +# Sort the filesystems to replicate by the oldest backup first +tmpfile=`tempfile` +for filesystem in $filesystems_to_replicate; do + age=`snapshot_age $filesystem` + echo $filesystem $age >> $tmpfile +done +sorted_filesystems=`cat $tmpfile | sort -n -k 2 | awk '{ print $1 }'` +rm -f $tmpfile + +# Replicate the sorted filesystems +for filesystem in $sorted_filesystems; do + echo "-> Replicating $remote:$filesystem to ${local_pool}/${filesystem}" | tee -a $mylogfile + replicate $remote $filesystem +done + +# All done +echo `date` ZFS replicate complete >> $logfile +echo `date` ZFS replicate complete | tee -a $mylogfile + +# Parse the log file and extract our backup stats +zfs-log-parser "$logfile" "$date" >> $logfile +zfs-log-parser "$logfile" "$date" | tee -a $mylogfile + diff --git a/zfs-replicate-wrapper b/zfs-replicate-wrapper deleted file mode 100755 index c6c3369..0000000 --- a/zfs-replicate-wrapper +++ /dev/null @@ -1,107 +0,0 @@ -#!/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. - -# source our configuration -config="${0%/*}/zfs-scripts.conf" -[ -e "${config}.dist" ] && . ${config}.dist -[ -e "${config}" ] && . ${config} - -# Setup some default values -logfile="$logdir/zfs-replicate.log" -mylogfile="$logdir/zfs-replicate-all.log" -date=`date` -starttime=`date +%s` - -# This function checks to see if our runtime has exceeded our stoptime -timeexceeded() { - if [[ $maxruntime == 0 ]]; then - return 0 - fi - currenttime=`date +%s` - elapsedtime=$(($currenttime - $starttime)) - stoptime=$(($maxruntime*60)) - if [[ $elapsedtime -gt $stoptime ]]; then - #echo "$elapsedtime > $stoptime" - return 1 - fi - #echo "$elapsedtime < $stoptime" - return 0 -} - -# This function cleanup and exit trap -cleanup_and_exit() { - #echo "cleanup and exit" - rm -rf "$lockdir" - exit 0 -} -trap cleanup_and_exit INT - -# This function executes the replicate command and checks the stoptime -replicate() { - zfs-replicate $* >> $logfile 2>&1 - timeexceeded - if [ $? == 1 ]; then - cleanup_and_exit - fi -} - -# This function obtains the date a given snapshot was created in epoch seconds -snapshot_age() { - snapshot=${local_pool}/${1}${previous_backup_marker} - $zfs list -t snapshot ${snapshot} > /dev/null 2>&1 - if [ $? == 0 ]; then - $zfs get creation ${snapshot} > /dev/null 2>&1 - if [ $? == 0 ]; then - snap_creation=`$zfs get creation ${snapshot} | grep $1 | awk '{ print $3" "$4" "$5" "$6" "$7 }'` - snap_age=`date -d "$snap_creation" +%s` - echo "$snap_age" - else - echo "0" - fi - else - echo "0" - fi -} - -# Obtain the zpool guid for the local pool -local_pool_guid=`zpool get guid $local_pool 2>&1 | grep $local_pool | awk '{ print $3 }'` -zpool get guid $local_pool > /dev/null 2>&1 -if [ $? != 0 ]; then - echo >&2 "-E- Unable to extract the guid for the local pool: $local_pool" - exit 1 -fi - -# Setup our backup marker names -current_backup_marker=@current-backup-${local_pool_guid} -previous_backup_marker=@previous-backup-${local_pool_guid} - -# Auto snapshot every zfs filesystem on the system specified below -echo "$date ZFS replicate started" >> $logfile -echo "$date ZFS replicate started" | tee -a $mylogfile - -# Sort the filesystems to replicate by the oldest backup first -tmpfile=`tempfile` -for filesystem in $filesystems_to_replicate; do - age=`snapshot_age $filesystem` - echo $filesystem $age >> $tmpfile -done -sorted_filesystems=`cat $tmpfile | sort -n -k 2 | awk '{ print $1 }'` -rm -f $tmpfile - -# Replicate the sorted filesystems -for filesystem in $sorted_filesystems; do - echo "-> Replicating $remote:$filesystem to ${local_pool}/${filesystem}" | tee -a $mylogfile - replicate $remote $filesystem -done - -# All done -echo `date` ZFS replicate complete >> $logfile -echo `data` ZFS replicate complete | tee -a $mylogfile - -# Parse the log file and extract our backup stats -zfs-log-parser "$logfile" "$date" >> $logfile -zfs-log-parser "$logfile" "$date" | tee -a $mylogfile -