XenServer - Metadata Backup
Well, we had some issues with XenServer and its Metadata Backup in the past, thus I decided to write my own crontab-able script, which is installed/running on each XenServer. 1#!/bin/bash 2# Crontab entry for each server: 3# 02 5 * * * root /usr/local/sbin/xen-pool-backup.sh 4 5# Get the pool name 6POOL_NAME="$( xe pool-list | grep name-label | awk '{ print $4 }' )" 7HOST_UUID="$( xe host-list hostname=`hostname` | grep "uuid ( RO)" | awk '{ print $5 }' )" 8 9DAILY_GENERATIONS=7 10WEEKLY_GENERATIONS=4 11NFS_MOUNT="10.76.5.10:/srv/backup" 12NFS_LOCAL="/tmp/backup-mount/$POOL_NAME" 13 14# Figure out if we're the pool master 15POOL_MASTER="$( xe pool-list | grep master | awk '{ print $4 }' )" 16 17if [ "$POOL_MASTER" == "$HOST_UUID" ] ; then 18 # Only the pool master should backup the pool database, as this is the only 19 # one who has a authoritive pool database 20 21 # Create the necessary directory and mount the NFS volume 22 mkdir -p ${NFS_LOCAL%/*} 23 mount -t nfs $NFS_MOUNT ${NFS_LOCAL%/*} 24 mkdir -p $NFS_LOCAL 25 26 if [ -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz ]; then 27 rm -f $NFS_LOCAL/daily.$DAILY_GENERATIONS.gz 28 fi 29 30 OLD_DAILY="$( echo "scale=0; $DAILY_GENERATIONS - 1" | bc )" 31 32 for OLD in $( seq $OLD_DAILY -1 1 ); do 33 if [ -f $NFS_LOCAL/daily.$OLD.gz ] ; then 34 NEW="$( echo "scale=0; $OLD+1" | bc )" 35 # Save the time stamp somewhere 36 touch $NFS_LOCAL/.timestamp -r $NFS_LOCAL/daily.$OLD.gz 37 mv $NFS_LOCAL/daily.$OLD.gz $NFS_LOCAL/daily.$NEW.gz 38 # Restore the date 39 touch $NFS_LOCAL/daily.$NEW.gz -r $NFS_LOCAL/.timestamp 40 fi 41 done 42 43 [ -f $NFS_LOCAL/daily.0.gz ] && mv $NFS_LOCAL/daily.0.gz $NFS_LOCAL/daily.1.gz 44 45 xe pool-dump-database file-name=$NFS_LOCAL/daily.0 46 gzip -9 $NFS_LOCAL/daily.0 47 48 [ -f $NFS_LOCAL/.timestamp ] && rm $NFS_LOCAL/.timestamp 49 50 umount ${NFS_LOCAL%/*} 51 rm -rf ${NFS_LOCAL%/*} 52fi