Zálohovací script XEN strojů pomocí LVM
viz Zálohování XEN strojů
#!/bin/bash #e-mail address for error message ADMIN="jmeno@domena.primarni jmeno@domena.zalozni" #hostname HOSTNAME=`/bin/hostname` #e-mail FRROM field FROM="xenbackup@$HOSTNAME" #backupfolder HOMEBCKP="/cesta/na/nejake/misto/pro/zalohy/xen/" #backupname BACKUPNAME="virtuals" #backup datetime file name BCKPDATETIME="backup-datetime" #array of backuped virt. machines PAUSE_VIRTUALS=('nejakyxenstrojnejminzatizeny' 'druhyxenstroj' 'tretixenstrojnejviczatizeny') #LVM #grp - path of logical volume LVM_GRP="/dev/main" #full name of logical volume to backup LVM_VIRTUALS="${LVM_GRP}/virtuals" #lvm backup(snapshot) logical volume name LVM_BCKPNAME="lvmbackup" #full name of backup(snapshot) volume name LVM_SNAPSHOT="${LVM_GRP}/${LVM_BCKPNAME}" #size of snapshot lvm, have to be enough size for all changes during backuping LV_SIZE="20G" #backup mount dir,have to exists ! MNT_DIR="/mnt/lvmbackup" #any dir for cd to - for release backup snapshot (safe umount) INUSE_DIR="/tmp" #Commands MOUNT_CMD="/bin/mount" UMOUNT_CMD="/bin/umount" XM_CMD="/usr/sbin/xm" #pause between sysrq and sleep - optimistic idea XM_PAUSE=1 LVCREATE_CMD="/sbin/lvcreate" LVREMOVE_CMD="/sbin/lvremove" SYNC_CMD="/bin/sync" #tar command use TAR_CMD="/bin/tar" myexit(){ logger -p error "backup-virtuals: Failure. Message: $1" echo "BACKUP-VIRTUALS ERROR !!! on ${HOSTNAME} Message: $1" | /usr/bin/mailx \ -s "BACKUP-VIRTUALS ERROR: ${HOSTNAME}" -r ${FROM} ${ADMIN} exit $2 } echo "`date "+%F %X"` move old backup to *.old - start" logger -p info "backup-virtuals: start" #to backup directory cd $HOMEBCKP if [ $? != 0 ]; then myexit "Error: directory $HOMEBCKP not exists" 1 fi #move the old backup if [ -e ./$BACKUPNAME.tar.gz ]; then mv -f ./$BACKUPNAME.tar.gz ./$BACKUPNAME.tar.gz.old if [ $? != 0 ]; then myexit "Error: directory $POMPATH not exists" 3 fi if [ -e ./$BCKPDATETIME ]; then mv -f ./$BCKPDATETIME ./$BCKPDATETIME.old fi fi echo "`date "+%F %X"` move old backup to *.old - done" myunpause(){ for UNMACHINE in "${PAUSE_VIRTUALS[@]}"; do $XM_CMD unpause $UNMACHINE done } #pause machines echo "`date "+%F %X"` Pause machines - start" for MACHINE in "${PAUSE_VIRTUALS[@]}"; do $XM_CMD sysrq $MACHINE s sleep $XM_PAUSE $XM_CMD pause $MACHINE res=$? if [ $res != 0 ]; then myunpause myexit "Error: $cmd error, return $res" 5 fi done echo "`date "+%F %X"` Pause machines - done" #sync $SYNC_CMD #create lvm lvmbackup echo "`date "+%F %X"` Create lvm $LVM_BCKPNAME - start" $LVCREATE_CMD -L$LV_SIZE -s -n $LVM_BCKPNAME $LVM_VIRTUALS if [ $? != 0 ]; then myunpause myexit "Error: lvcreate fail" 7 fi echo "`date "+%F %X"` Create lvm $LVM_BCKPNAME - done" #error message txt="YOU HAVE TO USE lvremove command as soon as possible" #unpause all echo "`date "+%F %X"` UnPause machines - start" for MACHINE in "${PAUSE_VIRTUALS[@]}"; do $XM_CMD unpause $MACHINE res=$? if [ $res != 0 ]; then myunpause $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? = 0 ]; then txt=" $LVM_BCKPNAME removed" fi myexit "Error: $cmd error, return $res, $txt" 10 fi done echo "`date "+%F %X"` UnPause machines - done" #$MOUNT_CMD echo "`date "+%F %X"` Mount and cd to $MNT_DIR - start" $MOUNT_CMD $LVM_SNAPSHOT $MNT_DIR if [ $? != 0 ]; then cd $INUSE_DIR $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? = 0 ]; then txt="$LVM_BCKPNAME removed" fi myexit "Error: $MOUNT_CMD fail, $txt" 15 fi cd $MNT_DIR if [ $? != 0 ]; then cd $INUSE_DIR $SYNC_CMD $UMOUNT_CMD $MNT_DIR if [ $? = 0 ]; then $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? = 0 ]; then txt="$LVM_BCKPNAME removed" fi fi myexit "Error: cd $MNT_DIR fail, $txt" 17 fi echo "`date "+%F %X"` Mount and cd to $MNT_DIR - done" #backup machine echo "`date "+%F %X"` Backup to tar.gz - start" $TAR_CMD -czf "$HOMEBCKP/$BACKUPNAME.tar.gz" --exclude='*.iso' . if [ $? != 0 ]; then cd $INUSE_DIR $SYNC_CMD $UMOUNT_CMD $MNT_DIR if [ $? = 0 ]; then $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? = 0 ]; then txt="$LVM_BCKPNAME removed" fi fi myexit "Error: backup tar fail, $txt" 20 fi echo "`date "+%F %X"` Backup to tar.gz - done" #$UMOUNT_CMD echo "`date "+%F %X"` $UMOUNT_CMD - start" #for sure sequence cd $INUSE_DIR for inuse $MNT_DIR cd $INUSE_DIR $SYNC_CMD $UMOUNT_CMD $MNT_DIR if [ $? != 0 ]; then $SYNC_CMD $UMOUNT_CMD $MNT_DIR if [ $? = 0 ]; then $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? = 0 ]; then txt="$LVM_BCKPNAME removed" fi fi myexit "Error: backup $UMOUNT_CMD fail, $txt" 25 fi echo "`date "+%F %X"` $UMOUNT_CMD - done" #lvm remove echo "Lvremove - start" $LVREMOVE_CMD -f $LVM_SNAPSHOT if [ $? != 0 ]; then myexit "Error: backup lvremove fail, $txt" 30 fi echo "`date "+%F %X"` Lvremove - done" date "+%F %X" > $HOMEBCKP/$BCKPDATETIME echo "`date "+%F %X"` Backup done" echo "---------------------------------------------" logger -p info "backup-virtuals: OK" exit 0