3. 快照策略规划与创建

快照策略是 ONTAP 数据保护体系中最基础、也最容易被低估的一环。很多管理员习惯“先建了再说”,结果卷上堆着几十个命名混乱、保留时间重叠的快照,既占空间又难以判断哪个能用于恢复。真正有效的做法,是先把业务的 RPO(恢复点目标)和 RTO(恢复时间目标)翻译成可执行的调度周期与保留数量,再落到策略对象上。

从 RPO/RTO 推导快照计划

RPO 决定“多久做一次快照”,RTO 决定“恢复时能多快找到并挂回可用副本”。两者共同约束调度周期和保留数量。一个常用的换算关系是:

保留数量 ≈ 覆盖时长 ÷ 调度周期

例如某业务要求 RPO 为 1 小时、需要保留 3 天历史,则至少需要 3×24 = 72 个快照;若 RPO 放宽到 4 小时、保留 7 天,则 7×24÷4 = 42 个。这个数字直接决定策略中的 count 参数,也决定卷上需要预留的空间量。

RTO 则影响策略的“粒度分层”。对于核心数据库,通常采用“小时级 + 天级 + 周级”三层保留:小时级保证最近几小时的快速回滚,天级覆盖误删和逻辑错误,周级用于合规或长期比对。ONTAP 的 cron 调度允许在同一策略中定义多条规则,每条规则独立设置调度表达式和保留数量,这正是分层保留的实现方式。

快照本身不复制数据,只记录变化块指针,因此保留数量增加带来的空间开销取决于数据变更率,而非卷容量。规划时应结合每日变更率估算,而不是简单按卷大小乘以份数。

命名规范:让快照可读、可查、可自动化

ONTAP 默认快照命名格式为 snapshot_name.timestamp,其中 snapshot_name 由策略规则指定。建议采用“业务标识_周期_保留层级”的结构,例如:

  • ora_hourly —— 小时级,保留 48 份
  • ora_daily —— 天级,保留 14 份
  • ora_weekly —— 周级,保留 8 份

这样命名后,通过 volume snapshot show 就能一眼看出快照属于哪个业务、哪个保留层级,也便于后续用脚本按前缀批量清理或审计。避免使用 snap1、test 这类无意义名称,否则在几十个卷的环境中几乎无法维护。

使用 System Manager 创建卷级快照策略

在 System Manager 中,路径为 Protection > Snapshot Policies > Add。界面会要求填写策略名称、作用范围(集群或 SVM)以及至少一条规则。每条规则需要设置:调度类型(如每 8 小时、每天 0 点、每周日)、保留数量、快照名称前缀。System Manager 的优势是可视化校验调度表达式,适合初次规划时快速试算保留份数。

创建完成后,需要把策略应用到目标卷:进入 Storage > Volumes,选中卷,在 Snapshot Policy 下拉中选择刚创建的策略。注意,策略是“卷级”绑定的,同一个 SVM 下不同卷可以使用不同策略,这正是按业务分级保护的基础。

使用 CLI 创建与验证

CLI 更适合批量、可重复的配置。以下示例创建一个名为 ora_protect 的策略,包含小时、天、周三条规则:

volume snapshot policy create -policy ora_protect \
  -enabled true \
  -schedule1 hourly -count1 48 -prefix1 ora_hourly \
  -schedule2 daily  -count2 14 -prefix2 ora_daily \
  -schedule3 weekly -count3 8  -prefix3 ora_weekly

volume snapshot policy add-schedule -policy ora_protect \
  -schedule1 hourly -count1 48 -prefix1 ora_hourly

volume modify -volume ora_data -snapshot-policy ora_protect

创建后应验证三件事:策略是否启用、规则是否按预期解析、卷是否已绑定。可用以下命令检查:

volume snapshot policy show -policy ora_protect
volume snapshot policy show -policy ora_protect -instance
volume show -volume ora_data -fields snapshot-policy

如果 volume snapshot policy show -instance 输出的 schedule 与预期不符,通常是 cron 表达式写错或时区理解偏差。ONTAP 的调度默认使用集群时区,跨时区业务需要特别确认。

策略规划中的常见判断点

第一,保留数量不是越多越好。每个快照都会占用一定元数据和空间,且恢复时需要在列表中定位目标快照,数量过多反而拖慢 RTO。第二,小时级规则不要设置过密(如每 15 分钟)而不评估变更率,否则空间增长会超出预期。第三,策略变更后,已存在的快照不会自动按新规则清理,需要手动删除或等待新规则覆盖。第四,如果卷已启用 SnapMirror 或 SnapVault,快照策略需要与复制策略协同,避免本地保留过短导致复制源被提前删除。

快照策略规划:RPO/RTO → 调度与保留 → 卷绑定 业务输入 RPO = 1 小时 保留时长 = 3 天 RTO = 30 分钟 变更率 ≈ 5%/天 策略 ora_protect hourly · count=48 · ora_hourly daily · count=14 · ora_daily weekly · count=8 · ora_weekly 卷绑定 ora_data snapshot-policy = ora_protect 状态:enabled 验证与判断路径 策略是否启用? show -policy 规则解析正确? show -instance 卷已绑定? volume show -fields OK 若任一步不通过:检查 cron 表达式、集群时区、策略作用范围(SVM/集群)

一个可参考的规划示例

假设某企业有 3 类业务:核心 Oracle 数据库、文件共享卷、测试环境卷。按 RPO/RTO 分级后,可形成如下策略规划:

业务类型RPO保留时长调度规则保留数量命名前缀
核心 Oracle1 小时3 天 + 14 天 + 8 周hourly / daily / weekly48 / 14 / 8ora_hourly 等
文件共享4 小时7 天4h / daily42 / 7fs_4h 等
测试环境24 小时3 天daily3test_daily

这张表本身就是规划交付物:它把业务语言(RPO/RTO)翻译成了 ONTAP 可执行的参数。创建策略时直接按表填入 -schedule、-count、-prefix 即可,避免现场临时拍脑袋。

策略创建后不会立即产生快照,需等待第一个调度周期到达。若需立即验证,可手动执行 volume snapshot create 生成一个测试快照,确认命名和保留逻辑符合预期后再删除。

最后要强调的是,快照策略不是一次性的配置任务。业务 RPO 会随系统重要性变化,变更率会随数据增长而上升,保留数量需要定期复核。建议每季度用 volume snapshot show -fields policy,create-time 抽查实际快照分布,与规划表比对,及时调整策略,让数据保护始终与业务目标对齐。