The backup script is:
Code: Select all
#!/bin/bash
# Script to snapshot running VMs, and conduct a Borg backup
# Get list of running VMs
RUNNINGVMS=$(virsh list | grep running | awk '{ print $2 }')
# Create a disk-only external snapshot of all running VMs
for vm in $RUNNINGVMS
do
virsh snapshot-create-as --domain $vm --diskspec vda,file=/srv/kvm/images/$vm.snap.qcow2 --disk-only --atomic --no-metadata $vm-snap
done
# Do a Borg backup of VM snapshots
REPOSITORY=/srv/borg
export BORG_PASSPHRASE='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
borg create -v --stats \
$REPOSITORY::'{hostname}-kvm-{now:%Y-%m-%d-%H%M}' \
/srv/kvm/images \
--exclude '/srv/kvm/images/*.snap.qcow2' \
--exclude /srv/kvm/images/image_backups
# Remove and consolidate old backups
borg prune -v --list $REPOSITORY --prefix '{hostname}-kvm-' \
--keep-daily=7 --keep-weekly=4 --keep-monthly=6
for vm in $RUNNINGVMS
do
virsh blockcommit $vm vda --active --pivot --shallow --verbose
done
# Cleanup snapshot images
rm -f /srv/kvm/images/*.snap.qcow2
Code: Select all
--diskspec vda,file=/srv/kvm/images/$vm.snap.qcow2
My question here is: What is the best way to modify this script to work well for both single- and multiple-disk VMs?