Ubuntu grub2简介
从Ubuntu 9.10起,grub2就已经是默认的BootLoader了。这里简要说要Ubuntu的grub2和其他发行版不一样的地方。
对于所有的OS启动项,CentOS全都显示在一个grub选择界面,显得非常拥挤,而Ubuntu这里就使用了一个Submenu的概念,将kernel版本最高的OS启动项放在最顶端名为“Ubuntu”的选项中,其他的版本都放在一个名为“Advanced options for Ubuntu”中,这个就是前面说到的Submenu子菜单。进入子菜单后,就可以手动选择你需要的版本了。这里注意,每个版本都提供了普通版和recover mode两种选择。
grub选择界面:
grub配置文件如下:
……
# OS启动版本选择
set default="0"
fi
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-f7627d97-02da-4145-af58-0fe730f276b2' {
menuentry 'Ubuntu,with Linux 3.13.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-advanced-f7627d97-02da-4145-af5 8-0fe730f276b2' {
……
menuentry 'Ubuntu,with Linux 3.13.0-24-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-3.13.0-24-generic-recovery-f7627d 97-02da-4145-af58-0fe730f276b2' {
……
}
下载kernel源代码,执行make bzImage -j 4 && make modules -j 4 && make modules_install && make install,编译并安装后,就会在/boot目录生成对应版本的vmlinuz、initrd.img、.config等文件,并且会默认执行update-grub命令来生成最新的grub配置文件。如果未手动修改,默认会按照kernel版本号从高到低的顺序将各个版本的OS放入Submenu中,也就是说,默认启动的就是kernel版本最高的OS。
更新默认OS启动版本
grub的配置文件有两个:/boot/grub/grub.cfg和/etc/default/grub,其中/boot/grub/grub.cfg为真正生效的文件,但其权限为只读的,也就是不建议直接修改;这是就需要/etc/default/grub文件了,通过修改该文件,再执行update-grub命令,即可将改动从/etc/default/grub更新到/boot/grub/grub.cfg了。打开/etc/default/grub:
# 选择的OS版本
GRUB_DEFAULT="1>2"
GRUB_HIDDEN_TIMEOUT_QUIET=true
# 停留在grub选择界面的时间
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
使用数字选择版本
这里我们主要关注GRUB_DEFAULT这个选项,我们上面提到,OS启动版本中,第一项是kernel版本最高的OS,第二项就是Submenu,而所有OS版本都在这个Submenu中,包括版本最高的OS。打开/boot/grub/grub.cfg,索引从0开始,选择第几个index,update-grub并重启后,就会从选择的OS启动。比如我们要选择索引为2的OS版本,那么我们只需要GRUB_DEFAULT修改如下即可。然后执行命令update-grub,再重启OS即生效。1>2表示先选择第1项(索引从0开始的),即Submenu,再从Submenu中选择第2项。
GRUB_DEFAULT="1>2"
使用文字选择版本
如果觉得数字的方式比较难以区分,也可以使用名称的方式,格式类似,如下。表示先选择名为Advanced options for Ubuntu的第一层,即Submenu,再从Submenu中选择名为Ubuntu,with Linux 3.9.0的OS版本。
GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu,with Linux 3.9.0"
参考
如果想了解更多关于Ubuntu grub2的信息,请参考官网:https://help.ubuntu.com/community/Grub2