One possibility is that you have some kernel module set to m when it should be set to y. Every module that you need to access /dev/hda2 must be set to y. This includes such things as the file system type module (ext2, ext3, etc.) the drivers for your IDE controller, hard disk, and whatever. If one of these modules is set to m then the bootable kernel has no way to access /lib/modules to read in the loadable module.
Be prepared. Create a LifeBoat CD.