47 lines
1.4 KiB
Bash
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
|
|
|