您可以将永久性磁盘用作虚拟机实例的启动磁盘,也可以用作挂接到虚拟机的数据磁盘。创建永久性磁盘时,您可以创建空白永久性磁盘,也可以通过来源创建磁盘,以使新磁盘包含来自该来源的数据。
数据源
您可以根据以下数据源创建永久性磁盘:
现有磁盘:克隆现有的永久性磁盘。如果您需要现有非启动永久性磁盘的可即时挂接的副本,请使用此选项。
映像:从来源映像创建启动磁盘。使用此选项可以为新虚拟机创建启动磁盘或者创建独立的永久性启动磁盘。
准备工作
-
设置身份验证(如果尚未设置)。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。
选择标签页以了解您打算如何使用本页面上的示例:
控制台
当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。
gcloud
-
安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:
gcloud init
- 设置默认区域和可用区。
Terraform
如需从本地开发环境使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 为本地开发环境设置身份验证。
Go
如需从本地开发环境使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 为本地开发环境设置身份验证。
Java
如需从本地开发环境使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 为本地开发环境设置身份验证。
Python
如需从本地开发环境使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用用户凭据设置应用默认凭据。
- 安装 Google Cloud CLI。
-
如需初始化 gcloud CLI,请运行以下命令:
gcloud init
-
为您的 Google 账号创建本地身份验证凭据:
gcloud auth application-default login
如需了解详情,请参阅 为本地开发环境设置身份验证。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
-
从现有磁盘创建磁盘克隆
即使现有的永久性磁盘已挂接到虚拟机实例,您也可以通过该磁盘创建新的永久性磁盘克隆。克隆磁盘时,您会新建一个磁盘,其中包含源磁盘上的所有数据。您可以修改该克隆的属性,例如大小。您还可以删除源磁盘,而不会删除克隆的任何风险。
通过克隆磁盘的功能,您可以在不产生生产的情况下复制生产数据,在扩容虚拟机时复制磁盘,以及为数据库备份验证创建副本。您还可以克隆磁盘,以将非启动磁盘数据移动到新项目。对于需要数据保护以实现额外弹性的场景(例如备份和灾难恢复),我们建议使用标准快照,而不是磁盘克隆。
如果要以不同的间隔时间捕获磁盘的状态,但每次都不需要新的可挂接磁盘,请考虑使用即时快照。
虽然即时快照不适合灾难恢复,但比创建同一磁盘的多个克隆更具存储效率。这是因为即时快照是增量备份。
如果需要快速复制磁盘(例如用于快速调试),请使用磁盘克隆。
限制
- 克隆的磁盘类型必须与来源磁盘的相同。
- 您不能通过区域磁盘创建可用区磁盘克隆。
- 您不能在其他可用区中创建现有可用区磁盘的可用区磁盘克隆。
- 克隆的大小必须至少为来源磁盘的大小。如果您使用 Google Cloud 控制台创建克隆,则不能指定磁盘大小,并且克隆的大小与来源磁盘的大小相同。
- 如果您使用 CSEK(客户提供的加密密钥)或 CMEK(客户管理的加密密钥)对来源磁盘进行加密,则必须使用同一密钥对克隆进行加密。如需了解详情,请参阅创建加密来源磁盘的克隆。
- 您每 30 秒最多可以创建给定来源磁盘或其克隆的一个克隆。
- 您最多可以为给定来源磁盘或其克隆创建 1000 个同时磁盘克隆。如果超出此限制,则系统会返回
internalError
。但如果您创建磁盘克隆并在稍后将其删除,则所删除的磁盘克隆将不再计入此限制。 - 克隆磁盘后,该磁盘或其克隆的任何后续克隆都将计入原始来源磁盘的 1000 个同时磁盘克隆的限制,并计入每 30 秒最多创建一个克隆的限制。
错误消息
如果超出克隆频率限制,请求会失败,并显示以下错误:
RATE LIMIT: ERROR: (gcloud.compute.disks.create) Could not fetch resource: - Operation rate exceeded for resource RESOURCE. Too frequent operations from the source resource.
创建磁盘克隆
您可以使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API 将现有磁盘克隆到新磁盘中。控制台
在 Google Cloud 控制台中,转到磁盘页面。
在可用区级永久性磁盘列表中,找到要克隆的磁盘。
点击操作下的菜单按钮,然后选择克隆磁盘。
在克隆磁盘面板中,指定新磁盘的名称。
在属性下,查看新磁盘的其他详细信息。
点击保存。
gcloud
在 gcloud CLI 中,使用 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
替换以下内容:
Terraform
如需创建磁盘克隆,请使用 google_compute_disk
资源。
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
Go
Go
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Compute Engine Go API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 Compute Engine Java API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Compute Engine Python API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
在 API 中,构建对 compute.disks.insert
方法的 POST
请求。在请求正文中,指定 name
和 sourceDisk
参数。克隆会从来源磁盘继承所有省略的属性。以下示例将来源磁盘克隆到其他项目中的新磁盘:
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" }
替换以下内容:
通过可用区磁盘创建区域磁盘克隆
您可以通过克隆现有的可用区磁盘来创建新的区域磁盘。如需将可用区磁盘迁移到区域磁盘,Google 建议使用此选项,而不是创建可用区磁盘的快照并将快照恢复到新的区域磁盘。
限制
+ 如需从来源可用区磁盘创建区域磁盘克隆,其中一个克隆的副本可用区必须与来源磁盘的可用区匹配。创建后,区域磁盘克隆平均在 3 分钟内可用。但是,磁盘可能需要几十分钟才能完全复制,并达到恢复点目标 (RPO) 接近零的状态。
克隆磁盘空间的速率有限。您每 15 分钟最多可以创建 1 TB 的克隆磁盘,且突发请求限制为 257 TB。
控制台
在 Google Cloud 控制台中,转到磁盘页面。
在可用区级永久性磁盘列表中,找到要克隆的磁盘。
点击操作下的菜单按钮,然后选择克隆磁盘。
在克隆磁盘面板中,指定新磁盘的名称。
对于位置,选择区域,并为新的区域磁盘选择两个副本可用区。
在属性下,查看新磁盘的其他详细信息。
点击保存。
gcloud
使用以下 gcloud
compute disks create
命令从可用区磁盘创建区域磁盘克隆,并为新的区域磁盘提供来源磁盘和两个副本可用区。以下示例假定来源磁盘和目标磁盘位于同一项目中。
gcloud compute disks create TARGET_DISK_NAME \ --description="zonal to regional cloned disk" \ --region=REGION_1 \ --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=REGION_1_ZONE_1 \ --replica-zones=REGION_1_ZONE_1,REGION_1_ZONE_2 \ --project=PROJECT_ID
替换以下内容:
TARGET_DISK_NAME
:新的区域磁盘的名称REGION_1
:新的区域磁盘的区域SOURCE_DISK_NAME
:要克隆的可用区磁盘的名称REGION_1_ZONE_1
:新的区域磁盘的两个副本可用区之一REGION_1_ZONE_2
:新的区域磁盘的其他副本可用区PROJECT_ID
:项目 ID
Terraform
如需从可用区磁盘创建区域磁盘克隆,您可以选择创建可用区磁盘的快照,然后克隆快照。为此,请使用以下资源:
如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令。
Go
Go
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Compute Engine Go API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 Compute Engine Java API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Compute Engine Python API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
为新的区域磁盘提供来源磁盘和两个副本可用区。以下示例假定来源磁盘和目标磁盘位于同一项目中。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION_1/disks { "name": "TARGET_DISK_NAME" "sourceDisk": "projects/PROJECT_ID/zones/REGION_1_ZONE_1/disks/SOURCE_DISK_NAME" "replicaZone": "REGION_1_ZONE_1,REGION_1_ZONE_2" }
替换以下内容:
PROJECT_ID
:项目 IDREGION_1
:新的区域磁盘的区域TARGET_DISK_NAME
:新的区域磁盘的名称REGION_1_ZONE_1
:新的区域磁盘的两个副本可用区之一SOURCE_DISK_NAME
:要克隆的可用区磁盘的名称REGION_1_ZONE_2
:新的区域磁盘的其他副本可用区
创建加密来源磁盘的克隆
如果您使用客户提供的加密密钥对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。控制台
在 Google Cloud 控制台中,转到磁盘页面。
在可用区级永久性磁盘列表中,找到要克隆的磁盘。
点击操作下的菜单按钮,然后选择克隆磁盘。
在克隆磁盘面板中,指定新磁盘的名称。
在解密和加密下提供来源磁盘加密密钥。
在属性下,查看新磁盘的其他详细信息。
点击保存。
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
替换以下内容:
Go
Go
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Compute Engine Go API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 Compute Engine Java API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Compute Engine Python API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
请使用 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
替换以下内容:
Go
Go
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Go 设置说明进行操作。如需了解详情,请参阅 Compute Engine Go API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
Java
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Java 设置说明进行操作。如需了解详情,请参阅 Compute Engine Java API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
Python
试用此示例之前,请按照《Compute Engine 快速入门:使用客户端库》中的 Python 设置说明进行操作。如需了解详情,请参阅 Compute Engine Python API 参考文档。
如需向 Compute Engine 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST
在创建磁盘克隆时,请使用 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" }, }
替换以下内容: