本文档介绍如何在可用区或区域之间移动虚拟机 (VM) 实例。
准备工作
- 阅读地区文档。
-
如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
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.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
项目配额。您的项目必须具有足够的配额才能执行以下操作:
- 创建新快照。
- 升级任何临时外部 IP 地址。
在目标区域中创建新的虚拟机和磁盘。
例如,如果您要移动的虚拟机挂接了三个磁盘,则需要足够的配额来创建三个临时永久性磁盘快照和三个新磁盘。创建新磁盘后,您可以删除临时快照。
Persistent Disk。挂接到要移动的虚拟机的永久性磁盘未挂接到其他虚拟机。
本地 SSD。本地 SSD 用于临时存储,本地 SSD 上的数据不会通过手动虚拟机终止来保留。如果您需要保留本地 SSD 数据,请使用永久性磁盘等持久性存储选项对其进行复制。
GPU。如果您的虚拟机包含 GPU,请验证并确保您要使用的 GPU 在虚拟机的目标可用区中可用。有关 GPU 及其相应可用可用区的列表,请参阅 Compute Engine 上的 GPU。
子网。如果您要在区域之间移动虚拟机,例如在
us-west1-a
和asia-south1-b
之间,并且您的虚拟机属于子网,则必须为虚拟机选择新的子网。如需了解如何创建子网,请参阅添加子网。- 虚拟机的来源磁盘网址
- 虚拟机的机器类型网址
- 页内链接网址
- 可用区网址
- 磁盘类型网址
- 磁盘的
users[]
列表中所列虚拟机的任何网址 - 创建来源虚拟机的机器映像。
- 通过位于其他可用区或区域的机器映像创建虚拟机。
找出与您要移动的虚拟机关联的磁盘。
gcloud compute instances describe myinstance --format="list(name,status,disks)"
在此示例中,您将找到
myinstance
虚拟机的以下两个关联磁盘:- 名为
mybootdisk
的启动磁盘 - 名为
mydatadisk
的数据磁盘
- 名为
将
mybootdisk
和mydatadisk
的自动删除状态设置为false
,以确保在删除虚拟机时不会自动删除磁盘。gcloud compute instances set-disk-auto-delete myinstance --zone europe-west1-c \ --disk mybootdisk --no-auto-delete
如果状态已更新,则
gcloud compute
将返回响应Updated [...]
。如果自动删除状态原来已设置为 false,则gcloud compute
将返回以下响应:No change requested; skipping update for [myinstance].
(可选)保存虚拟机元数据。
删除虚拟机时,虚拟机元数据也将一并移除。您可以将该信息保存在单独的文件中,然后将虚拟机元数据重新应用到新虚拟机。
按照以下方式描述虚拟机的元数据:
gcloud compute instances describe myinstance --zone europe-west1-c
将内容保存到单独文件中。
使用永久性磁盘快照创建数据的备份。
为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。
清空磁盘缓冲区后,按如下所示创建快照:
gcloud compute disks snapshot mybootdisk mydatadisk \ --snapshot-names backup-mybootsnapshot,backup-mydatasnapshot \ --zone europe-west1-c
如需验证快照是否已创建,请运行
gcloud compute snapshots list
。(可选)如果您要跨同一区域内的多个可用区移动虚拟机,并且希望保留其临时内部或外部 IP 地址,请将该内部或外部 IP 地址升级为静态 IP 地址,以便稍后可以重复使用。
删除您的虚拟机。
删除虚拟机会彻底关停虚拟机并分离任何永久性磁盘。
gcloud compute instances delete myinstance --zone europe-west1-c
gcloud
会提示您确认删除:The following VMs are deleted. Any attached disks configured to be auto-deleted are deleted unless they are attached to any other VMs or the `--keep-disks` flag is given and specifies them for keeping. Deleting a disk is irreversible and any data on the disk is lost. — [myinstance] in [europe-west1-c]
Do you want to continue (Y/n)?
由于您先前在此过程中关闭了磁盘的自动删除状态,因此,请输入 Y 以继续并忽略该警告。
接着,创建启动磁盘和数据磁盘的另一个快照。
gcloud compute disks snapshot mybootdisk mydatadisk \ --snapshot-names mybootsnapshot,mydatasnapshot \ --zone europe-west1-c
Created [.../mydatasnapshot]. Created [.../mybootsnapshot].
(可选)删除永久性磁盘。
如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。
如果您不打算重复使用相同的磁盘名称,您无需将其删除。
gcloud compute disks delete mybootdisk mydatadisk --zone europe-west1-c
使用创建的快照在
us-west1-b
中创建新的永久性磁盘。首先创建启动磁盘。gcloud compute disks create mybootdiskb --source-snapshot mybootsnapshot \ --zone us-west1-b
Created [.../mybootdiskb]. NAME ZONE SIZE_GB TYPE STATUS mybootdiskb us-west1-b 100 pd-standard READY
然后创建数据磁盘。
gcloud compute disks create mydatadiskb --source-snapshot mydatasnapshot \ --zone us-west1-b
Created [.../mydatadiskb]. NAME ZONE SIZE_GB TYPE STATUS mydatadiskb us-west1-b 4000 pd-standard READY
在
us-west1-b
中重新创建虚拟机。如果您选择将虚拟机元数据保存在一个文件中,例如
myinstance.describe
中,则可以使用它在虚拟机上设置相同的元数据。如果虚拟机具有静态外部 IP 地址,您可以通过指定
--address [ADDRESS]
选项将该地址重新分配给新虚拟机。如果您要跨区域移动虚拟机,则必须为新的虚拟机实例选择其他外部 IP 地址。如果虚拟机具有静态内部 IP 地址,您可以通过指定
--private-network-ip ADDRESS
选项将该地址重新分配给新虚拟机。如果您要跨区域移动虚拟机,则必须为新的虚拟机实例选择其他内部 IP 地址。如果您的虚拟机包含 GPU,请使用
--accelerator
选项将 GPU 添加到虚拟机。如果虚拟机使用特定子网,请添加
--subnet [SUBNET_NAME]
标志。
如需了解其他标志的完整列表,请参阅 gcloud compute 实例创建。
gcloud compute instances create myinstanceb --machine-type n1-standard-4 \ --zone us-west1-b \ --disk name=mybootdiskb,boot=yes,mode=rw \ --disk name=mydatadiskb,mode=rw
Created [.../myinstanceb]. NAME ZONE MACHINE_TYPE INTERNAL_IP EXTERNAL_IP STATUS myinstanceb us-west1-b n1-standard-4 10.240.173.229 146.148.112.106 RUNNING
(可选)删除永久性磁盘快照。
在您确认虚拟机已完成移动后,可删除创建的临时快照以节省存储费用。
gcloud compute snapshots delete mybootsnapshot mydatasnapshot
如果您不再需要备份快照,也请删除这些快照:
gcloud compute snapshots delete backup-mybootsnapshot backup-mydatasnapshot
获取虚拟机的详细信息,并找到挂接到虚拟机的磁盘。
将启动磁盘和数据磁盘的自动删除状态设置为
false
,以确保在删除虚拟机时不会自动删除磁盘。使用永久性磁盘快照创建数据的备份。
为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。
清空磁盘缓冲区后,按如下所示创建快照:
从源可用区中删除虚拟机。
接着,创建启动磁盘和数据磁盘的另一个快照。
(可选)删除永久性磁盘。
如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。
如果您不打算重复使用相同的磁盘名称,您无需将其删除。
使用创建的快照在目标可用区中创建新的永久性磁盘。首先创建启动磁盘,然后创建数据磁盘。
使用目标可用区中的新磁盘重新创建虚拟机。
(可选)删除临时磁盘快照。在您确认虚拟机已完成移动后,可删除创建的临时快照以节省存储费用。
获取虚拟机的详细信息,并找到挂接到虚拟机的磁盘。
将启动磁盘和数据磁盘的自动删除状态设置为
false
,以确保在删除虚拟机时不会自动删除磁盘。使用永久性磁盘快照创建数据的备份。
为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。
清空磁盘缓冲区后,按如下所示创建快照:
从源可用区中删除虚拟机。
接着,创建启动磁盘和数据磁盘的另一个快照。
(可选)删除永久性磁盘。
如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。
如果您不打算重复使用相同的磁盘名称,您无需将其删除。
使用创建的快照在目标可用区中创建新的永久性磁盘。首先创建启动磁盘,然后创建数据磁盘。
使用目标可用区中的新磁盘重新创建虚拟机。
(可选)删除临时磁盘快照。在您确认虚拟机已完成移动后,可删除创建的临时快照以节省存储费用。
获取虚拟机的详细信息,并找到挂接到虚拟机的磁盘。
将启动磁盘和数据磁盘的自动删除状态设置为
false
,以确保在删除虚拟机时不会自动删除磁盘。使用永久性磁盘快照创建数据的备份。
为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。
清空磁盘缓冲区后,按如下所示创建快照:
从源可用区中删除虚拟机。
接着,创建启动磁盘和数据磁盘的另一个快照。
(可选)删除永久性磁盘。
如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。
如果您不打算重复使用相同的磁盘名称,您无需将其删除。
使用创建的快照在目标可用区中创建新的永久性磁盘。首先创建启动磁盘,然后创建数据磁盘。
使用目标可用区中的新磁盘重新创建虚拟机。
(可选)删除临时磁盘快照。在您确认虚拟机已完成移动后,可删除创建的临时快照以节省存储费用。
获取虚拟机的详细信息,并找到挂接到虚拟机的磁盘。
将启动磁盘和数据磁盘的自动删除状态设置为
false
,以确保在删除虚拟机时不会自动删除磁盘。使用永久性磁盘快照创建数据的备份。
为保险起见,请在永久性磁盘仍挂接到虚拟机时使用永久性磁盘快照创建数据的备份。在截取快照之前,请务必遵循快照最佳做法,确保快照与永久性磁盘的状态一致。
清空磁盘缓冲区后,按如下所示创建快照:
从源可用区中删除虚拟机。
接着,创建启动磁盘和数据磁盘的另一个快照。
(可选)删除永久性磁盘。
如果打算为新磁盘重复使用永久性磁盘的名称,必须删除现有磁盘以释放这些名称。此外,删除磁盘还可以节省永久性磁盘存储费用。
如果您不打算重复使用相同的磁盘名称,您无需将其删除。
使用创建的快照在目标可用区中创建新的永久性磁盘。首先创建启动磁盘,然后创建数据磁盘。
使用目标可用区中的新磁盘重新创建虚拟机。
(可选)删除临时磁盘快照。在您确认虚拟机已完成移动后,可删除创建的临时快照以节省存储费用。
- 了解如何为项目更改默认地区/区域。
- 了解实时迁移。
- 检查虚拟机的状态。
- 了解如何将虚拟机迁移到 Compute Engine。
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。
Node.js
如需在本地开发环境中使用本页面上的 Node.js 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
Python
如需在本地开发环境中使用本页面上的 Python 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。
如需了解详情,请参阅 Set up authentication for a local development environment。 如需了解详情,请参阅身份验证文档中的为本地开发环境设置 ADC。
要求
本部分列出了在可用区和区域之间移动虚拟机的要求:
限制
如果您跨区域移动虚拟机,则无法保留虚拟机的临时内部或外部 IP 地址。您必须在重新创建虚拟机时选择新的 IP 地址。
资源属性
如需移动虚拟机,您必须关停该虚拟机,将其移至目标可用区或区域,然后重启。移动虚拟机后,请更新您对原始资源的任何引用,例如指向旧虚拟机的任何目标虚拟机或目标池。
在移动过程中,虚拟机和磁盘的某些服务器生成的属性会发生变化。
针对虚拟机更改的属性
下表介绍了针对虚拟机更改的属性:
属性名称 更改 内部 IP 地址 系统通常会分配新的内部 IP 地址,但虚拟机可能会保留原始的内部 IP 地址。 外部 IP 地址 如果在同一区域内的可用区之间移动虚拟机,则外部 IP 地址将保持不变。否则,请为虚拟机实例选择其他外部 IP 地址。 CPU 平台 根据目标可用区中的可用 CPU 平台,您的虚拟机在移动后可能具有不同的 CPU 平台。如需查看各地区中 CPU 平台的完整列表,请参阅可用区域和地区。 网络/子网 如果您的虚拟机属于某个子网,并且您要跨区域移动虚拟机,则必须为虚拟机选择新的子网。在同一区域内跨可用区移动的虚拟机保留相同的子网。 针对磁盘更改的属性
下表介绍了针对磁盘更改的属性:
属性名称 更改 来源快照 新磁盘的来源快照设置为移动期间创建的临时快照。 来源快照 ID 来源快照 ID 设置为临时快照的 ID。 来源映像 来源映像字段为空。 映像 ID 映像 ID 为空。 上次分离时间戳 上次分离时间戳为空。 上次附加时间戳 上次挂接时间戳更改为新磁盘挂接到新实例时的时间戳。 针对虚拟机和磁盘更改的属性
下表介绍了针对虚拟机和磁盘更改的属性:
属性名称 更改 ID 生成新的资源 ID。 创建时间戳 生成新的创建时间戳。 地区资源网址 所有地区资源网址都会更改,以反映目标地区。下面的列表显示了更改的资源网址: 跨可用区或区域移动虚拟机
如需跨可用区或区域移动虚拟机,您可以执行以下操作:
以下示例展示了如何跨可用区移动虚拟机。
gcloud
在本示例中,您将名为
myinstance
的虚拟机(具有两个名为mybootdisk
和mydatadisk
的永久性磁盘)从europe-west1-c
移动到us-west1-b
。Go
Java
Node.js
Python
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2025-06-24。
-