首页/系统与基础设施/存储速查/S3 版本控制与删除标记机制
分布式与对象存储70 条

S3 版本控制与删除标记机制

开启版本控制后同名写入会生成新版本,普通删除只是插入删除标记,历史版本仍可恢复;这也意味着容量会随版本累积,必须配合非当前版本清理规则,并谨慎使用带版本号的永久删除。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

版本与删除标记

开启版本控制后,同名对象的每次写入都保留为独立版本,键本身则指向「当前版本」。删除操作不再真的抹掉数据,而是插入一个删除标记:键的读取会返回对象不存在,历史版本依然完整保留,去掉删除标记就能恢复。这套机制把误删变成可回滚操作,代价是容量与清理逻辑都要按版本口径重新设计。

基本信息

适用平台兼容 S3 的对象存储,需桶级开启
三种状态未启用、已启用、已暂停
删除语义无版本号删除为插入标记,带版本号删除为永久删除
观察方式普通列举与版本列举返回的内容不同

典型使用场景

  • 防误删:生产数据被误覆盖或误删后可回退到旧版本
  • 合规留存:历史版本按法规要求保留一定期限
  • 灰度发布:保留多个版本以便快速回滚到上一版
  • 调试与审计:追溯某个对象在什么时间被谁改成了什么
  • 配合对象锁定:保留策略需要版本作为挂载对象

关键操作

关键操作
aws s3api put-bucket-versioning --bucket demo-bucket \
  --versioning-configuration Status=Enabled          # 开启版本控制
aws s3api list-object-versions --bucket demo-bucket --prefix data.json  # 查看全部历史版本
aws s3api delete-object --bucket demo-bucket --key data.json            # 插入删除标记
aws s3api delete-object --bucket demo-bucket --key data.json --version-id <版本号>  # 永久删除该版本
aws s3api list-objects-v2 --bucket demo-bucket        # 普通列举:带标记的键不再出现

状态与行为

状态写入行为删除行为
未启用同名覆盖,旧内容丢失直接删除,无法恢复
已启用每次覆盖生成新版本插入删除标记,可撤回
已暂停新版本使用空版本号覆盖同一份已有历史版本仍然保留

运维要点

  • 开启后容量会随版本增长,必须配非当前版本的清理规则
  • 删除标记本身也占用一条记录,长期不清理会让列举变长变慢
  • 恢复误删对象是删除删除标记,而不是重新上传
  • 暂停版本控制不会清除历史版本,但会让新写入失去版本保护
  • 区分「带版本号永久删除」与普通删除,前者无法回滚,需要额外防护
普通列举看不到带删除标记的键,排查「对象明明删了还能计费」时要用版本列举确认是否仍有历史版本残留。
带版本号的删除与生命周期中的过期清理都会永久移除数据,务必确认目标版本与保留要求后再执行,事后无法恢复。

易错点

  • 开启版本控制后不清理旧版本,容量与费用随每次写入持续增长
  • 把普通删除当成已彻底清除,合规审计时仍能读出历史内容
  • 用带版本号的删除做日常清理,误删后没有任何回滚余地
  • 暂停版本控制后以为历史版本会消失,容量预期与账单对不上

数据来源与参考

  • Amazon S3 官方文档:使用版本控制保留多个对象版本
  • Amazon S3 官方文档:删除标记与非当前版本管理

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/storage/s3-versioning-delete-marker.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​‌‌‌​‌‌​​‌​‌​​‌​‌‌‌‌​‌‌‌​​‌‌​​‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌‌​​‌‌​​‌​‌​‌‌‌​​‌​​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌​‌​‌‌​​‌​​​‌‌​​‌​‌​‌‌​‌‌​​​‌‌​​‌​‌​‌‌‌​‌​​​‌‌​​‌​‌​​‌​‌‌​‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​​‌​​‌‌​‌​‌‌​‌‌​​‌​‌​‌‌‌​​‌​​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​