当前位置: 首页 > news >正文

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"

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

http://www.jsqmd.com/news/655605/

相关文章:

  • SiameseUniNLU实战案例:多模态内容审核——图文匹配度评分+文本敏感词+图像违规特征联合决策
  • 1998-2025年中国专利转让数据库
  • 探讨有实力的小升初暑假衔接辅导课程,选哪家更靠谱 - 工业设备
  • 别再手动处理异步任务了!用ABAP bgRFC实现后台RFC的完整配置与代码示例(S/4HANA适用)
  • 2026贵阳南明区正宗铁签烤肉、烤鱼夜宵地标,老贵阳烟火气复兴之选(含官方联系方式) - 精选优质企业推荐官
  • 新疆旅游怎么选最靠谱?找对人、玩对天数,资深领队阿晨带你深度游新疆 - 速递信息
  • Java八股之重写(override)和重载(overload)的区别
  • 理解Stream collect toMap的三个参数
  • class和data class的区别
  • Cursor Pro免费激活:3个核心技术突破与5分钟部署指南
  • 2026年第二届亚洲无人系统与智能控制会议 (USIC 2026)
  • STM32+MPU6050实战:5分钟搞定DMP库移植获取欧拉角(附避坑指南)
  • 如何用Python自动化B站视频上传:BilibiliUploader使用指南
  • 浙江镕达生物:专业离心管生产厂家,全规格无菌离心管适配科研与医疗场景 - 品牌推荐大师1
  • Windows 一键部署 OpenClaw 保姆级教程|10 分钟搭建本地 AI 智能体,全程零配置
  • 使用工具在 Windows 11/10/8/7 中扩展 C 盘的 3 种免费方法
  • STM32实战:手把手教你调试LIN总线通讯(逻辑分析仪抓包与常见故障排查)
  • LLM生成代码准确率仅68%?揭秘头部科技公司内部验证的4层校验机制与SOP模板
  • FINN实战:从Docker环境到FPGA部署的完整指南
  • Android驱动工程师深度解析:从开发实践到面试指南
  • 实验室必备设备推荐:小动物活体成像系统哪家生产商更值得信赖? - 品牌推荐大师
  • BaiduPCS-Go上传性能优化:7个关键配置提升大文件传输效率
  • 如何用Smithbox游戏修改工具打造个性化游戏体验
  • AnimateDiff避坑指南:解决视频闪烁/面部扭曲/生成失败的7个常见问题(附排查流程图)
  • STM32F030 IAP实战:当你的Cortex-M0没有VTOR寄存器时,如何让中断‘听话’?
  • py每日spider案例之某website影视链接获取(无加密)
  • ADC版图实战:从天线错误到DRC清零的惊险调试
  • 3步解锁CaptfEncoder V3:网络安全工具套件的极速上手指南
  • 实验室/小型工业用冷水机,哪家做得比较扎实?求推荐 - 品牌推荐大师
  • 从人工智能愿景到大规模应用智能:Sia达成新里程碑,其代理商店代理数量突破800个