给系统更换一个内核-grub

一、GNU GRUB(简称“GRUB”)是一个来自GNU项目的多操作系统启动程序。

二、实例解析:

default 0

timeout 30

color white/blue blue/green

title=Boot Linux using initrd

root (hd0,5)

kernel /boot/bzImage

root=/dev/loop0

initrd /initdisk.gz

 

参数解释:

root:指明grub的所引导的内核挂载到什么设备上,

因为 GRUB 所使用的硬盘/分区命名约定与 Linux 使用的命名约定不同。

在 Linux 中,第一个硬盘的第五个分区称作 "hda5"。而 GRUB 把这个分区称作 "(hd0,4)"。

GRUB 对硬盘和分区的编号都是从 0 开始计算。

另外,硬盘和分区都用逗号分隔,整个表达式用括号括起。现在,回来看一下 GRUB 提示,

可以发现如果要引导 Linux 硬盘 hda5,应输入 "root (hd0,4)"。如果已经明白了 GRUB 硬盘/分区命名,

您也许要调整当前 root 命令行,以使它指向保存 Linux 内核的分区。

http://wiki.ubuntu.org.cn/GRUB%E5%85%A5%E9%97%A8%E6%95%99%E7%A8%8B

kernel:kernel设备上的具体位置(被linux替代了)

root=:Linux的root文件系统所在的硬盘分区位置。和前面的root有些关系的

initrd: initrd文件不是必须的

initrd 的英文含义是 boot loader initialized RAM disk,就是由 boot loader 初始化的内存盘。

initrd的最初的目的是为了把kernel的启动分成两个阶段:在kernel中保留最少最基本的启动代码,

然后把对各种各样硬件设备的支持以模块的方式放在initrd中,

这样就在启动过程中可以从initrd所mount的根文件系统中装载需要的模块。

这样的一个好处就是在保持kernel不变的情况下,

通过修改initrd中的内容就可以灵活的支持不同的硬件。

在启动完成的最后阶段,根文件系统可以重新mount到其他设备上

(http://blog.163.com/fan_yishan/blog/static/47692213201071122630416/?fromdm&fromSearch&isFromSearchEngine=yes)

三、制作initrd.img 

在进行内核编译时,需要进行制作initrd.img.

在Fedora下面一般是用mkinitrd,

而在Ubuntu/Debian下是用mkintramfs.

它们的用法稍微有些不一样,如下所示:

mkinitrd /boot/initrd.img 2.6.26

mkintramfs 2.6.26 -o /boot/initrd.img

(http://blog.csdn.net/mayouyang/article/details/3997849)

以上命令是在新内核顶层目录下:

执行make modules

make moudules_install后再执行的。

四、ubuntu11的grub

ubuntu 10.10 以后的版本,已更换为grub2

grub2由三部分组成:/etc/default/grub文件 、 /etc/grub.d文件夹  和 /boot/grub/grub.cfg文件,

电脑开机时的启动菜单界面用的是grub.cfg文件。怎么理解这三部分之间的关系呢?

我觉得可以这样认为,在我们执行update-grub(更新启动菜单)命令后系统就会根据

/etc/default/grub文件 和 /etc/grub.d文件夹 的内容生成/boot/grub/目录下的 grub.cfg 文件,

所以当 /etc/default/grub文件 和 /etc/grub.d文件夹 被修改后,

再执行update-grub, grub.cfg文件内容被更改,或者说是被更新吧。

/etc/default/grub文件   ----存有开机默认启动项、倒记时时间的内容
etc/grub.d文件夹 -------存有各个启动项,如下

00_header        10_linux       30-os-prober  README
05_debian_theme  20_memtest86+  40_custom

其中,30-os-prober是Windows系统的启动项,当然10_linux就是Linux系统的启动项,

注意到每个文件前面都有个数字,在执行update-grub后生成的grub.cfg文件中,

数字越小项就会排在越前面,也就是在启动菜单里就会排越上。像上面的内容,在开机启动菜单里,

Linux系统就会排在最前面。

下面就介绍三种修改的方法。

1.直接修改grub.cfg文件
sudo -i
gedit /boot/grub/grub.cfg

里面
### BEGIN /etc/grub.d/*** ###
menuentry "……" {
……
}
### END /etc/grub.d/*** ###
各代表每一启动项,位置越上,在启动菜单里就会越上。

第12行的 set default="0" 代表默认选择项,也就是开机时选择光标最初的选择项,

注意项的下标是从0开始的,例如在grub.cfg中,xp系统所处的位置是第五个启动项

(简单的查看方法是看它前面有几个menuentry "……"),那么就把set default="0" 改为 set default="4"

第54行(可能不一样)的set timeout=5 表示倒计时时间,5就表示5秒。

修改后,保存,重新后就可以看到效果了,此方面缺点是在update-grub后会恢复原样,

而系统在安装更新时常常会执行update-grub命令,所以此修改的方法不推荐。


2.修改/etc/default/grub.d
sudo -i
cd /etc/grub.d
ls
这时我们可以看到
00_header        10_linux       30-os-prober  README
05_debian_theme  20_memtest86+  40_custom
(这是我系统里的,你的可能不一样)

mv 30_os-prober 06_os-prober (30_os-prober重命名为06_os-prober)
update-grub

这时打开grub.cfg会看到xp系统已经排在前面了,这种方法简单,

且以后不管进行多少次update-grub,XP系统项总是会排在第一位,推荐使用。


3.修改/etc/default/grub
sudo -i
gedit /etc/default/grub

修改GRUB_DEFAULT=0 (选择光标默认处于的位置,像这样是处于第一位,

如果XP系统是处于菜单项的第5位,就修改为GRUB_DEFAULT=4)
GRUB_TIMEOUT=5 (倒记时时间)

内容引自:(http://blog.sina.com.cn/s/blog_64d57e710100mjuk.html

五、实践

 1.下载内核,按照前面的方面编译出bzImage,initrd.img,并放置在/boot目录下

 2.复制原来的默认linux启动菜单项(/boot/grub/grub.cfg),从menuentry开始,到menentry的右大括号结束

  粘贴到/etc/grub.d/41_custom文件的EOF前面

3.修改里面的echo,linux,initrd,后命令参数

4.修改/etc/default/grub GRUB_HIDDEN_TIMEOUT=5,(方便启动的时候选择启动的操作系统项)

5.执行update-grub,重启,重启过程中按esc键查看。

六、问题

虚拟机出现:

" The disk drive for / is not ready yet or not present." "

Continue to wait: or Press S to skip mounting or M for manual recovery" 。

 这时,按M进入命令模式,进行人工修复。
    分别输入如下命令:
    1) fdisk -l 记下你安装ubuntu对应的分区标识,如:/dev/sda1 (一般为sda1)
    2) mount -w -o remount /dev/sda1 /
    3) dpkg --configure -a  (中途会出现一些配置界面,直接按Enter,默认即可)
    4) apt-get install -f
    完成之后,按ctrl +D,然后自动重启,则终于完成升级。

    此时,打开终端:输入命令分别查看内核版本和Ubuntu版本:
    1) uname -a
    2) cat /etc/issue

来自:http://www.qianshoublog.com/post/3238.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值