Skip to content

Instantly share code, notes, and snippets.

@elico
Created January 28, 2025 23:55
Show Gist options
  • Save elico/fa46d171c692f8f7c735ca1946919206 to your computer and use it in GitHub Desktop.
Save elico/fa46d171c692f8f7c735ca1946919206 to your computer and use it in GitHub Desktop.
#!/bin/bash
#
#
# https://beamnetworks.dev
# CREATED BY: beamnetworks.dev
#
#
# SCRIPT WILL LIVE BACKUP A VM WITH PASSED THROUGH DATA WHEN SCRIPT IS RAN
#
#
echo "Defining variables"
complete=0
vm="$(echo $1)"
backupdir="$virshbackups_remotedir/$vm"
echo "Backup directory is: $backupdir"
echo "Creating directory if it doesn't already exsist.."
mkdir -p $backupdir
echo "Continuing to define variables"
srcdir="$(virsh -c qemu:///system domblklist $vm | grep qcow2 | sed -e 's/\<vda\>//g' | xargs)"
bktime="$(date +%s)"
bkdir="$(date +%d-%m-%y-%s)"
echo "Source directory"
echo $srcdir
echo "Backup time"
echo $bktime
echo "Starting backup"
virsh -c qemu:///system backup-begin $vm
echo "Backup name"
echo $srcdir.$bktime
echo "Setting up backup directory"
mkdir $backupdir/$bkdir
echo "Full backup directory is: $backupdir/$bkdir"
i=0
while [ $complete = 0 ]
do
sleep 2s
currentstatus="$(virsh -c qemu:///system domjobinfo $vm | grep 'Time elapsed')"
if [ ! -z "$currentstatus" ] ; then
# echo $((++i))
echo "BACKUP NOT DONE YET, CONTINUING. $((++i))"
sleep 2s
else
echo "BACKUP DONE, EXITING"
complete=1
fi
done
sleep 1s
echo "Setting permissions on backup file"
chmod 777 $srcdir.$bktime
echo "Copying backup to disk"
mv $srcdir.$bktime $backupdir/$bkdir
echo "Backing up XML file"
virsh -c qemu:///system dumpxml --domain $vm > $backupdir/$bkdir/$vm.xml
echo "Done!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment