多版本控制简介
对于存储在OBS桶中的文件被误删除或被删除后想找回,以及对于在线协作类产品,文件会被频繁修改而产生大量的临时版本,如果您想找回某个时间点的版本,可以使用多版本控制功能。多版本控制功能会在一个桶中保留多个版本的对象,使您更方便地检索和还原各个版本,在意外操作或应用程序故障时快速恢复数据。
相关概念介绍
以下介绍多版本控制相关概念及多版本控制的状态。
- 历史版本对象:开启多版本控制后,向桶中上传同名对象,OBS会将桶中原来的同名对象作为对象副本,该对象副本即为历史版本对象。
- 当前版本对象:开启多版本控制后,向桶中上传对象,该新上传的对象即为当前版本对象。
- 版本ID:开启多版本控制后,向桶中上传对象,OBS会为新上传的对象生成一个全局唯一的标识符,该标识符即为版本ID。
- 版本ID为“null”:开启多版本控制后,OBS会标识桶中已上传对象的版本ID为“null”;暂停多版本控制后,向桶中上传对象,OBS会标识该对象的版本ID为“null”。
- 删除标记:开启多版本控制后,删除桶中已有对象,OBS将插入一个删除标记来标识对象的最新版本是删除状态。 图2 删除标记解释
桶的多版本控制状态包含三种:未开启、开启、暂停。
- 默认情况下,OBS中新创建的桶多版本控制状态为“未开启”,向桶中上传同名对象,新上传的对象将覆盖原有的同名对象。
- 当桶的多版本控制状态为“开启”:桶中已有的对象没有对象副本;当向桶中上传同名对象时,OBS会将桶中已有的同名对象作为新上传对象的对象副本。
- 当桶的多版本控制状态为“暂停”:桶中已有的对象是否存在对象副本取决于暂停多版本控制前是否有对象副本;向桶中上传同名对象时,新上传的对象将覆盖桶中原有版本ID为“null”的同名对象。
多版本控制工作原理
以下从开启、暂停多版本控制维度,并结合多种操作来介绍多版本控制的工作原理。
未启用多版本控制时的对象操作

- 上传至桶中的对象无版本ID。
- 上传同名对象时,已有对象会被直接覆盖,且无法恢复。
- 删除对象时,是直接删除,无法再获取到对象。
开启多版本控制时的对象操作
暂停多版本控制时的对象操作
约束与限制
权限控制
只有桶拥有者和被授予了“PutBucketVersioning”权限的用户才能配置多版本控制。授权操作请参见给IAM用户授权或自定义创建桶策略(可视化视图)。
费用说明
多版本控制本身不收取任何费用,但除删除标记外的当前版本和历史版本对象均占用存储空间,因此会收取数据存储费用。为避免产生不必要的存储费用,建议您及时删除对象,可手动删除对象或通过生命周期规则自动删除不需要的对象。
多版本控制与生命周期、WORM、跨区域复制协同工作
当桶开启多版本控制后,支持通过生命周期规则转换当前版本对象/历史版本对象的存储类别和过期删除当前版本对象/历史版本对象,以及配置清理无历史版本的删除标记。详情请参见生命周期规则。
通过WORM为桶内所有对象设置保留期,在保留期内,任何版本对象都无法被删除或修改。多版本控制确保对象在被覆盖或删除时,其旧版本会被作为历史版本保存,方便随时找回。两者协同工作,提供双重保障,保障存储在桶中的数据安全。
开启了桶级WORM开关,系统将自动开启多版本控制,并且不允许暂停多版本控制。
版本对象保护机制:
- WORM对所有版本对象提供保护,在保留期内不允许删除或覆盖任何版本对象。
- 开启WORM后,允许上传同名对象,产生新的版本对象,其同样受WORM保护。
- WORM不作用于删除标记,清理删除标记不受WORM的限制。
多版本控制结合跨区域复制协同工作时,存在如下情况:
| 条件 | 执行的操作 | 复制结果 (使用OBS控制台) | 复制结果 (使用OBS API) | 复制结果 (使用OBS obsutil) |
|---|---|---|---|---|
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)一致 | - | 会复制 | 会复制 | 会复制 |
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)不一致 | - | 不会复制 | 不会复制 | 不会复制 |
| 启用同账号跨区域复制后 | 修改源桶或目标桶的多版本控制状态 | 不会复制 | 不会复制 | 不会复制 |
| 源桶和目标桶多版本控制处于开启或暂停状态,且同账号跨区域复制规则处于开启状态 | 在源桶中不指定版本删除对象 | 同步删除此对象 | ||
| 在源桶中指定版本删除对象 | 同步删除此版本对象 | |||
| 源桶和目标桶多版本控制处于未启用状态,且同账号跨区域复制规则处于开启状态 | 在源桶中删除对象 | 同步删除此对象 | ||
源桶和目标桶的多版本控制状态必须保持一致,即同时开启或关闭多版本控制,否则无法使用同账号跨区域复制。
| 条件 | 执行的操作 | 复制结果 (使用OMS控制台) | 复制结果 (使用OMS API) | 复制结果 (使用OBS obsutil) |
|---|---|---|---|---|
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)一致 | 新上传/修改对象 | 会复制 | 会复制 | 会复制 |
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)不一致 | 新上传/修改对象 | 会复制 | 会复制 | 不会复制 |
| 源桶和目标桶多版本控制处于开启或暂停状态 | 在源桶中不指定版本删除对象 | 目标桶中不会删除此对象。 | ||
| 在源桶中指定版本删除对象 | 目标桶中不会删除此对象。 | |||
| 源桶和目标桶多版本控制处于未启用状态 | 在源桶中删除对象 | 目标桶中不会删除此对象。 | 目标桶中不会删除此对象。 | 同步删除此对象。 |
| 条件 | 执行的操作 | 复制结果 (使用OMS控制台) | 复制结果 (使用OMS API) | 复制结果 (使用OBS API) | 复制结果 (使用OBS SDK) | 复制结果 (使用OBS obsutil) |
|---|---|---|---|---|---|---|
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)一致 | 新上传/修改对象 | 会复制 | 会复制 | 会复制 | 会复制 | 会复制 |
| 源桶和目标桶的多版本控制状态(未启用/开启/暂停)不一致 | 新上传/修改对象 | 会复制 | 会复制 | 不会复制 | 不会复制 | 不会复制 |
| 源桶和目标桶多版本控制处于开启或暂停状态 | 在源桶中不指定版本删除对象 | 目标桶中不会删除此对象。 | 目标桶中不会删除此对象。 | 同步删除此对象 | 同步删除此对象 | 同步删除此对象 |
| 在源桶中指定版本删除对象 | 目标桶中不会删除此对象。 | 目标桶中不会删除此对象。 | 同步删除此版本对象 | 同步删除此版本对象 | 同步删除此版本对象 | |
| 源桶和目标桶多版本控制处于未启用状态 | 在源桶中删除对象 | 目标桶中不会删除此对象。 | 目标桶中不会删除此对象。 | 同步删除此对象 | 同步删除此对象 | 同步删除此对象 |
















