#! /bin/bash set -e set -u statusfile=/home/cig/vmbackup.status basedir=/mnt/backups/vms _exit () { echo $1 > $statusfile exit $1 } _mail () { echo "$@" | mail -s "$(hostname -f) : vm backup error" root } mount /mnt/backups &> /dev/null if [ ! -d $basedir ] ; then _mail Dir $basedir not mounted _exit 41 fi outputdir=${basedir}/$(date -I) if [ $# -ne 1 ] ; then echo "Usage: $O vm" echo "Stop, backup and start given vm" _exit 42 fi function checkRunning { local machine=$1 vboxmanage list runningvms | grep -q $machine return $? } machine=$1 if ( checkRunning $machine ) ; then mkdir -p ${outputdir} cp -ar ${basedir}/current/. --target-directory=${outputdir} mv ${basedir}/current ${basedir}/old ln -s ${outputdir} ${basedir}/current test $? -eq 0 || { _mail "erreur de copie" ; _exit 44 ; } vboxmanage controlvm $machine acpipowerbutton shutdown sleep 60 rsync --inplace -a /srv/VM/Win/roofline ${outputdir}/ ret=$? test $ret -eq 0 || _mail "rsync error $ret" vboxmanage startvm $machine ln -s ${outputdir} ${basedir}/current test $ret -eq 0 && find ${basedir} -maxdepth 1 -type d -mtime +7 -exec echo rm -fr {} \; umount /mnt/backups &> /dev/null _exit $ret fi _mail "vm $machine not running" _exit 43