I have a development sandpit in Azure which I use quite a lot to test and mess with different ideas and concepts. This week when shutting it down things didn’t go that smoothly. All but one virtual machine finally stopped and de-allocated, but one virtual machine just didn’t make it. I tried resizing the VM. I tried changing the configuration of it and obviously tried starting it up many times via the portal and Powershell all without any success.
I realised I was at the point where I just needed to build a new VM but I wanted to attach the OS vhd from the failed VM to it so I could recover my work and not have to re-install the applications and tools on the OS drive.
I created a little script that does the basics of what I needed to recover a simple single HDD VM and keep most of the core settings. If your VM has multiple disks you can probably attach the other HDD’s manually after you have a working VM again.
Via the AzureRM Portal select your busted VM and get the values highlighted in the screenshot below for VM Name, VM Resource Group and VM VNet Subnet.
The Script then:
- Takes the values for the information you got above as variables for the;
- Broken VM Name
- Broken VM Resource Group
- Broken VM VNet Subnet
- Queries the Failed VM and obtains the
- VM Name
- VM Location
- VM Sizing
- VM HDD information (location etc)
- VM Networking
- Copies the VHD from the failed virtual machine to a new VHD file so you don’t have the bite the bullet and kill the failed VM off straight away to release the vhd from the VM.
- Names the copied VHD <BustedVMName-TodaysDate(YYYYMMDD)>
- Creates a new Virtual Machine with;
- Original Name suffixed by ‘2’
- Same VM Sizing as the failed VM
- Same VM Location as the failed VM
- Assigns the copy of the failed VM OS Disk to the new VM
- Creates a new Public IP for the VM named
- Creates a new NIC for the VM named
With only 3 inputs using this script you can quickly recovery your busted and broken failed AzureRM virtual machine and be back up and running quickly. Once you’ve verified your VM is all good, delete the failed one.
Take this script, change lines 2, 4 and 6 for your failed or VM you want to clone to reflect your Resource Group, Virtual Machine Name and Virtual Machine Subnet. Step through it and let it loose.
Follow Darren on Twitter @darrenjrobinson