I have been a user of virtual machine technology for years. In fact I used the VMware products during their intial BETA cycles and later switched to Virtual PC which was then purchased by Microsoft.

Even though I have been using the tools for a while I’m remained pretty dumb when it comes to really exploiting some of the newer capabilities of the tools, such as differencing disks.

For the uninitiated, differencing disks allow you to create a new disk which references a “parent” disk. When you start the virtual machine using the differencing disk, the differencing disk only stores data that is different to the parent disk. In this way you can have multiple virtual machines all pointing to the one parent disk (via the differencing disk) but still have them completely independent from each other.

Anyway – like I was saying, I hadn’t really been taking advantage of these improvements in virtual machine technology. Lately however, I’ve been struggling to keep up with my need to test out BETA and CTP builds of upcoming Microsoft technologies and still maintain a stable development and office environment.

So – in the past couple of days I’ve been gradually building up my first virtual machine differencing disk hierarchy in Virtual PC. The first thing that I wanted to test out was the Team Foundation Server Release Candidate. This is the differencing disk hierarchy that I came up with.

VPCHierarchy

The great thing about this is that I can now quickly provision a fully isolated development environment at any stage along the process above. For example – I’v already started adding other virtual machines using yet more differencing disks to support other development tasks that I am working on at the moment.

WorkingVPCs

One of the things that is lacking from Virtual PC is a really good way to map the inter dependencies between the the differencing disks and their parents. When you parent to a disk the Virtual PC Console doesn’t stop you starting up that parent disk which can result in corruption. For the time being what I am doing is removing the virtual machines from the console which have been parented to – this should stop me shooting myself in the foot – but there is an opening here to build a tool which makes this more managable.

DeleteVPC

Anyway – I am hoping this will allow me to be more productive when it comes to testing out software, and I won’t have to overload my host OS too much. Eventually I suspect that I will just have the Office suite and Virtual PC on the host and do everything in virtual machines. I still have a phobia of presenting off a VPC though – I’ve seen them go south too many times with mysterious lock-ups.