ubuntu 12.04,断电重启后启动时停留在启动菜单,必须敲回车才可以进入系统,查看grub.cfg文件发现有这么一段
function recordfail { #存在启动失败记录时调用,设置变量recordfail
set recordfail=1
if [ -n ${have_grubenv} ]; then if [ -z ${boot_once} ]; then save_env recordfail; fi; fi#如果grubenv文件存在,并已设置过相关变量,就将变量recordfail保存到grubenv文件。
}
只要存在启动失败记录
if [ "${recordfail}" = 1 ]; then
set timeout=-1 #设置超时时间为-1 ,如果不敲回车,不会继续
else
set timeout=10 #设置超时时间为10秒
在grub用set查看时recordfailt的值确实是1,重启机器时值仍然保留。
这样就知道原因出在哪了,有两种解决办法:
方法1、将timeout=-1 改为timeout=10 这样即使以后存在启动失败记录,也只是延时10秒启动
方法2、启动grub时按c键进行grub, 输入unset recordfail 重置recordfail即可。
-------------------------
2015.2.5日将ubuntu12.04内核从3.11升级至3.13,然后发现/boot/grub/grub.cfg有变化。这里修改的-1,有重新变回来了。因此,掉电后再次重启系统,就又停在了这里不动。
重新按此方法设置,新的内核上电就又正常了。
想到一个問題,之前出現国一次需要用fsck来修复 mktemp文件系统的問題,是否和掉电操作频繁有关?
----------首发14.11----------------------2016.7.2补充-------------
彻底解决这个问题的方法:
(A)于是有效的方法是修改/etc/grub.d/00_head文件中:
cat << EOF
if [ \${recordfail} = 1 ]; then
set timeout=-1
else
set timeout=${GRUB_TIMEOUT}
fi
EOF
将set timeout=-1 修改 成自己需要的秒数。
(B)还有一种方法是将/etc/grub.d/00_head文件中的,
set timeout=-1 修改成
set timeout = ${GRUB_RECORDFAIL_TIMEOUT:--1}
然后在/etc/default/grub文件中设置:
GRUB_RECORDFAIL_TIMEOUT=10
保存后执行update-grub
而单一修改/boot/grub/grub.cfg文件,则会因为运行update-grub命令,重新生成此文件而导致修改无效。
首先看看/boot/grub/grub.cfg和/etc/default/grub 和/etc/grub.d三者之间的关系吧:
(grub.cfg)It is automatically generated by grub-mkconfig using templates from /etc/grub.d and
settings from /etc/default/grub
翻译:grub.cfg是通过grub-mkconfig从grub.d里面的脚本生成的,相应的设置参数在grub里
grub.d里面的脚本实际上是/etc/grub.d/00_header里边的函数make_timeout
make_timeout(){
cat << EOF
if["\${recordfail}" = 1]; then
set timeout =${GRUB_RECORDFAIL_TIMEOUT:--1}
else
set timeout = ${2}
fi
EOF
}
(1)去看/boot/grub/grub.cfg,才发现,原来啊,这里有个可恶的
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=2
正是被这个-1给害惨啦~
于是武断修改 “-1” 为 “2”
但是通过ls -l grub.cfg可知该文件是只读文件,因此需要添加其可写权限:
chmod a+w grub.cfg
然后,修改相应语句:
if [ "${recordfail}" = 1 ]; then
set timeout=2
else
set timeout=2
记得,修改完毕,保存后,重新修改grub.cfg的权限:
chmod a-w grub.cfg
(2)参考 http://askubuntu.com/questions/178091/how-to-disable-grubs-menu-from-showing-up-after-failed-boot
How to disable Grub's menu from showing up after failed boot
甲:As I had the same problem and figured out the following solution:
-
Open
/etc/default/grub
with an editor -
Add a line with this assignment:
GRUB_RECORDFAIL_TIMEOUT=N
Set
N
to the desired timeout in case of a previously failed boot -
Update Grub:
sudo update-grub
乙:I had a similar issue just with Ubuntu 11.10, the following steps worked for me, maybe give it a try and see if this solves your problem:
-
Run Gedit as root (
gksu gedit
). -
Open
/etc/default/grub
and locate the following lines:GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
-
Change the values as follows:
GRUB_HIDDEN_TIMEOUT=10
GRUB_HIDDEN_TIMEOUT_QUIET=false
-
Save and run
sudo update-grub
from your terminal and reboot.
Now GRUB menu should always be shown. Another option is to show GRUB menu only as needed. To do this just hold down the SHIFT button when BIOS load screen appears.
Good luck!