Convert a Windows virtual machine from unmanaged disks to managed disks

If you have existing Windows virtual machines (VMs) that use unmanaged disks, you can convert the VMs to use managed disks through the Azure Managed Disks service. This process converts both the OS disk and any attached data disks.

This article shows you how to convert VMs by using Azure PowerShell. If you need to install or upgrade it, see Install and configure Azure PowerShell.

Before you begin

  • The conversion requires a restart of the VM, so schedule the migration of your VMs during a pre-existing maintenance window.

  • The conversion is not reversible.

  • Be sure to test the conversion. Migrate a test virtual machine before you perform the migration in production.

  • During the conversion, you deallocate the VM. The VM receives a new IP address when it is started after the conversion. If needed, you can assign a static IP address to the VM.

  • The original VHDs and the storage account used by the VM before conversion are not deleted. They continue to incur charges. To avoid being billed for these artifacts, delete the original VHD blobs after you verify that the conversion is complete.

Convert single-instance VMs

This section covers how to convert single-instance Azure VMs from unmanaged disks to managed disks. (If your VMs are in an availability set, see the next section.)

  1. Deallocate the VM by using the Stop-AzureRmVM cmdlet. The following example deallocates the VM named myVM in the resource group named myResourceGroup:

    $rgName = "myResourceGroup"
    $vmName = "myVM"
    Stop-AzureRmVM -ResourceGroupName $rgName -Name $vmName -Force
    
  2. Convert the VM to managed disks by using the ConvertTo-AzureRmVMManagedDisk cmdlet. The following process converts the previous VM, including the OS disk and any data disks:

    ConvertTo-AzureRmVMManagedDisk -ResourceGroupName $rgName -VMName $vmName
    
  3. Start the VM after the conversion to managed disks by using Start-AzureRmVM. The following example restarts the previous VM:

    Start-AzureRmVM -ResourceGroupName $rgName -Name $vmName
    

Convert VMs in an availability set

If the VMs that you want to convert to managed disks are in an availability set, you first need to convert the availability set to a managed availability set.

  1. Convert the availability set by using the Update-AzureRmAvailabilitySet cmdlet. The following example updates the availability set named myAvailabilitySet in the resource group named myResourceGroup:

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

    If the region where your availability set is located has only 2 managed fault domains but the number of unmanaged fault domains is 3, this command shows an error similar to "The specified fault domain count 3 must fall in the range 1 to 2." To resolve the error, update the fault domain to 2 and update Sku to Aligned as follows:

    $avSet.PlatformFaultDomainCount = 2
    Update-AzureRmAvailabilitySet -AvailabilitySet $avSet -Sku Aligned
    
  2. Deallocate and convert the VMs in the availability set. The following script deallocates each VM by using the Stop-AzureRmVM cmdlet, converts it by using ConvertTo-AzureRmVMManagedDisk, and restarts it by using Start-AzureRmVM:

    $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
    }
    

Troubleshooting

If there is an error during conversion, or if a VM is in a failed state because of issues in a previous conversion, run the ConvertTo-AzureRmVMManagedDisk cmdlet again. A simple retry usually unblocks the situation.

Next steps

Convert standard managed disks to premium

Take a read-only copy of a VM by using snapshots.