将 Windows 虚拟机从非托管磁盘迁移到托管磁盘
适用于:✔️ Windows VM
如果有使用非托管磁盘的现有 Windows 虚拟机 (VM),可通过 Azure 托管磁盘服务迁移 VM 以使用托管磁盘。 此过程同时转换操作系统 (OS) 磁盘和任何附加的数据磁盘。
准备阶段
请查看计划迁移到托管磁盘。
请查看有关迁移到托管磁盘的常见问题。
在转换之前,请确保 VM 处于正常状态。
该迁移将重启 VM,因此请在预先存在的维护时段内规划 VM 迁移。
该迁移不可逆。
任何具有虚拟机参与者角色的用户将不能更改 VM 大小(因为它们可以预迁移)。 这是因为包含托管磁盘的 VM 要求用户对 OS 磁盘具有 Microsoft.Compute/disks/write 权限。
请务必测试迁移。 在生产环境中执行迁移之前迁移测试性虚拟机。
在迁移过程中,将解除分配 VM。 迁移完成后,VM 在启动时会接收新的 IP 地址。 如果需要,可向 VM 分配静态 IP 地址。
查看 Azure VM 代理支持迁移过程所需的最低版本。 有关如何检查和更新代理版本的信息,请参阅 Azure 中 VM 代理的最低版本支持
- 不会删除在迁移之前由 VM 使用的原始 VHD 和存储帐户。 它们会继续产生费用。 若要避免这些项目产生的费用,请在验证迁移已完成后删除原始的 VHD Blob。 如果需要找到这些未附加的磁盘以删除它们,请参阅我们的文章查找并删除未附加的 Azure 托管和非托管磁盘。
迁移单实例 VM
本部分介绍如何将单实例 Azure VM 从非托管磁盘迁移到托管磁盘。 (如果 VM 位于可用性集中,请参阅下一部分。)
使用 Stop-AzVM cmdlet 解除分配 VM。 以下示例在名为
myResourceGroup
的资源组中解除分配名为myVM
的 VM:$rgName = "myResourceGroup" $vmName = "myVM" Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
使用 ConvertTo-AzVMManagedDisk cmdlet 将 VM 迁移到托管磁盘。 以下过程转换之前的 VM,包括 OS 磁盘和任何数据磁盘,并启用虚拟机:
ConvertTo-AzVMManagedDisk -ResourceGroupName $rgName -VMName $vmName
迁移可用性集中的 VM
如果要迁移到托管磁盘的 VM 位于可用性集中,则需要先将可用性集迁移到托管可用性集。
使用 Update-AzAvailabilitySet cmdlet 迁移可用性集。 以下示例在名为
myResourceGroup
的资源组中更新名为myAvailabilitySet
的可用性集:$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
解除分配 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 转换为托管磁盘,请使用最新版本的 Azure Linux 代理。 使用 Azure Linux 代理 2.2.0 及更低版本的操作可能会失败。 也不支持在通用 VM 或属于经典可用性集的 VM 上运行迁移。
- 如果迁移失败并出现“SnapshotCountExceeded”错误,请删除一些快照并重试该操作。
使用 Azure 门户进行迁移
还可以使用 Azure 门户将非托管磁盘迁移到托管磁盘。
- 登录到 Azure 门户。
- 从门户的 VM 列表中选择 VM。
- 在 VM 的边栏选项卡中,从菜单中选择“磁盘”。
- 在“磁盘”边栏选项卡的顶部,选择“迁移到托管磁盘”。
- 如果 VM 位于可用性集中,则“迁移到托管磁盘”边栏选项卡上会出现“首先需要迁移可用性集”的警告。 此警告应该有一个链接,单击该链接即可迁移可用性集。 转换可用性集后,或者如果 VM 不在可用性集中,请单击“迁移”以启动将磁盘迁移到托管磁盘的过程。
VM 将会停止并在完成迁移后重新启动。
后续步骤
使用快照获取 VM 的只读副本。