废话:

        话说这问题纠结了很久,于是。。。 终于,我憋不住啦,还是上去CSDN和Ubuntu中文论坛问别人吧,找找思路也好。。。 纠结,问了整天,哪里都没人回答,好吧~不过呢,终于,最后,解决啦~

 

我的提问:

        现在我的计算机上只安装了Ubuntu一个操作系统,正常情况下,开机时会默认正常启动,想实现一个简单的功能,想知道如何去做~

功能:
       在Ubuntu正在开机的过程中,如果将计算机断电,那么再次启动计算机后,计算机会进入到
GNU GRUB 1.99-21ubuntu3版的界面中,而此时菜单选项并未倒计时的功能,一定得手动选择,在这么一个前提条件下,有什么方法能让计算机自动选择第一项呢?
PS: 在正常开关机的时候,计算机会自动选择第一项的。
       上网看过 upstart 和ubuntu启动过程原理介绍 这文章,不过好像没什么关联,不知道这个GNU是属于开机后的哪个步骤,到了下载init这里没有了呢?
       我想实现这个功能,正常的思路是去修改GNU的配置文件吗? 看过GNU的修改方法,不过修改了后,好像对这种情况没有作用。
 
求指教~


解决过程:

        刚刚开始,还不知道那个画面叫做GRUB呢,将这个界面的一些文字打上去Googole一下,知道了,原来启动到这个画面是GRUB的菜单选择页面。

        OK,总算是知道一点点东西啦,不过呢,这个GRUB又是属于整个启动流程中的哪一步呢,以前在探讨装多系统的时候见过这个名词,不过现在已经忘得差不多了,于是呢,再次打开搜索引擎,我真怀疑自己是不是有搜索引擎依赖症呢~“UBUNTU系统启动过程”,好吧,经过一大堆的网页的筛选后,终于得到一个符合自己想要答案的网页了,终于想起来,BIOS->MBR->GRUB,就是你,就是你,就是MBR后面,咦,这样的话,岂不是不用经过系统的处理,那为什么问题会出现呢,难道是GRUB出现问题了?是不是就意味着可以排除系统的问题了呢?

         问题探讨到这里,这时候终于有网友回答我的帖子,“我用ext2也这样,换成ext4后就没出现过了 ”哇塞,原来这个也会有影响,于是,我再查。。。df -T 话说,我是一个超级菜鸟,第一次接触Linux-Ubuntu,以前一直在windows下呢,所以呢,连查个分区信息也得上网搜搜,结果,纠结。。。我就是ext4啊,为什么呢?于是,我试着朝着这个解决问题的思路,去找答案,分区格式对启动这里有影响?找着找着找到这里去了http://forum.ubuntu.org.cn/viewtopic.php?f=120&t=257333 ,知道了这个引导是放在/root/下面的,只是呢,这个跟我的问题没啥大关系,还打算将这个root独立建一个分区呢,嘿嘿,不过,在找资料的过程中,还没有那样做,因为这时候又想先去了解GRUB的启动过程又是怎样的,于是,先转向GRUB的启动过程,这又是一大堆的资料呢~纠结,看了好多的文章,设置都没有说断电这种情况,只有说正常情况的,还多次想放弃了。。。 只是。。 后来,还是硬着头皮上吧,即然配置文件配不了,那就试着看源代码,看看它写这个的思路是怎么的,终于,开始看起了grub.cfg   哈哈,发现亮点啦~

       接下来,不重复说啦,直接将帖子上的粘上来~

哈哈哈,终于解决啦~

先是找了很久的GRUB的资料,知道原来GRUB可以修改,后来,尝试从网站上看那些教程修改GRUB,不过还是没有效果,后来,再深入一点,去看/boot/grub/grub.cfg,才发现,原来啊,这里有个可恶的
if [ "${recordfail}" = 1 ]; then
set timeout=-1
else
set timeout=0
正是被这个-1给害惨啦~
于是呢,因为看见这个grub.cfg文件写着DO NOT EDIT THIS FILE 尝试再通过/etc/default/grub修改,才发觉自己创的这个语句无效SET_RECORDFAIL_TIMEOUT = 0无效呢。。。 :em06

嘿嘿,后来,在组长的带领下,还是使用暴力的方法,将/boot/grub/grub.cfg权限改为可写入,然后直接将这个timeout给改了,结果,终于成功啦啦啦~

折腾了两天多的时间的一个问题,记录一下下下下下下~
:em11:em11:em11:em11:em11

顺便,如果哪位大牛会使用常规的方法,不那么暴力的话,告诉小弟一声罗~
 

zhw2101024:

grub.cfg是通过/etc/grub.d目录里面的脚本生成的,可以切换到里面通过
grep -r recordfail .
搜索一下,自己分析脚本代码,很简单的。注意最后的"."不能少,表示当前目录


我:

如果修改这个脚本,能提供一点思路吗?先谢过啦~
表示完全的菜鸟。。脚本如何改或者上网搜哪些关键词才好也不知道。。。。

zhw2101024:

软件更新一般不会修改/etc里面的配置文件,可以放心修改。如果需要新的配置才能发挥新版本功能的话,安装的时候会提示是否修改配置文件。grub.cfg开头的注释说得很清楚,/etc/grub.d里面的是模版文件,只是简单的替换一下变量就几乎原样写入grub.cfg,grub那个是配置文件,概念不同的。
grub.cfg怎么改这里就怎么改,结构上不会有任何不同,就是一些数值用变量表示了,这些都是shell脚本。主要找以cat << EOF开头,EOF结尾的代码段,这是输出到grub.cfg文件的语句



我::em05:em05:em05

啦啦啦~ 我好像找到啦~ 可以确认一下吗?

我从 /etc/grub.d/00_header 这个文件里面找到了

make_timeout(){
cat << EOF
if["\${recordfail}" = 1]; then
set timeout = 0
else
set timeout = ${2}
fi
EOF
}

嘿嘿, 直接修改了。


先发表,回宿舍,回复中后续。。   写得有点乱,有点急。。