如果有使用非托管磁盘的现有 Windows 虚拟机 (VM),可通过 Azure 托管磁盘服务将 VM 转换为使用托管磁盘。 此过程会同时转换 OS 磁盘和任何附加的数据磁盘。
本文介绍如何使用 Azure PowerShell 转换 VM。 如需进行安装或升级,请参阅安装和配置 Azure PowerShell。
开始之前
- 请查看计划迁移到托管磁盘。
-
该转换需要重启 VM,因此请在预先存在的维护时段内计划 VM 迁移。
-
该转换是不可逆的。
-
请务必测试转换。 在生产环境中执行迁移之前迁移测试性虚拟机。
-
在转换期间,会解除分配 VM。 转换完成后,VM 在启动时会接收新的 IP 地址。 如果需要,可向 VM 分配静态 IP 地址。
-
不会删除在转换之前由 VM 使用的原始 VHD 和存储帐户。 它们会继续产生费用。 若要避免这些项目产生的费用,请在验证转换已完成后删除原始 VHD Blob。
转换单实例 VM
本节介绍如何将单实例 Azure VM 从非托管磁盘转换为托管磁盘。 (如果 VM 位于可用性集中,请参阅下一节。)
-
使用 Stop-AzureRmVM cmdlet 解除分配 VM。 以下示例在名为
myResourceGroup
的资源组中解除分配名为myVM
的 VM:PowerShell$rgName = "myResourceGroup" $vmName = "myVM" Stop-AzureRmVM -ResourceGroupName $rgName -Name $vmName -Force
-
使用 ConvertTo-AzureRmVMManagedDisk cmdlet 将 VM 转换为托管磁盘。 以下过程转换之前的 VM,包括 OS 磁盘和任何数据磁盘:
PowerShellConvertTo-AzureRmVMManagedDisk -ResourceGroupName $rgName -VMName $vmName
-
使用 Start-AzureRmVM 在转换为托管磁盘后启动 VM。 以下示例重启之前的 VM:
PowerShellStart-AzureRmVM -ResourceGroupName $rgName -Name $vmName
在可用性集中转换 VM
如果要转换为托管磁盘的 VM 位于可用性集中,则需要先将可用性集转换为托管可用性集。
-
使用 Update-AzureRmAvailabilitySet cmdlet 转换可用性集。 以下示例在名为
myResourceGroup
的资源组中更新名为myAvailabilitySet
的可用性集:PowerShell$rgName = 'myResourceGroup' $avSetName = 'myAvailabilitySet' $avSet = Get-AzureRmAvailabilitySet -ResourceGroupName $rgName -Name $avSetName Update-AzureRmAvailabilitySet -AvailabilitySet $avSet -Sku Aligned
如果可用性集所在的区域只有 2 个托管容错域,但却有 3 个非托管容错域,则此命令会显示类似于“指定的容错域计数 3 必须在 1 到 2 这个范围内”的错误消息。 若要解决此错误,请将容错域更新为 2,并按如下所示将
Sku
更新为Aligned
:PowerShell$avSet.PlatformFaultDomainCount = 2 Update-AzureRmAvailabilitySet -AvailabilitySet $avSet -Sku Aligned
-
解除分配 VM,并转换可用性集中的 VM。 以下脚本使用 Stop-AzureRmVM cmdlet 解除分配每个 VM,使用 ConvertTo-AzureRmVMManagedDisk 进行转换,并使用 Start-AzureRmVM 重启:
PowerShell$avSet = Get-AzureRmAvailabilitySet -ResourceGroupName $rgName -Name $avSetName foreach($vmInfo in $avSet.VirtualMachinesReferences) { $vm = Get-AzureRmVM -ResourceGroupName $rgName | Where-Object {$_.Id -eq $vmInfo.id} Stop-AzureRmVM -ResourceGroupName $rgName -Name $vm.Name -Force ConvertTo-AzureRmVMManagedDisk -ResourceGroupName $rgName -VMName $vm.Name Start-AzureRmVM -ResourceGroupName $rgName -Name $vm.Name }
故障排除
如果转换过程中出现错误,或先前转换中的问题导致 VM 处于“失败”状态,请再次运行 ConvertTo-AzureRmVMManagedDisk
cmdlet。 通常只需简单的重试即可解决这一问题。
后续步骤
使用快照获取 VM 的只读副本。 立即访问http://market.azure.cn