
# 多版本控制简介
对于存储在OBS桶中的文件被误删除或被删除后想找回，以及对于在线协作类产品，文件会被频繁修改而产生大量的临时版本，如果您想找回某个时间点的版本，可以使用多版本控制功能。多版本控制功能会在一个桶中保留多个版本的对象，使您更方便地检索和还原各个版本，在意外操作或应用程序故障时快速恢复数据。
#### 相关概念介绍
以下介绍多版本控制相关概念及多版本控制的状态。
- [概念介绍]
- [多版本控制状态介绍]
图1多版本控制相关概念解释   
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581721478.png "点击放大")
- **历史版本对象：** 开启多版本控制后，向桶中上传同名对象，**OBS**会将桶中原来的同名对象作为对象副本，该对象副本即为历史版本对象。
- **当前版本对象：** 开启多版本控制后，向桶中上传对象，该新上传的对象即为当前版本对象。
  ![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/note_3.0-zh-cn.png)
  对象列表上方的"历史版本"开关用来控制您是否可以看到历史版本对象和删除标记（如果有，就展示）：
  - 开关打开，对象列表将展示当前版本对象（或删除标记）和历史版本对象。
  
  - 开关关闭，对象列表仅展示当前版本对象（不包含删除标记）。
    
- **版本ID：** 开启多版本控制后，向桶中上传对象，**OBS**会为新上传的对象生成一个全局唯一的标识符，该标识符即为版本ID。
- **版本ID为"null"：** 开启多版本控制后，**OBS** 会标识桶中已上传对象的版本ID为"null"；暂停多版本控制后，向桶中上传对象，**OBS**会标识该对象的版本ID为"null"。
- **删除标记：** 开启多版本控制后，删除桶中已有对象，**OBS** 将插入一个删除标记来标识对象的最新版本是删除状态。
  删除标记不会占用存储空间，因此不会产生存储费用。
  图2删除标记解释   
  ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581561564.png "点击放大") 
 
桶的多版本控制状态包含三种：未开启、开启、暂停。
- **默认情况下，OBS中新创建的桶多版本控制状态为"未开启"，**向桶中上传同名对象，新上传的对象将覆盖原有的同名对象。
- **当桶的多版本控制状态为"开启"：**桶中已有的对象没有对象副本；当向桶中上传同名对象时，OBS会将桶中已有的同名对象作为新上传对象的对象副本。
- **当桶的多版本控制状态为"暂停"：**桶中已有的对象是否存在对象副本取决于暂停多版本控制前是否有对象副本；向桶中上传同名对象时，新上传的对象将覆盖桶中原有版本ID为"null"的同名对象。
 
#### 多版本控制工作原理
以下从未开启、开启、暂停多版本控制维度，并结合多种操作来介绍多版本控制的工作原理。
#### 未开启多版本控制时的对象操作
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581721480.png "点击放大")
- 上传至桶中的对象无版本ID。
- 上传同名对象时，已有对象会被直接覆盖，且无法恢复。
- 删除对象时，是直接删除，无法再获取到对象。
 
#### 开启多版本控制时的对象操作
#### 启用多版本控制
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002640109152.png "点击放大")
- 如果是首次开启多版本控制，则在开启前上传的对象内容不变，版本ID为"null"。 ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002670110853.png "点击放大")
  
- 如果之前开启多版本控制后又暂停，此次重新启用多版本控制，则桶中已有对象的内容和版本ID均不变。 ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002640270434.png "点击放大")
  
 
#### 启用多版本控制后上传同名对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612001425.png "点击放大")
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612081325.png "点击放大")
OBS会自动为每一次上传的对象创建一个唯一的版本ID。最后一次保存的版本ID为当前版本，最后一次之前保存的版本ID均为历史版本。
上传对象操作，请参见[上传概述](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829661.html#ZH-CN_TOPIC_0000002431041564)。
#### 启用多版本控制后删除对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581721484.png "点击放大")
- **未指定版本ID删除对象**
  **删除的动作（控制台）：**启用多版本控制，且对象列表页的"历史版本"开关未打开，单击对象操作列的"删除"，或选中多个对象并单击对象列表上方的"删除"。
  **删除的结果：**删除对象时未指定版本ID，OBS将插入一个删除标记来标识对象的当前版本是删除状态，之前的当前版本对象变为历史版本对象。打开"历史版本"开关即可看到。
  ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002670268979.png "点击放大")
  **带删除标记的版本不占用存储空间，因此不收取任何费用；其他每个版本的对象占用存储空间，因此均需计费。**
  
- **指定版本ID删除对象** **（彻底删除）**
  **删除的动作（控制台）：**启用多版本控制，且打开对象列表页的"历史版本"开关，单击对应版本对象操作列的"更多\>彻底删除"，或选中多个版本对象并单击对象列表上方的"彻底删除"。
  **删除的结果：**删除对象时指定版本ID，将彻底删除对应版本对象。
  ![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002670105249.png "点击放大")
  
删除对象操作，请参见[删除OBS桶中的对象](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829108.html#ZH-CN_TOPIC_0000001919908844)。也可以通过配置生命周期规则"过期删除"来自动删除当前版本和历史版本对象，具体请参见[配置生命周期规则](https://support.huaweicloud.com/usermanual-obs/obs_41_0074.html#ZH-CN_TOPIC_0000001945139386)。
#### 启用多版本控制后删除带删除标记的对象（找回对象）
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612081327.png "点击放大")
**删除的动作（控制台）：**启用多版本控制，且打开对象列表页的"历史版本"开关，单击带删除标记操作列的"彻底删除"，或选中多个带删除标记的对象并单击对象列表上方的"彻底删除"。
**删除的结果：**即找回对象，最近的一个历史版本对象变为当前版本对象。
找回对象操作，请参见[找回已删除对象](https://support.huaweicloud.com/usermanual-obs/obs_03_082103.html#ZH-CN_TOPIC_0000002612096947)。
#### 启用多版本控制后下载对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612001429.png "点击放大")
- **未指定版本ID下载对象**
  **下载的动作（控制台）：**启用多版本控制，且对象列表页的"历史版本"开关未打开，单击对象操作列的"下载"，或选中多个对象并单击对象列表上方的"更多\>下载"。
  **下载的结果：**下载的是当前版本对象。
  **如果当前版本为删除标记，那么控制台不支持下载，而使用API或SDK等方式下载时，会返回404。**
  
- **指定版本ID下载对象**
  **下载的动作（控制台）：**启用多版本控制，且打开对象列表页的"历史版本"开关，单击对应版本对象操作列的"下载"。
  **下载的结果：**下载的是对应版本对象。
  
下载对象操作，请参见[下载对象](https://support.huaweicloud.com/usermanual-obs/obs_03_0317.html#ZH-CN_TOPIC_0000001858344806)。
#### 启用多版本控制后查询对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612081329.png "点击放大")
- **未指定版本ID查询对象**
  **查询的动作（控制台）：**启用多版本控制，且对象列表页的"历史版本"开关未打开。
  **查询的结果：**查询的是当前版本对象。
  **如果当前版本为删除标记，那么控制台查询不到任何对象，而使用API或SDK等方式可以查到所有版本对象（包含删除标记）。**
  
- **指定版本ID查询对象**
  **查询的动作：**使用API或SDK等方式指定版本ID查询对象。
  **查询的结果：**查询的是指定版本ID的对象。
  **控制台不支持查询指定版本ID的对象，只能列举所有版本对象（包含删除标记）。查询方法为：启用多版本控制，且打开对象列表页的"历史版本"开关。**
  
查询对象操作，请参见[列举对象](https://support.huaweicloud.com/usermanual-obs/obs_03_0723.html#ZH-CN_TOPIC_0000001904425297)。
#### 暂停多版本控制时的对象操作
#### 暂停多版本控制
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612001431.png "点击放大")
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612081331.png "点击放大")
暂停多版本控制前上传的对象的版本ID不会变。
#### 暂停多版本控制后上传同名对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581721490.png "点击放大")
OBS会为此对象生成一个版本ID为"null"的新版本。
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002670109113.png "点击放大")
- **桶中之前没有"null"版本ID**
  如果桶中之前没有"null"版本ID的同名对象，则新上传的版本ID为"null"的对象即为当前版本对象，之前的当前版本对象变为历史版本对象，其他历史版本对象不受影响。
  
- **桶中之前有"null"版本ID**
  如果桶中之前有"null"版本ID的同名对象，则新上传的版本ID为"null"的对象将会覆盖已有"null"对象，成为当前版本对象，之前的当前版本对象成为历史版本对象，其他历史版本对象不受影响。
  
 
#### 暂停多版本控制后删除对象
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002612081333.png "点击放大")
OBS将插入一个版本ID为"null"的删除标记来标识对象的当前版本是删除状态，之前的当前版本对象变为历史版本对象，其他历史版本对象不受影响。
**带删除标记的版本不占用存储空间，因此不收取任何费用；其他每个版本的对象占用存储空间，因此均需计费。**
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002640109154.png "点击放大")
- **未指定版本ID删除对象**
  **删除的动作（控制台）：**暂停多版本控制，且对象列表页的"历史版本"开关未打开，单击对象操作列的"删除"，或选中多个对象并单击对象列表上方的"删除"。
  **删除的结果：**
  - 如果桶中之前没有版本ID为"null"的对象，则新生成的版本ID为"null"的删除标记即为当前版本对象，之前的当前版本对象变为历史版本对象，其他历史版本对象不受影响。
  
  - 如果桶中之前有版本ID为"null"的对象，则新生成的版本ID为"null"的删除标记将覆盖已有的"null"版本对象，之前的当前版本对象变为历史版本对象，其他历史版本对象不受影响。
   
- **指定版本ID删除对象** **（彻底删除）**
  **删除的动作（控制台）：**暂停多版本控制，且打开对象列表页的"历史版本"开关，单击对应版本对象操作列的"更多\>彻底删除"，或选中多个版本对象并单击对象列表上方的"彻底删除"。
  **删除的结果：**删除对象时指定版本ID，将彻底删除对应版本对象。
  
 
#### 暂停多版本控制后删除带删除标记的对象（找回对象）
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002581561578.png "点击放大")
**删除的动作（控制台）：**暂停多版本控制，且打开对象列表页的"历史版本"开关，单击带删除标记操作列的"彻底删除"。
**删除的结果：**找回对象，最近的一个历史版本对象变为当前版本对象。
![](https://support.huaweicloud.com/usermanual-obs/figure/zh-cn_image_0000002640269094.png "点击放大")
#### 约束与限制
- 多版本控制一旦启动，不可关闭，只能暂停使用。
- 开启了桶级[WORM](https://support.huaweicloud.com/usermanual-obs/obs_03_0718.html)开关，需要先开启多版本控制。使用控制台配置WORM时，控制台会自动开启多版本，并且不允许暂停多版本。使用API配置WORM时，需要您自行调用[设置桶的多版本状态](https://support.huaweicloud.com/api-obs/obs_04_0037.html)接口开启多版本。
- 不支持对历史版本对象配置ACL、服务端加密和标签。
 
#### 权限控制
只有桶拥有者和被授予了"PutBucketVersioning"权限的用户才能配置多版本控制。授权操作请参见[给IAM用户授权](https://support.huaweicloud.com/usermanual-iam/iam_01_0652.html)或[自定义创建桶策略（可视化视图）](https://support.huaweicloud.com/usermanual-obs/obs_03_0123.html#ZH-CN_TOPIC_0000001904425337)。
#### 费用说明
多版本控制功能免费，但当前版本对象（删除标记除外）和历史版本对象均占用存储空间，因此会收取[数据存储费用](https://support.huaweicloud.com/price-obs/obs_42_0003.html)。为避免产生不必要的存储费用，建议您及时删除对象，可[手动删除对象](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829108.html#ZH-CN_TOPIC_0000001919908844)或[通过生命周期规则自动删除不需要的对象](https://support.huaweicloud.com/usermanual-obs/obs_41_0074.html#ZH-CN_TOPIC_0000001945139386)。
#### 多版本控制与生命周期、WORM、跨区域复制协同工作
- [结合生命周期]
- [结合WORM]
- [结合跨区域复制]
当桶开启多版本控制后，支持通过生命周期规则转换当前版本对象/历史版本对象的存储类别和过期删除当前版本对象/历史版本对象，以及配置清理无历史版本的删除标记。详情请参见[生命周期规则](https://support.huaweicloud.com/usermanual-obs/obs_03_0335.html#ZH-CN_TOPIC_0000001944980098)。
通过[WORM](https://support.huaweicloud.com/usermanual-obs/obs_03_0718.html#ZH-CN_TOPIC_0000001927109464)为桶内所有对象设置保留期，在保留期内，任何版本对象都无法被删除或修改。多版本控制确保对象在被覆盖或删除时，其旧版本会被作为历史版本保存，方便随时找回。两者协同工作，提供双重保障，保障存储在桶中的数据安全。
开启了桶级WORM开关，系统将自动开启多版本控制，并且不允许暂停多版本控制。
版本对象保护机制：
- WORM对所有版本对象提供保护，在保留期内不允许删除或覆盖任何版本对象。
- 开启WORM后，允许上传同名对象，产生新的版本对象，其同样受WORM保护。
- WORM不作用于删除标记，清理删除标记不受WORM的限制。
 
多版本控制结合[跨区域复制](https://support.huaweicloud.com/usermanual-obs/obs_03_0003.html#ZH-CN_TOPIC_0000002288445746)协同工作时，存在如下情况：
表1**同账号跨区域复制** 结合多版本控制 
| 条件                                     | 执行的操作            | 复制结果 （使用OBS控制台） | 复制结果 （使用OBS API） | 复制结果 （使用OBS obsutil） |
|:---|:---|:---|:---|:---|
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）一致            | -                | 会复制                                                                                                                       | 会复制                                                                                                                     | 会复制                                                                                                                            |
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）不一致           | -                | 不会复制                                                                                                                      | 不会复制                                                                                                                    | 不会复制                                                                                                                           |
| 启用同账号跨区域复制后                            | 修改源桶或目标桶的多版本控制状态 | 不会复制                                                                                                                      | 不会复制                                                                                                                    | 不会复制                                                                                                                           |
| 源桶和目标桶多版本控制处于开启或暂停状态，且同账号跨区域复制规则处于开启状态 | 在源桶中不指定版本删除对象    | 同步删除此对象                                                                                                                                                                                                                                                                                                                                                                            |||
| 源桶和目标桶多版本控制处于开启或暂停状态，且同账号跨区域复制规则处于开启状态 | 在源桶中指定版本删除对象     | 同步删除此版本对象                                                                                                                                                                                                                                                                                                                                                                          |||
| 源桶和目标桶多版本控制处于未启用状态，且同账号跨区域复制规则处于开启状态   | 在源桶中删除对象         | 同步删除此对象                                                                                                                                                                                                                                                                                                                                                                            |||
   
![](https://support.huaweicloud.com/usermanual-obs/public_sys-resources/caution_3.0-zh-cn.png)
源桶和目标桶的多版本控制状态必须保持一致，即同时开启或关闭多版本控制，否则无法使用同账号跨区域复制。
表2**跨账号跨区域复制** 结合多版本控制 
| 条件                           | 执行的操作         | 复制结果 （使用OMS控制台） | 复制结果 （使用OMS API） | 复制结果 （使用OBS obsutil） |
|:---|:---|:---|:---|:---|
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）一致  | 新上传/修改对象      | 会复制                                                                                                                     | 会复制                                                                                                                       | 会复制                                                                                                                           |
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）不一致 | 新上传/修改对象      | 会复制                                                                                                                     | 会复制                                                                                                                       | 不会复制                                                                                                                          |
| 源桶和目标桶多版本控制处于开启或暂停状态         | 在源桶中不指定版本删除对象 | 目标桶中不会删除此对象。                                                                                                                                                                                                                                                                                                                                                                      |||
| 源桶和目标桶多版本控制处于开启或暂停状态         | 在源桶中指定版本删除对象  | 目标桶中不会删除此对象。                                                                                                                                                                                                                                                                                                                                                                      |||
| 源桶和目标桶多版本控制处于未启用状态           | 在源桶中删除对象      | 目标桶中不会删除此对象。                                                                                                            | 目标桶中不会删除此对象。                                                                                                              | 同步删除此对象。                                                                                                                      |
   
表3**同区域复制** （同账号或跨账号）结合多版本控制 
| 条件                           | 执行的操作         | 复制结果 （使用OMS控制台） | 复制结果 （使用OMS API） | 复制结果 （使用OBS API） | 复制结果 （使用OBS SDK） | 复制结果 （使用OBS obsutil） |
|:---|:---|:---|:---|:---|:---|:---|
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）一致  | 新上传/修改对象      | 会复制                                                                                                                       | 会复制                                                                                                                       | 会复制                                                                                                                      | 会复制                                                                                                                      | 会复制                                                                                                                           |
| 源桶和目标桶的多版本控制状态（未启用/开启/暂停）不一致 | 新上传/修改对象      | 会复制                                                                                                                       | 会复制                                                                                                                       | 不会复制                                                                                                                     | 不会复制                                                                                                                     | 不会复制                                                                                                                          |
| 源桶和目标桶多版本控制处于开启或暂停状态         | 在源桶中不指定版本删除对象 | 目标桶中不会删除此对象。                                                                                                              | 目标桶中不会删除此对象。                                                                                                              | 同步删除此对象                                                                                                                  | 同步删除此对象                                                                                                                  | 同步删除此对象                                                                                                                       |
| 源桶和目标桶多版本控制处于开启或暂停状态         | 在源桶中指定版本删除对象  | 目标桶中不会删除此对象。                                                                                                              | 目标桶中不会删除此对象。                                                                                                              | 同步删除此版本对象                                                                                                                | 同步删除此版本对象                                                                                                                | 同步删除此版本对象                                                                                                                     |
| 源桶和目标桶多版本控制处于未启用状态           | 在源桶中删除对象      | 目标桶中不会删除此对象。                                                                                                              | 目标桶中不会删除此对象。                                                                                                              | 同步删除此对象                                                                                                                  | 同步删除此对象                                                                                                                  | 同步删除此对象                                                                                                                       |
   
#### 相关文档
[我可以恢复已删除的对象吗？](https://support.huaweicloud.com/obs_faq/obs_faq_0045.html)
