Fazendo backup das suas VM’s do Xen: Atualizado
Posted by: Tiago Cruz in Linux, Virtualização, Xen, ScriptsO script anterior foi atualizado contando com algumas melhorias sugeridas pelos seus usuários, como:
- Agora ele é escrito em Inglês, para maior portabilidade com outros usuários do xen ao redor do mundo;
- Você pode fazer backup de somente uma máquina específica, não é mais necessário esperar todo o laço terminar para ver o resultado do mesmo;
- Script parametrizado e funcões sub-divididas e
- Pequenos problemas corrigidos.
#!/bin/bash
# Backup of Xen VM's
# Tiago Cruz - tiagocruz@everlinux.com
# v 1.0 Mar/2008 - Initial version, just backup all VM's
# v 1.1 May/2008 - Now we have functions and parameters
export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
BACK="_snap"
LOG=/var/log/backup.`date +%Y%m%d`
# root partition to backup ("/")
# usually the second it's swap
ROOT="1"
[ ! -d "/mnt/back" ] && mkdir -p /mnt/back
[ ! -d "/data/backup" ] && mkdir -p /data/backup
function showHelp() {
echo " "
echo "Use the following parameters: "
echo " help = Show this help"
echo " all = Backup of all VM's"
echo " list = List all VM's from this domain"
echo "
echo ” ”
echo “ex: back_xen.sh tomcat_shop”
echo ” ”
exit 1
}
function listVM() {
echo “List of VM’s avaliables:”
/usr/sbin/xm list | awk ‘{print $1}’ | egrep -v ‘(Name|Domain-0)’
echo ” ”
}
function backXen () {
echo “Backuping machine $i…”
echo “Please, look the progress on $LOG”
listVM | grep $i >/dev/null
if [ $? -ne 0 ]; then
echo “Machine $i does not exist, aborting!”
exit 2
fi
backup
if [ $? -eq 0 ]; then
echo “Backup of $i completed successfully!!!”
echo “Backup finalized on `date` with load `cat /proc/loadavg | cut -c 1-14`” >> $LOG
echo “==============================================” >> $LOG
echo “==============================================” >> $LOG
fi
}
function backAll () {
VMS=`xm list | awk ‘{print $1}’ | egrep -v ‘(Name|Domain-0)’`
for i in $VMS; do
backup
done
echo “Backup finalized on `date` with load `cat /proc/loadavg | cut -c 1-14`” >> $LOG
echo “==============================================” >> $LOG
echo “==============================================” >> $LOG
}
function backup () {
echo “==============================================” >> $LOG
echo “Backup $i started on `date` with load `cat /proc/loadavg | cut -c 1-14`” >> $LOG
DEVICE=`grep ^disk /etc/xen/$i | awk -F “Vol_LVM” ‘{print $2}’ | cut -d / -f 2 | cut -d , -f 1`
echo “Virtual Machine $i uses $DEVICE as storage device” >> $LOG
lvcreate –snapshot -L 15G -n $i$BACK /dev/Vol_LVM/$DEVICE >> $LOG 2>&1
[ $? -ne 0 ] && echo “Error $i: creating LVM $i$BACK” >> $LOG
kpartx -a /dev/mapper/Vol_LVM-$i$BACK >> $LOG 2>&1
mount /dev/mapper/Vol_LVM-$i$BACK$ROOT /mnt/back/ >> $LOG 2>&1
[ $? -ne 0 ] && echo “Error $i: mounting $i$BACK$ROOT” >> $LOG
SIZE1=`df -hP /mnt/back/ | awk ‘{print $3}’ | grep -v Used`
SIZE2=`df -hP /mnt/back/ | awk ‘{print $2}’ | grep -v Size`
echo “Backup of /dev/mapper/Vol_LVM-$i$BACK$ROOT - $SIZE1 of $SIZE2 used” >> $LOG
tar zcf /data/backup/$i-xen.tar.gz /mnt/back >> $LOG
[ $? -ne 0 ] && echo “Error $i: creating /LVM/backup/$i.tar.gz” >> $LOG
SIZE3=`ls -lh /LVM/backup/$i-xen.tar.gz | awk ‘{print $5}’`
echo “Created /LVM/backup/$i-xen.tar.gz with $SIZE3″ >> $LOG
sleep 1
umount /mnt/back/ >> $LOG 2>&1
[ $? -ne 0 ] && echo “Error $i: umounting $i$BACK” >> $LOG
kpartx -d /dev/mapper/Vol_LVM-$i$BACK >> $LOG 2>&1
[ $? -ne 0 ] && echo “Error $i: deleting partition mappings $i$BACK” >> $LOG
echo “Removing snapshot already backuped $i$BACK” >> $LOG
lvremove /dev/Vol_LVM/$i$BACK -f >> $LOG 2>&1
}
if [ “$#” -eq 0 ]; then
showHelp
fi
case “$1″ in
list) listVM ;;
all ) backAll ;;
help) showHelp ;;
* ) i=$1; backXen ;;
esac
Caso tenha problemas com o copy-past, você pode pegar o mesmo aqui: back_xen.sh.txt.

Entries (RSS)