我用的Citrix XenServer从多年的工作和管理使用安装在独立的Windows计算机上的XenCenter所有XenServer。我们经常采用手动备份虚拟机,直到今天,我备份虚拟机时,服务器需要被关停很长一段时间。我在谷歌的搜索发现一个更好的方式来备份虚拟机,而不关闭它们。这意味着我们可以把正在运行的VM备份,并没有发生停机。
在这篇文章中,我们将帮助您一步一步运行VM备份过程。另外这里是一个shell脚本,它可以采取一切虚拟机备份或指定的虚拟机备份,我们可以通过cron调度。
第1步:手动备份运行虚拟机
下面的步骤也可以通过XenCenter中进行,但是,Linux的爱好者喜欢命令行。因此,在下面找到命令来做到这一点。
1.1 查找虚拟机UUID
使用以下命令,查看其他所有虚拟机的UUID列表。此UUID将在接下来的步骤中使用
# xe vm-list is-control-domain=false is-a-snapshot=false
uuid ( RO) : 8ac95696-94f3-83c1-bc89-8bb2603f832b
name-label ( RW): test-vm
power-state ( RO): running
根据上面的输出 test-vm uuid是
“8ac95696-94f3-83c1-bc89-8bb2603f832b”。它根据你的情况有所不同。
1.2 创建VM快照
使用在上面的步骤中发现的UUID VM,现在使用下面的命令来创建一个快照。请确保您使用的是正确的UUID。
# xe vm-snapshot uuid=8ac95696-94f3-83c1-bc89-8bb2603f832b new-name-label=testvmsnapshot
上面的命令将返回快照的UUID,请使用UUID到快照转换为虚拟机,因此我们可以将其导出使用下面的命令到文件。
# xe template-param-set is-a-template=false ha-always-run=false uuid=b15c0531-88a5-98a4-e484-01bc89131561
1.3 导出快照到文件
现在,我们可以创建导出快照.xva文件,它可以从命令行或XenCenter中很容易恢复。
# xe vm-export vm=b15c0531-88a5-98a4-e484-01bc89131561 filename=vm-backup.xva
1.4 删除快照
最后,因为我们已经采取了备份xav文件,所以我们可以删除XenServer创建的快照。
# xe vm-uninstall uuid=b15c0531-88a5-98a4-e484-01bc89131561 force=true
2. bash脚本进行备份正在运行的虚拟机
备份XenServer上运行的所有VM,我们还可以使用下面的脚本。这个脚本通过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}