归档和访问冷数据
IBM Cloud® Object Storage“归档”和“加速归档”是 低成本 选项,用于很少访问的数据。 您可以通过将任何存储层(标准、保险库、冷保险库和 Flex)转换为长期脱机归档来存储数据,或者使用联机“冷保险库”选项。 借助新的“加速归档”功能,您可以快速访问休眠数据,并在不到两个小时的时间内进行复原。
此功能当前在 Object Storage 中不支持 Satellite。 了解更多信息。
存档和加速存档层的最低存储期限为 90 天。 在此之前删除的对象仍需支付 90 天的存储费用。
存档和加速存档的最小计费对象大小均为 128KBs。 小于此尺寸的对象仍可存档,但将按 128KB 对象尺寸费率计费。
写入 Vault 或 Cold Vault 的对象将按这些层级的全部最短存储期限计费,即使对象在最短期限之前已存档。
您可以使用与 IBM Cloud Object Storage 集成的 Web 控制台、REST API 和第三方工具来归档对象。
有关端点的更多信息,请参阅端点和存储位置。
添加或管理存储区上的归档策略
创建或修改存储区的归档策略时,请考虑以下内容:
- 可以随时将归档策略添加到新存储区或现有存储区。
- 可以修改或禁用现有归档策略。
- 新添加或修改的归档策略将应用于上传的新对象,但不会影响现有对象。
登录后在控制台中创建存储区,您可以使用图 1 中显示的字段来配置归档策略。

要立即归档上传到存储区的新对象,请在归档策略上输入 0 天。
归档仅在特定区域中可用。 有关更多详细信息,请参阅集成服务。
复原归档对象
要访问归档对象,必须将其复原到原始存储层。 复原对象时,可以指定希望对象可用的天数。 在指定时间段结束时,将删除复原的副本。
“加速归档”的复原过程最多需要 2 个小时,而“归档”的复原过程最多需要 12 个小时。
归档对象子状态包括:
- 已存档:处于“已存档”状态的对象是根据存储区上的归档策略,已从其联机存储层(标准、保险库、冷保险库和 Flex)移至脱机归档层的对象。
- 正在复原:处于“正在复原”状态的对象是正在将“已归档”状态的副本生成到其原始联机存储层的对象。
- 已复原:处于“已复原”状态的对象是已复原到其原始联机存储层的归档对象的副本,可使用指定的时间长度。 在该时间段结束时,将删除该对象副本,但仍保留相应的归档对象。
使用 AWS CLI 复原对象
以下示例使用环境变量以实现清晰度。 这些值必须设置为所需值,例如,$ENDPOINT
将设置为 https://s3.us.cloud-object-storage.appdomain.cloud
,https://s3.eu-de.private.cloud-object-storage.appdomain.cloud
或任何其他必需值。
- 检查对象状态:
aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY
存储类将显示为("StorageClass": "GLACIER")
- 复原对象:
aws --endpoint-url $ENDPOINT s3api restore-object ---bucket $BUCKET --key $KEY --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Bulk"}}'
- 检查状态:
aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY
限制
归档策略是使用 PUT Bucket Lifecycle Configuration
S3 API 操作的子集实现的。
支持的功能包括:
- 指定对象转换为“已归档”状态的未来日期或天数。
- 为对象设置到期规则。
指定过去日期的策略可能需要几天才能完成。
不支持的功能包括:
- 每个存储区多个转换规则。
- 使用前缀或对象键来过滤要归档的对象。
- 对存储类分层。
经典基础结构 (非 IAM) 用户无法将转换存储类设置为 ACCELERATED
。
使用 REST API 和 SDK
创建存储区生命周期配置
此 PUT
操作实现使用 lifecycle
查询参数来设置存储区的生命周期设置。 此操作支持对给定存储区定义单个生命周期策略。 策略定义为包含以下参数的一个规则:ID
、Status
和 Transition
。
转换操作支持未来写入存储区的对象在定义的时间段后转换为“已归档”状态。 对存储区的生命周期策略的更改仅应用于写入该存储区的新对象。
Cloud IAM 用户必须至少具有Writer
角色,才能向存储区添加生命周期策略。
经典基础架构用户必须具有“所有者”许可权,并且能够在存储帐户中创建存储区,才能向存储区添加生命周期策略。
此操作不会使用特定于操作的其他查询参数。
头 | 类型 | 描述 |
---|---|---|
Content-MD5 |
string | 必需:有效内容的 Base64 编码的 128 位 MD5 散列,用作完整性检查,可确保有效内容在传输中未变更。 |
请求主体必须包含具有以下模式的 XML 块:
元素 | 类型 | 子代 | 祖代 | 约束 |
---|---|---|---|---|
LifecycleConfiguration |
容器 | Rule |
无 | 限制为 1。 |
Rule |
容器 | ID , Status , Filter , Transition |
LifecycleConfiguration |
限制为 1。 |
ID |
字符串 | 无 | Rule |
必须由 (a-z ,A-Z ,0-9 ) 和以下符号组成: ! _ . * ' ( ) - |
Filter |
字符串 | Prefix |
Rule |
必须包含 Prefix 元素 |
Prefix |
字符串 | 无 | Filter |
必须设置为 <Prefix/> 。 |
Transition |
Container |
Days , StorageClass |
Rule |
限制 1 转换规则,最大规则总数为 1000。 |
Days |
非负整数 | 无 | Transition |
必须是等于或大于 0 的值。 |
Date |
日期 | 无 | Transistion |
必须为 ISO 8601 格式,并且日期必须是未来的日期。 |
StorageClass |
字符串 | 无 | Transition |
GLACIER 或 ACCELERATED |
语法
PUT https://{endpoint}/{bucket}?lifecycle # path style
PUT https://{bucket}.{endpoint}?lifecycle # virtual host style
<LifecycleConfiguration>
<Rule>
<ID>{string}</ID>
<Status>Enabled</Status>
<Filter>
<Prefix/>
</Filter>
<Transition>
<Days>{integer}</Days>
<StorageClass>{StorageClass}</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
示例
样本请求
PUT /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<LifecycleConfiguration>
<Rule>
<ID>my-archive-policy</ID>
<Filter>
<Prefix/>
</Filter>
<Status>Enabled</Status>
<Transition>
<Days>20</Days>
<StorageClass>ACCELERATED</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
样本响应
HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
var params = {
Bucket: 'STRING_VALUE', /* required */
LifecycleConfiguration: {
Rules: [ /* required */
{
Status: 'Enabled', /* required */
ID: 'STRING_VALUE',
Filter: '', /* required */
Prefix: '',
Transitions: [
{
Date: DATE, /* required if Days not specified */
Days: 0, /* required if Date not specified */
StorageClass: 'STRING_VALUE' /* required */
},
]
},
]
}
};
s3.putBucketLifecycleConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
response = client.put_bucket_lifecycle_configuration(
Bucket='string',
LifecycleConfiguration={
'Rules': [
{
'ID': 'string',
'Status': 'Enabled',
'Filter': '',
'Prefix': '',
'Transitions': [
{
'Date': datetime(2015, 1, 1),
'Days': 123,
'StorageClass': 'GLACIER'
},
]
},
]
}
)
public SetBucketLifecycleConfigurationRequest(String bucketName,
BucketLifecycleConfiguration lifecycleConfiguration)
方法概要
方法 | 描述 |
---|---|
getBucketName() |
获取要设置其生命周期配置的存储区的名称。 |
getLifecycleConfiguration() |
获取指定存储区的新生命周期配置。 |
setBucketName(String bucketName) |
设置要设置其生命周期配置的存储区的名称。 |
withBucketName(String bucketName) |
设置要设置其生命周期配置的存储区的名称,并返回此对象,以便可以将其他方法调用链接在一起。 |
检索存储区生命周期配置
此 GET
操作实现使用 lifecycle
查询参数来检索存储区的生命周期设置。
Cloud IAM 用户必须至少具有Reader
角色,才能检索存储区的生命周期。
经典基础架构用户必须至少具有对存储区的Read
许可权,才能检索存储区的生命周期策略。
此操作不会使用特定于操作的其他头、查询参数或有效内容。
语法
GET https://{endpoint}/{bucket}?lifecycle # path style
GET https://{bucket}.{endpoint}?lifecycle # virtual host style
示例
样本请求
GET /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 17:50:00 GMT
Authorization: authorization string
样本响应
HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 17:51:00 GMT
Connection: close
<LifecycleConfiguration>
<Rule>
<ID>my-archive-policy</ID>
<Filter />
<Status>Enabled</Status>
<Transition>
<Days>20</Days>
<StorageClass>GLACIER</StorageClass>
</Transition>
</Rule>
</LifecycleConfiguration>
var params = {
Bucket: 'STRING_VALUE' /* required */
};
s3.getBucketLifecycleConfiguration(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
response = client.get_bucket_lifecycle_configuration(Bucket='string')
public GetBucketLifecycleConfigurationRequest(String bucketName)
删除存储区生命周期配置
此 DELETE
操作实现使用 lifecycle
查询参数来除去存储区的任何生命周期设置。 规则定义的转换不会再应用于新对象。
**注:**对于在删除规则之前已经写入存储区的对象,将保留现有的转换规则。
Cloud IAM 用户必须至少具有Writer
角色,才能从存储区中除去生命周期策略。
经典基础架构用户必须具有对存储区的Owner
许可权,才能从存储区中除去生命周期策略。
此操作不会使用特定于操作的其他头、查询参数或有效内容。
语法
DELETE https://{endpoint}/{bucket}?lifecycle # path style
DELETE https://{bucket}.{endpoint}?lifecycle # virtual host style
示例
样本请求
DELETE /images?lifecycle HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 18:50:00 GMT
Authorization: authorization string
样本响应
HTTP/1.1 204 No Content
Date: Wed, 7 Feb 2018 18:51:00 GMT
Connection: close
var params = {
Bucket: 'STRING_VALUE' /* required */
};
s3.deleteBucketLifecycle(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
response = client.delete_bucket_lifecycle(Bucket='string')
public DeleteBucketLifecycleConfigurationRequest(String bucketName)
临时复原归档对象
此 POST
操作实现使用 restore
查询参数来请求临时复原归档对象。 用户必须先复原归档对象,然后再下载或修改该对象。 复原对象时,用户必须指定在多长时间后将删除对象临时副本。 对象会保留存储区的存储类。
可能会延迟最长 12 小时,复原的副本才可供访问。 HEAD
请求可以检查复原的副本是否可用。
要永久复原对象,用户必须将该复原的对象复制到没有活动生命周期配置的存储区。
Cloud IAM 用户必须至少具有Writer
角色,才能复原对象。
经典基础架构用户必须至少具有对存储区的Write
许可权以及具有对对象的Read
许可权,才能复原该对象。
此操作不会使用特定于操作的其他查询参数。
头 | 类型 | 描述 |
---|---|---|
Content-MD5 |
string | 必需:有效内容的 Base64 编码的 128 位 MD5 散列,用作完整性检查,可确保有效内容在传输中未变更。 |
请求主体必须包含具有以下模式的 XML 块:
元素 | 类型 | 子代 | 祖代 | 约束 |
---|---|---|---|---|
RestoreRequest |
容器 | Days , GlacierJobParameters |
无 | 无 |
Days |
整数 | 无 | RestoreRequest |
指定临时复原对象的生命周期。 对象的已复原副本可以存在的最小天数为 1。 在经过复原周期之后,将除去对象的临时副本。 |
GlacierJobParameters |
字符串 | Tier |
RestoreRequest |
无 |
Tier |
字符串 | 无 | GlacierJobParameters |
可选,如果留空,那么将缺省为与写入对象时的策略存储层相关联的值。 如果此值不留空,那么 必须 将其设置为 Bulk (如果存储区生命周期策略的转换存储类设置为 GLACIER ),必须 将其设置为 Accelerated (如果转换存储类设置为 ACCELERATED )。 |
如果对象处于“已归档”状态,那么成功响应将返回 202
,如果对象已经处于“已复原”状态,那么将返回 200
。 如果对象已经处于“已复原”状态,并且收到用于复原对象的新请求,那么 Days
元素将更新已复原对象的到期时间。
语法
POST https://{endpoint}/{bucket}/{object}?restore # path style
POST https://{bucket}.{endpoint}/{object}?restore # virtual host style
<RestoreRequest>
<Days>{integer}</Days>
<GlacierJobParameters>
<Tier>Bulk</Tier>
</GlacierJobParameters>
</RestoreRequest>
示例
样本请求
POST /images/backup?restore HTTP/1.1
Host: s3.us.cloud-object-storage.appdomain.cloud
Date: Wed, 7 Feb 2018 19:50:00 GMT
Authorization: {authorization string}
Content-Type: text/plain
Content-MD5: 1B2M2Y8AsgTpgAmY7PhCfg==
Content-Length: 305
<RestoreRequest>
<Days>3</Days>
<GlacierJobParameters>
<Tier>Bulk</Tier>
</GlacierJobParameters>
</RestoreRequest>
样本响应
HTTP/1.1 202 Accepted
Date: Wed, 7 Feb 2018 19:51:00 GMT
Connection: close
var params = {
Bucket: 'STRING_VALUE', /* required */
Key: 'STRING_VALUE', /* required */
ContentMD5: 'STRING_VALUE', /* required */
RestoreRequest: {
Days: 1, /* days until copy expires */
GlacierJobParameters: {
Tier: 'STRING_VALUE' /* required */
},
}
};
s3.restoreObject(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
response = client.restore_object(
Bucket='string',
Key='string',
RestoreRequest={
'Days': 123,
'GlacierJobParameters': {
'Tier': 'string'
},
}
)
public RestoreObjectRequest(String bucketName,
String key,
int expirationInDays)
方法概要
方法 | 描述 |
---|---|
clone() |
为除了处理程序上下文以外的其他所有字段创建此对象的浅克隆。 |
getBucketName() |
返回引用了待复原对象的存储区的名称。 |
getExpirationInDays() |
返回从对象创建到其到期之间的时间(以天为单位)。 |
setExpirationInDays(int expirationInDays) |
设置在将对象上传到存储区到该对象到期之间的时间(以天为单位)。 |
获取对象的头
提供有对象路径的 HEAD
请求将检索对象的头。 此操作不会使用特定于操作的查询参数或有效内容元素。
语法
HEAD https://{endpoint}/{bucket-name}/{object-name} # path style
HEAD https://{bucket-name}.{endpoint}/{object-name} # virtual host style
存档对象的响应标头
头 | 类型 | 描述 |
---|---|---|
x-amz-restore |
string | 对象已复原或正在进行复原时,会包含此头。 如果对象已复原,那么还会返回临时副本的到期日期。 |
x-amz-storage-class |
string | 如果已存档或临时恢复,则返回 GLACIER 或 ACCELERATED 。 |
x-ibm-archive-transition-time |
日期 | 返回安排对象以转换到归档层的日期和时间。 |
x-ibm-transition |
string | 对象具有转换元数据时,会包含此头,并返回转换的层和原始转换时间。 |
x-ibm-restored-copy-storage-class |
string | 对象处于 RestoreInProgress 或 Restored 状态时,会包含此头,并返回存储区的存储类。 |
样本请求
HEAD /images/backup HTTP/1.1
Authorization: {authorization-string}
x-amz-date: 20160825T183244Z
Host: s3.us.cloud-object-storage.appdomain.cloud
样本响应
HTTP/1.1 200 OK
Date: Wed, 7 Feb 2018 19:51:00 GMT
X-Clv-Request-Id: da214d69-1999-4461-a130-81ba33c484a6
Accept-Ranges: bytes
Server: 3.x
X-Clv-S3-Version: 2.5
ETag: "37d4c94839ee181a2224d6242176c4b5"
Content-Type: text/plain; charset=UTF-8
Last-Modified: Thu, 25 Aug 2017 17:49:06 GMT
Content-Length: 11
x-ibm-transition: transition="ARCHIVE", date="Mon, 03 Dec 2018 22:28:38 GMT"
x-amz-restore: ongoing-request="false", expiry-date="Thu, 06 Dec 2018 18:28:38 GMT"
x-amz-storage-class: "GLACIER"
x-ibm-restored-copy-storage-class: "Standard"
response = client.head_object(
Bucket='string',
Key='string'
)
var params = {
Bucket: 'STRING_VALUE', /* required */
Key: 'STRING_VALUE', /* required */
};
s3.headObject(params, function(err,data) {
if (err) console.log(err, err.stack); // an error occurred
else
console.log(data); // successful response
});
public ObjectMetadata()
方法概要
方法 | 描述 |
---|---|
clone() |
返回此 ObjectMetadata 的克隆。 |
getRestoreExpirationTime() |
返回从归档临时复原的对象将到期的时间,到期后需要重新复原该对象才能进行访问。 |
getStorageClass() |
返回存储区的原始存储类。 |
getIBMTransition() |
返回转换存储类和转换时间。 |
后续步骤
除了冷存储外,IBM Cloud 目前还针对不同的用户需求提供了几种额外的对象存储类,所有这些都可以通过基于网络的门户和 RESTful API 访问。 了解有关 IBM Cloud Object Storage上提供的所有 存储类 的更多信息。