Disclaimer: This document is provided "as is"
without warranty. Use at your own risk. In no event shall I be
liable for any damage resulting from the use of this work.
This HOWTO applies if:
- Your machine already has Windows installed, and you are
installing Linux as a second operating system, and
- You want to leave the Windows boot loader (NTLDR) on the MBR
(Master Boot Record). This allows you to continue to boot Windows
with no issues. I've heard that Windows 2000/Windows XP or
anti-virus software may complain if the MBR does not contain the
Windows boot loader
You can use either GRUB or LILO to dual-boot Windows
2000/Windows XP and Linux. Both functionally work fine, but from
what I've read, GRUB requires less maintenance, as LILO requires
you to reinstall the boot loader (by running /sbin/lilo)
every time you rebuild the kernel or make changes to
/etc/lilo.conf.
Requirements for /boot
Partition
The location of the /boot partition on the hard drive
is critical so that you don't get screwed by the infamous BIOS 1024
cylinder limit. The BIOS of older systems can't access data
beyond cylinder 1024, which is ~8.5 GB. A simple way to avoid the
BIOS 1024 limit is to create /boot within the first 1024
cylinders (~8.5 GB) of the hard drive. If you have multiple hard
drives (disks), /boot must be on the same hard drive
(probably the first hard drive) that has the Windows boot loader
(NTLDR) on the MBR.
Here are some options for where to create /boot
partition.
- (What I did) Shrink the Windows partition such that there is 50
MB of unused disk space at the beginning of the drive and lots of
space after the Windows partition. You can install the
/boot Linux partition in this first 50 MB and avoid any
potential issues with the 1024-cylinder limit entirely.
- Shrink the Windows partition such that it does not cross the
1024 cylinder (~8.5 GB), and install the /boot partition
right after the Windows partition.
- Use LBA
(Logical Block Addressing). LBA allows you to boot beyond the 1024
cylinder. In order to use LBA, your BIOS must support it. In
addition, for LILO, you must also add a flag to enable LBA support.
GRUB
supports LBA "out-of-the-box"
To non-destructively shrink the Windows partition, you can use
the free software program fips (please note
that fips does not currently support NTFS partitions). Another
option is the excellent commercial product Partition Magic. It has an
easy-to-use GUI. Unfortunately, the tool that comes with Red Hat
7.2, Disk Druid, does not have the ability to shrink existing
partitions. Once you've shrunk the Windows partition, you can use
Disk Druid during the Red Hat Installation to create all the
partitions you need for Linux.
Dual-Boot Setup
Following are the steps to get dual-boot working with GRUB; I
figured out how to do this by looking at a
similar procedure for LILO. I've verified that this works for
Windows 2000 and Windows XP, and this should work on Windows NT
(all 3 OSs use the same booting architecture).
- Install GRUB on the first sector of the /boot
partition. DO NOT INSTALL IT ON THE MBR!.
If you are performing the Red Hat
installation, for the "Boot Loader Installation" screen:
- Select "Use GRUB as the boot loader"
- Select Install Boot Loader record on "...First sector of boot
partition".
- After finishing the Red Hat installation, reboot into Linux. If
you don't have a boot disk, try booting
in linux rescue mode
If you already have Linux installed:
- Determine which partition contains the /boot partition
by running the df command. You'll see output like this:
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda3 8665372 1639580 6585612 20% /
/dev/hda2 46636 5959 38269 14% /boot
/dev/hda6 513776 189504 324272 37% /osshare
none 256624 0 256624 0% /dev/shm
From this output, we see that /boot is on
/dev/hda2.
- Make a copy of the Linux boot sector onto a floppy or onto a
FAT32 partition. We'll name this copy linux.bin.
To make a copy onto a floppy:
To make a copy onto a FAT32 (vfat)
partition:
- Mount the FAT32 partition if it's not mounted yet. If it isn't
listed in the df output, it hasn't been mounted yet. Check
out steps 3a-3c for
mounting a FAT32 partition on the "Share Partitions
HOWTO".
- Run the following command: dd if=/dev/hda2
of=/osshare/linux.bin bs=512 count=1
Substitute the path for the if= parameter (the input
file) with the appropriate partition from the previous step. E.g.,
set if= to /dev/hda2. Substitute the path for the
of= parameter (the output file) with whatever is
appropriate for your system. The example here
(of=/osshare/linux.bin) is for copying onto a FAT32
partition called osshare.
- Reboot into Windows
- Copy the linux.bin file to C:\
- Run notepad and edit C:\boot.ini. Note that
C:\boot.ini is a hidden system file, so it probably won't
show up in Windows Explorer. To edit the file, try:
Start->Run and enter: notepad C:\boot.ini. Add
the following line at the end: c:\linux.bin="Linux"
If your C: filesystem is NTFS
(not FAT32), you must edit C:\boot.ini as a user with
administrator-level privileges.
To make
C:\boot.ini writable,
you can either :
- Use Explorer:
- Go to Tools->Folder Options->View and select
Show hidden files and folders and deselect Hide
protected operating system files (Recommended).
- Right-click on the file, view the Properties and
uncheck Read-only. You can now edit the file.
- After editing the file, restore the settings to their original
state.
- Use the command-line:
- Make the file writable: attrib -R -S -H
C:\boot.ini.
- After you've finished editing the file, put the settings back:
attrib +R +S +H C:\boot.ini
For reference, here is a copy of my boot.ini file.
- Reboot again. You should be able to pick either Windows or
Linux. Selecting Linux will start GRUB
Troubleshooting
- When I select Linux from the boot menu, I get
a frozen "GRUB" (or an "L" in the case of LILO)
- Make sure you created the linux.bin
file correctly with the dd command. If you think you ran
the command correctly, the problem may be that your /boot
partition is beyond cylinder 1024 and your BIOS can't reach it. At
system startup, the Windows boot loader lists the choices from
boot.ini. When you select Linux, the boot loader then
loads the 512-byte linux.bin file, and then BIOS tries to
access the /boot partition to run GRUB. Some BIOS
implementations can only address the first 1024 cylinders of a hard
drive, which corresponds to ~8.5 GB. How do you fix this? Create your /boot partition before
cylinder 1024; i.e. before ~8.5 GB.
- If I select Linux from the boot menu, I get an
error message that says "Windows XP could not load: The file
hal.dll (windows/system32/) is missing or corrupt. Please
reinstall.
- This is usually caused by an error in the
boot.ini file. If you are unable to find and fix the
error, check out Kelly
Theriot's page that provides various methods for addressing the
problem.
Acknowledgments
- Jimmy Andriambao: for recommending the link
regarding hal.dll problems
- Leif Roger Kolberg: for creating a Norwegian
translation of this page
- Dirk Goepfert: for creating a
German translation of this page
- Fred van Lieshout: for creating a
Dutch translation of this page
- Rostislav "Udo" Galicek: for creating a
Czech translation of this page
- Arun Swami: for validating the dual-boot setup with multiple
hard drives. Thanks Arun!
- Adrián I. Correa: for enthusiastically providing a
Spanish translation of this
page. Adrián said it best: "I love this wonder called
The Internet!"
- Devesh Mistry: for pointing out the use of chroot
/mnt/sys/mnt/syimage when in linux rescue mode
- Emmanuel Brun: for graciously providing a French translation of this page
- Jason Noll: for reporting the hal.dll problem resulting from
error(s) in boot.ini
- Garth Patil: for helping to troubleshoot why GRUB was freezing
and having a great sense of humor
- Piete Brooks: for pointing out that editing
C:\boot.ini requires administrator-level privileges and
providing the content for making the file editable using
Explorer
- Paul Feehan: for providing the commands to make
C:\boot.ini editable for Windows XP
- Jan Holm Jensen: for reporting that C:\boot.ini is a
hidden system file
- Hampus Hedberg Hankell: for the following suggestion:
I think you should add help for
users in despair that already have installed grub on mbr ,thus
loosing the their ability to boot into windows xp. Procedure for
this is ,boot from a windows start disc and do a fdisk /mbr At
least then they can reach their windows and this time doing it
right
- Mark Jordan: for verifying that this works on Windows XP and
suggesting the content for copy to floppy
- Darryl Eaton: for
introducting me to Red Hat Linux
I hope you found the content on this page
useful (and accurate). Please
email me with feedback and corrections.
If you are interested in creating a translation of this page,
please read the translation
policy.
Raiders run the 3-4 defense and
Coryell
offense and had a good 2005 draft.
Copyright © 2005 Ed B. Park