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]