从数据源创建永久性磁盘

准备工作

您可以创建空白的永久性磁盘,也可以从数据源创建磁盘。您可以将永久性磁盘用作虚拟机实例的启动磁盘,也可以用作挂接到虚拟机的数据磁盘。

数据源

您可以根据以下数据源创建永久性磁盘:

从现有磁盘创建磁盘克隆

即使现有的永久性磁盘已挂接到虚拟机实例,您也可以通过该磁盘创建新的永久性磁盘克隆。克隆磁盘时,您会新建一个磁盘,其中包含源磁盘上的所有数据。您可以修改该克隆的属性,例如大小。您还可以删除源磁盘,而不会删除克隆的任何风险。

通过克隆磁盘的功能,您可以在不产生生产的情况下复制生产数据,在扩容虚拟机时复制磁盘,以及为数据库备份验证创建副本。您还可以克隆磁盘,以将非启动磁盘数据移动到新项目。对于需要保护数据以实现额外弹性的场景(例如备份和灾难恢复),我们建议使用快照,而不是磁盘克隆。

限制

  • 克隆与来源磁盘的可用区、区域和磁盘类型必须相同。
  • 您不能通过区域磁盘创建地区磁盘克隆,也不能通过地区磁盘创建区域磁盘克隆。
  • 克隆的大小必须至少为来源磁盘的大小。如果您使用 Google Cloud Console 创建克隆,则不能指定磁盘大小,并且克隆的大小与来源磁盘的大小相同。
  • 如果您使用 CSEK(客户提供的加密密钥)CMEK(客户管理的加密密钥)对来源磁盘进行加密,则必须使用同一密钥对克隆进行加密。如需了解详情,请参阅创建加密来源磁盘的克隆
  • 您每 30 秒最多可以创建给定来源磁盘的一个克隆。
  • 总共最多可以创建给定来源磁盘的 1000 个磁盘克隆。如果超出此限制,则系统会返回 internalError

如果超出克隆频率限制,请求会失败,并显示以下错误:

RATE LIMIT: ERROR: (gcloud.compute.disks.create) Could not fetch resource:
 - Operation rate exceeded for resource '<removed>'. Too frequent operations from the source resource.

创建磁盘克隆

控制台

  1. 在 Google Cloud Console 中,转到磁盘页面。

    转到“磁盘”

  2. 在可用区级永久性磁盘列表中,找到要克隆的磁盘。

  3. 点击操作下的菜单按钮,然后选择克隆磁盘

创建克隆。

  1. 克隆磁盘面板中,指定新磁盘的名称。
  2. 属性下,查看新磁盘的其他详细信息。
  3. 点击保存

gcloud

gcloud 工具中,使用 disks create 命令并指定 --source-disk。以下示例将来源磁盘克隆到其他项目中的新磁盘:

gcloud compute disks create projects/TARGET_PROJECT_ID/zones/ZONE/disks/TARGET_DISK_NAME \
    --description="cloned disk" \
    --source-disk=projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME

API

在 API 中,构建对 compute.disks.insert 方法POST 请求。在请求正文中,指定 namesourceDisk 参数。克隆会从来源磁盘继承所有省略的属性。以下示例将来源磁盘克隆到其他项目中的新磁盘:

POST https://compute.googleapis.com/compute/v1/projects/TARGET_PROJECT_ID/zones/ZONE/disks

{
  "name": "TARGET_DISK_NAME"
  "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME"
}

创建加密来源磁盘的克隆

如果您使用 CSEK 对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。

控制台

按照创建磁盘克隆的步骤操作。配置磁盘属性时,请在解密和加密下提供来源磁盘加密密钥。

gcloud

在创建磁盘克隆时,请使用 --csek-key-file 标志提供来源磁盘加密密钥。如果您使用的是 RSA 封装密钥,请使用 gcloud beta 组件:

gcloud beta compute disks create projects/TARGET_PROJECT_ID/zones/ZONE/disks/TARGET_DISK_NAME \
  --description="cloned disk" \
  --source-disk=projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \
  --csek-key-file example-key-file.json

API

请使用 diskEncryptionKey 属性提供来源磁盘加密密钥。

POST https://compute.googleapis.com/compute/beta/projects/TARGET_PROJECT_ID/zones/ZONE/disks

{
  "name": "TARGET_DISK_NAME"
  "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME"
  "diskEncryptionKey": {
    "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA=="
  },
}

如果您使用 CMEK 对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。

控制台

Compute Engine 会使用来源磁盘加密密钥对克隆自动进行加密。

gcloud

在创建磁盘克隆时,请使用 --kms-key 标志提供来源磁盘密钥。如果您使用的是 RSA 封装密钥,请使用 gcloud beta 组件:

gcloud beta compute disks create projects/TARGET_PROJECT_ID/zones/ZONE/disks/TARGET_DISK_NAME \
  --description="cloned disk" \
  --source-disk=projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \
  --kms-key projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY

API

在创建磁盘克隆时,请使用 kmsKeyName 属性提供来源磁盘密钥。

POST https://compute.googleapis.com/compute/beta/projects/TARGET_PROJECT_ID/zones/ZONE/disks

{
  "name": "TARGET_DISK_NAME"
  "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME"
  "diskEncryptionKey": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY"
  },
}

后续步骤