操作场景
本章节指导用户如何修改桶和对象的存储类别。
约束与限制
- 桶存储类别仅支持手动修改。对象存储类别支持手动修改和使用生命周期自动转换。
- 转换存储类别时数据冗余策略保持不变。如果桶或对象是多AZ,那就只能转换成支持多AZ的存储类型(标准存储、低频存储支持多AZ)。例如,对象A是多AZ标准存储,那么对象A可以转为低频存储,但不能转换为归档存储,因为归档存储不支持多AZ。
手动转换桶存储类别
对于桶存储类别,OBS支持任意两个存储类别之间的手动转换。桶存储类别不支持使用生命周期完成自动转换。
OBS支持使用控制台、API、OBS SDK和obsutil共4种方式修改桶存储类别。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“对象存储”。
- 在桶列表中,选择待修改存储类别的桶,并单击右侧操作栏的“修改存储类别”。
- 选择存储类别,单击“确定”。
图1 手动修改桶存储类别
使用命令行工具obsutil
命名结构
运行示例
参数说明
参数 |
约束 |
描述 |
bucket |
必选 |
桶名。 |
acl |
可选 |
同时查询桶的访问策略。 |
bf |
附加参数,可选 |
桶的存储用量字节数的显示格式。支持的值:
说明:
如果未设置该参数,则桶的存储用量字节数的显示格式由配置文件中的humanReadableFormat参数决定。
|
config |
附加参数,可选 |
运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。 |
e |
附加参数,可选 |
指定终端节点。 |
i |
附加参数,可选 |
指定用户的AK。 |
k |
附加参数,可选 |
指定用户的SK。 |
t |
附加参数,可选 |
指定用户的securitytoken。 |
手动转换对象存储类别
对于对象存储类别,OBS支持任意两个存储类别之间的手动转换,但转换归档存储、深度归档存储对象的存储类别时,需要先手动恢复,然后再转换。除手动转换外,OBS还支持通过生命周期自动转换对象存储类别。
OBS支持使用控制台、API、OBS SDK、OBS Browser+和obsutil共5种方式修改对象的存储类别。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“对象存储”。
- 在桶列表单击待操作的桶,进入“对象”页面。
- 如果需要修改的对象存储类别为归档或深度归档存储,请先执行恢复操作,详细操作步骤参见恢复归档和深度归档存储对象。
- 修改对象存储类别支持单个修改和批量修改。
- 单个修改:在对象列表中,选择待修改存储类别的对象,并单击右侧操作栏的“更多>修改存储类别”如图2所示。
图2 单个修改对象存储类别
- 批量修改:在对象列表中,勾选待修改存储类别的对象,并单击上方的“更多>修改存储类别”按钮,如图3所示。
批量修改对象存储类别当前部分区域支持,请以管理控制台实际情况为准。
图3 批量修改对象存储类别
- 选择存储类别,单击“确定”,如图4所示。
图4 选择对象存储类别
使用API
OBS有2个API接口支持手动转换对象存储类别的方式:
如果要修改对象的原有存储类别是归档存储或者深度归档存储,那么都需要先调用恢复归档和深度归档存储对象接口完成恢复后,才能转换对象的存储类别。
- 修改对象元数据(添加x-obs-storage-class头域设置)
- 复制对象(添加x-obs-storage-class头域设置),在桶的多版本控制开启时,OBS将会为新复制生成的对象自动生成唯一的版本ID。在未开启或暂停多版本控制的桶中,新复制生成的对象会覆盖原有对象。
使用SDK
如果要修改对象的原有存储类别是归档存储或者深度归档存储,那么都需要先调用恢复对象接口完成恢复后,才能转换对象的存储类别。
使用图形化工具OBS Browser+
- 登录OBS Browser+。
- 选中待修改对象所在的桶,进入对象页面。
- 如果需要修改的对象存储类别为归档或深度归档存储,请右键单击选中待修改的对象,单击“恢复对象”,恢复完成后继续执行4。
- 右键单击选中待修改的对象,单击“修改存储类别”。
- 选择目标存储类别,然后单击“确认”。
使用命令行工具obsutil
obsutil支持通过修对象属性的方式修改对象存储类别。
如果要对象的存储类别是归档存储或者深度归档存储,那么需要恢复对象后,才能转换对象的存储类别。恢复对象的命令请参见恢复对象。
- Windows操作系统
- 设置单个对象属性
obsutil chattri obs://bucket/key [-meta=aaa:bbb#ccc:ddd] [-sc=xxx] [-acl=xxx] [-aclXml=xxx] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量设置对象属性
obsutil chattri obs://bucket[/key] -r [-f] [-v] [-meta=aaa:bbb#ccc:ddd] [-sc=xxx] [-acl=xxx] [-aclXml=xxx] [-o=xxx] [-j=1] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- macOS/Linux操作系统
- 设置单个对象属性
./obsutil chattri obs://bucket/key [-meta=aaa:bbb#ccc:ddd] [-sc=xxx] [-acl=xxx] [-aclXml=xxx] [-versionId=xxx] [-fr] [-o=xxx] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
- 批量设置对象属性
./obsutil chattri obs://bucket[/key] -r [-f] [-v] [-meta=aaa:bbb#ccc:ddd] [-sc=xxx] [-acl=xxx] [-aclXml=xxx] [-o=xxx] [-j=1] [-config=xxx] [-e=xxx] [-i=xxx] [-k=xxx] [-t=xxx]
运行示例
- 以Windows操作系统为例,运行obsutil chattri obs://bucket-test -r -f -acl=public-read,批量设置桶内所有对象的访问策略为公共读。
obsutil chattri obs://bucket-test -r -f -acl=public-read
Start at 2024-09-30 08:18:03.105373 +0000 UTC
[------------------------------------------------] 100.00% tps:155.15 5/5 233ms
Succeed count: 5 Failed count: 0
Metrics [max cost:177 ms, min cost:53 ms, average cost:102.40 ms, average tps:20.41]
Task id: 9d7f73ff-f747-4fdd-9b2a-815ba2dc3b07
参数说明
参数 |
约束 |
描述 |
bucket |
必选 |
桶名。 |
key |
设置单个对象属性时必选
批量设置对象属性时可选 |
待设置属性的对象名,或批量设置对象属性时的对象名前缀。
说明:
批量设置对象属性时,如果该值为空,则表示设置桶内所有对象的属性。
|
meta |
附加参数,可选 |
复制对象时可指定的目标对象的标准和自定义元数据。格式为:key1:value1#key2:value2#key3:value3。
说明:
- 该参数需要与direct搭配使用才会生效。
- 以上值表示复制对象完成后,桶内目标对象包含三组自定义元数据,分别为:key1:value1、key2:value2、key3:value3。
- 标准元数据头包括:Content-Type、Content-Encoding、Cache-Control、Content-Disposition、Content-Language、Expires。
|
direct |
附加参数,可选 |
元数据操作指示符。
取值为REPLACE_NEW或REPLACE。
REPLACE_NEW表示:对于已经存在值的元数据进行替换,不存在值的元数据进行赋值,未指定的元数据保持不变。
REPLACE表示:使用当前请求中携带的头域完整替换,未指定的元数据会被删除。
|
sc |
附加参数,可选 |
对象的存储类型。支持的值:
- standard:标准存储,访问时延低、吞吐量高,适用于有大量热点文件(平均一个月多次)或小文件(小于1MB)。
- warm:低频访问存储,,可用性略低于standard,适用于不频繁访问(平均一年少于12次)但在需要时也要求快速访问数据的业务场景。
- cold:归档存储,,安全、持久且成本极低,适用于很少访问(平均一年访问一次)数据的业务场景。
- deep-archive:深度归档存储(受限公测),适用于长期不访问(平均几年访问一次)数据的业务场景,其成本相比归档存储更低,但相应的数据恢复时间将更长,一般为数小时。
说明:
存储类型为cold的对象,必须首先恢复该对象再设置其存储类型,否则无法设置成功。
|
acl |
附加参数,可选 |
对象的预定义访问策略。支持的值:
- private
- public-read
- public-read-write
- bucket-owner-full-control
说明:
以上四个值分别对应:私有读写、公共读、公共读写、桶拥有者完全控制,四种预定义访问策略。
|
aclXml |
附加参数,可选 |
桶的访问策略(xml格式表示)。
<AccessControlPolicy>
<Owner>
<ID>ownerid</ID>
</Owner>
<AccessControlList>
<Grant>
<Grantee>
<ID>userid</ID>
</Grantee>
<Permission>[WRITE|WRITE_ACP|READ|READ_ACP|FULL_CONTROL]</Permission>
</Grant>
<Grant>
<Grantee>
<Canned>Everyone</Canned>
</Grantee>
<Permission>[WRITE|WRITE_ACP|READ|READ_ACP|FULL_CONTROL]</Permission>
</Grant>
</AccessControlList>
</AccessControlPolicy>
说明:
- Owner节点为可选,指定对象拥有者ID。
- AccessControlList节点下的Grant子节点包含被授权的用户列表,Grantee子节点指定被授权用户的ID,Canned子节点指定被授权的用户组(当前仅支持Everyone)。
- 可支持被授予的权限有:WRITE(写权限)、WRITE_ACP(写ACL权限)、READ(读权限)、READ_ACP(读ACL权限)和FULL_CONTROL(完全控制权限)。
须知:
由于该参数值必定含有<和>,作为命令运行时,必须使用引号转义(macOS/Linux操作系统使用单引号,Windows操作系统使用双引号)。
|
fs |
附加参数,可选 |
是否使用并行文件系统的列举方式,如果桶是并行文件系统,推荐加上该参数。
注意:
- 该列举方式会因为目录结构,耗时会差别很大。
- 该参数开启后,会忽略marker和limit值,统计桶或者并行文件系统或者指定目录的大小。
- Util 5.5.12版本及以上支持该参数。
|
versionId |
附加参数,设置单个对象属性时可选 |
待设置属性对象的版本号。 |
fr |
附加参数,设置单个对象属性时可选 |
设置单个对象属性时生成结果清单文件。 |
f |
附加参数,批量设置对象属性时可选 |
强制操作,不进行询问提示。 |
r |
附加参数,批量设置对象属性时必选 |
按指定的对象名前缀批量设置对象属性。 |
v |
附加参数,批量设置对象属性时可选 |
按指定的对象名前缀批量设置多版本对象属性。 |
o |
附加参数,可选 |
生成结果清单文件的文件夹,命令执行完成后,会在该文件夹下生成结果清单文件(包含成功结果和失败结果两个文件),默认为运行obsutil命令的用户目录的子文件夹.obsutil_output。
|
j |
附加参数,批量设置对象属性时可选 |
批量设置对象属性的最大并发数,默认为配置文件中的defaultJobs。
|
config |
附加参数,可选 |
运行当前命令时的自定义配置文件,可支持的配置参数请参考配置参数说明。。 |
e |
附加参数,可选 |
指定终端节点。 |
i |
附加参数,可选 |
指定用户的AK。 |
k |
附加参数,可选 |
指定用户的SK。 |
t |
附加参数,可选 |
指定用户的securitytoken。 |
通过生命周期自动转换对象存储类别
OBS支持通过生命周期功能实现存储类别自动转换,以降低存储成本。归档和深度归档存储不支持多AZ,因此不支持使用生命周期将多AZ对象的存储类别转化为归档或深度归档存储。更多生命周期相关内容请参见使用生命周期转换对象存储类别。
注意,桶未开启多版本控制时,生命周期转换的计时起点是对象的上传时间点。桶开启多版本控制时,最新版本的的计时起点是新版本对象的上传时间点,历史版本的计时起点是成为历史版本的时间点。
图5 使用生命周期转换对象存储类别
如图所示,OBS支持通过生命周期实现以下场景的存储类别自动转换:
- 标准存储->低频访问存储、归档存储、深度归档存储
- 低频访问存储->归档存储、深度归档存储
- 归档存储->深度归档存储
- 如果对象是低频、归档或深度归档存储对象,那么转换过程中可能会涉及不满最低存储时间而产生的存储费用。
OBS支持使用控制台、API、OBS SDK、OBS Browser+共4种方式在创建桶时设置桶的存储类别。
使用OBS控制台
- 在OBS管理控制台左侧导航栏选择“对象存储”。
- 在OBS管理控制台桶列表中,单击待操作的桶,进入“对象”页面。
- 在左侧导航栏,单击“概览”,进入“概览”页面。
- 在“基础配置”区域下,单击“生命周期规则”卡片,系统跳转至“生命周期规则”界面。
或您可以直接在左侧导航栏单击“基础配置>生命周期规则”,进入“生命周期规则”界面。
- 单击“创建”,系统弹出如图6所示对话框。
图6 创建生命周期规则
- 配置生命周期管理规则。
基本信息:
- “状态”:选中“启用”,启用本条生命周期规则。
- “规则名称”:用于识别不同的生命周期配置,其长度需不超过255字符。
- “前缀”:可选。
- 填写前缀:满足该前缀的对象将受生命周期规则管理,输入的对象前缀不能包括\:*?"<>|特殊字符,不能以/开头,不能两个/相邻。
- 未填写前缀:桶内所有对象都将受生命周期规则管理。
- 当按前缀配置时,如果指定的前缀名与某条已配置的生命周期规则指定的前缀名存在包含关系,OBS会将两条规则视为同一条,而禁止您配置本条规则。例如,系统中已存在指定前缀名为“abc”的规则,则不允许再配置指定前缀以“abc”字段开头的规则。
- 如果已存在按前缀配置的生命周期规则,则不允许再新增配置到整个桶的规则。
当前版本或历史版本:
- “当前版本”与“历史版本”是针对“多版本控制”而言的。如果开启了“多版本控制”功能,同名的对象上传到同一路径下时,则会产生不同的版本号。最新版本的对象称之为“当前版本”,历史时间上传的对象称之为“历史版本”。当前版本和历史版本的详细介绍请参见多版本控制。
- “当前版本”与“历史版本”至少配置一个,也可以两个版本同时配置。
- 转换为低频访问存储天数:指定在对象最后一次更新后多少天,受规则影响的对象将转换为低频访问存储。至少设置为30天。
- 转换为归档存储天数:指定在对象最后一次更新后多少天,受规则影响的对象将转换为归档存储。如果同时设置转换为低频访问存储和转换为归档存储,则转换为归档存储的时间要比转换为低频访问存储的时间至少长30天。如果单独设置转换为归档存储,则没有时间限制。
- 转换为深度归档存储天数:指定在对象最后一次更新后多少天,受规则影响的对象将转换为深度归档存储。如果同时设置转换为低频访问存储和转换为深度归档存储,则转换为深度归档存储的时间要比转换为低频访问存储的时间至少长30天。如果同时设置转换为归档存储和转换为深度归档存储,则转换为深度归档存储的时间要比转换为归档存储的时间至少长90天。如果单独设置转换为深度归档存储,则没有时间限制。
- 对象过期删除天数:指定在对象最后一次更新后多少天,受规则影响的对象将过期并自动被OBS删除。过期时间必须大于前两个转换时间的最大值,且必须为整数。
- 碎片过期删除天数:指定桶内碎片在产生后多少天自动删除。
例如,您于2015年1月7日在
OBS中存储了以下几个文件:
- log/test1.log
- log/test2.log
- doc/example.doc
- doc/good.txt
您于2015年1月10日在
OBS中存储了以下几个文件:
- log/clientlog.log
- log/serverlog.log
- doc/work.doc
- doc/travel.txt
如果您在2015年1月10日设置前缀为“log”的对象,过期删除的时间设置为一天,可能出现如下情况:
- 1月7日上传的两个对象“log/test1.log”和“log/test2.log”,会在最近一次系统自动扫描后被删除,可能在1月10日当天,也可能在1月11日,这取决于系统的下一次扫描在何时进行。
- 1月10日上传的两个对象“log/clientlog.log”和“log/serverlog.log”,每下一次系统扫描均会判断距上一次对象更新是否已满一天。如果已满一天,则在本次扫描时删除;如果未满一天,则会等到下次扫描再判断,直到满一天时删除,一般可能在1月11日或1月12日删除。
如果您在某天设置前缀为“log”的对象,转换为低频访问存储的时间设置为30天,转换为归档存储的时间设置为60天,过期删除的时间设置为100天,OBS将会在“log/clientlog.log”、“log/serverlog.log”、“log/test1.log”和“log/test2.log”这四个对象上传满30天后转换为低频访问存储,满60天后转换为归档存储,满100天后自动删除。
对象上传后,系统会将下一个UTC零点作为对象存储的起始时间开始计算生命周期。生命周期规则执行最长耗时24小时。因此,存储类别的转换以及过期被删除可能会存在延时,且一般不会超过48小时。配置生命周期规则后,如果期间修改了生命周期配置,会重新计算生效时间。
- 单击“确定”,完成生命周期规则配置。
使用图形化工具OBS Browser+
- 登录OBS Browser+。
- 选中待配置的桶,单击“更多 > 生命周期规则”,如图7所示。
图7 生命周期规则
- 在“生命周期规则”窗口中单击“创建”,如图8所示。
图8 创建生命周期规则
- 配置生命周期规则。
- 状态:勾选“启用”,启用本条生命周期规则。
- 规则名称:用于识别不同的生命周期配置,其长度需不超过255字符。
- 策略:可根据对象名前缀进行匹配,满足该前缀的对象将受生命周期规则管理。也可将生命周期规则配置到整个桶,则桶内所有对象都将受生命周期规则管理。
- 当按前缀配置时,如果指定的前缀名与某条已配置的生命周期规则指定的前缀名存在包含关系,OBS会将两条规则视为同一条,而禁止您配置本条规则。例如,系统中已存在指定前缀名为“abc”的规则,则不允许再配置指定前缀包含“abc”字段的规则。
- 如果已存在按前缀配置的生命周期规则,则不允许再新增配置到整个桶的规则。
- 如果已存在配置到整个桶的生命周期规则,则不允许再新增按前缀配置的规则,此时界面的“创建”按钮会变成灰色,表示不可操作。
- 您可以指定在对象最后一次更新后多少天,受规则影响的对象将转换为低频访问存储、归档存储或者过期并自动被OBS删除。
- 转换为低频访问存储:即您可以指定在对象最后一次更新后多少天,受规则影响的对象将转换为低频访问存储。
- 转换为归档存储:即您可以指定在对象最后一次更新后多少天,受规则影响的对象将转换为归档存储。
- 过期删除:可指定对象多少天后过期被自动删除,也可指定在具体某一天之后删除匹配规则的对象。
例如,您于2022年1月7日在OBS中存储了以下几个文件:
- log/test1.log
- log/test2.log
- doc/example.doc
- doc/good.txt
您又于2022年1月10日在OBS中存储了以下几个文件:
- log/clientlog.log
- log/serverlog.log
- doc/work.doc
- doc/travel.txt
在2022年1月10日设置前缀为“log/”的对象,过期时间设置为一天,OBS将会在2022年1月12日自动删除“log/clientlog.log”、“log/serverlog.log”、“log/test1.log”和“log/test2.log”这四个对象。
在今天设置前缀为“log”的对象,转换为低频访问存储的时间设置为30天,转换为归档存储的时间设置为60天,过期删除的时间设置为100天,OBS将会第31天将“log/clientlog.log”、“log/serverlog.log”、“log/test1.log”和“log/test2.log”这四个对象转换为低频访问存储,第61天后转换为归档存储,第101天后自动删除这些对象。
- 在“生命周期管理”对话框中单击“确认”,保存当前的生命周期规则。
转换存储类别相关注意事项
- 最小计量空间
对于小于64 KB的Object,会按照64 KB计算空间大小。
- 最低存储时间
最低存储时间是指对象的计费时间下限。对象存储时间小于最低存储时间时,将按照最低存储时间计费。例如,一个低频访问存储对象在OBS中存储了20天后转换为归档存储,会按照30天计费。
对比项目 |
标准存储 |
低频访问存储 |
归档存储 |
深度归档存储(受限公测) |
最低存储时间 |
无 |
30天 |
90天 |
180天 |
- 对象恢复时间
归档存储、深度归档存储类型的对象恢复需要一定的恢复时间,如果业务场景需要实时读对象,那么不建议将对象转换成归档存储、深度归档存储类别。
表1 对象恢复时间
恢复方式 |
归档存储恢复耗时 |
深度归档存储恢复耗时 |
标准 |
3~5 h |
5~12 h |
加急 |
1~5 min |
3~5 h |
- 数据恢复相关费用
表2 数据恢复费用说明
操作名称 |
产生费用类别 |
费用说明 |
低频对象恢复 |
请求费用 |
按恢复成功的对象数计算请求次数,产生请求费用。
恢复成功N个对象,记录N次请求。 |
流量费用 |
数据恢复的流量费用。 |
归档或深度归档对象恢复 |
请求费用 |
按恢复成功的对象数计算请求次数,产生请求费用。
恢复成功N个对象,记录N次请求。 |
流量费用 |
数据恢复的流量费用。 |
临时文件存储费用 |
数据恢复后,会产生一个标准存储类型的对象副本,即对象同时存在标准存储类型的对象副本和原有的归档存储或深度归档存储对象。在恢复的有效期内,会同时收取这份数据在标准存储和归档存储或深度归档存储中的存储费用。恢复有效期到期后标准存储类型的对象副本会自动删除。 |