ubuntu 的Grub启动

个人主机说明,安装ubuntu12.04系统,内核为linux ubuntu 3.2.0.77 ,为学习内核编译,重新从官网下载新的linux内核,版本号为linux 3.2.68,纯粹为学习编译内核。


按教程进行一大堆设置,编译,编译内核,编译模块,安装内核和模块,最后启动。


问题:启动后直接进入linux3.2.68,因为内核项未加载全,键盘无法使用,只能进入界面,提示输入密码,无外界输入方法,到此停止不能前进。


解决办法:重新进入grub引导,修改默认引导项,进入原来的linux3.2.0.77内核。


具体操作:

开机按esc或shift进入恢复模式,(有的系统grub.cfg设置timeout=-1,直接进入系统,按此方法处理),选择linux3.2.0.77进入原有系统;

有的系统则一开机就进入grub选项,选择linux3.2.0.77进入原有系统,然后重新设置grub.cfg


具体方法见下。

方法一,摘自:http://blog.csdn.net/blueln/article/details/6751991

现在玩Linux的人大多数都安装有双系统,而且经常使用的是windows,可是grub默认的启动是Linux,每次要手动选择,显得很麻烦,这里,我就教大家如果修改启动菜单,将windows设为第一启动项。
方法一:手动设置
备份原有grub启动信息

  1. sudo cp /boot/grub/grub.cfg /boot/grub/grub/cfg_backup  
修改grub启动信息
  1. sudo gedit /boot/grub/grub.cfg  


如上图所示,找到set default="0"一项,将0修改为你要设置的启动项, default=”0″后面的数值0是第一个选择项,如果分别改成1、2、3、4的话,则分别把默认启动的选择项放在第二、三、四、五个选择项上面。一般为4。




找到timeout=”10″后面的数值10则表示选择引导条的默认倒计时为10秒,当然,这个数值可以改得更大,比如20、30什么的,不过如果把数值改成负1,即“-1”的话,在开机看到grub选择项时没有倒计时,直到选择了所要启动的引导条并回车才能进入系统

修改保存,重启就可以了。



在早期的一些Ubuntu版本下,修改grub的引导顺序的方法如下:

配置文件不在grub.cfg,而是在menu.lst中,其他修改信息照上文设置即可。

方法二,摘自http://blog.csdn.net/zhu_liangwei/article/details/7847034


需要修改grub启动项,正好借此机会来学习一下。


基本文件


在ubuntu中不能通过修改menu.lst文件来修改启动配置了,grub2主要包含
   1.   /boot/grub/grub.cfg 文件
   2.   /etc/grub.d/ 文件夹

   3.   /etc/default/grub 文件


grub.cfg就是就是配置选项,类似于menu.lst,里面的格式与menu.lst差不多。但是我们不能通过直接修改这个文件来修改配置。

grub.cfg的文件中包含了两部分的内容,一部分是各个启动项的定义,第二部分是启动界面的设置。


功能介绍

/etc/grub.d/文件夹中定义的各个启动项,其中的文件夹代表了一个或者多个启动项,使用的命名规范都是“两个数字_名称”,前面的两个数字确定这个或者这多个启动项在启动 界面中的位置,默认的“00_"是预给”00_header"的,“10_"是预留给当前系统内核的,"20_"是预留给第三方程序的,除了这些你都可以使用,增加自己的,比如"05_"数字越小的越前面。

/etc/default/gurb文件,该文件主要是启动界面配置,比如默认的启动项,等待用户的选择时间等。

好了,通过上面的介绍,应该对Grub 2有些了解了,聪明的你应该想到要怎么修改默认启动项了,有下面三种方法:

•根据以前修改 /boot/grub/menu.lst 的方法那样直接修改已经生成好的 /boot/grub/grub.cfg。这个方法的优点是简单,缺点是修改之后会被”update-grub”命令覆盖掉。 

•修改 /etc/grub.d/ 中启动项的顺序,将你想要默认启动的项顺序设置为较小的值。优点是修改不会被”update-grub”命令覆盖掉,好像没啥缺电,只有另外的程序修改为比你的值更小了才会成为默认启动。 


•修改 /etc/default/grub 中默认的启动项,设置该文件中 GRUB_DEFAULT 为你想要的值,这个值是生成的 grub.cfg 中各个启动项的从0开始的下标。该方法优点是修改不会被”update-grub”命令覆盖,缺点是当启动项的顺序变化之后,下标也就变了。

示例:


拿最简单最常用的开启启动项默认选择顺序和选择等待时间为例,比如,我要启动xen修改过的内核。
    1.vim  /etc/default/grub
    2. 把GRUB_DEFAULT= 和 GRUB_TIMEOUT= 两个字符串后面的数字改为我们自己想要的并保存关闭
怎样得到需要启动系统的顺序呢,可以通过根据已经生成的 /boot/grub/grub.cfg得到。
这是我的现有启动项:
[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. 0 Ubuntu,Linux 3.2.0-27-generic  
  2. 1 Ubuntu,Linux 3.2.0-27-generic (恢复模式)  
  3. 2 submenu "Previous Linux versions":  
[html]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. #这是子项  
  2. Ubuntu,Linux 3.0.0-23-server  
  3. Ubuntu,Linux 3.0.0-23-server (恢复模式)  
  4. Ubuntu,Linux 3.0.0-12-server  
  5. Ubuntu,Linux 3.0.0-12-server (恢复模式)  
  6. 3 Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.2.0-27-generic  
  7. Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.2.0-27-generic (恢复模式)  
  8. Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.0.0-23-server  
  9. Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.0.0-23-server (恢复模式)  
  10. Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.0.0-12-server  
  11. Ubuntu GNU/Linux,Xen 4.1-amd64 和 Linux 3.0.0-12-server (恢复模式)  
  12. Memory test (memtest86+)  
  13. Memory test (memtest86+, serial console 115200)  


但是:submenu "Previous Linux versions"中的系统都属于2,xen是个编号为3.所以修改GRUB_DEFAULT=3。

    3. 最后sudo update-grub 不要忘记了。


最简单的做法:

其实个人觉的最简单的是直接阅读/boot/grub/grub.cfg的内容。

查找关键字menuentry。内核的顺序就是menuentry的顺序。你可能会看到:

[python]  view plain copy print ? 在CODE上查看代码片 派生到我的代码片
  1. if [ "${linux_gfx_mode}" != "text" ]; then load_video; fi  
  2. menuentry 'Ubuntu,Linux 3.5.0-rc1+' --class ubuntu --class gnu-linux --class gnu --class os {  
  3.         recordfail  
  4.         gfxmode $linux_gfx_mode  
  5.         insmod gzio  
  6.         insmod part_gpt  
  7.         insmod ext2  
  8.         set root='(hd0,gpt2)'  
  9.         search --no-floppy --fs-uuid --set=root 47caf968-871e-40da-b292-7d5683ef3e94  
  10.         linux   /vmlinuz-3.5.0-rc1+ root=/dev/mapper/ubuntu-root ro     
  11.         initrd  /initrd.img-3.5.0-rc1+  
  12. }  
  13. menuentry 'Ubuntu,Linux 3.5.0-rc1+ (恢复模式)' --class ubuntu --class gnu-linux --class gnu --class os {  
  14.         recordfail  
  15.         insmod gzio  
  16.         insmod part_gpt  
  17.         insmod ext2  
  18.         set root='(hd0,gpt2)'  
  19.         search --no-floppy --fs-uuid --set=root 47caf968-871e-40da-b292-7d5683ef3e94  
  20.         echo    '载入 Linux 3.5.0-rc1+ ...'  
  21.         linux   /vmlinuz-3.5.0-rc1+ root=/dev/mapper/ubuntu-root ro recovery nomodeset   
  22.         echo    '载入初始化内存盘...'  
  23.         initrd  /initrd.img-3.5.0-rc1+  
  24. }  
  25. submenu "Previous Linux versions" {  
  26. menuentry 'Ubuntu,Linux 3.2.0-27-generic' --class ubuntu --class gnu-linux --class gnu --class os {  
  27.         recordfail  
  28.         gfxmode $linux_gfx_mode  
  29.         insmod gzio  
  30.         insmod part_gpt  
  31.         insmod ext2  
  32.         set root='(hd0,gpt2)'  
  33.         search --no-floppy --fs-uuid --set=root 47caf968-871e-40da-b292-7d5683ef3e94  

出现了submenu就说明里面包含子菜单。

例如

1.直接进入主菜单的某个内核

我要启动linux 3.5.0-rc1+,它是主菜单的第一个。我就修改这个文件中的set default="0"(注意,要取得写得权利)。

或者直接修改 /etc/default/grub中的GRUB_DEFAULT="0"(这样就要执行update-grub)。

2.使用">"进入子菜单

我要启动

Ubuntu,Linux 3.2.0-27-generic可以看出,它属于排在主菜单第三位的submenu的子菜单的第一个。所以就修改这个文件中的set default="2>0"(注意,要取得写得权利)。

或者直接修改 /etc/default/grub中的GRUB_DEFAULT="2>0"(这样就要执行update-grub)。



参考文献:
http://www.360doc.com/content/10/0806/00/2369031_43985480.shtml
http://wenku.baidu.com/view/96a6b14f2b160b4e767fcffe.html###

https://help.ubuntu.com/community/Grub2

很详细的解释:http://www.tudou.com/home/diary_v3885358.html



删除多余启动项方法:

1 最简单方法,装个软件,图形化操作。

sudo apt-get install startupmanager

安装启动项管理器

系统——系统管理——启动项管理器,后面不解释。然后会自动按照配置修改grub.cfg文件了。

2

然而,grub修改开机启动菜单,会自动把最新的Ubuntu放在第一位,把Windows放在最后一个。我们经常希望把Windows调整到靠前的位置,可能还会修改默认的启动项和等待时间等。解决方案如下:

1.找到grub配置,打开配置文档,在终端里输入命令:

sudo gedit /boot/grub/grub.cfg

2.修改grub配置

set default="0":表示默认的启动项,“0”表示第一个,依次类推。

set timeout=10:表示默认等待时间,单位是秒。

找到windows的启动项,剪切复制到所有Ubuntu启动项之前,例如:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry "Windows 7 (loader) (on /dev/sda1)" --class windows --class os {
 
   insmod part_msdos
 
   insmod ntfs
 
   set root='(/dev/sda,msdos1)'
 
   search --no-floppy --fs-uuid --set=root A046A21446A1EAEC
 
   chainloader +1
}
### END /etc/grub.d/30_os-prober ###

3.保存并退出。

最后,重新启动机器,一切将变得如你所愿。


很多用户一般都会选择Windows + Ubuntu的双系统。用得时间久了,随着Ubuntu内核的不断升级,开机启动菜单会变得越来越臃肿。下面简单介绍一下如何删除开机启动菜单多余的内核(旧版本),以及如何调整不同操作系统的启动顺序。

Ubuntu是由grub引导启动的。每当Ubuntu升级到新的版本后,grub会自动调整开机启动菜单的顺序,把新的内核放在启动菜单的开始,同时也不会删除久的内核版本。这样,当Ubuntu的升级次数一多,启动菜单中将变得非常臃肿。而且那些旧版本的内核基本不会用,不如删除之。解决方案如下:

1.找出系统已经安装的内核版本,在终端里输入命令:

dpkg --get-selections | grep linux-image

然后会显示系统中已安装的内核,例如:

linux-image-2.6.38-10-generic            instal
linux-image-2.6.38-8-generic  
          install
linux-image-2.6.35-22-generic  
          install
linux-image-generic  
              install

2.卸载旧的内核版本,在终端里输入命令:

sudo apt-get remove linux-image-2.6.35-22-generic linux-image-2.6.38-8-generic

上面命令和含义是:

dpkg --get-selections [<表达式> ...] 把已选中的软件包列表打印到标准输出;

grep linux-image 匹配查找;

uname -a 查看已安装的linux内核版。

这样,旧的内核版本就删除了。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值