About time I wrote up a little of what I discovered while I was trying to fix grub when I replaced my MythTV boot drive. Thought it best I squeeze in a quick entry now to ensure I'd actually done something this month (!).
Turns out there's quite a lot of custom stuff written into the now-mandatory initrd (boot-time RAM drive). Updating kernel RPMs automatically recreate these initrds as per your system, but if your system changes, then you're left with a stuffed initrd and no boot!
These are the main errors I saw (aside from just a blank screen where I expected grub to start!) in case anyone else out there Googles them:
mkrootdev expected fs options setuproot moving /dev failed
And the issues I had basically boiled down to:
I had two root entries in my /etc/fstab (one new one, and one old one I'd neglected to comment out). This confuses the initrd boot init really badly.
/boot/grub/device.map must be made up to date. I'd gone from two drives to one so it was out of date, and I'd also gone from using LVM on my boot partition to not using it.
Essentially, with those fixed, it was a simple (!) matter of booting from a rescue DVD, chrooting to the real partition, running mkinitrd on the requisite kernel and grub-setup on the boot partition. As it happens, I prefer to use the grub shell and run the root command followed by the setup command manually, as I generally get more successes that way.
If anyone stumbles upon this and can't follow it, ask away; I'm writing this two months after the event and can't remember all the details off the top of my head 🙂