Недавно понадобилось автоматизировать создание и сохранение снепшотов виртуальных машин из XenServer. Ничего не найдя по этой теме в русскоязычном сегменте я пошёл в мировой интернет и нашёл статью на ресурсе tecadmin.net, которая мне очень помогла, поэтому я решил разместить её перевод на хабре. Далее авторский (с адаптацией под нашу речь) перевод исходной статьи:
Я работаю с Citrix XenServer уже много лет, и управление всеми серверами виртуализации через приложение XenCenter, которое установлено на моём компьютере с ОС Windows. До сегодняшнего дня мы регулярно производили резервное копирование виртуальных машин вручную, так же приходилось останавливать сервера для их копирования. Большинство владельцев серверов не могут позволить себе их отключение на длительное время. Поэтому я нашёл способ, как копировать виртуальные машины без их выключения и, соответсвенно, простоя.
В этой статье мы по шагам научимся делать резервные копии запущенной виртуальной машины, а так же, будет представлен готовый скрипт, который может делать резервные копии всех серверов через cron.
Ручной бекап запущенной машины
- Поиск UUID виртаульной машины
xe vm-list is-control-domain=false is-a-snapshot=false
Данна команда покажет список виртуальных машин и их UUID, которые нам нужные для следующего шага
- Создание снепшота
Параметр uuid необходимо заменить на свой, полученный на первом шаге, убедитесь, что он правильный.xe vm-snapshot uuid=8ac95696-94f3-83c1-bc89-8bb2603f832b new-name-label=testvmsnapshot
А эта команда вернёт uuid снепшота, по которому его можно будет сохранить в файл
xe template-param-set is-a-template=false ha-always-run=false uuid=b15c0531-88a5-98a4-e484-01bc89131561
- Сохранение снепшота в файл
Теперь можно сохранить полученный снепшот в .xva-файл, который можно использовать для восстановления сервера как из командной строки, так и из XenCenterxe vm-export vm=b15c0531-88a5-98a4-e484-01bc89131561 filename=vm-backup.xva
- Удаление снепшота
После сохранения .xva-файла можно удалить снепшот из самого XenServerxe vm-uninstall uuid=b15c0531-88a5-98a4-e484-01bc89131561 force=true
Скрипт автоматического бекапа запущенных виртуальных машин
Для резервного копирования всех виртуальных машин, работающих на базе xenserver можно использовать следующий bash-скрипт. Данный скрипт создаёт снепшоты и экспортирует их на NFS-диск. У меня этот скрипт работает отлично, чего может не буть у вас, поэтому используйте его на собственный страх и риск.
#!/bin/bash
#
# Written By: Mr Rahul Kumar
# Created date: Jun 14, 2014
# Last Updated: Jan 22, 2016
# Version: 1.2
# Visit: http://tecadmin.net
#
DATE=`date +%d%b%Y`
XSNAME=`echo $HOSTNAME`
MOUNTPOINT=/xenmnt
UUIDFILE=/tmp/xen-uuids.txt
NFS_SERVER_IP="192.168.10.100"
### Create mount point
mkdir -p ${MOUNTPOINT}
### Mounting remote nfs share backup drive
[ ! -d ${MOUNTPOINT} ] && echo "No mount point found, kindly check"; exit 0
mount -F nfs ${NFS_SERVER_IP}:/backup/citrix/vms ${MOUNTPOINT}
BACKUPPATH=${MOUNTPOINT}/${XSNAME}/${DATE}
mkdir -p ${BACKUPPATH}
[ ! -d ${BACKUPPATH} ] && echo "No backup directory found"; exit 0
# Fetching list UUIDs of all VMs running on XenServer
xe vm-list is-control-domain=false is-a-snapshot=false | grep uuid | cut -d":" -f2 > ${UUIDFILE}
[ ! -f ${UUIDFILE} ] && echo "No UUID list file found"; exit 0
while read VMUUID
do
VMNAME=`xe vm-list uuid=$VMUUID | grep name-label | cut -d":" -f2 | sed 's/^ *//g'`
SNAPUUID=`xe vm-snapshot uuid=$VMUUID new-name-label="SNAPSHOT-$VMUUID-$DATE"`
xe template-param-set is-a-template=false ha-always-run=false uuid=${SNAPUUID}
xe vm-export vm=${SNAPUUID} filename="$BACKUPPATH/$VMNAME-$DATE.xva"
xe vm-uninstall uuid=${SNAPUUID} force=true
done < ${UUIDFILE}
umount ${MOUNTPOINT}
P.S. Не знаю, почему у автора возникли проблемы с бекапом запущенных машин — XenCenter позволяет создавать снепшоты и сохранять их в файл, не выключая машину (конечно, если на ней установлен XenTools. А вот его скрипт автоматизации мне очень помог, кроме этого его можно изменить под различные условия, например монтировать не NFS, а SMB или просто внешний диск
Автор: s493599