版本控制是什么
对象存储的版本控制开启后,同一个对象名下的每次覆盖与删除都会留下历史记录:覆盖会生成新版本,删除只是在一个版本之上打删除标记,对象本身并没有消失。因此误删或误覆盖都能一键恢复。代价是所有版本都占用容量并计费,长期不清理会让存储账单持续膨胀,所以通常要配合生命周期规则把非当前版本转低频或过期删除。
基本信息
| 状态 | 未开启 / 已开启 / 暂停(暂停后新写入不再产生新版本,历史版本保留) |
|---|---|
| 核心机制 | 同名对象保留多个版本;删除生成删除标记 delete marker |
| 数据恢复 | 删除删除标记即可让对象重新可见,或直接指定历史版本下载 |
| 成本影响 | 所有版本都计费,非当前版本同样占容量 |
| 可逆性 | 开启后一般只能暂停、不能关闭,启用前先评估 |
典型使用场景
- 配置与脚本被覆盖后回滚:取回上一版配置,避免手工重写
- 不可再生资料保护:财务影像、合同扫描件被误删时可恢复
- 发布制品留档:每个版本的构建产物保留历史,便于回退到上一发布
- 程序缺陷兜底:批量任务写错前缀覆盖对象后,可以按版本找回原始数据
- 合规留存:审计要求保留对象的历史版本与删除记录
误删恢复思路(控制台 / SDK)
误删恢复思路(控制台 / SDK)
1. 列出对象版本(含删除标记),确认删除标记的时间点
2. 找到删除标记之前的那个版本
3. 删除删除标记,对象即可恢复为可见的当前版本
4. 或把旧版本复制为新对象,保留原删除标记供审计
# 注意:暂停版本控制后新写入不再产生新版本,但历史版本仍然保留并计费操作与结果对照
| 操作 | 未开启版本控制 | 已开启版本控制 |
|---|---|---|
| 覆盖同名对象 | 旧内容立即丢失 | 保留旧版本,新版本成为当前版本 |
| 删除对象 | 对象直接删除 | 生成删除标记,历史版本仍在 |
| 恢复误删 | 无法恢复 | 删除删除标记或复制旧版本 |
| 存储计费 | 只算当前对象 | 所有版本容量累计 |
版本控制不是备份:桶被整体删除、生命周期规则配置错误或账号级误操作时同样会失效,关键数据仍需跨桶、跨地域复制。
生命周期规则可以只作用于非当前版本,例如 30 天转低频、180 天过期删除;先在测试桶验证规则命中范围,避免把仍在使用的对象一起清理。