移动和重命名存储分区

创建存储分区时,您将永久定义其名称、地理位置以及所属的项目。不过,您可以有效移动或重命名您的存储分区:

  • 如果旧的存储分区中没有数据,只需删除存储分区,然后使用新名称、在新位置或者新项目中重新创建一个存储分区即可。

  • 如果旧的存储分区中有数据,请使用所需的名称、位置和/或项目创建一个新的存储分区,然后将旧存储分区中的数据复制到新的存储分区,再删除旧存储分区及其中的内容。以下步骤对此过程进行了说明。

    请注意,如果您希望新的存储分区使用旧存储分区的名称,则必须将数据移动两次:先将数据暂时保存在一个中间存储分区,然后删除原来的存储分区,最后使用该名称创建新的存储分区。

如需将数据从一个存储分区移到另一个存储分区,请执行以下操作:

控制台

从 Google Cloud Console 中使用 Cloud Storage Transfer Service,将数据从一个 Cloud Storage 存储分区复制到另一个:

  1. 如果您还没有目标存储分区,请务必创建存储分区
  2. 在 Google Cloud Console 中打开“转移”页面。

    打开转移页面

  3. 点击创建转移作业
  4. 按照分步演示操作,在完成每个步骤后点击继续

    • 选择来源:使用 Google Cloud Storage 存储分区作为您选择的来源,然后点击浏览以查找并选择要移出对象的存储分区。

    • 选择目的地:点击浏览以查找并选择要移入对象的存储分区。

      此外,请选中在转移完成后删除来源对象复选框。

    • 配置转移:您可以忽略此部分。

  5. 完成分步演示后,点击创建

    然后系统会开始将旧存储分区中的对象复制到新存储分区中。此过程可能需要一些时间;但是,点击创建后,您可以离开 Google Cloud Console。

    如需查看转移进度,请在 Google Cloud Console 中打开“转移”页面。

    打开转移页面

    请参阅问题排查,了解如何获取有关 Cloud Storage 浏览器中失败操作的详细错误信息。

  6. 如果您在设置过程中选择了在转移完成后删除来源对象复选框,则在转移操作完成后,无需执行任何操作来删除旧存储分区中的对象。但是,您可能还想删除旧的存储分区,此操作必须单独执行。

gsutil

  1. 确保至少安装了 gsutil 4.12
  2. 如果您还没有目标存储分区,请务必创建存储分区
  3. 使用带有 -r 选项的 gsutil cp 命令,以递归方式将所有对象从源存储分区复制到目标存储分区中。

    gsutil cp -r gs://SOURCE_BUCKET/* gs://DESTINATION_BUCKET

    其中:

    • SOURCE_BUCKET 是原始存储分区的名称,例如 old-bucket
    • DESTINATION_BUCKET 是您要向其中移动数据的存储分区的名称,例如 my-bucket
  4. 使用带有 -r 选项的 gsutil rm 命令,以递归方式从源存储分区删除您的所有对象,并删除源存储分区本身:

    gsutil rm -r gs://SOURCE_BUCKET

    其中 SOURCE_BUCKET 是原始存储分区的名称,例如 old-bucket

    或者,如需删除对象但保留源存储分区,请运行以下命令:

    gsutil rm -a gs://SOURCE_BUCKET/**

REST API

JSON API

使用 JSON API 的 rewrite 方法,将数据细分成多个大小有限的数据块,然后通过多个请求复制这些数据块。执行此操作时,您必须循环操作并调用 rewrite 方法,直到所有数据都移动完为止:

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 如果您还没有目标存储分区,请务必创建存储分区

  3. 使用 cURLJSON API rewrite 方法将数据从源存储分区复制到目标存储分区中:

    curl -X POST \
     -H "Authorization: Bearer OAUTH2_TOKEN" \
     -H "Content-Length: 0" \
     "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET/o/OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET/o/OBJECT_NAME"

    其中:

    • OAUTH2_TOKEN 是您在第 1 步中生成的访问令牌。
    • SOURCE_BUCKET 是原始存储分区的名称,例如 old-bucket
    • OBJECT_NAME 是您要复制的对象的名称,例如 pets/dog.png
    • DESTINATION_BUCKET 是您要向其中移动数据的存储分区的名称,例如 my-bucket

    例如,如果对象的大小为 10 GB,则此请求的响应与以下示例类似:

    {
     "kind": "storage#rewriteResponse",
     "totalBytesRewritten": 1048576,
     "objectSize": 10000000000,
     "done": false,
     "rewriteToken": TOKEN_VALUE
    }
  4. 在后续请求中使用 rewriteToken 继续复制数据:

    curl -X POST \
     -H "Authorization: Bearer OAUTH2_TOKEN" \
     -H "Content-Length: 0" \
     -d '{"rewriteToken": "TOKEN_VALUE"}' \
     "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET/o/OBJECT_NAME/rewriteTo/b/DESTINATION_BUCKET/o/OBJECT_NAME"

    其中:

    • OAUTH2_TOKEN 是您在第 1 步中生成的访问令牌。
    • TOKEN_VALUE 是上一步中返回的 rewriteToken 值。
    • SOURCE_BUCKET 是原始存储分区的名称,例如 old-bucket
    • OBJECT_NAME 是您要复制的对象的名称,例如 pets/bunny.png
    • DESTINATION_BUCKET 是您要向其中移动数据的存储分区的名称,例如 my-bucket

    复制完所有数据后,最后一个响应将包含一个 done 属性(等于 true),没有 rewriteToken 属性,数据复制到的对象的元数据包含在 resource 属性中。

    {
      "kind": "storage#rewriteResponse",
      "totalBytesRewritten": 10000000000,
      "objectSize": 10000000000,
      "done": true,
      "resource": objects Resource
    }
  5. 使用 cURLJSON API delete 方法,通过以下命令移除您的数据的原始版本:

    curl -X DELETE \
    -H "Authorization: Bearer OAUTH2_TOKEN" \
    "https://storage.googleapis.com/storage/v1/b/SOURCE_BUCKET/o/OBJECT_NAME"

    其中:

    • OAUTH2_TOKEN 是您在第 1 步中生成的访问令牌。
    • SOURCE_BUCKET 是原始存储分区的名称,例如 old-bucket
    • OBJECT_NAME 是待删除对象的名称,例如 pets/dog.png

后续步骤