Bienvenido! - Willkommen! - Welcome!

Bitácora Técnica de Tux&Cía., Santa Cruz de la Sierra, BO
Bitácora Central: Tux&Cía.
Bitácora de Información Avanzada: Tux&Cía.-Información
May the source be with you!

Monday, May 9, 2011

Dual-Boot Problems

Source
Unfortunately, as a result of the convoluted process used to load Windows NT through XP/2003 up and running, there is plenty of room for confusion and error.

The Boot Process

Regardless of what your booting - and even what bootloader you are using - the basic boot process starts off in the same way. When you power on your PC, the BIOS is loaded which first detects and initializes basic hardware, then loads a small amount of binary code stored in the MBR of the primary boot disk. The MBR then loads some more binary code in the bootsector of the active partition on that same disk. The code in the bootsector is then run, which typically loads a binary file from the root of the same active partition, which typically presents the user with a menu of operating systems to boot from (assuming there is more than one) and proceeds to boot into the selected OS.... usually by loading yet another binary file which initializes the environment bringing the machine out of real mode and into protected mode with virtual memory and launches the kernel. The first part of this procedure is depicted below:

NTLDR, NTDETECT, and BOOT.INI

While the new Windows Vista/7 bootloader (known as bootmgr) can load Windows Vista and up directly 1 , it doesn't know how to start up older versions of Windows. As a work around, Microsoft configured bootmgr to load the old NTLDR boot menu, which will then display its own list of legacy operating systems, according to boot.ini. NTLDR then loads the older version of Windows. NTLDR is stored in the root of the FAT16, FAT32, or NTFS partition set as active and primary. This 16-bit program calls up several other files that need to be in the same root directory of the single active partition on the primary boot disk that carry out of the different tasks needed to get your system up and running:

Once NTLDR has finished calling these child processes, it will display a second menu which gives you a choice of which Windows NT-based operating system to load. If there is only one such legacy entry, no menu will be displayed.
  • NTLDR uses a file called NTDETECT.COM to detect and configure access to the various hardware components of your machine. Without NTDETECT.COM, NTLDR cannot access your hard drives and load Windows. NTDETECT.COM must be present in the root of the active partition on disk 0, together with BOOT.INI, or else Windows XP will fail to load.
  • A file called BOOT.INI stores information regarding the physical location(s) of your various Windows NT-based installations. NTLDR accesses this file to get a list of the installed operating systems and display them in the on-screen boot menu for the end user to pick and OS to load into.
Can you detect the problem in this design? Hint: what happens if you try to add a second Windows XP entry to the mix? Keep in mind that there's only one active partition on disk 0, and that one and only one boot.ini may exist at a time. NTLDR can't get its list of operating systems from anything other than the boot.ini on the active partition on disk 0, so if you add another operating system to the mix, you end up with something like this:

Basically, you have to go through a two-level boot menu, and you cannot - however hard you try - add both Windows XP entries to the main bootmgr boot menu. In order to load either of the two XP entries, you'll need to select the NTLDR entry (called "Legacy Entries" by default) from the bootmgr/bcd boot menu, and then select the copy of Windows XP you wish to boot into from the second menu presented by NTLDR.
EasyBCD and EasyLDR Annoying, right? With EasyBCD 2.0 though, there is a solution. We've developed our own version of NTLDR, and bootmgr will load a separate copy of EasyLDR for each Windows XP entry in the menu. Each copy of EasyLDR is configured to boot into one and only one copy of Windows XP, so your complicated two-level boot menu in the previous picture boils down to a much simpler and prettier result:
Keep in mind that since there's only one entry in each EasyLDR instance, no second menu will ever appear. Selecting the first Windows XP entry in the top-level BCD menu will directly load the first copy of Windows XP and selecting the second Windows XP entry in the top-level BCD menu will take you directly to the second copy of Windows XP, with no additional menu or action in between. EasyLDR sits quietly and invisibly in the middle, making sure everything works as expected.
The Mechanics of NTLDR and EasyLDR As mentioned before, NTLDR and EasyLDR need several other files to do their job correctly. While NTLDR/EasyLDR can be located anywhere, they will only look for their helper files and read their configuration from the root of the active partition on disk 0. As a result, the disk that EasyBCD shows is the location of NTLDR/EasyLDR and not the disk that Windows XP is located on. EasyBCD supports the creation of both standard (NTLDR) entries and its own custom EasyLDR ones. The type of entry created depends on whether or not the "autoconfiguration checkbox" is selected when adding a new Windows XP entry in EasyBCD 2.0 and above (see the next section for more info).
NTLDR

When a new NTLDR-based entry is created, EasyBCD creates the following files:

In this case, boot.ini will contain one or more entries in the standard boot.ini format. In case the boot partition (the active partition on disk 0) is not assigned a drive letter, the NST folder and its contents will be created on the system disk, while NTDETECT.COM and BOOT.INI will still be placed on the unmounted boot partition.

EasyLDR

When a new EasyLDR-based entry is created, EasyBCD creates the following files:

Each ebcd.00x file in the diagram above is a boot configuration file that tells EasyLDR from which partition to load Windows XP. To keep things simple, ebcd.00x files are in the same exact format as BOOT.INI, but only contain the information for a single Windows XP entry. In case the boot partition is not assigned a drive letter, the NST folder and its contents will be created on the system disk, while NTDETECT.COM and the ebcd.00x files will still be placed on the unmounted boot partition. Each easyldrX file in the NST folder corresponds to a single ebcd.00X file in the root of the boot drive (the opposite also holds true). And each ebcd.00X file corresponds to one and only one Windows NT/XP install.
Adding a Windows XP entry with EasyBCDCreating a new Windows XP entry with EasyBCD is very easy. By default, EasyBCD will create a Windows XP entry via the NTLDR method described above in order to minimize confusion and because most users will not have multiple legacy entries alongside their Vista/7 installs. However, creating a EasyLDR-based entry is also simple, and only a checkbox away.
NTLDR

NTLDR-based entries require you to only point and click. Just enter a name for the new entry that will appear in the boot menu, and click "Add Entry" and EasyBCD will automatically create the needed boot files. NTLDR will be placed in the NST subfolder as shown above, and NTDETECT will be placed in the root of the boot partition. EasyBCD's "BootGrabber.exe" helper module will scan all mounted partitions for legacy NT-based installs (Windows NT through 2003), and automatically generate a boot.ini that contains all detected legacy installations:
When viewing entry details/settings, EasyBCD will show the drive letter that the NST folder is on for Windows XP entries. This is the drive that the BCD menu should load either NTLDR or EasyLDR from, and not the drive that Windows XP is installed on. Do not change this path, it won't do any good and will stop BOOTMGR from correctly loading NTLDR/EasyLDR, preventing Windows XP from loading!
General Troubleshooting Guidelines
  1. Make sure EasyBCD's Windows XP entry points to the "system" drive and that it has NTLDR, NTDETECT.COM, BOOT.INI in the root directory. You can grab those files here.
  2. Quadruple-check your BOOT.INI [operating systems] list. Make sure the default entry matches one of the entries in the [operating systems] list. Make sure rdisk(x)partition(y) points to the right partition that Windows XP is installed to.
  3. Make sure you only have one copy of NTLDR, NTDETECT.COM, and BOOT.INI on your system. Having multiple copies leads to lots of confusion as to which files you should edit and check.
  4. Make sure you selected "Windows XP" from the drop-down menu in EasyBCD's Add/Remove Entries section when you added XP to the Vista bootloader. If you kept it at the default option ("Windows Vista/Longhorn Server"), Windows XP will never boot.
Specific Error Messages
NTLDR is missing or corrupt (or one of its variants) 
Windows Boot Manager has experienced a problem.
File: \ntldr
Status: 0xc000000f
Info: The selected entry couldn't be loaded because the application is missing or corrupt.
As this error message says, NTLDR could not be located. Make sure the Windows XP entry in EasyBCD points to the system drive and keep in mind that this is not necessarily the same as the drive that Windows XP is installed to.
If the drive is correct, make sure NTLDR and NTDETECT.COM exist in the root partition. If they don't or if they're corrupted, you can download them here.

After choosing to boot into Windows, I get a black, blank screen.
This means that NTLDR was found, but NTDETECT.COM wasn't.
Grab it here.
winload.exe is missing or corrupt
Windows Boot Manager has experienced a problem.
File: \windows\system32\winload.exe
Status: 0xc000000f
Info: The selected entry couldn't be loaded because the application is missing or corrupt.
You added a Windows XP entry without setting the "Type" drop-down box in EasyBCD to Windows XP. Delete this entry, go back to the Add/Remove Entries section, and re-create it. This time, make sure to set its type to Windows XP before doing so.
ntoskrnl.exe is missing or corrupt

"Windows could not start because the following file is missing or corrupt:
\system32\ntoskrnl.exe.
Please re-install a copy of the above file"
This means the ARC paths in the [operating systems] section or the default entry in BOOT.INI is incorrect. Double-check that multi() and disk() are both set to 0, and verify that rdisk(x)partition(y) points to the correct partition where Windows XP is installed. Instructions on the correct configuration of boot.ini can be found here.
Hal.dll is missing or corrupt

Windows\System32\Hal.dll missing or corrupt:
Please re-install a copy of the above file.
This means the ARC paths in the [operating systems] section or the default entry in BOOT.INI is incorrect. Double-check that multi() and disk() are both set to 0, and verify that rdisk(x)partition(y) points to the correct partition where Windows XP is installed. Instructions on the correct configuration of boot.ini can be found here.
Windows could not start because of a disk hardware configuration problem

Windows could not start because of a computer disk hardware configuration problem. Could not read from the selected boot disk.
Check boot path and disk hardware. Please check the Windows documentation about hardware disk configuration and your hardware reference manuals for additional information.
This means the ARC paths in the [operating systems] section or the default entry in BOOT.INI is incorrect. Double-check that multi() and disk() are both set to 0, and verify that rdisk(x)partition(y) points to the correct partition where Windows XP is installed.
Generally speaking, this particular error message means that the partition referenced in the ARC paths in boot.ini does not exist, so check the partition() number first. If you're sure the partition() value is correct then try different rdisk() values until you get a working configuration. Further instructions on the correct configuration of boot.ini can be found here.
I get a BSOD when I boot into Windows XP

Congratulations! As hard as it may be to believe, this means your dual-boot is working just fine. Unfortunately, after EasyBCD successfully starts to load Windows XP, it crashes. This can be caused by using an imaged copy of a Windows XP installation from another PC, a hardware mis-configuration, or one of the zillion other BSOD-causing problems. Your best bet is to perform an in-place upgrade/repair install of Windows XP and/or ask for help in our friendly forums.

No comments: