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

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

!/bin/sh

DAY=2

for i in vim-cmd vmsvc/getallvms | awk '' | 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: ''

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 ''摘取第一列,保留含有数字的信息;

第四行: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: ''打印出第二行;

第九行:使用for循环,将虚拟机快照ID$OLD_SNAPSHOT_ID赋值给n

第十行:do 开始执行命令

第十一行:移除快照,并将输出重定向到/dev/null,其中$i $n明确的快照;

第十二行:结束命令;

第十三行:完成if循环,结束。

注意:

1.egrep命令同grep可进行筛选;

2.-- '--中'前有空格;

3.-F:后有空格

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180919B0A1RB00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券