qemu-backup/qemu-backup.sh

47 lines
1.4 KiB
Bash

#!/bin/bash
set -e
PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"
TODAY=`date +"%F-%s"`
#### Change these variables ###
NUMBACKUPS=3
VMS=( "orbit" "red-dwarf" "elektra" "lisa" )
DISK=( "sda" "vda" "sda" "sda" )
DISKNAME=("orbit-disk1.raw" "red-dwarf.qcow2" "elektra-disk1.raw" "lisa-disk1.raw")
BACKUPDIR="/data/vm-backups"
VMDISKDIR="/vm"
XMLDIR="/etc/libvirt/qemu"
### Program start ###
SCRIPTDIR=`pwd`
if [ ! -e ${SCRIPTDIR}/rotate.txt ]; then
echo 1 > ${SCRIPTDIR}/rotate.txt
fi
ROTATE=`cat ${SCRIPTDIR}/rotate.txt`
if [ $ROTATE -gt $NUMBACKUPS ]; then
ROTATE=1
fi
for (( i = 0; i < ${#VMS[@]}; i++ ))
do virsh snapshot-create-as --domain ${VMS[i]} --diskspec ${DISK[i]},file=${BACKUPDIR}/${VMS[i]}-snapshot.qcow2 --disk-only --atomic --no-metadata
sleep 5
rm -rf ${BACKUPDIR}/backup${ROTATE}-*-${DISKNAME[i]}
cp ${VMDISKDIR}/${DISKNAME[i]} ${BACKUPDIR}/backup${ROTATE}-${TODAY}-${DISKNAME[i]}
virsh blockcommit ${VMS[i]} ${DISK[i]} --active --verbose --pivot
sleep 5
rm ${BACKUPDIR}/${VMS[i]}-snapshot.qcow2
rm -rf ${BACKUPDIR}/backup${ROTATE}-*-${VMS[i]}.xml
cp ${XMLDIR}/${VMS[i]}.xml ${BACKUPDIR}/backup${ROTATE}-${TODAY}-${VMS[i]}.xml
done
ROTATE=`echo "$ROTATE + 1" | bc`
echo $ROTATE > ${SCRIPTDIR}/rotate.txt