如何修改Ubuntu 9.10的系统启动项

在早期的Ubuntu中,想修改系统启动项非常简单,只要用gedit打开系统菜单设定文件(sudo gedit /boot/grub/menu.lst ),修改该文件中到内容即可,但是在Ubuntu 9.10中使用的是Grub 2,就不能采用这种方式修改系统启动项了。

Grub 2特性
Grub 2(GRand Unified Bootloader, version 2)是Grub的第二版。Grub 2对Grub的接口进行了完全的重写,基于PUPA(详细介绍)项目的研究,Grub 2更模块化并且更容易扩展,Grub 2的一些提升如下:

1
2
3
4
5
6
具有图形化界面,支持主题
模块化加载
夸平台的兼容性
支持脚本
自定义的启动项目定义
修改分区命名

Grub 2结构
Grub 2包含下面几个部分:

1
2
3
/boot/grub/grub.cfg 文件
/etc/grub.d/ 文件夹
/etc/default/grub 文件

grub.cfg类似Grub中的 /boot/grub/menu.lst。里面的格式于menu.lst差不多,但是现在不允许你通过直接修改该文件到方式来修改启动项,因为该文件是在执行“update-grub”或者”update-grub2”之后,根据上面说到2、3两项动态生成到,也就是说,如果你修改了这个文件当下次这两个命令被执行了,你修改到内容就会背覆盖。在更新系统时,这两个命令会自动执行的。grub.cfg文件中主要包含两个部分,一部分是各个启动项的定义,第二部分是启动界面的设置。你可以直接用gedit打开该文件看其中的内容。既然grub.cfg不能修改,那也没什么好详细说的了,稍微研究下就能看懂里面是怎么写的。

Grub 2的另外两部分内容其实就分别对应于grub.cfg中的两部分内容。首先 2. /etc/grub.d/ 文件夹中定义各个启动项,其中的文件代表了一个或多个启动项,命名规范都是“两个数字_名称”,前面的两位数字确定这个或这多个启动项在启动界面的位置,默认的 “00_“是预留给“00_header“的,“10_”是预留给当前系统内核的,”20_”是预留给第三方程序的,除了这些你都可以使用,增加自己的,比如 05_ , 15_,数字越小越前面。当执行前面说的“update-grub”或者”update-grub2”命令之后,这个文件夹中的文件就是用于生成 grub.cfg 中启动项的定义的,并且是用shell写的。

Grub 2的最后一部分是 3. /etc/default/grub 文件,该文件主要是启动界面的配置,比如默认的启动项,等待用户选择启动项的时间等。文件内容很简单,就是一些键值对,详细的可配置属性可以参考Grub 2的Wiki中“grub (/etc/default/grub)”这一节。当执行前面说的“update-grub”或者”update-grub2”命令之后,这个文件的内容就用于生成 grub.cfg 中启动界面的设置。

总结
通过上面的介绍,应该对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”命令覆盖,缺电是当启动项的顺序变化之后,下标也就变了…

示例
在写这篇文章的时候,我的环境是这样的:安装了Ubuntu 9.10,内核是Linux 2.6.31-14,后来两次更新之后变成Linux 2.6.31-17,在安装Ubuntu之前是用win7的,现在是双系统,现在的启动项有(根据已经生成的 /boot/grub/grub.cfg得到):

1
2
3
4
5
6
7
8
9
"Ubuntu, Linux 2.6.31-17-generic"
"Ubuntu, Linux 2.6.31-17-generic (recovery mode)"
"Ubuntu, Linux 2.6.31-15-generic"
"Ubuntu, Linux 2.6.31-15-generic (recovery mode)"
"Ubuntu, Linux 2.6.31-14-generic"
"Ubuntu, Linux 2.6.31-14-generic (recovery mode)"
"Memory test (memtest86+)"
"Memory test (memtest86+, serial console 115200)"
"Windows 7 (loader) (on /dev/sda1)"

可以使用apt-get remove linux-image-2.6.31-xx-generic删除linux的旧核心。

现在在 /boot/grub/grub.cfg 有这么一行”set default=”0″”,注意这里的下标是从0开始的,相当于我现在的默认启动项是上面的第一个”Ubuntu, Linux 2.6.31-17-generic”,要改为默认启动win7,所以应该将默认启动项改为 8,用下面的命令调出gedit。

1
sudo gedit /etc/default/grub

修改/etc/default/grub中GRUB_DEFAULT=0为GRUB_DEFAULT=8。用下面的命令重新生成 /boot/grub/grub.cfg:

1
sudo update-grub

执行后显示:

1
2
3
4
5
6
7
8
9
10
11
12
macro@macro-laptop:/etc/default$ sudo update-grub
Generating grub.cfg ...
Found Debian background: moreblue-orbit-grub.png
Found linux image: /boot/vmlinuz-2.6.31-17-generic
Found initrd image: /boot/initrd.img-2.6.31-17-generic
Found linux image: /boot/vmlinuz-2.6.31-15-generic
Found initrd image: /boot/initrd.img-2.6.31-15-generic
Found linux image: /boot/vmlinuz-2.6.31-14-generic
Found initrd image: /boot/initrd.img-2.6.31-14-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows 7 (loader) on /dev/sda1
done

这时候再查看:

1
sudo gedit /boot/grub/grub.cfg

可以看到其中的set default=”0″已经变成set default=”8″了。大功告成,restart。

参考
GRUB2 中文指南

Monitor Your Web Site 24/7 - Receive email and SMS alerts anytime your web site goes down.

Related Posts

Leave a Reply

Monitor Your Web Site 24/7 - Receive email and SMS alerts anytime your web site goes down.

About Me

About Me
Record Technical Articles at Gooss.org.

Entries (RSS) and Comments (RSS). Valid XHTML and CSS and XFN.

© Copyright 2009 山海经. All rights reserved.

Social Bookmarks

Copyright © Designed by: Free WP Templates
Food Charts |  About Breast Milk |  Organic Food