In my discussion of my home-based server, setting up a Windows Server 2008 R2 with Hyper-V was one potential solution for my requirements.
On the server side, I've mostly used Linux/Ubuntu solutions over the past 5-10 years. But my family still mostly uses Windows clients. Since I need SMB-based backups of the clients, I thought I'd give Windows Server 2008 R2 a try.
Installation went well except for a couple issues. First, my Microserver didn't come with a DVD, so I have to install the OSes from a USB drive. I wanted to boot and install from a utility like YUMI or UNetbootin, neither of those utilities seemed to recognize the Windows 2008 R2 .iso image.
So I found I could create a bootable USB drive with Windows Server 2008 R2 with Novicorp's WinToFlash.
The second wrinkle was product activation. I had a product key, so no problem there, but my server initially wasn't hooked up to the network. So I had to call into Microsoft and repeat and enter a total of about 40 digits to activate the software. Their automated system was fairly good, but still a reminder of the issues associated with tightly licensed software.
After that, activating Hyper-V was pretty easy. Windows 2008 R2 provides a pretty good setup experience in that you get a pretty bare server initially (lower attack surface), but they also provide pretty easy guides and wizards to get you where you want to be. As I'm new to Windows 2008 R2, this was useful.
Setting up the Ubuntu guest for benchmarking was also pretty easy. Hyper-V provides a guest VM setup wizard similar to ESXi or VirtualBox. It's pretty easy to specify desired RAM, networking etc.
However, my quick installation indicated a couple limitations. First, I didn't see options regarding disk setup. I generally prefer thin volumes which grow as needed. Second, I didn't notice the ability to add USB devices to the VM. Third, network options seemed limited as well.
Still, the Ubuntu 12.04 guest started without issue. Console access was fine, and snap shot capability seem fine as well.
I mentioned that I seemed to be able to make incremental, "linear" snapshots, but I couldn't find a way to make "branched" snapshots. For example, say I want to test a system with Oracle then PostgreSQL. I'd want to take a snapshot of my base system, then add Oracle and PostgreSQL on different branches.
I couldn't find a way to do that in Hyper-V, but from this post (fig. 3), it seems possible.
Cloning and Export/Import
Hyper-V in Win 2008 R2 doesn't seem to have a built-in cloning function. Cloning seems to be done thru export/import. "Cloning" (at least in VirtualBox) seems to give you a few features like a new unique VM identifier and other housekeeping items.
But simple import/export would work. But I had a complaint. After starting an export, the export "wizard" disappeared. I thought it had finished, but when I tried to re-import, the image wasn't completed so I couldn't re-import. From the Hyper-V management console I could see a "Cancel Export" option by right clicking, but not very obvious. Monitoring growth of the exported .vhd also gave feedback, but not sub-optimal.
Feedback on import was fine, however. The imported image seems to have lost the snapshot history from the original image.
Upon import, you have the option to "Duplicate all files so the same virtual machine can be imported again." If you choose this option, it seems like Hyper-V will place a new .vhd disk in this location :
C:\Users\Public\Documents\Hyper-V\Virtual hard disks
So this is where your newly imported VM's disk will live.
If you don't choose to duplicate all files, the .vhd disk image for your newly imported VM will live where the exported image was. So let's say you exported to D:\VMs\MyVM. If you then import from there, and don't duplicate files, your newly imported VM's disk will be at D:\VMs\MyVM.
I provide details on performance, but relative to ESXi and KVM, I found Hyper-V provided middling performance on CPU-intensive tasks, but the best performance on I/O tests.
Notes on the benchmarking results
- My HP Microserver had three disks (C:, D:, E:)
- Page file on C:
- First two VMs run on C:
- Third VM (.vhd) run on D:
- Each VM had a GUI console (Ubuntu Unity) viewable
- No tweaking to spread CPU or RAM to a given VM. Just use the default behavior.
- Hyper-V seemed to spread out the CPU amongst the three VMs well