On Mon, 2008-03-10 at 01:22 -0700, Andrew Farris wrote:
In any case, the try-catch mechanism is in place by keeping the prior
kernel
installed, and if it fails you choose the next one in the list next time. It is
not possible to try a kernel until its been booted, and when it does boot if the
kernel itself misbehaves it is not possible to do anything automatic because the
kernel has failed to do what it should do...
It's easy. It's much like the dirty flag on filesystems. GRUB writes a
flag somewhere on disk, that indicates "Attempting to boot kernel
2.6.XXXXX". Then somewhere in the early userspace init scripts, you
change the flag to "Finished booting kernel 2.6.XXXX". The next time
grub starts up, it sees this flag and it now knows that that particular
kernel at least made it to userspace, which is a pretty good indication
it's not completely b0rked. If GRUB starts up and sees a "Attempting
boot" flag still remaining, then that's an indication that that kernel
failed to boot.
And I know this idea has come up before... Is this on anyone's to-do
list?
GRUB needs to be smarter. In the old days, unix machines had a monitor
firmware, the kernel never directly restarted the machine, it just
returned control to the firmware... "halt" used to mean something.