So my demo environment needs to be self contained (everything on the one laptop), needs to be as quick as it can and be able to demo as much of the Microsoft virtualisation stuff as technically possible. My laptop itself will obviously be the Hyper-V host – which needs to be in a domain, if I’m going to manage it.
I had the option of making the laptop the domain controller for my demo domain (daves-demos.ie), but I’ve steered away from this, as it would mean that my demos were not as portable as I’d like. Instead I have created a Virtual Machine running Windows Server 2008 and configured it as the domain controller (it also runs DNS). I’ve configured it to always start and I have joined my laptop to the domain. From now on I always log onto the domain as a Domain Admin.
To let the VMs talk to the host, I have created an Internal Network switch within Hyper-V and to let all the VMs use my wireless network card, I have enabled Internet Connection Sharing on it to the internal Hyper-V switch. This puts a 192.168.0.1 address on the Hyper-V network interface, which just means that I am using 192.168.0.x for all my network addresses: 192.168.0.100 is my Domain Controller and DNS (192.168.0.1 is my gateway).
I can keep disk space down to a minimum and improve performance (of my demos) by using Differencing disks (not recommended in production). A differencing disk, is merely the differences between itself and a base image. My base images are read-only, sysprepped installations of the operating systems I’m using. To create these base images I build a VM, of the particular operating system (64-bit Windows Server 2008 for example), update it, then run sysprep. I have all my base images sitting on my D:\ drive - I have both 32 & 64-bit Windows Server 2008 (full install), a 64-bit core install, 32-bit Vista and 32-bit XP. This means that all operating system “activity” is running on my D:\ drive.
Then I create differencing drives for each of the VMs I’m going to create. Each differencing drive points to one of the base images. Then I create the Virtual Machines and have them boot from the newly created differencing drive. Because the base image was sysprepped, the new VM will run through a mini-setup and ask for stuff like computername. I configure its networking stack and join it to the domain. All reads for the base operating system come from the base image and all machine specific reads and all writes go to the differencing drive (which is physically located on one of my external drives) – this means that every VM has its disk IO going to two separate spindles, which just makes it quicker. Also, because I can have multiple VMs all pointing to the same base image, disk space is kept to a minimum (I only have one install of each OS, rather than one per VM).
Of my eleven VMs, I have five running off of each external USB drive and one from the internal D:\ drive – this one is the Domain Controller (I want this one to start whatever – with or without my external drives plugged in). It does mean that my poor old D:\ drive is doing all the IO for twelve Windows installations (11 VMs plus the physical installation) – did I mention that it was a Solid State disk (they’re great they are)!
In this post I’ll talk you through how I have created a Hyper-V Failover Cluster on my single laptop.