OK, I use the term "upgrade" a bit loosely here. There is no upgrade path from 32-bit to 64-bit versions of any edition of Windows, period.
However, you can preserve your Active Directory domain, DNS settings, websites, files, whatever, through a slightly long-winded process and get from 32-bit to 64-bit without:

  1. Having to uninstall Active Directory from your network and then piece-meal it back together workstation by workstation;
  2. Having to do system state backup/restores which won't restore all your other server applications (Exchange, SQL Server etc.).

I'm only running one physical server here - which was Windows Server 2008 32-bit, and then I realised about 2 hours after finishing installing, that my CPU was x64 (Intel Xeon 3.06GHz). Damn.

So to get all the 64-bit shinyness and still preserve my Active Directory, I figured out the following:

  1. Set up a new virtual server ("Bohr") on my laptop.
  2. Clone the existing physical server ("Einstein") hard disk and mount it on Bohr.
  3. Configure Bohr as an additional domain controller (DC) and global catalog server (GC).
  4. All my users, computers and settings get replicated from Einstein to Bohr.
  5. Test all applications, databases and websites are working on Bohr.
  6. Demote Einstein and remove it from the domain, wipe the hard disk with Eraser, format, and clean-install Windows Server 2008 x64, with new name "Brunel".
  7. Install Active Directory on Brunel as an additional domain controller again, and watch the settings replicate back across.
  8. Move databases and applications back.
  9. Remove virtual server Bohr.

It appears a bit long-winded but this is the first time I've had to think about these kinds of migrations so if anyone can suggest better alternatives then please do so in the comments.

Tools I used:

  • Disk2VHD by Microsoft's Sysinternals team;
  • WinImage (free 30-day trial);
  • VMware Server (called ESX4 I think, but their product family names are a little confusing);

I looked at Virtual PC as I've used it before for virtualising operating systems and servers whilst working for clients, and I discovered that Windows 7 (which is what my laptop runs) has Windows Virtual PC already installed, with an image of Windows XP Pro for application backward-compatibility.
At this point I cloned Einstein's hard disk to a VHD file and went to VPC to create a new machine and mount the VHD as the hard disk.
First brick wall - VPC will only let you run XP, Vista, or Windows 7 inside VPC. So I couldn't create a virtual machine running my cloned Server 2008 (as demonstrated by the lovely error message you see here). Damn.


So I'm driven to the arms of VMware, and after a bit of reading, I download and install VMware Server. With a bit of configuration, I soon have my virtual machine.


Next brick wall - VHD is a Microsoft format, VMware won't read it. Damn.
WinImage to the rescue, which performs conversion from VHD (Virtual Hard Disk - Microsoft's hard disk virtualisation format) to VMDK (VMware DisK - their format - gotta love competition for different "standards", haven't you...) - my 20GB of data takes 36 minutes to convert, apparently.


Once I have my VMDK hard disk image, I mount it to the VM (Bohr) I've created in VMware Server.

Here comes the fun bit where stuff actually gets moved around and I feel like I'm making progress instead of just clogging up my hard disk further by downloading and installing yet more software to achieve the task at hand.

I configure Bohr with a static IP address so it'll sit on my wireless network and interact with my server, laptop and router as if it were just another physical box. My laptop is close to death at this stage cause it only has 2GB of RAM (ouch) and I've allocated 1GB of it to Bohr (yes, I'm planning on an upgrade as a Christmas present to myself, along with a very nice Hugo Boss winter coat I've seen. Donations and Christmas cards accepted, preferably together :-D).


Once I'd powered on Bohr, I remoted in using VMware's Firefox browser plugin (RDP was very flaky for some reason and Bohr's network connection kept bombing) and renamed it using netdom and a little help.
Once this was done I uninstall Active Directory Domain Services entirely - Bohr can't see Einstein's domain services and so thinks it's still the only DC on the domain. A reboot later, I reinstall Active Directory as a new domain controller for the existing forest, and hey presto, my user and computer accounts and DNS settings replicate across! Shiny.

To summarise at this stage - I have two DC's on the network, one physical "Einstein" and one virtual "Bohr", which is just a clone of Einstein's hard disk, but reconfigured as an additional DC on the whole domain rather than a primary domain controller.
I've also just run a quick test on Bohr and my websites and SQL Server are functioning perfectly, including connecting via Management Studio using Windows Authentication.
Lastly, I right-click on the domain in Active Directory Users & Computers and hit "Properties", then change all domain control services from Einstein to Bohr, before uninstalling Active Directory from Einstein.

Further steps to follow, but this is most of the headache-inducing legwork done!


P.S. Please submit other interesting server names using the comments box below!

Update: it's 0237 GMT and I'm installing Server 2008 x64 onto "Brunel" now. W00t. Man I need a smoke. And some sleep. Or maybe coffee.
Another update: it's now 0318 GMT and "Brunel" is installed. Definitely time for sleep.