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:后有空格
领取专属 10元无门槛券
私享最新 技术干货