Some useful information before you start the restore:
Required naming convention
OS disk and Data disks related vhds must be in the following format:
- OS disk:
- Data disk:
- [vmname]-datadisk-[diskid] (where the diskid represents the value of lun)
- (example for 1st data disk: myvm-datadisk-0)
- Linux OS
- Azure-Cli 2.x
- Python 2.7
- amaretto (Azure management tools by the1bit) package for python. You can download it from pypi and git as well.
For this type of restore we can use the previously introduced amaretto python package. This package contains the restore steps related functions one-by-one. Additionally you can also find a restoreManagedDiskFromVhd function in amarettorestore module which “do your job” regarding restore procedure.
What does this function do?
- Get restore file from restored container
- Download deploy file (generally this is a config.json with UTF-16 encoding(!))
- Check file encoding – if necessary it converts from UTF-16 to UTF-8
- Deallocate VM
- Delete VM object (ONLY)
- Get os disk information (size, tags – it is important from billing and categorization point of view)
- Delete old managed disk
- Convert vhd to managed disk (with tags and sizes from step 6)
- Get data disks information (size, tags – it is important from billing and categorization point of view)
- Delete old managed disks one-by-one
- Convert vhds to managed disks (with tags and sizes from step 9)
- Check restore result (whether all disks are restored or not)
And now let’s see the restore steps one-by-one:
1. Restore VM’s VHDs from backup vault
Choose the right restore point from Recovery Services vaults which belongs to target VM and Restore OSDisk and DataDisks to your storage account.
Note: In case of manage disk restore: Template based restore for managed disks is planned in June 2018. Thus far that we should identify the restored VHDs. This means after the restore you have vhd files instead of managed disks. 🙁
2. Configure and execute “restoreManagedDiskFromVhd” function from amaretto
You have to execute the following commands with your VM related parameters from python:
# Your VM name vmName = "thisismyserver-2" # resource group name where the VM is located resourceGroup = "thisismyrg" # location where the resources are located. (westeurope, germanycentral, ...) location = "westeurope" # storage account name where the VM's restored vhds are stored sourceStorageAccount = "thisismystorage" # 1st or 2nd access key for sourceStorageAccount sourceSecretKey = "d22j/rr+a7br7LW6KDKV8KZkO2wCIe3m0MTKVr3Tt9B9NMZZsYxny8bvWvPwUGgZpDkE8gyAePjWCVu2IZ4LYw==" # name of container where the restored vhds are stored sourceContainer = "vhd6bdda0e88c88408299246c468784656546a" # managedDiskAccountType (optional): sku of disk. Possible values: Standard_LRS or Premium_LRS. Default value: Standard_LRS # managedDiskAccountType = "Standard_LRS" # Execute restore function amaretto.amarettorestore.restoreManagedDiskFromVhd(vmName, resourceGroup, location, sourceStorageAccount, sourceSecretKey, sourceContainer)
>>> amaretto.amarettorestore.restoreManagedDiskFromVhd(vmName, resourceGroup, location, sourceStorageAccount, sourceSecretKey, sourceContainer) 2018-02-22 13:18:40 - FUNCTION Restore Managed disk based VM's vhds 2018-02-22 13:18:40 - Get restore file from restored container 2018-02-22 13:18:43 - Download deploy file Finished[###############################] 100.0000% 2018-02-22 13:18:45 - Check config.json file encoding 2018-02-22 13:18:45 - Deallocate VM: thisismyserver-2 2018-02-22 13:18:48 - Delete VM object: thisismyserver-2 2018-02-22 13:18:50 - - OS DISK 2018-02-22 13:18:50 - Get os disk information 2018-02-22 13:18:50 - Delete old managed disk: thisismyserver-2-osdisk 2018-02-22 13:18:54 - Convert os vhd to its original location 2018-02-22 13:19:00 - - DATA DISKS 2018-02-22 13:19:00 - Get data disks information 2018-02-22 13:19:00 - Delete old data disk 2018-02-22 13:19:05 - Convert data disk to its original location: thisismyserver-2-datadisk-0 2018-02-22 13:19:11 - OS and Data disks are restored True
3. Re-create target VM with your ARM Template
In this step you merely redeploy your vm from that ARM template you had created for original vm creation.
I hope it helps to solve your restore VM problem. 🙂
If you need some help regarding ARM Template for restore or other scenarios do not hesitate to contact me.