xenserver 7.1版本没有自动定时创建快照的功能,我们可以通过服务器命令创建crontab任务来实现这个功能
先来记录一下xen的一些命令使用:
xe vm-list -----列出所有的虚拟vm实例
xe vm-list name-label="vm实例名称" -------列出所提供的实例名称的vm虚拟机实例
xe vm-list uuid="UUID" ------根据uuid列出其实例
xe vdi-list ------------- 显示所有虚拟硬盘(VDI)信息
xe vdi-list vm-uuid="VM-UUID" -------- 匹配VM的UUID显示VDI信息
xe vdi-list uuid="UUID" ------- 匹配VDI的UUID显示VDI信息
xe vdi-list name-label="VDI名称" -------- 匹配VDI名称显示VDI信息
xe vdi-forgrt uuid="UUID" -------- 匹配VDI的UUID遗忘该VDI信息(srcan可找回)
xe vm-snapshot vm="uuid" new-name-label="快照名称" ----对某个虚拟机创建快照
xe snapshot-list -----列出所有虚拟机的快照
xe snapshot-list name-label="快照名称" ------匹配快照名称列出其快照信息
xe snapshot-uninstall uuid="snapshot-uuid" ----------根据uui来删除快照,会提示输入yes才可执行删除
以上命令就足够实现我们的要求了,写一个定时任务的脚本来实现对某个虚拟机自动定时创建快照并删除一个月之前创建的快照。
#!/bin/bash
echo ------------------start------------------------
#指定要备份的主机名称
hosts=('Centos7 1708 elasticsearch3' 'Centos7 1708 elasticsearch' 'Centos7 1708 elasticsearch2')
#获取当前日期
nowdate="`date +%Y%m%d`"
echo $nowdate
#获取一个月前的日期
beforedate="`date -d -1month '+%Y%m%d'`"
function check_return_and_exit() {
[ $1 -ne 0 ] && echo "$2" && curl 'https://oapi.dingtalk.com/robot/send?access_token=XXXXXXXXXXXXXXXXXXXXXX' --header 'Content-Type: application/json' -d '{"msgtype": "text", "text": {"content": "'"$2"'"}}' && exit 1
return 0
}
for(( i=0;i<${#hosts[@]};i++))
do
host=${hosts[i]}
echo $host
# 获取vm实例的uuid,用来创建snapshot
uuid=`xe vm-list name-label="$host" | grep uuid | awk -F ': ' '{print $2}'`
check_return_and_exit $? "$host select uuid failed"
echo $uuid
#执行快照
xe vm-snapshot vm="$uuid" new-name-label="$nowdate"
check_return_and_exit $? "$host create snapshot failed"
done
# 删除旧的快照
# 先获取旧快照的uuid
deleteuuids=`xe snapshot-list name-label="$beforedate" | grep uuid | awk -F ': ' '{print $2}'`
check_return_and_exit $? "select old snapshot failed"
for deleteuuid in $deleteuuids
do
echo $deleteuuid
echo yes | xe snapshot-uninstall uuid="$deleteuuid"
check_return_and_exit $? "$deleteuuid delete old snapshot failed"
done
将以上脚本放入crontab任务中,每七天执行一次会定时去为虚拟机做快照,并将过期的快照进行删除。