移动和重命名存储分区

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

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

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

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

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

第 1 步:创建新存储分区

Console

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
    打开 Cloud Storage 浏览器
  2. 点击创建存储分区
  3. 根据存储分区名称要求指定一个名称
  4. 为存储分区选择默认存储类别。默认情况下,系统会为上传到存储分区的所有对象分配默认存储类别

    注意:点击比较存储类别可比较存储类别和估算的每月费用。

  5. 存储分区数据的存储位置
  6. 新存储分区。

  7. 点击创建

gsutil

使用 gsutil mb 命令,将 [VALUES_IN_BRACKETS] 替换为适当的值:

gsutil mb gs://[BUCKET_NAME]/

设置以下可选标志,以便更好地控制存储分区的创建过程:

  • -p:指定将与您的存储分区关联的项目。
  • -c:指定存储分区的默认存储类别
  • -l:指定存储分区的位置。
  • -b:为存储分区启用仅限存储分区政策

例如:

  gsutil mb -p [PROJECT_NAME] -c [STORAGE_CLASS] -l [BUCKET_LOCATION] -b on gs://[BUCKET_NAME]/

代码示例

C++

如需了解详情,请参阅 Cloud Storage C++ API 参考文档

namespace gcs = google::cloud::storage;
using ::google::cloud::StatusOr;
[](gcs::Client client, std::string bucket_name) {
  StatusOr<gcs::BucketMetadata> bucket_metadata =
      client.CreateBucket(bucket_name, gcs::BucketMetadata());

  if (!bucket_metadata) {
    throw std::runtime_error(bucket_metadata.status().message());
  }

  std::cout << "Bucket " << bucket_metadata->name() << " created."
            << "\nFull Metadata: " << *bucket_metadata << "\n";
}

C#

如需了解详情,请参阅 Cloud Storage C# API 参考文档

private void CreateBucket(string bucketName)
{
    var storage = StorageClient.Create();
    storage.CreateBucket(s_projectId, bucketName);
    Console.WriteLine($"Created {bucketName}.");
}

Go

如需了解详情,请参阅 Cloud Storage Go API 参考文档

bucket := client.Bucket(bucketName)
if err := bucket.Create(ctx, projectID, &storage.BucketAttrs{
	StorageClass: "COLDLINE",
	Location:     "asia",
}); err != nil {
	return err
}

Java

如需了解详情,请参阅 Cloud Storage Java API 参考文档

Bucket bucket =
    storage.create(
        BucketInfo.newBuilder(bucketName)
            // See here for possible values: http://g.co/cloud/storage/docs/storage-classes
            .setStorageClass(StorageClass.COLDLINE)
            // Possible values: http://g.co/cloud/storage/docs/bucket-locations#location-mr
            .setLocation("asia")
            .build());

Node.js

如需了解详情,请参阅 Cloud Storage Node.js API 参考文档

// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');

// Creates a client
const storage = new Storage();

/**
 * TODO(developer): Uncomment the following line before running the sample.
 */
// const bucketName = 'Name of a bucket, e.g. my-bucket';

// Creates a new bucket in the Asia region with the coldline default storage
// class. Leave the second argument blank for default settings.
//
// For default values see: https://cloud.google.com/storage/docs/locations and
// https://cloud.google.com/storage/docs/storage-classes
await storage.createBucket(bucketName, {
  location: 'ASIA',
  storageClass: 'COLDLINE',
});

console.log(`Bucket ${bucketName} created.`);

PHP

如需了解详情,请参阅 Cloud Storage PHP API 参考文档

use Google\Cloud\Storage\StorageClient;

/**
 * Create a Cloud Storage Bucket.
 *
 * @param string $bucketName name of the bucket to create.
 * @param string $options options for the new bucket.
 *
 * @return Google\Cloud\Storage\Bucket the newly created bucket.
 */
function create_bucket($bucketName, $options = [])
{
    $storage = new StorageClient();
    $bucket = $storage->createBucket($bucketName, $options);
    printf('Bucket created: %s' . PHP_EOL, $bucket->name());
}

Python

如需了解详情,请参阅 Cloud Storage Python API 参考文档

def create_bucket(bucket_name):
    """Creates a new bucket."""
    storage_client = storage.Client()
    bucket = storage_client.create_bucket(bucket_name)
    print('Bucket {} created'.format(bucket.name))

Ruby

如需了解详情,请参阅 Cloud Storage Ruby API 参考文档

# project_id    = "Your Google Cloud project ID"
# bucket_name   = "Name of Google Cloud Storage bucket to create"
# location      = "Location of where to create Cloud Storage bucket"
# storage_class = "Storage class of Cloud Storage bucket"

require "google/cloud/storage"

storage = Google::Cloud::Storage.new project_id: project_id
bucket  = storage.create_bucket bucket_name,
                                location:      location,
                                storage_class: storage_class

puts "Created bucket #{bucket.name} in #{location}" +
     " with #{storage_class} class"

REST API

JSON API

如需了解可用的存储类别(可设为存储分区的默认存储类别),请参阅存储类别

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .json 文件,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
  3. {
      "name": "[BUCKET_NAME]",
      "location": "[BUCKET_LOCATION]",
      "storageClass": "[STORAGE_CLASS]"
    }
  4. 使用 cURL 调用 JSON API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X POST --data-binary @[JSON_FILE_NAME].json \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "Content-Type: application/json" \
         "https://www.googleapis.com/storage/v1/b?project=[PROJECT_ID]"

XML API

如需了解可用的存储类别(可设为存储分区的默认存储类别),请参阅存储类别

  1. OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。
  2. 创建一个包含以下信息的 .xml 文件,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
  3. <CreateBucketConfiguration>
       <LocationConstraint>[BUCKET_LOCATION]</LocationConstraint>
       <StorageClass>[STORAGE_CLASS]</StorageClass>
    </CreateBucketConfiguration>
  4. 使用 cURL 调用 XML API,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X PUT --data-binary @[XML_FILE_NAME].xml \
         -H "Authorization: Bearer [OAUTH2_TOKEN]" \
         -H "x-goog-project-id: [PROJECT_ID]" \
         "https://storage.googleapis.com/[BUCKET_NAME]"

第 2 步:将旧存储分区中的文件复制到新存储分区中

Console

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

  1. 打开 Google Cloud Platform Console 中的“转移”页面。

    打开转移页面

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

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

    • 选择目的地:点击浏览以查找并选择您要将文件移动到的存储分区。

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

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

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

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

要查看转移进度,请执行以下操作:打开 Google Cloud Platform Console 中的“转移”页面。

打开转移页面

gsutil

  1. 确保至少安装了 gsutil 4.12
  2. 使用带有 -r 选项的 gsutil cp 命令,以递归方式将所有文件从源存储分区复制到目标存储分区中。将 [VALUES_IN_BRACKETS] 替换为适当的值:

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

REST API

JSON API

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

  1. 使用 cURLJSON API rewrite 方法将数据从源存储分区复制到目标存储分区,将 [VALUES_IN_BRACKETS] 替换为适当的值:
  2. curl -X POST -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    "https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"
    

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

    {
    "kind": "storage#rewriteResponse",
    "totalBytesRewritten": 1048576,
    "objectSize": 10000000000,
    "done": false,
    "rewriteToken": [TOKEN_VALUE]
    }
    
  3. 在后续请求中使用 rewriteToken 继续复制数据,并将 [VALUES_IN_BRACKETS] 替换为适当的值:
  4. curl -X POST -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    -H "Content-Length: 0" \
    -d '{"rewriteToken": "[TOKEN_VALUE]"}' \
    "https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]/rewriteTo/b/[DESTINATION_BUCKET]/o/[OBJECT_NAME]"
    

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

    {
    "kind": "storage#rewriteResponse",
    "totalBytesRewritten": 10000000000,
    "objectSize": 10000000000,
    "done": true,
    "resource": objects Resource
    }
    

第 3 步:删除旧存储分区中的文件

Console

您无需执行任何操作来删除旧存储分区中的文件:在使用转移服务复制文件的过程中,旧文件会被自动删除(假设您选中了“转移完成后删除源对象”复选框)。

gsutil

使用带有 -r 选项的 gsutil rm 命令,以递归方式从源存储分区删除您的所有文件,并删除源存储分区本身。将 [VALUES_IN_BRACKETS] 替换为适当的值:

gsutil rm -r gs://[SOURCE_BUCKET]

或者,要删除文件但保留源存储分区,请运行以下命令:

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

REST API

JSON API

  1. 使用 cURL 和 JSON API delete 方法,通过以下命令移除您的数据的原始版本,将 [VALUES_IN_BRACKETS] 替换为适当的值:
    curl -X DELETE -H "Authorization: Bearer [OAUTH2_TOKEN]" \
    https://www.googleapis.com/storage/v1/b/[SOURCE_BUCKET]/o/[OBJECT_NAME]

如果成功,该方法将返回一个空响应。

后续步骤

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Cloud Storage
需要帮助?请访问我们的支持页面