Windows 2000 Dual Boot with Windows 98 or Linux

Microsoft Windows 2000 handles dual-boot configurations through its native NT OS Loader (NTLDR) architecture, managing boot sectors, multi-operating system menus, and partitioned file systems. When paired with Windows 98, Windows 2000 relies on an installation hierarchy and a shared boot sector to present an automated startup menu. When paired with Linux, Windows 2000 requires partition-level coordination between NTLDR and Linux boot loaders such as LILO or GRUB to navigate file system incompatibilities and Master Boot Record (MBR) ownership.

The Windows 2000 Boot Architecture

Windows 2000 uses the NT boot loader subsystem, which consists of three primary components stored in the root directory of the active primary partition:

  • NTLDR: The main boot loader that initializes the hardware and displays the operating system selection menu.
  • BOOT.INI: The text configuration file defining the operating systems, boot paths, and timeout durations.
  • NTDETECT.COM: The hardware detection module invoked when booting an NT-based kernel.

When the system boots, the MBR passes execution to the partition boot record containing NTLDR. If multiple operating systems are defined in BOOT.INI, NTLDR pauses and displays a boot menu.

Dual-Booting with Windows 98

Configuring Windows 2000 alongside Windows 98 relies on a strict installation order and file system compatibility.

Installation Sequence

Windows 98 must be installed before Windows 2000. Windows 98 expects exclusive control of the system and overwrites the MBR and boot sector with its own MS-DOS-based boot code. If Windows 98 is installed after Windows 2000, it overwrites NTLDR, rendering Windows 2000 unbootable until an Emergency Repair Disk (ERD) or the Recovery Console repairs the MBR.

When Windows 2000 is installed on a machine already running Windows 98, setup automatically:

  1. Detects the existing Windows 98 installation.
  2. Copies the original Windows 98 boot sector to a file named BOOTSECT.DOS.
  3. Writes new NTLDR code to the system partition's boot sector.
  4. Adds Windows 98 as a secondary entry in BOOT.INI:
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(2)\WINNT="Microsoft Windows 2000 Professional" /fastdetect
    C:\="Microsoft Windows 98"

When selected from the menu, NTLDR reads BOOTSECT.DOS into memory and executes it, handing control over to Windows 98's IO.SYS.

File System Considerations

  • FAT16/FAT32: Both Windows 98 and Windows 2000 natively read and write to FAT16 and FAT32. The system partition hosting the boot files must use FAT if Windows 98 resides on the C: drive.
  • NTFS: Windows 2000 supports NTFS 3.0 (NTFS 5), which enables file-level permissions, encryption, and disk quotas. Windows 98 cannot read or write to NTFS partitions without third-party utilities. A common architecture is placing Windows 98 on a primary FAT32 partition and Windows 2000 on a secondary NTFS partition.

Dual-Booting with Linux

Linux does not use the MS-DOS boot architecture, meaning Windows 2000 cannot natively detect an ext2 or ext3 partition during setup. Dual-booting requires using either the Linux boot loader (GRUB or LILO) or configuring NTLDR to chainload Linux.

The most common approach lets GRUB or LILO manage the primary boot sequence:

  1. Windows 2000 is installed first, claiming the MBR and configuring its partition.
  2. Linux is installed second.
  3. The Linux installer installs GRUB or LILO directly to the MBR, overwriting NTLDR's MBR hook.
  4. The Linux boot loader is configured to chainload Windows 2000 by pointing to the Windows system partition.

When the PC starts, GRUB/LILO loads first. Selecting Windows passes control to the Windows partition's boot record, invoking NTLDR.

Approach 2: NTLDR Chainloading Linux

If NTLDR must remain in control of the MBR, Linux must be chainloaded manually:

  1. Linux is installed, but its boot loader (LILO or GRUB) is installed to the root or boot partition rather than the MBR.
  2. The Linux boot sector is extracted to a binary file using the dd command:
    dd if=/dev/hda2 of=linux.bin bs=512 count=1
  3. The generated linux.bin file is copied to the root of the Windows 2000 system partition (C:\).
  4. An entry is appended to BOOT.INI:
    C:\linux.bin="Linux"

When selected from the Windows 2000 boot menu, NTLDR loads linux.bin into memory, which then executes GRUB or LILO to boot the Linux kernel.