Well, we had some issues with XenServers “automated” metadata backup, so I decided - with the help of one of our consultants - to automate it on our own to an external target.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/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

With that, I have at least a daily backup - and in combination with our daily TSM backup, I have at least month long history of metadata backups.