本文档介绍了磁盘克隆的运作方式以及如何创建磁盘克隆。借助磁盘克隆,您可以立即创建现有磁盘的副本。如果您要创建可立即挂接到虚拟机的现有磁盘的相同副本,请创建磁盘克隆,具体如下:
- 复制生产数据以便在不干扰生产的情况下进行调试,从而创建预演环境
- 创建用于数据库备份验证的副本
- 将非启动磁盘数据移至新项目
- 在扩容虚拟机时复制磁盘
为了防范灾难恢复,请使用标准快照备份磁盘,而不是使用磁盘克隆。如需定期捕获磁盘内容,而无需创建新的磁盘,请使用即时快照,因为它们比克隆更节省存储空间。如需了解其他磁盘保护选项,请参阅数据保护选项。
准备工作
- 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
To initialize the gcloud CLI, run the following command:
gcloud init
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
To initialize the gcloud CLI, run the following command:
gcloud init
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
To initialize the gcloud CLI, run the following command:
gcloud init
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
To initialize the gcloud CLI, run the following command:
gcloud init
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
REST
如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证。
磁盘克隆的工作原理
克隆磁盘时,您会新建一个磁盘,其中包含来源磁盘上的所有数据。即使现有磁盘已挂接到虚拟机实例,您也可以创建磁盘克隆。
克隆的磁盘类型必须与来源磁盘的类型相同。但是,您可以修改克隆的属性,例如磁盘大小。您还可以删除来源磁盘,而不会造成删除克隆的任何风险。
支持的磁盘类型
您只能为以下磁盘类型创建磁盘克隆:
- Persistent Disk:所有类型的 Persistent Disk
- Google Cloud Hyperdisk:
- 平衡 Hyperdisk
- Hyperdisk Balanced 高可用性
- Hyperdisk Extreme
- Hyperdisk Throughput
限制
磁盘克隆存在以下限制,具体取决于磁盘类型:
一般限制
以下限制适用于所有磁盘类型的克隆:
- 克隆的磁盘类型必须与来源磁盘的相同。
- 您不能在其他可用区中创建现有可用区磁盘的可用区磁盘克隆。
- 克隆的大小必须至少为来源磁盘的大小。如果您使用 Google Cloud 控制台创建克隆,则不能指定磁盘大小,并且克隆的大小与来源磁盘的大小相同。
- 如果您使用 CSEK(客户提供的加密密钥)或 CMEK(客户管理的加密密钥)对来源磁盘进行加密,则必须使用同一密钥对克隆进行加密。如需了解详情,请参阅创建加密来源磁盘的克隆。
- 您无法在创建来源磁盘的克隆时删除来源磁盘。
- 在创建克隆时,来源磁盘挂接到的计算实例将无法启动。
- 如果来源磁盘已标记为与其关联的虚拟机一起删除,则您无法在创建克隆时删除该虚拟机。
- 您每 30 秒最多可以创建给定来源磁盘或其克隆的一个克隆。
- 您最多可以为给定来源磁盘或其克隆创建 1000 个同时磁盘克隆。如果超出此限制,则系统会返回
internalError
。但是,如果您创建磁盘克隆并在稍后将其删除,则所删除的磁盘克隆不会计入此限制。 - 克隆磁盘后,该磁盘或其克隆的任何后续克隆都会计入原始来源磁盘的 1,000 个同时磁盘克隆的限制,并计入每 30 秒最多创建一个克隆的限制。
- 如果您通过克隆可用区级磁盘来创建区域级磁盘,则每 15 分钟最多可以克隆 1 TiB 的容量,且突发请求限制为 257 TiB。
永久性磁盘克隆的限制
Persistent Disk 的磁盘克隆存在以下限制:
- 您不能通过区域磁盘创建可用区磁盘克隆。
- 如需通过可用区级来源磁盘创建区域级磁盘克隆,该区域级磁盘克隆的副本可用区必须与来源磁盘的可用区匹配。
- 创建后,区域级磁盘克隆平均在 3 分钟内可用。但是,磁盘可能需要几十分钟才能完全复制,并达到恢复点目标 (RPO) 接近零的状态。
- 如果您通过映像创建了可用区磁盘,则无法使用该可用区磁盘创建区域磁盘克隆。
Google Cloud Hyperdisk 克隆的限制
您无法通过克隆可用区磁盘来创建 Hyperdisk Balanced 高可用性磁盘。如需通过现有可用区磁盘创建 Hyperdisk Balanced 高可用性磁盘,请完成将可用区磁盘更改为区域级 Hyperdisk Balanced 高可用性磁盘中的步骤。
您无法克隆 Hyperdisk ML 卷。
错误消息
如果超出克隆频率限制,请求会失败,并显示以下错误:
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 或 REST 在与源磁盘相同的可用区中创建现有磁盘的可用区磁盘克隆。
控制台
在 Google Cloud 控制台中,前往磁盘页面。
在磁盘列表中,找到到要克隆的磁盘。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在位置字段中,验证是否已选中单个可用区。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
gcloud
如需克隆可用区级来源磁盘并创建新的可用区级磁盘,请运行 disks create
命令并指定 --source-disk
标志:
gcloud compute disks create TARGET_DISK_NAME \ --description="cloned disk" \ --source-disk=projects/PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME
替换以下内容:
TARGET_DISK_NAME
:新磁盘的名称。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。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
如需克隆可用区级来源磁盘并创建新的可用区级磁盘,请向 compute.disks.insert
方法发出 POST
请求。在请求正文中,指定 name
和 sourceDisk
参数。 磁盘克隆会从来源磁盘继承所有省略的属性。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "TARGET_DISK_NAME" "sourceDisk": "projects/PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME" }
替换以下内容:
PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。TARGET_DISK_NAME
:新磁盘的名称。SOURCE_DISK_NAME
:来源磁盘的名称
通过可用区磁盘创建区域磁盘克隆
您可以通过克隆现有的可用区级 Persistent Disk 卷来创建新的区域级 Persistent Disk 磁盘。如需将可用区级磁盘迁移到区域级磁盘,Google 建议使用此选项,而不是创建可用区级磁盘的快照并将快照恢复到新的区域级磁盘。
控制台
在 Google Cloud 控制台中,前往磁盘页面。
在磁盘列表中,找到要克隆的可用区级 Persistent Disk 卷。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在位置字段中,选择区域级,然后为新的区域级克隆磁盘选择次要副本可用区。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
gcloud
如需通过可用区磁级盘创建区域级磁盘克隆,请运行 gcloud compute disks create
命令并指定 --region
和 --replica-zones
参数。
gcloud compute disks create TARGET_DISK_NAME \ --description="zonal to regional cloned disk" \ --region=CLONED_REGION \ --source-disk=SOURCE_DISK_NAME \ --source-disk-zone=SOURCE_DISK_ZONE \ --replica-zones=SOURCE_DISK_ZONE,REPLICA_ZONE_2 \ --project=PROJECT_ID
替换以下内容:
TARGET_DISK_NAME
:新的区域级磁盘克隆的名称。CLONED_REGION
:来源磁盘和克隆磁盘的区域。SOURCE_DISK_NAME
:要克隆的可用区级磁盘的名称SOURCE_DISK_ZONE
:来源磁盘的可用区。这也是区域级磁盘克隆的第一个副本可用区。REPLICA_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
如需通过可用区级磁盘创建区域级磁盘克隆,请向 compute.disks.insert
方法发出 POST
请求并指定 sourceDisk
和 replicaZone
参数。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/CLONED_REGION/disks { "name": "TARGET_DISK_NAME" "sourceDisk": "projects/PROJECT_ID/zones/SOURCE_DISK_ZONE/disks/SOURCE_DISK_NAME" "replicaZone": "SOURCE_DISK_ZONE,REPLICA_ZONE_2" }
替换以下内容:
PROJECT_ID
:要在其中克隆磁盘的项目的 ID。TARGET_DISK_NAME
:新的区域级磁盘克隆的名称。CLONED_REGION
:来源磁盘和克隆磁盘的区域。SOURCE_DISK_NAME
:要克隆的可用区级磁盘的名称SOURCE_DISK_ZONE
:来源磁盘的可用区。这也是区域级磁盘克隆的第一个副本可用区。REPLICA_ZONE_2
:新的区域级磁盘克隆的第二个副本可用区。
创建加密来源磁盘的磁盘克隆
您可以使用客户提供的加密密钥 (CSEK) 或客户管理的加密密钥来加密磁盘。
为 CSEK 加密的磁盘创建磁盘克隆
如果您使用 CSEK 对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。
控制台
在 Google Cloud 控制台中,前往磁盘页面。
在可用区级永久性磁盘列表中,找到要克隆的磁盘。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在解密和加密字段中,提供来源磁盘加密密钥。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
gcloud
如需为 CSEK 加密的来源磁盘创建磁盘克隆,请运行 gcloud compute disks create
命令,并使用 --csek-key-file
标志提供来源磁盘加密密钥。如果您使用的是 RSA 封装密钥,请使用 gcloud beta compute disks create
命令。
gcloud compute disks create TARGET_DISK_NAME \ --description="cloned disk" \ --source-disk=projects/PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME \ --csek-key-file example-key-file.json
替换以下内容:
TARGET_DISK_NAME
:新磁盘的名称。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。SOURCE_DISK_NAME
:来源磁盘的名称
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
如需为 CSEK 加密的来源磁盘创建磁盘克隆,请向 compute.disks.insert
方法发出 POST
请求,并使用 diskEncryptionKey
属性提供来源磁盘加密密钥。如果您使用的是 RSA 封装密钥,请使用该方法的 beta
版本。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "TARGET_DISK_NAME" "sourceDisk": "projects/PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME" "diskEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, }
替换以下内容:
PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。TARGET_DISK_NAME
:新磁盘的名称。SOURCE_DISK_NAME
:来源磁盘的名称
为 CMEK 加密的磁盘创建磁盘克隆
如果您使用 CMEK 对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。
控制台
Compute Engine 会使用来源磁盘加密密钥自动对克隆进行加密。
gcloud
如需为 CMEK 加密的来源磁盘创建磁盘克隆,请运行 gcloud compute disks create
命令,并使用 --kms-key
标志提供来源磁盘加密密钥。如果您使用的是 RSA 封装密钥,请使用 gcloud beta compute disks create
命令。
gcloud compute disks create TARGET_DISK_NAME \ --description="cloned disk" \ --source-disk=projects/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
如需为 CMEK 加密的来源磁盘创建磁盘克隆,请向 compute.disks.insert
方法发出 POST
请求,并使用 kmsKeyName
属性提供来源磁盘加密密钥。如果您使用的是 RSA 封装密钥,请使用该方法的 beta
版本。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/disks { "name": "TARGET_DISK_NAME" "sourceDisk": "projects/PROJECT_ID/zones/ZONE/disks/SOURCE_DISK_NAME" "diskEncryptionKey": { "kmsKeyName": "projects/KMS_PROJECT_ID/locations/REGION/keyRings/KEY_RING/cryptoKeys/KEY" }, }
替换以下内容:
后续步骤
- 了解如何定期使用标准快照备份磁盘,防止意外丢失数据。
- 了解如何使用即时快照原地备份磁盘。
- 了解如何使用区域级永久性磁盘实现两个可用区之间的同步复制。
- 了解异步复制。