BMaytum:
Your BIOS is well suited to safely putting grub in the MBR of the IDE drive, and having it set as the boot drive. From there you will be able to use grub to boot your Windows installation from the grub menu, and not disturb the MBR of the SATA, Windows system drive, in any way, so just choosing to set the SATA drive as the boot drive will bypass grub altogether, and boot your Windows installation using its native boot code from the SATA drive's MBR.
When two drives are involved, one with Windows and one with Linux systems installed, one always wants the grub installation to be on the drive holding the Linux installation. Grub is then safe from being overwritten by Windows repairs, (as Windows is wont to do) and each drive can act independently of the other, should one drive fail. With single drive systems, when grub is installed to the MBR, it is always in danger of being overwritten by any type of Windows repair. MS is very rude in this respect. Grub is easy to restore in such cases, but it is very annoying.
More to the immediate problem of booting Windows, as you presently have things set up, first you have to learn to think as BIOS and grub do. By definition, the boot drive is always (hd0). When the IDE drive is the boot drive, it is (hd0) and the SATA drive becomes (hd1). You must edit your Windows stanza in your menu.lst:
From:
title windows
root (hd0,0)
map (0x81) (0x80)
map (0x80) (0x81)
makeactive
chainloader +1
savedefault
To:
title windows
rootnoverify (hd1,0)
map (0x81) (0x80)
map (0x80) (0x81)
makeactive
chainloader +1
savedefault
It should then work, assuming that the installation is, in fact, installed on the first partition of that drive.
Since Windows doesn't use the /dev/sdx type references for hard drives, and the running Linux kernel sees the drives from its own perspective, those designations are subject to change with each kernel used. This is why UUID numbers, or partition labels are now used; they remain static even if the /dev/sdx designation changes. I prefer labels to UUID because I, as a person, can understand and relate to the labels better than a long numerical string. To the Linux kernel they are equals, and handled in exactly the same way.
Labels can be applied to your Linux partitions from the liveCD, or the running installed system, after first determining how the running kernel sees them. To identify the partitions the fdisk -l command is used, in a terminal, as root.
[root@localhost ~]# fdisk -l <Enter>
On my machine I get;
[root@littleboy ~]# fdisk -l
Disk /dev/sda: 200.0 GB, 200049647616 bytes
255 heads, 63 sectors/track, 24321 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000565cd
Device Boot Start End Blocks Id System
/dev/sda1 1 45 361431 83 Linux
/dev/sda2 46 257 1702890 82 Linux swap / Solaris
/dev/sda3 258 12161 95618880 83 Linux
/dev/sda4 12162 24321 97675200 5 Extended
/dev/sda5 12162 24321 97675168+ 83 Linux
Disk /dev/sdb: 164.7 GB, 164696555520 bytes
255 heads, 63 sectors/track, 20023 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xd7523ebd
Device Boot Start End Blocks Id System
/dev/sdb1 1 13 104391 83 Linux
/dev/sdb2 14 257 1959930 82 Linux swap / Solaris
/dev/sdb3 258 1778 12217432+ 83 Linux
/dev/sdb4 1779 20023 146552962+ 5 Extended
/dev/sdb5 1779 7860 48853633+ 83 Linux
/dev/sdb6 7861 14000 49319518+ 83 Linux
/dev/sdb7 14001 20023 48379716 83 Linux
Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sdc1 1 39 313236 83 Linux
/dev/sdc2 40 1047 8096760 82 Linux swap / Solaris
/dev/sdc3 1048 7127 48837600 83 Linux
/dev/sdc4 7128 121601 919512405 5 Extended
/dev/sdc5 7128 20500 107418591 83 Linux
/dev/sdc6 20501 33267 102550896 83 Linux
/dev/sdc7 33268 37158 31254426 83 Linux
/dev/sdc8 37159 41049 31254426 83 Linux
/dev/sdc9 41050 44940 31254426 83 Linux
/dev/sdc10 44941 48831 31254426 83 Linux
/dev/sdc11 48832 61886 104864256 83 Linux
/dev/sdc12 61887 101050 314584798+ 83 Linux
/dev/sdc13 101051 104942 31262458+ 83 Linux
/dev/sdc14 104943 108893 31736376 83 Linux
/dev/sdc15 108894 113071 33559753+ 83 Linux
/dev/sdc16 113072 116988 31463271 83 Linux
/dev/sdc17 116989 121601 37053891 83 Linux
Disk /dev/sdd: 750.2 GB, 750156374016 bytes
255 heads, 63 sectors/track, 91201 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x2db1883a
Device Boot Start End Blocks Id System
/dev/sdd1 1 13 104391 83 Linux
/dev/sdd2 14 761 6008310 82 Linux swap / Solaris
/dev/sdd3 762 4497 30009420 83 Linux
/dev/sdd4 4498 91201 696449880 5 Extended
/dev/sdd5 4498 16947 100004593+ 83 Linux
/dev/sdd6 16948 41750 199230066 83 Linux
/dev/sdd7 41751 45520 30282493+ 83 Linux
/dev/sdd8 45521 50506 40050013+ 83 Linux
/dev/sdd9 50507 65096 117194143+ 83 Linux
/dev/sdd10 65097 79686 117194143+ 83 Linux
/dev/sdd11 79687 91201 92494206 83 Linux
The command to label an ext formatted partition:
[root@localhost ~]# tune2fs -L <label> /dev/sdxn <Enter>
Replace <label> with what you want the partition known as, (up to 16 characters) x with the drive letter, and n with the partition number.
The commands to label a swap partition:
[root@localhost ~]# swapoff /dev/sdxn <Enter>
[root@localhost ~]# mkswap -L <label> /dev/sdxn <Enter>
As swap labels are not usually shown, you can now test whether the label was successfully created with these commands;
[root@localhost ~]# swapon LABEL=<label> <Enter>
[root@localhost ~]# swapon -s <Enter>
If you get a result of this nature, the label has been created and is usable.
[root@littleboy ~]# swapon -s
Filename Type Size Used Priority
/dev/sda2 partition 1702880 0 3
/dev/sdc2 partition 8096752 0 3
/dev/sdd2 partition 6008300 0 3
I have three swap partitions currently in use, all called from labels in my /etc/fstab.
Those labels can then be used in your boot stanzas, in this manner;
title MiniMe 2010
kernel (hd2,13)/boot/vmlinuz BOOT_IMAGE=MiniMe_2010 root=LABEL=minime2010 resume=LABEL=swap1000 vga=791
initrd (hd2,13)/boot/initrd.img
In /etc/fstab they take this form;
# Entry for /dev/sdc14 :
LABEL=minime2010 / ext4 defaults,noatime 1 1
LABEL=TR5-Documents /home/polack/Documents ext3 rw,user,auto,exec,noatime 0 0
LABEL=Documents2 /home/polack/Documents2 ext3 rw,user,noauto,exec,noatime 0 0
LABEL=share7 /share7 ext3 rw,user,auto,exec,noatime 0 0
LABEL=share9 /share9 ext3 rw,user,auto,exec,noatime 0 0
LABEL=movies /movies ext3 rw,user,auto,exec,noatime 0 0
LABEL=movies2 /movies2 ext3 rw,user,auto,exec,noatime 0 0
LABEL=TV-1 /tv ext3 rw,user,auto,exec,noatime 0 0
LABEL=storage00 /zstorage00 ext3 rw,user,noauto,exec,noatime 0 0
LABEL=120backup /zbackup ext3 rw,user,noauto,exec,noatime 0 0
LABEL=boot200 /mnt/boot ext3 rw,user,noauto,exec,noatime 0 0
none /proc proc defaults 0 0
# Entry for /dev/sda2 :
LABEL=swap200 swap swap sw,pri=3 0 0
# Entry for /dev/sdc2 :
LABEL=swap1000 swap swap sw,pri=3 0 0
# Entry for /dev/sde2 :
LABEL=swap750 swap swap sw,pri=3 0 0
none /dev/pts devpts mode=0620 0 0
/dev/fd0 /mnt/floppy auto rw,user,noauto,exec 0 0
/dev/sr0 /mnt/cdrom auto ro,user,noauto 0 0
/dev/sr1 /mnt/dvd auto ro,user,noauto 0 0
# none /dev/shm tmpfs defaults 0 0
where the # Entry for /dev/sdc14 : is just a nominal reference, subject to change, as previously noted. That line is commented out with the # character, so the system doesn't see or use it in any way. The same applies to similar lines with reference to the swap partitions. Note that while the # Entry for /dev/sde2 : is seen in the fstab, the partition is currently seen by the running kernel as /dev/sdd2. (See my swapon -s results)