归档和访问冷数据

IBM Cloud® Object Storage“归档”和“加速归档”是 低成本 选项,用于很少访问的数据。 您可以通过将任何存储层(标准、保险库、冷保险库和 Flex)转换为长期脱机归档来存储数据,或者使用联机“冷保险库”选项。 借助新的“加速归档”功能,您可以快速访问休眠数据,并在不到两个小时的时间内进行复原。

此功能当前在 Object Storage 中不支持 Satellite。 了解更多信息。

存档和加速存档层的最低存储期限为 90 天。 在此之前删除的对象仍需支付 90 天的存储费用。

存档和加速存档的最小计费对象大小均为 128KBs。 小于此尺寸的对象仍可存档,但将按 128KB 对象尺寸费率计费。

写入 Vault 或 Cold Vault 的对象将按这些层级的全部最短存储期限计费,即使对象在最短期限之前已存档。

您可以使用与 IBM Cloud Object Storage 集成的 Web 控制台、REST API 和第三方工具来归档对象。

有关端点的更多信息,请参阅端点和存储位置。

添加或管理存储区上的归档策略

创建或修改存储区的归档策略时,请考虑以下内容:

  • 可以随时将归档策略添加到新存储区或现有存储区。
  • 可以修改或禁用现有归档策略。
  • 新添加或修改的归档策略将应用于上传的新对象,但不会影响现有对象。

登录后,在控制台中创建一个存储桶,然后配置存档策略。

要立即归档上传到存储区的新对象,请在归档策略上输入 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 或任何其他必需值。

  1. 检查对象状态: aws --endpoint-url $ENDPOINT s3api head-object --bucket $BUCKET --key $KEY 存储类将显示为 ("StorageClass": "GLACIER")
  2. 复原对象: aws --endpoint-url $ENDPOINT s3api restore-object ---bucket $BUCKET --key $KEY --restore-request '{"Days":25,"GlacierJobParameters":{"Tier":"Bulk"}}'
  3. 检查状态: 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 字符串 base64 对有效载荷进行 128 位 MD5 哈希编码,用作完整性检查,以确保有效载荷在传输过程中未被更改。
x-amz-checksum-crc32 字符串 该标头是对象的 Base64 编码、32 位 CRC32 校验和。
x-amz-checksum-crc32c 字符串 该标头是对象的 Base64 编码、32 位 CRC32C 校验和。
x-amz-checksum-crc64nvme 字符串 该标头是对象的 Base64 编码、64 位 CRC64NVME 校验和。 CRC64NVME 校验和始终是全对象校验和。
x-amz-checksum-sha1 字符串 该标头是对象的 Base64 编码、160 位 SHA1 摘要。
x-amz-checksum-sha256 字符串 该标头是对象的 Base64 编码、256 位 SHA256 摘要。
x-amz-sdk-checksum-algorithm 字符串 表示使用 SDK 为对象创建校验和时使用的算法。

需要 Content-MD5 标头或 checksum 标头(包括 x-amz-checksum-crc32, x-amz-checksum-crc32c, x-amz-checksum-crc64nvme, x-amz-checksum-sha1 或 x-amz-checksum-sha256 )作为有效载荷的完整性检查。

请求主体必须包含具有以下模式的 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 字符串 base64 对有效载荷进行 128 位 MD5 哈希编码,用作完整性检查,以确保有效载荷在传输过程中未被更改。
x-amz-checksum-crc32 字符串 该标头是对象的 Base64 编码、32 位 CRC32 校验和。
x-amz-checksum-crc32c 字符串 该标头是对象的 Base64 编码、32 位 CRC32C 校验和。
x-amz-checksum-crc64nvme 字符串 该标头是对象的 Base64 编码、64 位 CRC64NVME 校验和。 CRC64NVME 校验和始终是全对象校验和。
x-amz-checksum-sha1 字符串 该标头是对象的 Base64 编码、160 位 SHA1 摘要。
x-amz-checksum-sha256 字符串 该标头是对象的 Base64 编码、256 位 SHA256 摘要。
x-amz-sdk-checksum-algorithm 字符串 表示使用 SDK 为对象创建校验和时使用的算法。

请求主体必须包含具有以下模式的 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上提供的所有 存储类 的更多信息。