查看原文
其他

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

任杰 twt企业IT社区 2022-07-03

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:后有空格


更多相关内容,请点击阅读原文


长按二维码关注公众号

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存