how to force grub to boot (no human input) regardless previous booting failure

Solution 1:

Ok I found solution myself via shlug mail list.

what you do is to modify the /etc/grub.d/00_header and find:

if [ "${recordfail}" = 1 ]; then
  set timeout=-1
else
  set timeout=3
fi

change timeout = -1 to 0.

-1 means manual selection.

also remember to update-grub afterward, to generate the actual grub.cfg

Solution 2:

Add

GRUB_RECORDFAIL_TIMEOUT=0

to /etc/default/grub and that is solved my problem on Ubuntu Server 12.04.4

Grub uses GRUB_RECORDFAIL_TIMEOUT as the timeout when last boot failed. Its value defaults to -1, which means wait forever.

Solution 3:

This was reported as bug #841009 for ubuntu. I tried setting -1 to 0, but didn't work for me. So i tried another solution given here: https://bugs.launchpad.net/ubuntu/+source/grub2/+bug/841009

Quote:

[...] solution is to set GRUB_HIDDEN_TIMEOUT=-1 as suggested on ubuntu forums at this page http://ubuntuforums.org/showthread.php?t=1403517 but i've not tried this solution yet.

Quote:

grub2 in ubuntu 9.10 server is configured by default with GRUB_HIDDEN_TIMEOUT=0. If there is no keyboard attached (as in my headless setup), this causes grub2 to go to menu and stay there. Setting it to -1 gives me the desired sequence of menu, timeout and default choice.

I don't know if this is a grub2 bug or not, but if this is intended grub2 behavior, the default config for a server distro such as ubuntu server (which you would expect to function headless out of the box) should be different.

It worked for me.