I've been fiddling with my computer recently, trying to get it to all work nicely after I inherited some new parts. I have a seperate partition on my hard drive for the purposes of testing Windows Vista RC1. After having to repair my XP installation due to a change in motherboard chipset and CPU (AMD to Intel), I realised I could not boot into Vista anymore - the Vista Windows Boot Manager no longer came up.
To fix this, I decided to try the Vista recovery process. It worked, restored the Windows Boot Manager, but I was no longer able to boot into Windows XP nor Windows Vista. Attempting to select the "Earlier version of Windows" gave me a message that essentially told me /ntldr was "missing or corrupt". Choosing the Windows Vista option gave me a BSOD, which was understandable given Vista didn't have the drivers setup for the new motherboard and CPU. So I had to reinstall Vista from
scratch, as I could not find an option anywhere within the recovery environment to repair my installation (system and image restores were useless as I needed Windows to re-detect all my hardware again). Luckily it was just a testing OS and there was nothing important on it. It does make me wonder though, what should I have done? Maybe it was fixed before Vista RTM-ed.
Anyway, reinstalling Vista gave me access to Vista again, but still, I could not get into Windows XP; the same message appeared.
After some digging around the internet, I found the solution:
- Boot up Windows Vista, and navigate to Start (the Vista orb)-> All Programs -> Accessories -> Command Prompt, then right-click on Command Prompt and select Run as Adminstrator. Either enter your password if needed or just press continue. The new window should be titled "Administrator: Command Prompt".
- In the command prompt, type in bcdedit /enum active and press Enter.
- Locate the sections titled "Windows Legacy OS Loader". Note the identifier (all of them if there is more than one matching section); my identifier was {ntldr}. If the problem is the same as mine, the device property should be currently set to unknown.
- Use the command bcdedit /set (ID) device boot to change unknown to boot, that is, the partition that is active and is booting from. By default, Vista does not change which partition boots, so if your XP partition is set as active, it will add the new booting code to that. Therefore assuming your XP partition is set as the active (boot) partition, the above command will be correct. Apply the above command for each identifier, replacing (ID) with the identifier itself, including the curly braces, e.g. bcdedit /set {ntldr} device boot. Press Enter after each one - it should report that the operation was completed successfully.
- Rerun the command in step 2 to check that the changes were applied correctly.
- Test!
That should fix the problem. I assume that when the device was set to unknown, the boot manager didn't know what to do to boot that partition, hence the message.
Microsoft has put up a handy reference for bcdedit too: http://technet2.microsoft.com/WindowsVista/en/library/85cd5efe-c349-427c-b035-c2719d4af7781033.mspx?mfr=true
Note that for basic booting option changes, such as the default OS or timeout, you can run msconfig or the System Properties, Advanced tab.
If you discover that there is no "Earlier Version of Windows" option in your boot manager at all, try these instructions (also repeated on the above Microsoft site): http://www.nukeation.net/2006/07/05/5456+Update+2++XP+Goes+Missing+After+Installing+Vista.aspx
UPDATE (6/12/2007): Clarified some steps and fixed a few spelling errors.