Why an article on Linux in an NT boot menu? We have HOWTOs, don't we? The HOWTOs give step by step instructions, but unfortunately they don't provide everything we want. They are geared towards people who are new to Linux and are very good at explaining things to newbies. But when it comes to doing something out of the ordinary, we're stuck. This article is a meant to fill that void.
To start with one, day I got the crazy idea that it would be nice to have a single boot loader to boot everything from one manager instead of having both a LILO and an NT boot manager. So which manager should I choose? I chose NT boot manager because when we install LILO and boot NT from it, NT still presents its own boot menu and it's annoying enough to need to be asked two times to boot the right operating system . So I thought of removing LILO and using NT loader to present a nice menu for booting all the operating systems I have. Okay then, How do we do it? I searched through the HOWTOs. The mini HOWTO HOWTO NT OS Loader + Linux mini-HOWTO gives a good overview of the process. But unfortunately my brain couldn't grasp the concept. As a result, when I first followed the steps I got an unusable system. After 3 days of hard work and rebooting and fiddling with an unusable system 3 times, concepts began to become clear.
Here we Go.
The NT boot loader loads the operating system image by reading the initialization file boot.ini. Have a look at it now. It contains something like:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos
this says to boot the operating system from the partition as mentioned. That is it takes the first 512 bytes of information which is required for booting the corresponding OS. So how do we boot Linux using this concept. Simple! we can have the first 512 bytes of Linux boot partition (the boot sector for Linux) in a file and give it to NT boot manager. We can modify the boot.ini file as follows:
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"
Where boot.lnx is the file which contains the required 512 bytes. But we have to get the 512 bytes. How do we do that? The HOWTO gives a good example of how to do it. Here we need the first 512 bytes of Linux boot partition which says to NT just to boot Linux. So we make a dummy lilo.conf file and pass it to LILO and tell it to install the boot sector for linux at the top of Linux partition. Then we peel the first 512 bytes from this and put it into a file and give it to NT. Then we install LILO in MBR and take care of loading WINNT as the default OS. We create the lilo.conf to write NT as default and install it.
First let me explain my example environment. I loaded Red Hat out of the box with the default options during installation. It installs LILO in MBR and updates it according to the options given during installation regarding what other OSes (such as NT) you have. Here I have NT only. When I reboot after installation, LILO comes up with two options to boot--Linux and DOS. When I enter DOS, it goes into NT boot manager. What are we trying to make? We want to make LILO start the NT boot manger as default and in NT boot manager, we want to have an option to boot Linux.
What are we trying to make? We want to make LILO to start NT boot manger as default and in NT boot manager we want to have an option to boot Linux.
We start here. First boot into Linux. Make a dummy lilo.conf file like this: Copy lilo.conf to lilo.dummy and open lilo.dummy with vi. edit it to look some thing like this:
# lilo.dummy file boot = /dev/hda3 # Linux resides in /dev/hda3 in my machine. # replace it with the partition in which you installed linux timeout=0 # Time out zero to avoid lilo waiting for us vga = normal read-only default=linux image = /boot/vmlinuz label = linux root = /dev/hda3
Then execute LILO with this dummy file as the argument with the command. This installs linux boot sector on /dev/hda3.
/sbin/lilo -C lilo.dummy[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00" multi(0)disk(0)rdisk(0)partition(1)\WINNT="Windows NT Workstation Version 4.00 [VGA mode]" /basevideo /sos C:\boot.lnx="Redhat Linux 6.2"
Just change the lilo.conf file to reflect winNT as the default OS with no delay in booting into it and tell LILO to install it in MBR.
boot = /dev/hda # Install it in MBR timeout=0 vga = normal read-only default=win # We need NT as default image = /boot/vmlinuz # We can remove this entry with out any #problems as we will not be booting Linux from LILO label = linux root = /dev/hda3 other = /dev/hda1 label = win
install LILO again. Before rebooting, make sure that you have a rescue disk at hand. You can use the Red Hat installation disk as the rescue disk. See the Pitfalls section to find out how to use to for rescue. or You can make a boot disk with the command
mkbootdisk,Are you still unsatisfied? I know what is bothering you. You want LILO to be eliminated completely. Do this. Get a DOS floppy that has fdisk and boot the machine with the floppy. Then run "fdisk /mbr" to overwrite the master boot record. I don't know what happens with this option. I am still unsure about this and if any one knows what this option does, please write to me.
Remember every time you change your kernel or make any changes to lilo.conf, you have to follow the process again and make a new copy of boot.lnx and give it to NT.
If you have done some thing wrong and you can't boot Linux, then boot with the rescue disk and install LILO again as follows:
(You can use red hat installaion CD as the rescue disk. At the installation menu type rescue and enter)boot = /dev/hda timeout=500 prompt vga = normal read-only default=linux image = /boot/vmlinuz label = linux root = /dev/hda3 other = /dev/hda1 label = win