[conspire] Laptop boots to GRUB instead of SUSE

Rick Moen rick at linuxmafia.com
Thu Oct 21 20:44:08 PDT 2010

Quoting kw6 at xmission.com (kw6 at xmission.com):

> This is the laptop which I loaded with Suse 11.2, then which you
> guys got to run the aircard at an installfest a couple of months
> ago.
> Tonight, it started GRUB, then when I type boot, it gives me "Error
> 8: Kernel must be loaded before booting" -- the only think I can
> think is that the latest automatic update (loaded two nights ago,
> the last time the system was running) is messed up.


Basically, GRUB is trying out the pathname it has on record for finding
the kernel image binary, which is/was probably something like
/boot/vmlinux-2.6.xx-n-686 .

At the grub> prompt, you can go _find_ the kernel image you want to 
boot, because of GRUB's built-in ability to navigate around.

First, though, at the grub> prompt, you have to tell it where the root
filesystem is, _then_ where the kernel is, and last where the initrd
(initial RAMdisk) image file is.  Then, you can say 'boot' and expect
that it will work.

Something like:

grub> root (hd0,1)
grub> kernel /boot/vmlinuz root=/dev/sda2 ro
grub> initrd /boot/initrd.img
grub> boot

After you've booted, you can go and correct /boot/grup/menu.lst to
have the correct pathname for the kernel.

Those are _not_ necessarily going to be the exact values you need, so
let me explain what's going on, here.

The 'root' specifier, for which I use (hd0,1) as an example, is GRUB's 
own syntax for where disks and partitions are.  Please note that this is
_not_ anything to do with the way the Linux kernel refers to disks and
partitions.  It's totally separate and idiosyncratic to GRUB.

'hd0' is GRUB-speak for 'first hard drive in boot order', which normally
Linux would call /dev/sda.

'hd0,1' is GRUB-speak for 'first hard drive in boot order, second
partition on that drive'.  (GRUB uses zero-based counting.)

The point is, this is a place where you are going to need to furnish the
two numbers from your personal knowledge of your system.  If need be,
you can play with different values, until you find the ones that permit
you to locate the kernel and initrd, which is the next step.

For the 'kernel' line, you have some built-in help.  You can type:

grub> find vmlinuz

That should make GRUB search directories on the disk and partition you
told it to use during your 'root' command, looking for files that start
with 'vmlinuz'.  It'll give you a list of those.  You can then provide
the name of whatever one you think most likely to be useful.  Also, just
as in the bash shell, you can do filename-completion:

grub> kernel /boot/vmlinuz

...and hit the Tab key, to let GRUB supply the rest of the vmlinuz...
filename if you've supplied enough letters that it's uniquely findable.
(Once you have that, don't forget to add '/root=dev/sdXN ro', where X
and N are an appropriate drive and partition location for the root
filesystem the way _Linux_, not GRUB, refers to them.

Last, you go find the initrd* file the same way you did the kernel image
file.  (It logically needs to be the same numerical revision as the
kernel, so, if you are booting vmlinuz-2.6.23-3.686, then you probably 
need to specify initrd-2.6.23-3.686.img , or whatever.)

I realise that the above is a lot to deal with, but that's the breaks
when you've messed up your bootloader.  You would be able to solve this
a little more easily if you had a maintenance distro on a USB key drive
or a CD, but at least you can get built-in assistance from GRUB itself.

For more help, you'll find a couple of good GRUB items on 
http://linuxmafia.com/kb/Kernel .

More information about the conspire mailing list