元数据保留

本文档介绍了使用 Storage Transfer Service 在不同来源和目标之间转移数据时保留的元数据。

概览

Storage Transfer Service 会保留以下元数据:

  • 系统会保留用户为源自 Cloud Storage、Amazon S3 或 Microsoft Azure Blob Storage 的转移作业创建的自定义元数据

  • Cloud Storage 存储桶之间的转移可以选择性地保留对象 ACL、客户管理的加密密钥、存储类别、对象创建时间(作为 customTime 字段的值)和临时冻结。

  • 对于从任何来源到 Cloud Storage 存储桶的转移,在转移过程中,可以将目标存储桶中的对象存储类别设置为任何受支持的类别。

  • 对于源自 POSIX 文件系统的转移作业,系统会保留文件大小和最后修改时间 (mtime)。系统不会为文件夹保留 mtime

  • (可选)对于 POSIX 文件系统之间的转移,可以保留符号链接、数字 UID、数字 GID 和数字 MODE。

  • 如果保留了 UID、GID 或 MODE,则系统也会为文件夹保留相应元数据,但这仅限文件系统之间的转移。Cloud Storage 会在目标文件系统上重新创建文件夹,并恢复 UID、GID 和/或 MODE。这包括空文件夹。mtime 不会被保留。

    如果转移是通过清单完成,则系统不会保留文件夹级别的元数据。

本文档中未明确涉及的元数据字段不会保留。

元数据保留行为

以下部分列出了来自不同来源存储系统的元数据示例,并展示了 Storage Transfer Service 如何保留每种来源的元数据。如需完整的元数据列表,请参阅源存储系统的文档。

Amazon S3 到 Cloud Storage

元数据示例 保留行为
Amazon S3 固定键元数据字段,例如:Cache-ControlContent-DispositionContent-Type 以固定键元数据形式保留。
Amazon S3 用户定义的元数据,格式为键值对。如需了解详情,请参阅对象键和元数据用户定义的对象元数据部分。

以目标 Cloud Storage 对象中的自定义元数据字段形式保留,您可以稍后进行修改或移除。

ETag 以自定义元数据字段形式保留,且键为 x-goog-source-etag,您可以稍后进行修改或移除。
对象大小。 size 形式保留。
Amazon S3 访问控制列表 (ACL) 如需完整列表,请参阅访问控制列表 (ACL) 概览条件键部分。 不保留。
Amazon S3 对象标记,由您定义为键值对。如需了解详情,请参阅对象标记 不保留。
Amazon S3 系统定义的元数据,ETag 和对象大小除外。如需查看完整列表,请参阅对象键和元数据系统定义的对象元数据部分。

不保留。

系统不会保留来自来源的时间戳元数据。创建时间 timeCreated 反映了在 Cloud Storage 中创建对象的时间。同样,updated 反映了在 Cloud Storage 中修改对象的元数据的时间。

存储类别

您可以通过多种方式在转移期间设置存储类别。

  • 将每个对象的存储类别设置为目标存储桶的存储类别。这是默认行为。
  • 为所有要转移的对象设置特定存储类别。

如需了解详情,请参阅 metadataOptions 参考文档。

Microsoft Azure Storage 到 Cloud Storage

元数据示例 保留行为
Microsoft Azure Storage 固定键元数据字段,例如:Cache-ControlContent-DispositionContent-Type 以固定键元数据形式保留。
Microsoft Azure Storage 用户定义的元数据,格式为键值对。如需了解详情,请参阅设置和检索 Blob 服务资源的属性和元数据

以目标 Cloud Storage 对象中的自定义元数据字段形式保留,您可以稍后进行修改或移除。

ETag 以自定义元数据字段形式保留,且键为 x-goog-source-etag,您可以稍后进行修改或移除。
对象大小。 size 形式保留。
Azure Data Lake Storage (ADLS) 第 2 代支持的 POSIX 文件系统权限。 不保留。
Microsoft Azure Storage 访问权限控制,具体来讲是 x-ms-blob-public-access。如需了解详情,请参阅获取容器 ACL响应标头部分。 不保留。
Microsoft Azure Storage 索引标记。如需了解详情,请参阅 通过 blob 索引标记管理和查找 Azure Blob 数据 不保留。
Microsoft Azure Storage 时间戳元数据,例如:Last-Modifiedx-ms-creation-timex-ms-versionx-ms-request-server-encryptedx-ms-encryption-scope。如需了解详情,请参阅设置 Blob 元数据

不保留。

系统不会保留来自来源的时间戳元数据。创建时间 timeCreated 反映了在 Cloud Storage 中创建对象的时间。同样,updated 反映了在 Cloud Storage 中修改对象的元数据的时间。

存储类别

您可以通过多种方式在转移期间设置存储类别。

  • 将每个对象的存储类别设置为目标存储桶的存储类别。这是默认行为。
  • 为所有要转移的对象设置特定存储类别。

如需了解详情,请参阅 metadataOptions 参考文档。

在 Cloud Storage 存储桶之间转移数据

元数据示例 保留行为

Cloud Storage 固定键元数据字段,例如:Cache-ControlContent-DispositionContent-Type

如需了解详情,请参阅对象元数据

以固定键元数据形式保留。

Cloud Storage 用户定义的元数据,格式为键值对。如需了解详情,请参阅自定义元数据

以目标 Cloud Storage 对象中的自定义元数据字段形式保留,您可以稍后进行修改或移除。

对象大小 size 形式保留。
对象生成 以自定义元数据字段形式保留,且键为 x-goog-reserved-source-generation,您可以稍后进行修改或移除。
对象保全

基于事件的冻结不会保留。如果目标存储桶启用了默认的基于事件的冻结属性,则基于事件的冻结会应用于已转移的对象。

默认情况下,临时冻结会被保留。如需在转移期间舍弃临时冻结,请将 metadataOptions 对象的 temporaryHold 字段设置为 TEMPORARY_HOLD_SKIP

访问控制列表 (ACL)

您可以选择保留 ACL。如需了解详情,请参阅 metadataOptions 参考文档。

保留 ACL 时,请务必避免创建无法访问的对象

如需了解详情,请参阅 Cloud Storage 访问控制列表文档。

存储类别

您可以通过多种方式在转移期间设置存储类别。

  • 将每个对象的存储类别设置为目标存储桶的存储类别。这是默认行为。
  • 保留源对象的存储类别。
  • 为所有要转移的对象设置特定存储类别。

如需了解详情,请参阅 metadataOptions 参考文档。

客户管理的加密密钥

如果对象上使用的了客户管理的加密密钥 (CMEK),则该对象在写入目标存储桶时可以选择使用相同的密钥。

默认行为是使用存储桶的加密方法将对象写入目标存储桶。

保留原始 CMEK 时,请注意以下限制:

如需了解详情,请参阅 metadataOptions 参考文档。

时间戳元数据

您可以选择保留 timeCreated。保留值存储在 Cloud Storage 中已转移对象的 customTime 字段中。如需了解详情,请参阅 metadataOptions 参考文档。

updated 元数据不会保留。

其他 Cloud Storage 不可修改的元数据,例如 etagcomponentCount 不保留。

如需查看 Cloud Storage 中的元数据列表,请参阅对象

将网址列表转移到 Cloud Storage

如需详细了解网址列表,请参阅创建网址列表

元数据示例 保留行为
固定键元数据字段,例如:Cache-ControlContent-DispositionContent-Type 以可修改的元数据形式保留。
Content-LengthMD5

以不可修改的元数据形式保留。

如果来源未提供 MD5 哈希值,则我们不保留值。

此保留行为针对的是 Content-LengthMD5。任何其他未列出的不可修改的元数据都不会保留。

时间戳元数据,例如:创建时间、修改时间和其他特定于来源的元数据。

不保留。

系统不会保留来自来源的时间戳元数据。创建时间 timeCreated 反映了在 Cloud Storage 中创建对象的时间。同样,updated 反映了在 Cloud Storage 中修改对象的元数据的时间。

存储类别

您可以通过多种方式在转移期间设置存储类别。

  • 将每个对象的存储类别设置为目标存储桶的存储类别。这是默认行为。
  • 为所有要转移的对象设置特定存储类别。

如需了解详情,请参阅 metadataOptions 参考文档。

POSIX 文件系统转移

从 POSIX 文件系统转移文件时,Storage Transfer Service 可以选择将某些特性以自定义元数据的形式保留。如果这些文件之后写回到文件系统,则 Storage Transfer Service 可以将保留的元数据转换回 POSIX 特性。

元数据示例 保留行为
修改时间 (mtime)

保留。

mtime 以自定义元数据形式保留,且键为 goog-reserved-file-mtime

文件大小

保留。

文件大小以 size 形式保留。

数字 UID
数字 GID
数字 MODE
符号链接

可选。

保留行为使用 metadataOptions 对象指定。如需了解详情,请参阅保留可选的 POSIX 元数据

默认行为是不保留任何元数据。

文件夹元数据 文件夹级别的元数据只会针对文件系统之间的转移保留。转移作业的 UID、GID 和 MODE 保留设置会应用于这些转移作业的文件和文件夹。

系统不会为文件夹保留 mtimemtime 设置为目标文件系统上文件夹的创建时间。

系统不会为清单转移保留文件夹元数据。

存储类别

您可以通过多种方式在转移期间设置存储类别。

  • 将每个对象的存储类别设置为目标存储桶的存储类别。这是默认行为。
  • 为所有要转移的对象设置特定存储类别。

如需了解详情,请参阅 metadataOptions 参考文档。

保留可选的 POSIX 元数据

如需保留一个或多个数字 UID、数字 GID、数字 MODE 和符号链接,请在转移作业的正文中指定 metadataOptions 对象。

这些选项同时适用于 POSIX 到 Cloud Storage 的转移以及 Cloud Storage 到 POSIX 的转移。对于后者,在文件最初转移到 Cloud Storage 时必须保留元数据。

{
  "description": "metadata-example",
  "projectId": "example-project-id"
  "transferSpec": {
    ...
    "transferOptions": {
      "metadataOptions": {
        "gid":     "GID_NUMBER",       # Default is "GID_SKIP"
        "uid":     "UID_NUMBER",       # Default is "UID_SKIP"
        "mode":    "MODE_PRESERVE",    # Default is "MODE_SKIP"
        "symlink": "SYMLINK_PRESERVE"  # Default is "SYMLINK_SKIP"
      }
    }
  }
}

POSIX 到 Cloud Storage

保留的元数据以自定义元数据键值对的形式存储在 Cloud Storage 中。

  • 数字 GID 以 goog-reserved-posix-gid 的形式存储。
  • 数字 UID 以 goog-reserved-posix-uid 的形式存储。
  • 数字 MODE 以 goog-reserved-posix-mode 的形式存储。

对于符号链接,Storage Transfer Service 会将目标链接作为对象保留在 Cloud Storage 中,这些对象具有以下特性:

  • 对象键由目标前缀加上相对于 root_directory 的符号链接路径组成。
  • 对象元数据:
    • 任何符号链接元数据都会保留为 Cloud Storage 对象元数据。
    • 系统会创建自定义元数据条目:goog-reserved-file-is-symlink:true
  • 对象内容是符号链接的目标。例如,对于符号链接 sym-> dir1/target,对象的内容为“dir1/target”。

Storage Transfer Service 不会验证链接或复制目标文件。

Cloud Storage 到 POSIX

如果文件转移到 Cloud Storage 时保留了元数据,则在转移回 POSIX 文件系统时,该元数据可以写回到文件。

如果元数据选项设置为保留,则 Storage Transfer Service 会执行以下操作:

  • 符号链接:Storage Transfer Service 会创建一个指向目标链接的符号链接文件。如果目标文件不存在,则符号链接将损坏。
  • GID、UID 和 MODE:存储在 Cloud Storage 元数据中的值会写回到文件。

POSIX 到 POSIX

文件系统之间的转移可以选择性地保留文件和文件夹的 GID、UID 和 MODE。

系统会为文件保存上次修改时间,但不会为文件夹保存该信息。mtime 设置为目标文件系统上文件夹的创建时间。

Storage Transfer Service 通过在中间存储桶中创建 0 字节文件夹对象,然后将该元数据复制回目标文件系统上的文件夹,来保存文件夹元数据。因此,在中间存储桶中创建的对象数量可能大于正在转移的文件数量。