处理将虚拟机移动到资源组或订阅时的特殊情况

本文介绍将虚拟机移动到新资源组或 Azure 订阅时需要额外步骤的特殊情况。 如果虚拟机使用磁盘加密、市场计划或 Azure 备份,则必须使用本文中描述的解决方法之一。 对于所有其他方案,请使用 Azure 门户Azure CLIAzure PowerShell 的标准操作移动虚拟机。 对于 Azure CLI,请使用 az resources move 命令。 对于 Azure PowerShell,请使用 Move-AzResource 命令。

若要将虚拟机移到新区域,请参阅教程:跨区域移动 Azure VM

不支持的方案

以下方案尚不受支持:

  • 无法移动具有标准 SKU 负载均衡器或标准 SKU 公共 IP 的虚拟机规模集。

  • 仅当现有虚拟网络及其所有相关资源也被移动时,才能将该虚拟网络中的虚拟机移到新订阅。

  • 无法跨订阅移动基于附加了计划的市场资源创建的虚拟机。 有关可能的解决方法,请参阅具有 Azure 市场计划的虚拟机

  • 可用性集中的虚拟机不能单独移动。

  • 不能跨资源组或订阅移动使用计划的修补的虚拟机。 有关可能的解决方法,请参阅《使用维护配置管理 VM 更新

Azure 磁盘加密

与 Key Vault 集成以实现适用于 Linux VM 的 Azure 磁盘加密适用于 Windows VM 的 Azure 磁盘加密的虚拟机处于解除分配状态时,可移动到其他资源组。

但是,若要将此类虚拟机移到其他订阅,必须禁用加密。

az vm encryption disable --resource-group demoRG --name myVm1 --volume-type all

具有 Azure 市场计划的虚拟机

无法跨订阅移动基于附加了计划的市场资源创建的虚拟机。 若要解决此限制问题,可以取消预配当前订阅中的虚拟机,并在新订阅中再次部署该虚拟机。 通过以下步骤可在新订阅中重新创建虚拟机。 但不一定适用于所有方案。 如果该计划在 Azure 市场中不再可用,这些步骤将不起作用。

  1. 获取有关计划的信息。

    az vm show --resource-group demoRG --name myVm1 --query plan
    
  2. 请检查该产品/服务是否仍然在市场中。

    az vm image list-skus --publisher Fabrikam --offer LinuxServer --location chinaeast
    
  3. 将 OS 磁盘克隆到目标订阅,或在源订阅中删除虚拟机后移动原始磁盘。

  4. 在目标订阅中,接受相关计划的 Azure 市场条款。 可以通过运行以下 PowerShell 命令来接受这些条款:

    az vm image terms accept --publisher {publisher} --offer {product/offer} --plan {name/SKU}
    

    或可以通过门户使用相关计划创建虚拟机的新实例。 在接受新订阅中的条款后可以删除虚拟机。

  5. 在目标订阅中,使用 PowerShell、CLI 或 Azure 资源管理器模板从克隆的 OS 磁盘中重新创建该虚拟机。 包含附加到磁盘的市场计划。 有关计划的信息应与在新订阅中购买的计划匹配。 有关详细信息,请参阅创建 VM

有关详细信息,请参阅将 Azure 市场虚拟机迁移到其他订阅

使用 Azure 备份的虚拟机

若要移动使用 Azure 备份配制的虚拟机,必须从保管库中删除还原点集合(快照)。 可以保留和移动已复制到保管库的还原点。

如果为虚拟机启用了软删除,则在保留这些还原点的情况下,你将无法移动虚拟机。 请禁用软删除,或在删除还原点后等待 14 天。

门户

  1. 暂时停止备份并保留备份数据。

  2. 若要移动配置了 Azure 备份的虚拟机,请执行以下步骤:

    1. 查找包含备份的资源组。 如果使用了默认资源组,它会具有以下命名模式:AzureBackupRG_<VM location>_1。 例如,名称的格式为 AzureBackupRG_chinanorth2_1。

      如果创建了自定义资源组,请选择该资源组。 如果找不到资源组,请在门户中搜索“还原点集合”。 查找具有命名模式 AzureBackup_<VM name>_########### 的集合。

    2. 选择具有命名模式 AzureBackup_<VM name>_########### 的还原点集合类型的资源。

    3. 删除此资源。 此操作仅删除即时恢复点,不删除保管库中的备份数据。

    4. 删除操作完成后,可以移动虚拟机。

  3. 将 VM 移到目标资源组。

  4. 重新配置备份。

Script

  1. 查找包含备份的资源组。 如果使用了默认资源组,它会具有以下命名模式:AzureBackupRG_<VM location>_1。 例如,名称的格式为 AzureBackupRG_chinanorth2_1。

    如果创建了自定义资源组,请查找该资源组。 如果找不到资源组,请使用以下命令,并提供虚拟机的名称。

    az resource list --resource-type Microsoft.Compute/restorePointCollections --query "[?starts_with(name, 'AzureBackup_<vm-name>')].resourceGroup"
    
  2. 如果只移动一个虚拟机,请获取该虚拟机的还原点集合。

    RESTOREPOINTCOL=$(az resource list -g AzureBackupRG_<VM location>_1 --resource-type Microsoft.Compute/restorePointCollections --query "[?starts_with(name, 'AzureBackup_<VM name>')].id" --output tsv)
    

    删除此资源。 此操作仅删除即时恢复点,不删除保管库中的备份数据。

    az resource delete --ids $RESTOREPOINTCOL
    
  3. 如果要在此位置将所有虚拟机与备份一起移动,请获取这些虚拟机的还原点集合。

    RESTOREPOINTCOL=$(az resource list -g AzureBackupRG_<VM location>_1 --resource-type Microsoft.Compute/restorePointCollections)
    

    删除每个资源。 此操作仅删除即时恢复点,不删除保管库中的备份数据。

    az resource delete --ids $RESTOREPOINTCOL
    

后续步骤