; html-script: false crayon-selected ]#!/bin/bash
# Crontab entry for each server:
# 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh
# Get the pool name
POOL_NAME="$( xe pool-list | grep name-label | awk '{ print $4 }' )"
HOST_UUID="$( xe host-list hostname=`hostname` | grep "uuid ( RO)" |
awk '{ print $5 }' )"
DAILY_GENERATIONS=7
WEEKLY_GENERATIONS=4
NFS_MOUNT="nfs.home.barfoo.org:/srv/xenbackup"
NFS_LOCAL="/tmp/backup-mount/$POOL_NAME"
# Figure out if we're the pool master
POOL_MASTER="$( xe pool-list | grep master | awk '{ print $4 }' )"
if [ "$POOL_MASTER" == "$HOST_UUID" ] ; then
# Only the pool master should backup the pool database, as this is the only
# one who has a authoritive pool database
# Create the necessary directory and mount the NFS volume
mkdir -p ${NFS_LOCAL%/*}
mount -t nfs $NFS_MOUNT ${NFS_LOCAL%/*}
mkdir -p $NFS_LOCAL
if [ -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz ]; then
rm -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz
fi
OLD_DAILY="$( echo "scale=0; $DAILY_GENERATIONS - 1" | bc )"
for OLD in $( seq $OLD_DAILY -1 1 ); do
if [ -f $NFS_LOCAL/daily.$OLD.gz ] ; then
NEW="$( echo "scale=0; $OLD+1" | bc )"
# Save the time stamp somewhere
touch $NFS_LOCAL/.timestamp -r $NFS_LOCAL/daily.$OLD.gz
mv $NFS_LOCAL/daily.$OLD.gz $NFS_LOCAL/daily.$NEW.gz
# Restore the date
touch $NFS_LOCAL/daily.$NEW.gz -r $NFS_LOCAL/.timestamp
fi
done
[ -f $NFS_LOCAL/daily.0.gz ] && mv $NFS_LOCAL/daily.0.gz
$NFS_LOCAL/daily.1.gz
xe pool-dump-database file-name=$NFS_LOCAL/daily.0
gzip -9 $NFS_LOCAL/daily.0
[ -f $NFS_LOCAL/.timestamp ] && rm $NFS_LOCAL/.timestamp
umount ${NFS_LOCAL%/*}
rm -rf ${NFS_LOCAL%/*}
fi