Fixing Win9x/Me and Win2K/XP dual-boot

If you got to this page trying to fix a broken dual-boot between 9x/Me and 2K/XP, you can try first the FAQ / cheat sheet. If it does not help, read the whole thing. 🙂

1. Preliminaries

In this write-up I am discussing dual-boot scenarios between Windows 9x (95/98/98SE/Me) and Windows NT 5.x (2000/XP). Windows 98 and Windows 2000 are used as the primary examples, but most of the principles apply to any choice of OS from the first group (9x) and any choice of OS from the second group (NT 5.x). Where differences exist, I point them out.

The information may not apply to NT 3.x/4.x systems – I never tried them, so I don’t know; it does not apply to NT 6.x-10.0 (Vista or later), as the boot loader changed significantly in those installments; setting up dual boot between two systems of NT 5.x family is generally even easier, but here I want to cover specifically the case with Windows 9x/Me and Windows 2K/XP, as this setup is interesting to many retro PC builders, and can get a bit tricky, as I recently learned in my experiments.

2. Initial setup – Installing Win9x, then Win2K/XP

Setting up a dual boot between Windows 9x (95/98/98SE/Me) and Windows NT 5.x (2000/XP) is rather simple and can be achieved with only the provided Microsoft tools and without any third party utilities / boot managers. There is a very good article that cover the step-by-step process, which I followed myself with great success. The important point is to install Windows 98 first, and then install Windows 2000. The Windows 2000 setup will notice the 98 installation, and offer you an option to install itself without overwriting the existing OS. You can even use the same partition (Win9x defaults to \WINDOWS and Win2K defaults to \WINNT), but it’s generally advised to use a different one, to avoid mixing “Program Files” directories or applications that may expect one and only one Windows directory on the system drive.

What happens at this point is that:

  1. Windows 98 installed its boot sector and boot files (IO.SYS, MSDOS.SYS, COMMAND.COM) on the first primary partition (typically C:\)
  2. Windows 2000 copies the 9x boot sector into a file called BOOTSECT.DOS, then replaces the boot sector with its own, NT boot sector, and adds its boot files (NTLDR, NTDETECT.COM) to the root of C:\
  3. Windows 2000 creates a default BOOT.INI file specifying the installed operating systems. It will look very similar to this:
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(2)\WINNT
[operating systems]
multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000"
C:\="Microsoft Windows"

BOOT.INI is a simple straightforward text file. It specifies the boot loader parameters (timeout and default choice), followed by a list of installed operating systems, one per line, with a string in quotes representing the name that will be displayed in the boot menu. In this case multi(0)disk(0)rdisk(0)partition(2)\WINNT refers to the second partition (let’s assume we installed Windows 2000 on D:). C:\ refers to the first partition, where Windows 98 is installed. For whatever reason, the 2000 setup does specify which exact Win9x OS is installed, maybe it just does not bother to find out; in any case, the file is user-editable and you can change the description strings.

Note the different syntax for specifying the partitions – this is how the BOOT.INI lets the boot loader know whether the OS is of the NT type (multi/disk/rdisk/partition syntax) or 9x type (DOS-style drive root path). The boot loader uses this information to know how to load the operating system.

If you followed the above guide, at this point you probably have a working Win9x/2K dual-boot setup. Keep in mind one important point – even though the operating systems are separate, one on each partition – the boot sector and the boot files for both of them are still on the first partition (C:).

3. Installing Win9x after Win2K

What happens, if you already had a working Win2K installation and now decided that you want Win9x alongside? Or what happens if your Win9x got corrupted to the point that you decided to reinstall it from scratch? Can you do it without messing your existing Win2K, without reinstalling it from scratch, and still keep the dual boot? The answer is “yes”.  There are a few pitfalls, but they all can be solved, again, with only the capabilities built into Windows, without any third party tools.

The reason that the best way is to install Win9x first is that Win2K/XP can identify and accommodate the Win9x bootloader, but not vice versa. So the general strategy for when you must do it “the wrong way” is to just let Win9x trash the NT bootloader, and then repair it. All this can be done without any harm to the core files, settings registry, installed applications or anything of either OS.

4. Preparing Win9x for dual-boot

If you are installing Win9x “on top” of a working 2K install, you probably would not be formatting the system partition (as it most likely has the \WINNT directory and all other stuff). In this case you will probably install Win9x on a secondary partition, but it will still put its system files on the primary partition and overwrite the boot sector. Most likely, the Win2K system files will still be left intact, just the boot sector ruined. The system will now boot straight to Win9x without any indication of Win2K being on the drive anywhere.

Before restoring the Win2K boot sector, you need to make sure to save the existing 9x boot sector as C:\BOOTSECT.DOS (recall step (2) above). This is required for the NT boot loader to be able to call the DOS boot loader. If you reinstalled Win9x due to OS corruption, you may still have BOOTSECT.DOS on your drive. If this is the case, then you may skip the next step. Otherwise, you must create (restore) BOOTSECT.DOS before continuing.

5. Creating BOOTSECT.DOS

There is a nifty utility that creates BOOTSECT.DOS from a working DOS-style (DOS/Win9x/Me) boot sector. It’s called BTSECT. Really, the utility is a rather fancy batch file that can do quite a bit more than that – it can backup/restore existing system files or existing BOOTSECT.DOS, and it can first create the boot sector, using the SYS command. To do all this it uses a few MS-DOS utilities (which are copyrighted, so they are not distributed with BTSECT, but you would have them as part of the existing Win9x installation).

Anyways, in our case we assume that you have a working, bootable Win9x installation, and no BOOTSECT.DOS at all (otherwise, why do you need this step?). So really, the only thing you need from BTSECT is the BOOTREAD.SCR file, and you also need DEBUG.EXE from your existing \WINDOWS\COMMAND (or from one of the .CAB files on the Win9x setup CD). Then, boot into the DOS mode of your Win9x installation and run the following command (you may need to copy DEBUG.EXE and BOOTREAD.SCR to the current directory, or provide full paths to them).

DEBUG <BOOTREAD.SCR >NUL

What this command does is use the surprisingly powerful DOS debug program to read the boot sector and store it in BOOTSECT.DOS. This is why it must be run while the active boot sector is still the Win9x one. If there are no errors and you see that BOOTSECT.DOS was created, then place it in C:\ (if you didn’t originally create it there), and you may proceed to the following step:

6. Restoring the Win2K boot sector

The simplest way is using the recovery console built into any NT-based Windows setup disk. Boot from your Win2K (or WinXP) setup CD, wait until the first interactive screen appears, then press ‘R’ to repair and ‘C’ to choose recovery console. The recovery console should detect the installed Win2K/XP and let you “log in” to it (you may need to type the administrator password if you have any). You can see detailed instructions with screenshots, for example, here.

Once “logged in”, just run FIXBOOT (not FIXMBR), specifying the primary partition (most likely FIXBOOT C:, even if the OS itself is on a different partition). This will restore the NT boot sector.

Note: WinXP and Win2K installation CDs can be used interchangeably for this step; the recovery console does not have to match the exact OS (at least between 2K and XP, which are close enough).

At this point, you may be done. If you installed/reinstalled Win9x on top of a working Win2K install, you should have the NT boot sector active, the 9x boot sector saved as BOOTSECT.DOS, all boot files for both operating systems (NTLDR, NTDETECT, IO, MSDOS) and a correct BOOT.INI. On the next boot, the NT boot loader will kick in, read BOOT.INI and present you with the boot options. However, if you installed a fresh Win9x, and Win2K was originally installed without being dual-boot-aware, you may not have the Win9x option in your BOOT.INI. However, you should be able to boot into your Win2K and just edit the file according to the above example.

7. Advanced repair steps

The steps in the following sections will not typically have to be done for a simple case of installing Win9x after Win2K. However, you may need to resort to them in one of the following cases:

  • Your system partition that had both Win9x and Win2K boot files was corrupted/reformatted and all boot files were lost (assuming here that the Win2K installation itself was on a different partition, otherwise it is also gone and the point is moot).
  • You forgot to save BOOTSECT.DOS before restoring the Win2K/XP boot sector
  • You messed up BOOT.INI or the BOOT.INI is invalid (e.g., partitions changed)
  • Something else totally bizarre that I did not think about

If any of the above happens, you may be in a situation where you cannot boot any OS at all, because there are no valid boot sectors, or boot files are missing, etc. In this case, your tools are the setup CDs for Win9x/Win2K/XP (I assume you have them), and/or boot floppies / emergency repair floppies you may have created (it’s generally possible to avoid them, but sometimes it’s easier if you have one available).

8. Restoring 2K/XP boot files

If you restored the NT boot sector using FIXBOOT, but get “NTLDR is missing”, then the boot files are either missing or corrupt. They can be copied over from the \I386 directory on the setup CD (either 2K or XP, but make sure it matches your OS!), using the recovery console. Follow the above steps to get to the recovery console, and then type (if necessary, replacing E: with whatever your CD letter is):

copy E:\I386\NTLDR C:\
copy E:\I386\NTDETECT.COM C:\
9. Restoring Win9x boot files and boot sector

If you installed Win9x after Win2K, the boot files should already be on C:\. However, if you did not create BOOTSECT.DOS before overwriting the 9x boot sector with the NT boot sector, you will need to restore the 9x boot sector first, create BOOTSECT.DOS, then run FIXBOOT and restore the NT boot sector again.

Restoring the DOS/Win9x boot sector is done by the SYS.COM program, which is part of any DOS/Win9x installation, and typically also gets copied to boot floppies (so they can be used to transfer the system to hard drives). If you have such a floppy, just boot from it, then run:

SYS C:

If you don’t have a bootable floppy (or no floppy drive), you can use the Win9x setup CD, but it’s a bit trickier, since the ‘bootable’ image of that CD does not contain SYS.COM. However, once again, it will be available under \WINDOWS\COMMAND in your existing Win9x installation. Obviously, you cannot boot to it (since that would mean your boot sector is intact), so you should boot from the Win9x setup CD (not start Win9x setup, just boot from the CD). Make sure it’s the same Win9x version you are restoring. After it boots, the ‘bootable’ image will be assigned driver letter A:, and I assume your Win9x is installed on C:\. Simply run:

C:\WINDOWS\COMMAND\SYS.COM A:\ C:

This tells SYS to take the boot sector and boot files from A:\ and put them on C:. I think it might actually be creating the boot sector from scratch, and just copying the boot files over, but I’m not sure and it does not really matter.

If your Win9x is installed on a different drive, you should change the path to SYS.COM, but you should still use C: as the second parameter, because that’s where the boot sector should go (unless you are setting up a non-standard case where the boot is not from the first primary partition).

The above step will transfer the boot sector (and system files, if needed) to your primary partition. Then go back to ‘Creating BOOTSECT.DOS’ (step 5) above.

10. Recreating BOOT.INI

If for some reason your BOOT.INI is missing/corrupted, and you cannot boot to either OS to create/edit it, you should still be able to boot to a Win9x CD and use EDIT.COM from \WINDOWS\COMMAND. If for whatever reason, that is not possible, and you don’t have any boot floppies or a a floppy drive at all, then you can use BOOTCFG /REBUILD option from the WinXP Recovery Console; it is not available in the Win2K setup CD, you need the WinXP CD for this one. BOOTCFG /REBUILD will scan your existing NT-family Windows installations and will create a functioning BOOT.INI, which should allow you to boot your NT-family OS, and from there adjust the BOOT.INI to allow Win9x dual-boot.

FAQ/Summary

This section can serve as a “cheat sheet” if you are stuck at a particular state.

Q: I’m getting ‘No Operating System Found’ error.
A: No valid boot sector exists on C:\. Most likely you should first install either Win9x or Win2K, from their respective setup CDs. If the boot sector got destroyed via some partition corruption, you should follow step 4 or step 9, depending where you are in the process.

Q: After running FIXBOOT from 2K/XP recovery console, I still get ‘NTLDR is missing’.
A: The NT boot files are missing/corrupted. Refer to step 8.

Q: I get “Invalid boot.ini” and Windows fails to boot.
A: Recreate BOOT.INI as described in step 10.

Q: I have Win9x and Win2K, but Win9x boots automatically ignoring Win2K (no boot menu).
A: Unless you just have a boot menu with 0 delay, which defaults to Win9x, you probably trashed the Win2K boot sector. Start at step 4 and continue from there.

Q: I have Win9x and Win2K, but Win2K boots automatically ignoring Win9x (no boot menu).
A: Edit BOOT.INI to add a Win9x option pointing to the correct location of BOOTSECT.DOS (see example in step 2).

Q: When I select Win9x option in boot menu, I get “I/O Error reading BOOTSECT.DOS”.
A: If you have a valid BOOTSECT.DOS, make sure the path in the boot menu is correct. If you do not have a BOOTSECT.DOS, go to step 9.

Q: When I select Win9x option in boot menu, I get complaints that “\system32\ntoskrnl.exe” is missing or corrupt.
A: You either have the wrong labels, or you mistakenly defined the path to Win9x in NT-style, so the bootloader tries to load the NT kernel. Correct BOOT.INI to follow the DOS-style definition for Win9x (see example in step 2).

Q: The recovery console fails to find my Win2K/XP installation.
A: This never happened to me, but I have heard of it. I think it may suggest that there is something more seriously wrong with the installation than just missing boot files. You may need to do a “repair install” from the setup CD, or a full reinstall in extreme cases.

Q: Can these instructions be applied to a situation where an external boot manager is used to set up multi-boot between 9x and 2K?
A: Possibly, partially. I have never used external boot managers for managing multi-boot between different types of Windows, so I cannot help you with this. Generally, third-party boot managers have their own tricks and methods for setting up and fixing things; you should consult their documentation or seek assistance specific to the manager you are using.

Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s