WARNING - LONG POST!
Linux has up to eight IDE devices:
hda - primary master on motherboard
hdb - primary slave on motherboard
hdc - secondary master on motherboard
hdd - secondary slave on motherboard
If you have a PCI controller you get the following as well:
hde - primary master on PCI
hdf - primary slave on PCI
hdg - secondary slave on PCI
hdh - secondary slave on PCI
When you install Linux, it stores the hard drive settings in various files, including /etc/fstab, and /etc/lilo.conf too. Linux doesn't notice that you have moved your drive on to the PCI card and is still trying to use the old settings. There is a way round this, which I used to install SuSE 7. I installed it on hdc as the kernel didn't recognise my Promise ATA card. I just put the basic stuff on there as I was going to recompile a load of stuff anyway. After installing, I moved it on to my PCI card as hdf.
If you're using lilo (I don't - I have a Windows boot menu and I press '1' for 98SE, 2 for SuSE and 3 for DOS) - don't do so this time. Boot normally into Windows. Either wait for it to load completely and do a Start>Shutdown and reboot in DOS mode or press F8 whilst it's loading and get a DOS prompt there. You need a kernel and a copy of loadlin to do this. With loadlin you can tell it what the root partition is, overriding any settings.
To load Linux using loadlin, you need to type in something like this:
loadlin.exe vmlinuz root=DEVICE rw
Replace DEVICE with /dev/hdX, where X is the letter of your hard drive. Linux will boot (hopefully), but you might see some error messages and it will fail to load your /usr partition. If you boot into xdm or kdm, that won't work either. Hopefully the end result will be that you get a log in prompt - try switching terminals using ALT-F1 thru F8 to get a login. Log in as root (yes, really). Once you get your shell prompt, you can start changing stuff.
You probably won't have access to read and write to your root partition, so first you need to change that so you can change the files on there. There is an option with the mount utility that lets you remount an already mounted partition. I think the syntax is:
mount -o remount,rw /
Hopefully, this will result in a read/write / partition. This will allow you to edit the /etc/lilo.conf (if you use lilo) and /etc/fstab files.
If your /usr partition isn't on the same partition as /, you'll need to mount this manually, so you can get at your editors and X (if you want to use X). cd into /etc and type "cat fstab". This will list the contents of your filesystem table. You can use this info to find out the partition your /usr is on. Look for a line that has /usr in it (obviously). It will also have a /dev/hdXX bit in it. This is the device you'll use to mount to get at your /usr. You'll have to change this slightly to be able to mount on your new drive. So if /etc/fstab says that your /usr is on /dev/hdb4 (which it now isn't) and all of Linux is now on /dev/hdf (in various partitions), type this:
mount -t ext2 /dev/hdf4 /usr
Replace the /dev/hdf4 with whatever's appropriate for your system. You should get your /usr partition back, so you can run X if you want to edit the files from KDE or Gnome. If you do, you'll probably need to mount your swap as well, so I'd stick to something like pico, emacs or vi. I personally prefer pico as it's the simplest.
The files you'll need to edit are /etc/fstab and /etc/lilo.conf. Seeing as I don't know anything about lilo, all I can do is guess. Basically, with /etc/fstab, you need to replace any occurrences of the original installation device (e.g. /dev/hdb) with the new one (e.g. /dev/hdf). I'd imagine it's the same with /etc/lilo.conf.
Once you've finished editing, save your files and get back to your shell prompt. Type in "reboot" and your computer will reboot. If it brings up any error messages about mount points, partitions and so on you can probably ignore these. After rebooting, provided you did everything correctly, you should get your Linux back.
Hope this helps. Hopefully there aren't too many errors in it...
