My hard disk drive for my laptop died, so I replaced it with a Samsung 40Gb 5400rpm IDE HDD for $80. I also had a 30Gb IBM HDD lying around with Windows XP on it. So I decided to go about setting up a system where I can dual-boot Windows XP and Ubuntu Linux.
My laptop is an old Toshiba Satellite Pro 6100. It has a swap bay where you can pull out the DVD/CD bay and replace it with a second HDD bay or with a second battery. My setup will have Ubuntu Linux on the internal drive, and Windows XP on the removable swap bay drive.
I first replaced the dead drive with the new Samsung drive. Then I installed the Ubuntu Dapper Live CD installer into the DVD/CD bay. The Ubuntu folks have made this a trivial task, so I won’t go into any details with the installation. Once the installation is complete, remove the DVD/CD bay, and replace it with the second HDD with Windows XP on it.
When you start up the laptop grub will automatically boot you into linux. Once you have logged into linux, open up a terminal and edit /boot/grub/menu.lst. Add the following lines at the bottom of the file, preferably after the linux entry, so that Windows XP appears as the last boot option.
title Windows XP
map (hd0) (hd1)
map (hd1) (hd0)
rootnoverify (hd0,0)
makeactive
chainloader +1
Since Windows XP is on the second HDD we need to use the disk swapping technique. This means adding the two map entries under title Windows XP. Save and exit the file.
So from now on if you need to boot into Windows XP at startup, you need to hit the ESC button when you see the grub boot loader. This will bring you to a list of boot options. You should be able to see Windows XP as the last entry in the list. Select Windows XP and hit the enter key to boot into it.
If you want to boot into Linux, then just don’t do anything when grub starts up. Grub will timeout after about 5 seconds, then continue to boot into Ubuntu Linux. This will still work if you remove the second HDD, and replace it with the DVD/CD bay.
EDIT: If the above doesn’t work, then try the following entry in your /boot/grub/menu.lst instead:
root (hd1,0)
savedefault
makeactive
map (hd0) (hd1)
map (hd1) (hd0)
chainloader +1