你的云服务器快照是不是快把存储空间撑爆了?

账单又来了,快照那栏的金额比上个月又高了一截——你盯着屏幕愣了两秒,心里嘀咕:我上周明明删过一批啊?
其实不是你忘了删,是根本没来得及想。运维日常哪有“定期清理”这回事?等想起来,快照已经堆成山了。

为什么快照会悄悄“吃掉”你的预算?

快照就是磁盘在某个瞬间的完整拷贝。
创建一次,就多占一份空间。
没人告诉你它不会自己消失,但云厂商的计费系统可记得清清楚楚:按容量 × 天数,一分不落。

很多团队的习惯是:上线前打一个、大促前打一个、数据库调优前再打一个……
一开始只是“以防万一”,后来就成了“反正也不贵,先留着”。
结果半年下来,快照数量翻了三四倍,费用也跟着水涨船高。

有个做社区团购的客户,三台核心数据库服务器设了每日自动快照,但保留策略一直空着——等于“永久保存”。
我们去查的时候,光快照就占了2TB,费用比服务器本身还高。这不是备份,是给钱养了一堆沉睡的影子。

手动清理快照的坑,你踩过几个?

登录控制台,一页页翻快照列表,勾选、确认、再确认……听起来简单?
实际操作中,你大概率会卡在第三步:这个“db-prod-20240315-rollback”到底还能不能删?
那个带“pre-migration”后缀的,是不是上周迁移失败时用过的?

更麻烦的是集群环境。比如 Redis 主从+哨兵,或者用了共享块存储的 K8s 节点。
你删了主节点的旧快照,但从节点的快照还在——恢复时一跑就报错,数据对不上。
这种问题,靠人眼根本盯不住。

还有人靠日历提醒。结果大促期间连续加班三天,提醒弹出来直接点“稍后”。
“稍后”之后,再也没打开过快照页面。

云平台自带工具:你的第一道自动防线

别急着写脚本。先看看你天天登录的那个控制台里,有没有叫“自动快照策略”“生命周期管理”或者“备份保留规则”的入口。
国内主流云厂商(阿里云、腾讯云、华为云)全都有,就在磁盘管理或快照列表页的顶部菜单或右键菜单里。

功能很实在:你可以定死——每天凌晨2点打一个,只留最近7个;或者每周日凌晨打一个,留最近4个。
老的自动滚掉,新的自动补上,存储量稳稳卡在一条线上。

重点不是点几下,而是想清楚:

  • 你最怕丢多久的数据?是2小时,还是1天?
  • 出问题时,你习惯回滚到哪个时间点?
  • 这块盘上跑的是日志库、订单库,还是静态资源?

把这些想明白,再选对应策略。配好之后,绑定到目标磁盘——搞定。
这一步能解决八成人的快照膨胀问题。

当自带功能不够用:脚本才是终极解决方案

平台策略管不了这些情况:

  • 快照名里带日期(比如 app-20240401),你想按命名规则清理;
  • 你有多个云账号,要统一管;
  • 或者需要“混合保留”:每天的留7天,每周一的留30天,每月1号的留一年。

这时候就得上脚本。Python 最顺手,用云厂商官方 SDK(比如阿里云的 aliyun-python-sdk-ecs,腾讯云的 tencentcloud-sdk-python)几行就能写完:

  1. 调 API 拉出所有快照;
  2. 筛——按创建时间、标签、名称正则;
  3. 删——跳过带 protected=true 标签的;
  4. 记日志,发邮件通知。

有个做游戏联运的团队,就靠一个不到50行的 Python 脚本,把跨6个区域、12个账号的快照全管住了。
他们要求:每日备份保留7天,但每周一和每月1号的必须多留一个月。平台策略做不到,脚本干得挺利索。

如何设计万无一失的清理策略?

自动化之前,先问自己三个问题:

  • 如果现在数据库崩了,你能接受最多丢失多少分钟的数据?
  • 你上次成功用快照恢复过生产环境吗?在哪台测试机上试的?
  • 哪些快照,打死都不能动?(比如刚上线新版本前打的那个)

一个被验证过的策略模板是:
✅ 最近24小时:每2小时一个(用于精细回滚)
✅ 最近7天:每天一个(覆盖日常变更)
✅ 最近90天:每周一个(应对周期性问题)

然后,立刻给关键快照打标。
不是备注里写“重要”,而是真正在控制台或 API 里加个标签:keep=foreverprotected=yes
你的脚本或平台策略,必须认这个标签,否则不如不设。

自动化上线后,就能高枕无忧了吗?

不能。
自动清理不是设完就完事,它是一条链:策略 → 执行 → 监控 → 验证。

最简单的监控,就是让脚本每次跑完,往企业微信/钉钉群里发一行消息:
[快照清理] 今日删除 12 个,剩余 7 个,耗时 23s
没有这条消息,你就等于蒙眼开车。

还要盯两件事:

  • 每周看一眼费用报表,快照那栏是不是开始往下走了?
  • 每月抽一个快照,真恢复到测试机上跑一遍业务流程——别只看“恢复成功”,要看数据对不对、接口通不通。

有客户设了自动清理,结果脚本里 region 写错了,只清了华北,华南的还在疯长。
三个月后财务对账才发现,多花了小一万。
监控不是添麻烦,是给你省麻烦。

今天下班前,用15分钟迈出第一步

现在,打开你常用的云控制台(阿里云/腾讯云/华为云都行)。
不用找文档,直接在左侧导航栏点「云服务器 ECS」→「磁盘」→ 找到你最不重要的那块测试盘 → 点右上角「更多」或「管理」→ 找「自动快照策略」或「生命周期管理」。

新建一个策略:
🔹 执行时间:每天凌晨2:00
🔹 保留份数:3份
🔹 应用到:刚才选中的那块测试盘

设完等两天。看看快照列表是不是自动增减、总数稳在3个。
没问题了,再复制这个策略,改个名字,应用到正式环境的非核心磁盘上。

别等“完美方案”,先让第一个自动清理动作跑起来。