news 2026/4/19 16:03:28

ESXi 定时快照与自动清理:脚本化运维实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ESXi 定时快照与自动清理:脚本化运维实战

1. 为什么需要自动化快照管理

在虚拟化环境中,快照就像给虚拟机拍了一张"照片",能够完整记录某个时间点的系统状态。想象一下,当你在测试新软件或者进行系统升级时,突然发现出了问题,这时候如果能一键恢复到之前的稳定状态,是不是特别方便?这就是快照的核心价值。

但现实情况往往更复杂。我遇到过不少企业,他们虽然知道快照的重要性,但管理方式却很原始:要么是运维人员手动创建快照,经常忘记执行;要么是快照数量失控,占用大量存储空间。最糟糕的情况是,当真正需要恢复时,发现最近的快照已经是两周前的了。

自动化快照管理能解决这些问题:

  • 定时执行:不用再担心忘记创建快照
  • 智能清理:自动删除老旧快照,避免存储空间被占满
  • 统一标准:所有虚拟机采用相同的快照策略
  • 减少人为错误:避免手动操作可能带来的失误

2. 环境准备与脚本部署

2.1 选择合适的存储位置

ESXi有个特点你可能不知道:重启后会自动清理/vmfs/volumes以外的目录。这意味着如果你把脚本放在错误的位置,重启后就找不到了。我吃过这个亏,所以特别提醒你:所有脚本必须放在数据存储目录下

具体操作步骤:

cd /vmfs/volumes/datastore1 mkdir crontabs cd crontabs

这里有个小技巧:使用datastore1是最常见的,但你的环境可能不同。如果不确定,可以用ls /vmfs/volumes/命令查看可用的数据存储。

2.2 创建快照脚本

新建snapshot_creat.sh文件,内容如下:

#!/bin/sh #auto create ESXi snapshots for i in `vim-cmd vmsvc/getallvms | grep -v nosnap | awk '{print $1}' | grep -e "[0-9]"` do vname=$(vim-cmd vmsvc/get.summary $i | grep name | awk '{ print $3 }' | cut -d \" -f 2) vim-cmd vmsvc/snapshot.create $i $(date "+%F") sleep 30s if [ $? -eq 0 ];then echo "$(date "+%F %T") : $vname snapshot create success.." >> ./schedule_snap.log else echo "$(date "+%F %T") : $vname snapshot create FAILED.." >> ./schedule_snap.log fi done

这个脚本有几个关键点:

  1. 使用grep -v nosnap过滤掉备注中包含"nosnap"的虚拟机
  2. 快照名称使用当前日期(date "+%F"
  3. 每次操作后等待30秒,避免对系统造成太大压力
  4. 记录详细日志,方便排查问题

3. 智能清理老旧快照

3.1 删除快照脚本

创建snapshot_del.sh文件:

#!/bin/sh DAY=3 #保留快照的数量 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 -gt $DAY ]; then DELETE_COUNT=$(($SNAPSHOT_COUNT-$DAY)) OLD_SNAPSHOT_ID=`vim-cmd vmsvc/snapshot.get $i | grep Id | head -$DELETE_COUNT | awk -F: '{print $2}'` for n in $OLD_SNAPSHOT_ID do vim-cmd vmsvc/snapshot.remove $i $n > /dev/null sleep 30s done fi done

这个脚本的逻辑很巧妙:

  1. 设置DAY=3表示保留最近3个快照
  2. 先统计每个虚拟机的快照总数
  3. 如果超过保留数量,计算需要删除的数量
  4. 按创建时间从早到晚删除多余的快照

3.2 设置文件权限

别忘了给脚本执行权限:

chmod -R 755 crontabs

我曾经遇到过脚本无法执行的问题,排查了半天才发现是权限设置不对。所以这一步虽然简单,但非常重要。

4. 配置定时任务

4.1 修改rc.local文件

ESXi的定时任务配置有点特殊,需要通过rc.local来设置:

vi /etc/rc.local.d/local.sh

在文件末尾添加以下内容(注意替换路径):

kill $(cat /var/run/crond.pid) /bin/echo "0 1 * * 2,4 sh /vmfs/volumes/datastore1/crontabs/snapshot_creat.sh" >> /var/spool/cron/crontabs/root /bin/echo "30 2 * * 2,4 sh /vmfs/volumes/datastore1/crontabs/snapshot_del.sh" >> /var/spool/cron/crontabs/root crond

这里有几个关键点需要注意:

  1. 每周二、周四凌晨1点创建快照
  2. 每周二、周四凌晨2:30清理老旧快照
  3. 路径必须使用绝对路径

4.2 定时任务语法说明

很多人对cron表达式不太理解,这里详细解释下:

  • 0 1 * * 2,4:每周二和周四的1:00 AM
  • 30 2 * * 2,4:每周二和周四的2:30 AM
  • 五个星号分别代表:分钟 小时 日 月 星期

如果你想改成每天执行,可以改成0 1 * * *(每天1:00 AM)。

5. 常见问题排查

5.1 脚本不执行怎么办

如果发现脚本没有按预期执行,可以按以下步骤排查:

  1. 检查脚本权限:ls -l /vmfs/volumes/datastore1/crontabs/
  2. 查看cron日志:cat /var/log/cron
  3. 手动执行脚本测试:sh /vmfs/volumes/datastore1/crontabs/snapshot_creat.sh
  4. 检查路径是否正确:ESXi重启后路径可能会变

5.2 快照创建失败的可能原因

根据我的经验,快照创建失败通常有这些原因:

  1. 虚拟机正在备份或迁移
  2. 存储空间不足
  3. 虚拟机处于特殊状态(如挂起)
  4. 快照数量已达到上限(通常每个虚拟机最多32个)

5.3 如何临时禁用自动快照

有时候你可能需要临时禁用自动快照,有两种方法:

  1. 在虚拟机备注中添加"nosnap"
  2. 注释掉cron任务行(在行首加#)

6. 进阶优化建议

6.1 按虚拟机类型设置不同策略

生产环境和测试环境的虚拟机可能需要不同的快照策略。你可以修改脚本,实现:

  • 生产环境:每天快照,保留7天
  • 测试环境:每周快照,保留2个

实现方法是给虚拟机添加不同的备注标签,然后在脚本中根据标签应用不同的策略。

6.2 添加邮件通知功能

如果你想及时知道快照任务执行情况,可以添加邮件通知:

# 在脚本成功/失败部分添加 echo "快照任务完成" | mail -s "ESXi快照报告" admin@example.com

当然,这需要先配置好ESXi的邮件发送功能。

6.3 监控快照存储空间

快照会占用大量存储空间,建议定期检查:

df -h vim-cmd vmsvc/getallvms | awk '{print $1}' | xargs -I {} vim-cmd vmsvc/snapshot.get {} | grep "File Size"

可以设置一个定期任务,当存储空间低于某个阈值时自动清理更多老旧快照。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 13:20:27

Spring Boot Actuator 指标监控

Spring Boot Actuator 指标监控:提升应用可观测性的利器 在现代微服务架构中,应用的运行状态监控至关重要。Spring Boot Actuator作为Spring生态中的监控利器,为开发者提供了丰富的指标数据与健康检查功能,帮助快速定位系统问题。…

作者头像 李华
网站建设 2026/4/19 16:00:37

从人工智能愿景到大规模应用智能:Sia达成新里程碑,其代理商店代理数量突破800个

Sia是一家专注于战略、管理和人工智能的国际咨询集团,在代理式人工智能领域持续巩固其领先地位。作为一家诞生于数字时代的咨询公司,Sia依托遍布19个国家的3,000多名顾问的专业知识,助力各类组织实现规模化人工智能驱动转型。扩展解决方案智能…

作者头像 李华
网站建设 2026/4/17 13:18:07

百度网盘秒传链接网页工具终极指南:全平台免费秒传转存教程

百度网盘秒传链接网页工具终极指南:全平台免费秒传转存教程 【免费下载链接】baidupan-rapidupload 百度网盘秒传链接转存/生成/转换 网页工具 (全平台可用) 项目地址: https://gitcode.com/gh_mirrors/bai/baidupan-rapidupload 还在为百度网盘文件分享的繁…

作者头像 李华
网站建设 2026/4/17 13:17:10

PyStand:让Python应用轻松实现Windows独立部署的5个秘诀

PyStand:让Python应用轻松实现Windows独立部署的5个秘诀 【免费下载链接】PyStand :rocket: Python Standalone Deploy Environment !! 项目地址: https://gitcode.com/gh_mirrors/py/PyStand 你是否曾为Python应用在Windows环境下的部署而烦恼?依…

作者头像 李华