将 Windows 虚拟机从非托管磁盘转换为托管磁盘

如果有使用非托管磁盘的现有 Windows 虚拟机 (VM),可通过 Azure 托管磁盘服务将 VM 转换为使用托管磁盘。 此过程会同时转换 OS 磁盘和任何附加的数据磁盘。

Note

本文进行了更新,以便使用新的 Azure PowerShell Az 模块。 AzureRM 将继续获取关键的 bug 修复更新,但新功能将只出现在 Az 模块中。

  • 若要在本地安装 Az 模块,请参阅安装 Azure PowerShell
  • 如果在本地安装 Az 模块,可通过运行 Enable-AzureRmAlias 来启用 AzureRM 兼容性。

准备阶段

  • 该转换需要重启 VM,因此请在预先存在的维护时段内计划 VM 迁移。

  • 该转换是不可逆的。

  • 请注意,任何具有虚拟机参与者角色的用户将不能更改 VM 大小(因为它们可以预转换)。 这是因为包含托管磁盘的 VM 要求用户对 OS 磁盘具有 Microsoft.Compute/disks/write 权限。

  • 请务必测试转换。 在生产环境中执行迁移之前迁移测试性虚拟机。

  • 在转换期间,会解除分配 VM。 转换完成后,VM 在启动时会接收新的 IP 地址。 如果需要,可向 VM 分配静态 IP 地址

  • 不会删除在转换之前由 VM 使用的原始 VHD 和存储帐户。 它们会继续产生费用。 若要避免这些项目产生的费用,请在验证转换已完成后删除原始 VHD Blob。

  • 查看支持转换过程所需的 Azure VM 代理最低版本。 有关如何检查和更新目标版本的信息,请参阅 Minimum version support for VM agents in Azure(对 Azure 中的 VM 代理的最低版本支持)

转换单实例 VM

本节介绍如何将单实例 Azure VM 从非托管磁盘转换为托管磁盘。 (如果 VM 位于可用性集中,请参阅下一部分。)

  1. 使用 Stop-AzVM cmdlet 解除分配 VM。 以下示例在名为 myResourceGroup 的资源组中解除分配名为 myVM 的 VM:
$rgName = "myResourceGroup"
$vmName = "myVM"
Stop-AzVM -ResourceGroupName $rgName -Name $vmName -Force
  1. 使用 ConvertTo-AzVMManagedDisk cmdlet 将 VM 转换为托管磁盘。 以下过程转换之前的 VM,包括 OS 磁盘和任何数据磁盘,并启用虚拟机:
ConvertTo-AzVMManagedDisk -ResourceGroupName $rgName -VMName $vmName

在可用性集中转换 VM

如果要转换为托管磁盘的 VM 位于可用性集中,则需要先将可用性集转换为托管可用性集。

  1. 使用 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
  1. 解除分配 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 处于“失败”状态,请再次运行 ConvertTo-AzVMManagedDisk cmdlet。 简单的重试通常可以解决这种情况。 在转换之前,确保所有 VM 扩展都处于“配置成功”状态,否则转换将失败,并出现错误代码 409。

使用 Azure 门户进行转换

还可以使用 Azure 门户将非托管磁盘转换为托管磁盘。

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

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

后续步骤

将标准托管磁盘转换为高级托管磁盘

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