Don't know why or what causes it so far and there are many open bugs on Ubuntu or Debian for grub2 related issues which may also seem to be related, however it seems to be actually more related to recordfail event variable. Recordfail is is a grub environment variable which is set to stop grub on boot following a boot that failed or had issues. This provides user a degree of control and option to control how they want to deal with the system issues. This variable is not being reset and every subsequent boot will stop on grup options.
Running following command seems to fix the issue once but stuck again on grub boot indicates that there are some issues with boot up or system start.
$ grub-editenv list
recordfail=1
$ sudo grub-editenv /boot/grub/grubenv unset recordfail
recordfail=1
$ sudo grub-editenv /boot/grub/grubenv unset recordfail
Another suggestion is to change timeout=-1 to timeout=5 in /boot/grub/grub.cfg, but obviously this is not stopping the grub on menu options even if there was errors with failures and instead would delay boot by 5 seconds. But keep in mind that if grub was updated using update-grub command it will overwrite this option.
if [ ${recordfail} = 1 ]; then
set timeout=-1 # change value of -1 to 5
else
set timeout=3
fi
set timeout=-1 # change value of -1 to 5
else
set timeout=3
fi
So we have couple of options here but unfortunately neither of these actually diagnose the disease and treat it but simply give you a pain killer for the time being, if you know what I mean.
If you are worried that updates may reset this value in grub.cfg you can also modify the master templates which are generated by grub-mkconfig located in /etc/grub.c and settings in /etc/default/grub. So the file which I have tested the above workaround and updates both and has worked successfully is /etc/grub.d/00_header where I changed "set timeout=-1" to "set timeout=5".
A suggestion from an old Ubuntu upstart bug can also be tried and may fix the issue if it was because of loopback inteface not found. This addresses issues with condition "start on filesystem and net-device-up IFACE=lo" inside /etc/init/rc-sysinit.conf file.
Now reinstall ifupdown
Restart the box and see if it works
Good luck and fingers crossed.
If you are worried that updates may reset this value in grub.cfg you can also modify the master templates which are generated by grub-mkconfig located in /etc/grub.c and settings in /etc/default/grub. So the file which I have tested the above workaround and updates both and has worked successfully is /etc/grub.d/00_header where I changed "set timeout=-1" to "set timeout=5".
A suggestion from an old Ubuntu upstart bug can also be tried and may fix the issue if it was because of loopback inteface not found. This addresses issues with condition "start on filesystem and net-device-up IFACE=lo" inside /etc/init/rc-sysinit.conf file.
sudo vi /etc/network/interfaces
Delete or comment loopback interface config# auto lo
# iface lo inet loopback
Save and quitNow reinstall ifupdown
sudo apt-get --reinstall ifupdown
This will recreate loopback inteface settings and should address the issueRestart the box and see if it works
Good luck and fingers crossed.