Compartir a través de

将 Windows 虚拟机从非托管磁盘迁移到managed disks

适用于:✔️ Windows VM

2026 年 3 月 31 日,非托管磁盘即将停用。 如果使用非托管磁盘,请在该日期之前迁移到托管磁盘。 有关退役的详细信息,请参阅 在 2026 年 3 月 31 日之前迁移您的 Azure 非托管磁盘

如果有使用非托管磁盘的现有 Windows 虚拟机(VM),可以通过 Azure Managed Disks 服务将这些虚拟机迁移到使用托管磁盘。 此过程同时转换操作系统 (OS) 磁盘和任何附加的数据磁盘。

在开始之前

  • 该迁移将重启 VM,因此请在预先存在的维护时段内规划 VM 迁移。

  • 该迁移不可逆。

  • 请务必测试迁移。 在生产环境中执行迁移之前,应先在测试环境中迁移虚拟机。

  • 在迁移过程中,您需要解除分配该虚拟机。 迁移完成后,VM 在启动时会接收新的 IP 地址。 如果需要,可向 VM 分配静态 IP 地址

  • 查看支持迁移过程所需的Azure VM 代理的最低版本。 有关如何检查和更新代理版本的信息,请参阅 Azure 中的虚拟机代理最低版本支持

  • 不会删除迁移之前 VM 使用的原始 VHD 和 storage 帐户。 它们会继续产生费用。 若要避免为这些工件计费,请在验证迁移完成后删除原始 VHD blob 数据。 如果需要查找这些未附加的磁盘以删除这些磁盘,请参阅我们的文章 Find 并删除未附加的Azure托管和非托管磁盘

迁移单实例虚拟机

本部分介绍如何将单实例Azure VM 从非托管磁盘迁移到managed disks。 (如果虚拟机位于可用性集中,请参阅下一部分。)

  1. 使用 Stop-AzVM cmdlet 解除分配 VM。 以下示例将资源组名为 myVM 中的 VM 名为 myResourceGroup 解除分配:

    $rgName = "myResourceGroup"
    $vmName = "myVM"
    Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
    
  2. 使用 ConvertTo-AzVMManagedDisk cmdlet 将 VM 迁移到 managed disks。 以下过程转换之前的 VM,包括 OS 磁盘和任何数据磁盘,并启用虚拟机:

    ConvertTo-AzVMManagedDisk -ResourceGroupName $rgName -VMName $vmName
    

迁移可用性集中的虚拟机 (VM)

如果要将虚拟机迁移到托管磁盘,而这些虚拟机位于可用性集中,则首先需要将可用性集迁移到托管可用性集。

  1. 使用 Update-AzAvailabilitySet cmdlet 迁移可用性集。 以下示例在名为 myAvailabilitySet 的资源组中更新名为 myResourceGroup 的可用性集:

    $rgName = 'myResourceGroup'
    $avSetName = 'myAvailabilitySet'
    
    $avSet = Get-AzAvailabilitySet -ResourceGroupName $rgName -Name $avSetName
    Update-AzAvailabilitySet -AvailabilitySet $avSet -Sku Aligned 
    

    如果可用性集所在的区域只有 2 个托管容错域,但却有 3 个非托管容错域,则此命令会显示类似于“指定的容错域计数为 3,但该计数必须在 1 到 2 的范围内。”的错误消息。若要解决此错误,请将容错域更新为 2,并按如下所示将 Sku 更新为 Aligned

    $avSet.PlatformFaultDomainCount = 2
    Update-AzAvailabilitySet -AvailabilitySet $avSet -Sku Aligned
    
  2. 解除分配 VM,并迁移可用性集中的 VM。 以下脚本使用 Stop-AzVM cmdlet 解除分配每个 VM,使用 ConvertTo-AzVMManagedDisk 进行转换,并在迁移过程结束后自动将其重启:

    $avSet = Get-AzAvailabilitySet -ResourceGroupName $rgName -Name $avSetName
    
    foreach($vmInfo in $avSet.VirtualMachinesReferences)
    {
      $vm = Get-AzVM -ResourceGroupName $rgName | Where-Object {$_.Id -eq $vmInfo.id}
      Stop-AzVM -ResourceGroupName $rgName -Name $vm.Name -Force
      ConvertTo-AzVMManagedDisk -ResourceGroupName $rgName -VMName $vm.Name
    }
    

故障排除

  • 在转换之前,确保所有 VM 扩展都处于“预配成功”状态,否则迁移将失败,并出现错误代码 409。
  • 如果迁移过程中出现错误,或先前迁移中的问题导致 VM 处于“失败”状态,请再次运行 ConvertTo-AzVMManagedDisk cmdlet。 简单的重试通常可以解决问题。
  • 如果要将 Linux VM 转换为managed disks,请使用最新版本的 Azure Linux 代理。 使用 Azure Linux 代理版本“2.2.0”和更早版本的作可能会失败。 也不支持在通用 VM 或属于经典可用性集的 VM 上运行迁移。
  • 如果迁移失败并出现“SnapshotCountExceeded”错误,请删除一些快照并重试该操作。

使用Azure portal进行迁移

还可以通过使用 Azure 门户将非托管磁盘迁移到托管磁盘。

  1. 登录到 Azure portal
  2. 从门户的虚拟机列表中选择虚拟机。
  3. 在 VM 的边栏选项卡中,从菜单中选择“磁盘”。
  4. 在“Disks”边栏选项卡顶部,选择“迁移到托管磁盘”。
  5. 如果您的 VM 位于可用性集中,首先需要迁移可用性集。在迁移到托管磁盘边栏选项卡上会出现警告。 此警告应该有一个链接,单击该链接即可迁移可用性集。 一旦可用性集被转换,或如果您的 VM 不在可用性集中,请单击Migrate以开始将磁盘迁移到托管磁盘的过程。

VM 将会停止并在完成迁移后重新启动。

后续步骤

更改 Azure 托管磁盘的磁盘类型

通过使用快照来获取 VM 的只读副本。