Old OSs are very popular, at least judging by the number of, for want of a better word, “legacy” servers I find in customer data centers. The old workhorses Windows Server 2003/2003 R2, Windows 2000 and even good old Windows NT pop up in disturbing numbers. With them, the question “Will Windows X, run in a Windows Azure VM?” often follows. To be able to answer that question we first need to talk about “run” vs. “supported”. A lot of OSs can be made to run in a Windows Azure VM, but that does not mean that Microsoft will support that OS. Unfortunately a lot of people are only interested in the “run” part of the equation, ignoring any problems of supportability down the road. Support is very straight forward; the oldest supported Windows OS running in a Windows Azure VM is Windows Server 2008 R2 x64, as stated in KB2721672: Microsoft server software support for Windows Azure Virtual Machines. So if you want support the buck stops there. But what can we make to run if we throw supportability to the wind…
It’s still Hyper-V
All the physical servers in a Windows Azure data center run a modified version of Windows Server with the Hyper-V role installed. So basically all the capabilities of Hyper-V should be available in Windows Azure, unless they have been specifically blocked. The About Virtual Machines and Guest Operating Systems page lists all the guest operating systems that are supported on Hyper-V, so lets assume that we can run all of those. I’m not going to test all the OSs on that list, but rather focus on some specific golden oldies (all 32-bit editions):
- Windows 2000
- Windows XP
- Windows Server 2003
There is also a lot of rumor on the Internet concerning support for 32-bit (x86) VMs in Windows Azure. Although all the images in the gallery and the fact that the earliest supported server OS (Windows Server 2008 R2) is only available in 64-bit (x64), this is never actually stated anywhere officially. (At least not that I have found.)
Another area where there is a lot of talk is concerning client operating systems in Windows Azure VMs. In this case Microsoft is very clear; client OSs are not supported and it is a violation of the license to install and run one in a Windows Azure VM. For the sake of scientific discovery I will ignore that issue for this post.
So lets see what’s what…
I’m going to work from these premises during my testing:
- The legacy OS needs to be on the supported list for Hyper-V
- Hyper-V Integration Components need to be available
Either on the vmguest.iso image, already in the OS or available for download.
- Remote Desktop for Windows VMs and SSH for Linux VMs must be available
- Only VHD images are supported in Windows Azure, not VHDX
- None of the selected legacy OSs will support being generalized in a way that Windows Azure can use, so we can only upload OS disks, not images. (Windows Azure uses the setup technology introduced in Windows Vista, codenamed Panther, which legacy OSs don’t.)
Here is what we need to do (at least):
- Use a Hyper-V host running Windows Server 2012 R2
This probably not a requirement, but the latest and greatest is always nice.
- Install a VM with the legacy OS, must select Generation 1 and the VHD disk format.
- Once OS install completes, install the Hyper-V integration components
- Update the OS through e.g. Microsoft Update
Having the latest updates will maximize the chance of success
- If you want remote PowerShell or WinRM make sure to install those optional updates.
- Enable Remote Desktop and make sure the Remote Desktop exception is enabled in the Windows Firewall if it is enabled.
- If you are using WinRM technology configure that, preferably with HTTPS instead of HTTP, and enable the appropriate firewall exceptions.
- If you are actually trying to run a production server with a legacy OS in Windows Azure (something you should not do), remove any special drivers or low level software that might break the VM. You can always install this alter.
- Shut down the VM on your Hyper-V Server
- Upload the VHD to a Windows Azure storage account (Add-AzureVHD)
- Register the new blob as an OS image (Add-AzureDisk)
- Start the VM in Azure and log on (hopefully).
Using the above method I was able to obtain these results:
|Windows XP x86||Yes|
|Windows Server 2003 x86||Yes||Windows Server 2003 R2 is pretty much the same code base so it should run fine too. And in fact it does.|
I assume that Windows Server 2003/2003R2 and XP x64 will also work.
Feel free to try some golden oldies yourself and use the comments for your results. Good luck.