#! /bin/bash set -e set -u set -o pipefail statusfile=/var/run/zabbix/vmbackup.status basedir=/mnt/backups/vms vbm="sudo -u cig vboxmanage" rsync="rsync" _exit () { echo $1 > $statusfile exit $2 } _mail () { echo "$@" | mail -s "$(hostname -f) : vm backup error" root } function checkRunning { local machine=$1 $vbm list runningvms | grep -q $machine return $? } function _shutdown_vm { net rpc shutdown -I 192.168.69.250 -U tom%123Soleil2022! sleep 30 } mount /mnt/backups &> /dev/null || _exit "mount failed" 2 if [ ! -d $basedir ] ; then _mail Dir $basedir not mounted _exit "no base dir" 41 fi outputdir=${basedir}/$(date -I) if [ $# -ne 1 ] ; then echo "Usage: $O vm" echo "Stop, backup and start given vm" _exit "Usage" 42 fi machine=$1 if ( checkRunning $machine ) ; then mkdir -p ${outputdir} _shutdown_vm $rsync --inplace --delete --delete-after -a /srv/VM/Win/roofline ${outputdir}/ ret=$? test $ret -eq 0 || _mail "rsync error $ret" $vbm startvm $machine test $ret -eq 0 && find ${basedir} -maxdepth 1 -type d -mtime +7 -exec echo rm -fr {} \; umount /mnt/backups &> /dev/null || _mail "umount failed" _mail "backup done with status $ret" _exit "backup done" $ret fi _mail "vm $machine not running" _exit "vm not running" 43