本文档介绍了磁盘克隆的运作方式以及如何创建磁盘克隆。借助磁盘克隆,您可以立即创建现有磁盘的副本。如果您要创建可立即挂接到虚拟机的现有磁盘的相同副本,请创建磁盘克隆,具体如下:
- 复制生产数据以便在不干扰生产的情况下进行调试,从而创建预演环境
- 创建用于数据库备份验证的副本
- 将非启动磁盘数据移至新项目
- 在扩容虚拟机时复制磁盘
为了防范灾难恢复,请使用标准快照备份磁盘,而不是使用磁盘克隆。如需定期捕获磁盘内容,而无需创建新的磁盘,请使用即时快照,因为它们比克隆更节省存储空间。如需了解其他磁盘保护选项,请参阅数据保护选项。
准备工作
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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.
- Persistent Disk:所有类型的 Persistent Disk
- Google Cloud Hyperdisk:Hyperdisk Balanced、Hyperdisk Extreme 和 Hyperdisk Throughput
- 克隆的磁盘类型必须与来源磁盘的相同。
- 您不能在其他可用区中创建现有可用区磁盘的可用区磁盘克隆。
- 克隆的大小必须至少为来源磁盘的大小。如果您使用 Google Cloud 控制台创建克隆,则不能指定磁盘大小,并且克隆的大小与来源磁盘的大小相同。
- 如果您使用 CSEK(客户提供的加密密钥)或 CMEK(客户管理的加密密钥)对来源磁盘进行加密,则必须使用同一密钥对克隆进行加密。如需了解详情,请参阅创建加密来源磁盘的克隆。
- 您无法在创建来源磁盘的克隆时删除来源磁盘。
- 在创建克隆时,来源磁盘挂接到的计算实例将无法启动。
- 如果来源磁盘已标记为与其关联的虚拟机一起删除,则您无法在创建克隆时删除该虚拟机。
- 您每 30 秒最多可以创建给定来源磁盘或其克隆的一个克隆。
- 您最多可以为给定来源磁盘或其克隆创建 1000 个同时磁盘克隆。如果超出此限制,则系统会返回
internalError
。但是,如果您创建磁盘克隆并在稍后将其删除,则所删除的磁盘克隆不会计入此限制。 - 克隆磁盘后,该磁盘或其克隆的任何后续克隆都会计入原始来源磁盘的 1,000 个同时磁盘克隆的限制,并计入每 30 秒最多创建一个克隆的限制。
- 如果您通过克隆可用区级磁盘来创建区域级磁盘,则每 15 分钟最多可以克隆 1 TiB 的容量,且突发请求限制为 257 TiB。
- 您不能通过区域磁盘创建可用区磁盘克隆。
- 如需通过可用区级来源磁盘创建区域级磁盘克隆,该区域级磁盘克隆的副本可用区必须与来源磁盘的可用区匹配。
- 创建后,区域级磁盘克隆平均在 3 分钟内可用。但是,磁盘可能需要几十分钟才能完全复制,并达到恢复点目标 (RPO) 接近零的状态。
- 如果您通过映像创建了可用区磁盘,则无法使用该可用区磁盘创建区域磁盘克隆。
在 Google Cloud 控制台中,转到磁盘页面。
在磁盘列表中,找到到要克隆的磁盘。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在位置字段中,验证是否已选中单个可用区。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
TARGET_DISK_NAME
:新磁盘的名称。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。SOURCE_DISK_NAME
:来源磁盘的名称。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。TARGET_DISK_NAME
:新磁盘的名称。SOURCE_DISK_NAME
:来源磁盘的名称在 Google Cloud 控制台中,转到磁盘页面。
在磁盘列表中,找到要克隆的可用区级 Persistent Disk 卷。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在位置字段中,选择区域级,然后为新的区域级克隆磁盘选择次要副本可用区。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
TARGET_DISK_NAME
:新的区域级磁盘克隆的名称。CLONED_REGION
:来源磁盘和克隆磁盘的区域。SOURCE_DISK_NAME
:要克隆的可用区级磁盘的名称SOURCE_DISK_ZONE
:来源磁盘的可用区。这也是区域级磁盘克隆的第一个副本可用区。REPLICA_ZONE_2
:新的区域级磁盘克隆的第二个副本可用区。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。TARGET_DISK_NAME
:新的区域级磁盘克隆的名称。CLONED_REGION
:来源磁盘和克隆磁盘的区域。SOURCE_DISK_NAME
:要克隆的可用区级磁盘的名称SOURCE_DISK_ZONE
:来源磁盘的可用区。这也是区域级磁盘克隆的第一个副本可用区。REPLICA_ZONE_2
:新的区域级磁盘克隆的第二个副本可用区。在 Google Cloud 控制台中,转到磁盘页面。
在可用区级永久性磁盘列表中,找到要克隆的磁盘。
在操作列中,点击
菜单按钮,然后选择克隆磁盘。在显示的克隆磁盘面板中,执行以下操作:
- 在名称字段中,为克隆的磁盘指定名称。
- 在解密和加密字段中,提供来源磁盘加密密钥。
- 在属性下,查看克隆的磁盘的其他详细信息。
- 如需完成克隆的磁盘的创建,请点击创建。
TARGET_DISK_NAME
:新磁盘的名称。PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。SOURCE_DISK_NAME
:来源磁盘的名称PROJECT_ID
:要在其中克隆磁盘的项目的 ID。ZONE
:来源磁盘和新磁盘的可用区。TARGET_DISK_NAME
:新磁盘的名称。SOURCE_DISK_NAME
:来源磁盘的名称- 了解如何定期使用标准快照备份磁盘,防止意外丢失数据。
- 了解如何使用即时快照在原地备份磁盘。
- 了解如何使用区域级永久性磁盘实现两个可用区之间的同步复制。
- 了解 Persistent Disk 异步复制(PD 异步复制)。
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Go
如需在本地开发环境中使用本页面上的 Go 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Java
如需在本地开发环境中使用本页面上的 Java 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 Set up authentication for a local development environment。
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 Balanced、Hyperdisk Extreme 和 Hyperdisk Throughput 卷创建磁盘克隆。
错误消息
如果超出克隆频率限制,请求会失败,并显示以下错误:
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 在与源磁盘相同的可用区中创建现有磁盘的可用区磁盘克隆。
控制台
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
替换以下内容:
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" }
替换以下内容:
通过可用区磁盘创建区域磁盘克隆
您可以通过克隆现有的可用区 Persistent Disk 卷来创建新的区域级永久性磁盘。如需将可用区级磁盘迁移到区域级磁盘,Google 建议使用此选项,而不是创建可用区级磁盘的快照并将快照恢复到新的区域级磁盘。
控制台
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
替换以下内容:
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" }
替换以下内容:
创建加密来源磁盘的磁盘克隆
您可以使用客户提供的加密密钥 (CSEK) 或客户管理的加密密钥来加密磁盘。
为 CSEK 加密的磁盘创建磁盘克隆
如果您使用 CSEK 对来源磁盘进行加密,则还必须使用同一密钥对克隆进行加密。
控制台
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
替换以下内容:
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==" }, }
替换以下内容:
为 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" }, }
替换以下内容:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-22。
-