Howto: Using GRUB to load Windows XP located on a second hard disk


Please read this warning BEFORE you start.

Because my trusty old Pentium III died I moved two hard disks onto my Athlon 1GHz machine and made my Redhat 9.0 Linux install the Primary or first hard disk . The windows XP install which I use occassionally I inserted as the slave drive on the same IDE0 Channel. This is my setup as follows.

IDE0 Channel 0 = GNU/Linux Redhat 9.0 20GB
IDE0 Channel 1 = Windows XP SP1 30GB
IDE1 Channel 0 = DVD/CD ROM/CDRW

The out put from fdisk for my harddisks was this

[root@p3 james]# /sbin/fdisk -l

Disk /dev/hda: 20.4 GB, 20485785600 bytes
255 heads, 63 sectors/track, 2490 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hda1   *         1        13    104391   83  Linux
/dev/hda2            14      2360  18852277+  83  Linux
/dev/hda3          2361      2490   1044225   82  Linux swap

Disk /dev/hdb: 30.0 GB, 30020272128 bytes
255 heads, 63 sectors/track, 3649 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot    Start       End    Blocks   Id  System
/dev/hdb1   *         1      1020   8193118+   7  HPFS/NTFS
/dev/hdb2          1021      3649  21117442+   7  HPFS/NTFS


I still wanted to be able to boot my XP install but I didn't want to go the way of installing the Windows XP boot loader (this is the booting Linux from Windows way of doing it - Not the booting Windows from Linux which is what I wanted)

I tried lilo but found the options confusing (and googling didn't give an obvious solution), but GRUB had a good bit of information on running DOS/Windows.

I found the info by running:

info grub
# Look for booting another OS and then find the Windows section

I didn't have GRUB installed I was running lilo so I installed GRUB to the MBR (master boot record) of the first hard disk by running the following command

/sbin/grub-install /dev/hda
# because the second hard disk wasn't present when grub was originally installed
# it had to be added to the /boot/grub/device.map file
vi
/boot/grub/device.map
# this device map was generated by anaconda
(fd0)     /dev/fd0
(hd0)     /dev/hda
(hd1)   /dev/hdb
# added this line


Contents of /etc/grub.conf

# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
# all kernel and initrd paths are relative to /boot/, eg.
# root (hd0,0)
# kernel /vmlinuz-version ro root=/dev/hda2
# initrd /initrd-version.img
#boot=/dev/hda
default=0
timeout=10
splashimage=(hd0,0)/grub/splash.xpm.gz
title Red Hat Linux (2.4.20-8)
    root (hd0,0)
    kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ hdc=ide-scsi
    initrd /initrd-2.4.20-8.img
title Windows XP
   
# as far as I can understand it the Windows XP hard disk hd1
    # needs to think it is the first disk on the IDE bus in order to boot
    # so do a swap and add the following two commands to change it
    map (hd0) (hd1)
    map (hd1) (hd0)
   
# you then need to tell grub which hard disk and which partition to read the booting information from
    # although you have done a swap using the above commands the disks don't change their labelling
    # so use hd1,0 as the root device (in grub all numbering starts at zero)
    # the telltale to knowing which partition to add to the rootnoverify option
    # is the output of fdisk -l the `*' on /dev/hdb1 showing it's the active or boot partition
    rootnoverify (hd1,0)
    # now tell grub that you are going to be doing an indirect boot using an external chainloader
    # i.e it's going to grab the Windows boot code and run it instead
    # of directly loading the linux kernel like it usually does.
    chainloader +1
 
   # not sure exactly what makeactive does
    # I'm assuming it is marking the root partition you specified
    # with the rootnoverify command as the active or boot partition
    # if it isn't already marked as the `*' or boot partition
    makeactive
   

nb: Make sure you back up your data and configuration before playing with your hard disk configuration it can really suck to lose important information.
Compiled from the grub info pages and trial and error by [email protected]