Upgrading Server 2003 to 2008, with Hyper-V Integration Services installed, results in this boot failure after a few hours :-/

In hindsight, you should remove integration services first.

Without the benefit of hindsight:

  • Shut down the virtual machine.
  • Using Computer Management -> Disk Management on the Hyper-V host, attach the .VHD file, so that you are mounting the virtual HD of the affected guest.
  • Ensure your Windows Explorer is set to show hidden & system files.
  • Open up regedit, then go to HKLM.
  • File -> Load Hive
  • Browse to the virtual HD -> Windows -> System32 -> Config
  • Choose the ‘SYSTEM’ hive, and when prompted for a name, type ‘broken’, or the name of the machine or something, and press enter.
  • The affected VM machine’s registry is now showing under HKLM->’broken’.
  • Browse to ControlSet001 (do the same for 002, etc.), \Services\vmbus
  • Delete the whole vmbus key (folder).
  • When done, highlight ‘broken’ (where the registry is attached to), and go to File -> Unload Hive.
  • Then go back to disk management and detach the VHD.
  • Try to start the VM so that the final stage of the in-place upgrade can continue.

After the upgrade finishes, you will probably have no networking, no mouse, and other issues.

You should try (sans-mouse) to switch the HAL from ACPI to APIC (as per here)*. Upon reboot, the vmbus issue may return (did it re-install itself?), and so have to repeat the above procedure.
Once the system has booted up with an APIC HAL, you can try to re-install Integration Services properly.

Fingers crossed :-*

(*incidently, I am all done now – the system is working just fine. I had to re-install the integration services, but device manager still shows an ACPI HAL for me. This is x86 Server 2008 (upgraded from 2003). A very temporary measure).

Hint: if the special function keys (start menu, ctrl-esc, alt-tab, etc), are not passing through to the guest: Ctrl-Alt-End will get you to task manager, from there Alt-F -> Run, cmd to open up a command prompt, from the command prompt: taskkill /im taskmgr.exe so that you can get rid of the always-on-top taskmgr that’s in the way, then do your stuff. sysdm.cpl for system properties/device manager, etc.