任杰
作者任杰·2018-09-17 18:03
资深云服务经理·x云

vsphere 虚拟化自动删除快照脚本命令解读

字数 1185阅读 3679评论 2赞 3

vphere虚拟化平台,通过快照可以进行计划内补丁更新,应用版本升级,其上含有快照自动创建任务,为实现快照的自动删除,脚本如下:

!/bin/sh

DAY=2
for i in vim-cmd vmsvc/getallvms | awk '{print $1}' | grep -e "[0-9]"
do

SNAPSHOT_COUNT=`vim-cmd vmsvc/snapshot.get $i | egrep -- '--\\|-CHILD|^\\|-ROOT' | wc -l`
if [ $SNAPSHOT_COUNT -ge $DAY ]; then
   let NUM=$SNAPSHOT_COUNT-$DAY
   OLD_SNAPSHOT_ID=`vim-cmd vmsvc/snapshot.get $i | grep Id | head -$NUM | awk -F: '{print $2}'`
   for n in $OLD_SNAPSHOT_ID
   do
     vim-cmd vmsvc/snapshot.remove $i $n > /dev/null
   done
fi

下述将对脚本命令进行解读,上述shell脚本共计代码13行。
第一行:为shell抬头;
第二行:定义变量day,并赋值2,即要保留的快照数;
第三行:使用for循环获取虚拟机vmid,并将该值付给变量i,其中 vim-cmd vmsvc/getallvms为获取所有虚拟机信息,awk '{print $1}'摘取第一列,保留含有数字的信息;
第四行:do 开始执行命令
第五行:获取虚拟机现有快照数量,其中vim-cmd vmsvc/snapshot.get $i获取虚拟机快照信息情况,egrep -- '--\|-CHILD|^\|-ROOT'统计范围为所有根快照和子快照, wc -l将数量列出
第六行:进入if循环,比较$SNAPSHOT_COUNT与$DAY变量大小,其中-ge为大于等于
第七行:使用let命令计算变量$SNAPSHOT_COUNT与$DAY的差值,并复制给NUM
第八行:确定需要删除的虚拟机快照ID,vim-cmd vmsvc/snapshot.get $i | grep Id获取所有虚拟机快照ID,head -$NUM输出$NUM行,awk -F: '{print $2}'打印出第二行;
第九行:使用for循环,将虚拟机快照ID$OLD_SNAPSHOT_ID赋值给n
第十行:do 开始执行命令
第十一行:移除快照,并将输出重定向到/dev/null,其中$i $n明确的快照;
第十二行:结束命令;
第十三行:完成if循环,结束。

注意:
1.egrep命令同grep可进行筛选;
2.-- '--中'前有空格;
3.-F:后有空格

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

3

添加新评论2 条评论

Dream漂移Dream漂移系统运维工程师月卿云客
2018-09-23 10:59
路过学习,感谢分享
wuwenpinwuwenpin软件开发工程师南京
2018-09-17 20:41
感谢分享!!
Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广