使用场景
为了节约存储成本,我们通常将很少访问或长期不访问的文件作为归档存储或深度归档存储类别的对象存储在桶中,这些对象无法直接读取,需要先恢复才能下载对象、分享对象、修改对象存储类别、通过对象URL访问对象等。
对象恢复工作原理
以下从对象恢复的流程及恢复有效期叠加规则来介绍对象恢复的工作原理。
归档存储或深度归档存储类别的对象恢复后,会产生一个标准存储类别的对象副本,该对象副本在有效期到期后自动删除。恢复操作不会改变原对象的存储类别。以下介绍对象恢复的工作原理及费用情况:
图1 对象恢复的工作原理及费用情况
- 未恢复:对象无法直接被读取,仅支持查询元数据、删除等非读取操作。
对象处于未恢复状态,涉及的费用包含:对象存储费用。
- 恢复中:对象仍然无法直接被读取,仅支持查询元数据、删除等非读取操作。
- 如果是第一次调用对象恢复接口(RestoreObject),API会返回202,表示服务端已收到请求。
- 在恢复中时,如果再次提交恢复请求,API会返回409,表示操作冲突。
- 对象处于恢复中时,涉及的费用包含:对象存储费用和数据恢复费用(按恢复方式和数据取回量计费)。
- 已恢复:标准存储类别的对象副本创建成功,该对象副本不会在桶中展示。此时,可以直接读取对象(对象副本)。
- 如果已经成功调用过对象恢复接口(RestoreObject),且对象已恢复完成,再次调用时会返回200 OK。
- 恢复有效期内,涉及的费用包含:对象存储费用、对象副本存储费用、请求费用(按恢复成功的对象数计算请求次数,产生请求费用)、公网流出流量费用(使用公网访问对象时存在费用)。
- 恢复有效期到期:对象副本会被自动删除,桶中仅有原对象,对象处于未恢复状态,无法直接被读取,仅支持查询元数据、删除等非读取操作。
对象处于未恢复状态,涉及的费用包含:对象存储费用。
更多关于对象恢复费用介绍,请参见费用说明。
当您在A时间点,发起单次有效期时长为N天的恢复操作,恢复过期时间为A+N。然后您在B时间点(B在A+N之前),再次发起单次有效期时长为M天的恢复操作,那么:
- 如果B+M晚于A+N,那么恢复过期时间变更为B+M,有效期总长为(B-A)+M,如图2所示。
图2 恢复有效期叠加规则
关于对象恢复过期时间,是从发起对象恢复后的第一个北京时间08:00开始计算的。例如:您在2026/4/21 08:00到2026/4/22 08:00之间执行对象恢复操作,恢复有效期设置为1天,则从2026/4/22 08:00开始计算对象过期时间,对象过期时间为2026/4/23 08:00。
- 如果B+M早于A+N,那么第二次发起的恢复操作会报错失败。
恢复速率和有效期
OBS提供加急和标准两种不同的恢复速率,对于不同存储类别的对象,恢复时长也不同,请以实际为准。
恢复有效期是指恢复完成后对象保持可读取状态的天数。在此期间,标准存储类别的对象副本一直存在,对象可以随时被读取。
表1 对象恢复速率和有效期 | 对象的存储类别 | 恢复速率 | 恢复有效期 |
| 归档存储类别 | - 加急:一般在1~5分钟之内恢复对象。
- 标准:一般在3~5小时之内恢复对象。
| 1~30天 |
| 深度归档存储类别 | - 加急:一般在3~5小时之内恢复对象。
- 标准:一般在5~12小时之内恢复对象。
| 1~30天 |
注意事项
- 开启多版本控制功能后,不指定versionId则默认恢复对象的当前版本,您可以通过指定versionId的方式来恢复对象的指定版本。
约束限制
- 归档和深度归档对象恢复的有效期时长上限为30天。
- 归档存储或深度归档存储的对象正在恢复的过程中,不支持修改恢复方式,不允许暂停或删除恢复任务。
- 对象的恢复状态为恢复中时,对象不能再次恢复,接口会报错409,请对象恢复完成后再进行恢复操作。
- 恢复中的对象不能加入批量恢复文件中。
费用说明
表2 对象恢复费用说明 | 操作名称 | 产生费用类别 | 费用说明 | 付费方式 |
| 对象恢复 | 请求费用 | 按恢复成功的对象数计算请求次数,产生请求费用。 恢复成功N个对象,记录N次请求。 低频访问存储无需手动触发恢复,系统会为您自动触发恢复操作,与归档、深度归档存储相同需要收取恢复请求费用。 | 按需计费 |
| 数据恢复费用(流量费用) | - 访问低频存储数据产生的恢复费用,按数据取回量计费。
- 访问归档存储数据产生的恢复费用,按恢复方式(OBS支持加急和标准两种恢复方式)和数据取回量计费。如果文件在恢复有效期内,不会再次产生恢复流量费用。
注意: 取回量取决于HTTP连接建立时请求头中指定的数据范围。即使传输连接提前中断,已发起请求所对应的数据取回容量仍按原请求范围计算,不受影响。例如,若请求范围为50 MB至100 MB,即使实际仅传输了1字节后连接中断,系统仍将按50 MB至100 MB的区间计费。 | 按需计费 |
| 公网流出流量(仅公网访问对象时收取) | 如果恢复后使用公网访问对象,还会按照文件大小计算公网流出流量费用。 | 按需计费 |
| 临时文件存储费用 | 数据恢复后,会产生一个标准存储类型的对象副本,即对象同时存在标准存储类型的对象副本和原有的归档存储或深度归档存储对象。恢复对象时,会一次性收取这份标准存储数据的存储费用。恢复有效期到期后标准存储类型的对象副本会自动删除。 低频访问存储数据恢复和归档存储直读功能不产生对象副本,不会产生标准存储的存储费用。 | 按需计费 |
数据恢复时间和收费详情请参见产品价格详情。
恢复对象
OBS支持通过管理控制台、API、SDK、OBS Browser+、obsutil方式恢复归档存储对象或深度归档存储对象。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 在桶列表中,单击待操作的桶,进入“对象”页面。
- 单击待恢复对象操作列的“恢复”。
也可以选中多个对象,单击对象列表上方的“更多>恢复”恢复多个对象。
图3 恢复对象
- 恢复对象需要设置对象的有效期和恢复速率,参数解释如下表所示:
表3 恢复对象 | 参数 | 说明 |
| 有效期 | 对象恢复后,保持为“已恢复”状态的时长,从对象恢复完成开始计时。有效期时长可设置1-30天的整数。系统默认有效期为30天。 例如:恢复对象时,有效期设置为20天,则从对象恢复成功后开始算起,20天后,该对象则会从“已恢复”状态变成“未恢复”状态。 |
| 速率 | 对象的恢复速度。 - 加急:可在1-5分钟内恢复归档存储数据,3-5小时内恢复深度归档存储数据。
- 标准:可在3-5小时内恢复归档存储数据,5-12小时内恢复深度归档存储数据。
|
- 单击“确定”。
系统每天会在UTC 00:00点检查一次文件恢复情况,过期时间是根据最近一次系统检查时间开始计算的。
使用图形化工具OBS Browser+
- 登录OBS Browser+。
- 单击待恢复文件或文件夹所在的桶,进入对象列表页面。
- 选中待恢复文件或文件夹,单击“更多”->“恢复对象”,如下图4所示。
图4 恢复对象
恢复对象需要设置对象的有效期和恢复速率,参数解释如表4所示:
表4 恢复对象 | 参数 | 说明 |
| 对象名 | 恢复的对象名或路径名。 |
| 有效期 | 对象恢复后,保持为“已恢复”状态的时间。从对象恢复完成开始计时。有效期时间可设置1-30天的整数。系统默认有效期为30天。 例如:恢复对象时,有效期设置为20天,则从对象恢复成功后算起20天后,该对象又会从“已恢复”状态变成“未恢复”状态。 |
| 速率 | 对象的恢复速度。 - 加急:可在1-5分钟内恢复小于250MB的数据。
- 标准:可在3-5小时内恢复所有归档数据。
|
- 单击“确定”,确认恢复归档存储的文件或文件夹。
文件或文件夹恢复状态可单击对象右侧的
图标,在“属性”页面查看“恢复状态”。文件恢复成功后才能对该文件进行下载操作。
使用命令行工具obsutil
命令结构:
- Windows操作系统
- 恢复对象
obsutil restore obs://bucket/key [-d=1] [-t=xxx] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-token=xxx]
- 批量恢复对象
obsutil restore obs://bucket[/key] -r [-f] [-v] [-d=1] [-t=xxx] [-o=xxx] [-j=1] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-token=xxx]
- 批量恢复指定目录下的所有对象
obsutil restore obs://bucket/folder/ -r [-f] [-v] [-d=1] [-t=xxx] [-o=xxx] [-j=1] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-token=xxx]
- macOS/Linux操作系统
- 恢复对象
./obsutil restore obs://bucket/key [-d=1] [-t=xxx] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-token=xxx]
- 批量恢复对象
./obsutil restore obs://bucket[/key] -r [-f] [-v] [-d=1] [-t=xxx] [-o=xxx] [-j=1] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-token=xxx]
运行示例:
- 以Windows操作系统为例,运行obsutil restore obs://bucket-test/key,恢复单个存储类型为cold的对象。
obsutil restore obs://bucket-test/key
Start at 2024-09-30 08:56:17.9537365 +0000 UTC
Start to restore object [key] in the bucket [bucket-test] successfully, cost [252] ms, request id [0000019242250F754015F23EE0B7876E]
- 以Windows操作系统为例,运行obsutil restore obs://bucket-test -r -f,批量恢复桶中所有的存储类型为cold的对象。
obsutil restore obs://bucket-test -r -f
Start at 2024-09-30 08:57:11.3565648 +0000 UTC
[================================================] 100.00% 3s
Succeed count: 12 Failed count: 0
Metrics [max cost:264 ms, min cost:54 ms, average cost:119.33 ms, average tps:19.70]
Task id: 96f104ee-d0bf-40ff-95dd-31dec0d8f4f4
参数说明:
| 参数 | 约束 | 描述 |
| bucket | 必选 | 桶名。 |
| key | 恢复单个存储类型为cold的对象时必选 批量恢复存储类型为cold的对象时可选 | 待恢复的对象名,或批量恢复的对象名前缀。 说明: 批量恢复时,如果该值为空,则表示恢复桶内所有存储类型为cold的对象。 |
| d | 附加参数,可选 | 存储类型为cold的对象恢复后的保存时间,单位:天,取值范围是1~30。默认为1。 |
| t | 附加参数,可选 | 恢复选项。支持的值: 说明: - expedited表示快速恢复对象,归档存储恢复耗时1~5 min,深度归档存储恢复约耗时3~5 h。
- standard表示标准恢复对象,归档存储恢复耗时3~5 h,深度归档存储恢复约耗时5~12 h。
- 不设置该选项时,默认使用expedited模式。
|
| versionId | 附加参数,恢复单个cold存储对象时可选 | 待恢复cold存储对象的版本号。 |
| fs | 附加参数,可选 | 是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。 注意: - 该列举方式会因为目录结构,耗时会差别很大。
- 该参数开启后,会忽略marker和limit值,统计桶或者并行文件系统或者指定目录的大小。
- Util 5.5.12版本及以上支持该参数。
|
| fr | 附加参数,恢复单个cold存储对象时可选 | 恢复单个cold存储对象时生成结果清单文件。 |
| f | 附加参数,批量恢复cold存储对象时可选 | 强制操作,不进行询问提示。 |
| r | 附加参数,批量恢复cold存储对象时必选 | 按指定的对象名前缀批量恢复cold存储对象。 |
| v | 附加参数,批量恢复cold存储对象时可选 | 按指定的对象名前缀批量恢复多版本cold存储对象。 |
| o | 附加参数,可选 | 生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(可能包含成功结果和失败结果两个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。 |
| j | 附加参数,批量恢复cold存储对象时可选 | 批量恢复cold存储对象的最大并发数,默认为配置文件中的defaultJobs。 |
| config | 附加参数,可选 | 运行当前命令时的自定义配置文件。可支持的配置参数请参考配置参数说明。 |
| e | 附加参数,可选 | 指定终端节点。 |
| i | 附加参数,可选 | 指定用户的AK。 |
| k | 附加参数,可选 | 指定用户的SK。 |
| token | 附加参数,可选 | 指定用户的securitytoken。 |
响应结果:
| 字段名 | 描述 |
| Parallel | 请求中的-p参数。 |
| Jobs | 请求中的-j参数。 |
| Threshold | 请求中的-threshold参数。 |
| PartSize | 请求中的-ps参数。 |
| Exclude | 请求中的-exclude参数。 |
| Include | 请求中的-include参数。 |
| TimeRange | 请求中的-timeRange参数。 |
| VerifyLength | 请求中的-vlength参数。 |
| VerifyMd5 | 请求中的-vmd5参数。 |
| CheckpointDir | 请求中的-cpd参数。 |
| OutputDir | 请求中的-o参数。 |
| ArcDir | 请求中的-arcDir参数。 |
| Succeed count | 成功的任务数。 |
| Failed count | 失败的任务数。 |
| Skip count | 增量上传/下载/复制、同步上传/下载/复制跳过的任务数。 |
| Warning count | 执行完成但包含警告的任务数。 说明: - 产生警告的任务可能是失败的也可能是成功的,需要根据成功或失败的结果清单进一步判断。
- 产生警告的任务数与成功/失败任务数是相互独立的,总任务数仍是成功的任务数+失败的任务数。
|
| Succeed bytes | 上传/下载成功的字节数。 |
| max cost | 所有任务中的最长耗时,单位:毫秒。 |
| min cost | 所有任务中的最短耗时,单位:毫秒。 |
| average cost | 平均耗时,单位:毫秒。 |
| average tps | 平均每秒的任务完成个数。 |
| Task id | 每次运行的唯一标识号,用于查找批量任务生成的结果清单文件。 |
查看对象的恢复状态和恢复过期时间
OBS支持使用管理控制台、API、SDK、OBS Browser+方式查看对象的恢复状态和恢复过期时间。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“桶列表”。
- 单击待查看恢复信息的对象名称,进入对象详情页面。在基本信息下即可查看对象的“恢复状态”和“恢复过期时间”。
图5 查看对象恢复信息
使用API
调用获取对象元数据接口,查看接口响应头“x-obs-restore”,即可获取对象恢复状态和恢复过期时间。
使用SDK
调用各语言SDK的获取对象元数据接口,查看对应接口的返回参数“restore”,即可获取对象恢复状态和恢复过期时间。
使用命令行工具obsutil
命令结构:
运行示例:
参数说明:
| 参数 | 约束 | 描述 |
| bucket | 必选 | 对象所属的桶的名称。 |
| key | 必选 | 待查询属性的对象名称。 |
| acl | 可选 | 同时查询对象的访问策略。 |
| bf | 附加参数,可选 | 对象大小字节数的显示格式。支持的值: - human-readable:以易于人理解的方式显示对象存储大小。例如,显示为1GB(千字节,MB,GB,TB等),而不是显示一个很大的数字(如:1073741824)。
- raw:直接显示字节数,不经过任何形式的转换或格式化。例如,如果一个对象占用的空间是1GB,它会直接显示为1073741824字节。
对于普通用户来说,human-readable 更易于理解;而对于需要进行精确计算或自动化处理的场景,raw 格式则更为合适。 如果未设置该参数,则对象大小字节数的显示格式由配置文件中的humanReadableFormat参数决定。 |
| bucket-cname | 附加参数,可选 | 指定桶绑定的自定义域名 |
| config | 附加参数,可选 | 运行当前命令时的自定义配置文件。可支持的配置参数请参考配置参数说明。 |
| e | 附加参数,可选 | 指定终端节点。 |
| i | 附加参数,可选 | 指定用户的AK。 |
| k | 附加参数,可选 | 指定用户的SK。 |
| t | 附加参数,可选 | 指定用户的securitytoken。 |
响应结果:
| 字段名 | 描述 |
| Key | 对象名称。 |
| LastModified | 对象的最后修改时间。 |
| Size | 对象的大小。 单位:字节。 |
| StorageClass | 对象的存储类别。 支持的值: - standard:标准存储,访问时延低、吞吐量高,适用于有大量热点文件(平均一个月多次)或小文件(小于1MB)。
- warm:低频访问存储,可用性略低于standard,适用于不频繁访问(平均一年少于12次)但在需要时也要求快速访问数据的业务场景。
- cold:归档存储,安全、持久且成本极低,适用于很少访问(平均一年访问一次)数据的业务场景。存储类别为cold的对象,必须先恢复该对象再修改其存储类别,否则无法修改成功。
- deep-archive:深度归档存储,适用于长期不访问(平均几年访问一次)数据的业务场景,其成本相比归档存储更低,但相应的数据恢复时间将更长,一般为数小时。
|
| MD5 | 对象真实的MD5值。用来确保数据的完整性和验证数据的完整性。 仅当使用cp命令并且配置了-vmd5选项上传对象后,才能查询到该值。 |
| ETag | 服务端计算的对象ETag值。 |
| ContentType | 对象的文件类型。文件类型决定了浏览器将以什么形式、什么编码读取文件。 常见的ContentType类型,请参见Content-Type介绍。 |
| Type | 文件的类型。 |
| Metadata | 对象的自定义元数据。对象有自定义元数据后,才能查询到该值。 关于对象的自定义元数据,请参见自定义元数据。 |