简单介绍Grub2

平时用Linux,肯定少不了接触grub,下面就给大家简单介绍一下Grub2.Grub2现在很多还是beta版,只是在一些桌面linux系统上使用,比如Ubuntu和最新出的Fedora16.别的linux系统和很多服务器版,还在使用Grub Legacy,俗称Grub1.0.
这里主要介绍下面几部分内容:


一、Grub2目录架构简单介绍
二、Grub2配置文件的功能和使用
三、Grub2菜单DIY
四、常见问题及解决方法



一、Grub2目录架构简单介绍
旧的Grub的配置文件存在/boot/grub/文件架下面,可以直接编辑menu.lst文件修改Grub菜单。
Grub2的配置文件稍微复杂,主要放在三个地方。
/boot/grub/grub.cfg
/etc/grub.d/
/etc/default/grub
/boot/grub/grub.cfg这个文件取代了之前的menu.lst,但和menu.lst不一样,最好不要直接修改grub.cfg这个文件。这个文件实际上就是一个shell脚本,有兴趣的可以认真看看。
/etc/grub.d/这个文件夹包含了Grub的脚本,这些脚本用于生成上面的grub.cfg文件。
/etc/default/grub这个文件用于Grub2菜单的一些参数设置,这些参数会被上面的脚本读进grub.cfg配置文件。这一部分可以修改,一定程度上DIY你的菜单。比如说设置默认等待时间,分辨率,默认菜单条目等。
如果我们要修改Grub2的菜单,就要修改/etc/grub.d/文件夹下面的配置脚本来生成。

二、Grub2配置文件的功能和使用
首先了解grub.cfg的生成过程。我们在终端下面用update-grub命令重新生成grub.cfg文件。当运行这条命令时,系统会读取/etc/default/grub里面的参数,用/etc/grub.d/文件夹下面的脚本创建grub.cfg文件。
下面看看grub.d文件夹下面有哪些可执行脚本。
  1. ls /etc/grub.d/
复制代码
00_header
05_debian_theme
10_linux
20_memtest86+
30_os-prober
40_custom
41_custom
类似于init.d文件夹下面的启动脚本,grub.d下面的脚本也以脚本名字前面的数字为顺序,从小到大开始执行。
00_header设置一些相关参数
00_debian_theme设置grub菜单的界面,比如说字体颜色,背景图片等等。
10_linux添加linux启动项的菜单
20_memtest86+添加菜单中内存测试那一项
30_os-prober用于检测你电脑中其他的操作系统
custum那些可以让可以用于DIY
因为以上那些都是shell脚本,我们可以通过命令
  1. sudo chmod +x 脚本名字 或者 sudo chmod -x 脚本名字
复制代码
来定义生成grub.cfg配置过程中,该脚本是否被执行。同时,我们也可以自己按照格式添加脚本,数字决定着你添加脚本的执行顺序。比如添加一个11_diy,这个脚本在执行10_linux之后就会被系统执行。
下面可以尝试通过脚本11_diy添加一个菜单启动项。
  1. #!/bin/bash -e
  2. echo "diy"
  3. cat << EOF
  4. menuentry "have a try" {
  5. set root=(hdX,Y)
  6. ---- boot parameters ----
  7. }
  8. EOF
复制代码
cat << EOF表示一个启动菜单条目的开始
menuentry "have a try"用来定义一个菜单项,并且显示引号里面的名字
set root(hdX,Y)用来设置根设备,一般是挂载在/的分区。这里说到分区,要提醒大家一点,在grub1.0中,分区是从0开始,但grub2.0的分区是从1开始。比如说,grub1中,第一个硬盘第一个分区表示为(hd0,0),但在grub2中,第一个硬盘第一个分区表示为(hd0,1).
--- boot parameters ---才是真正决定启动哪个系统的命令
如果启动的是linux,一般用到下面两个语句。
linux /boot/vmlinuz 用于选择启动那个内核,如果内核在之前设置的根设备里面,路径可以像前面那样。如果内核不在根设备内,可以在路径前面加上(hdY,Z)来标识内核所在的分区,如(hdY,Z)/boot/vmlinuz
initrd /boot/initrd 用于选择内核对应的initrd,中文为初始化RAM磁盘,路径和上面选择内核一样。
如果启动的是Windows系统,就只要用到下面一句语句
chainloader (hdX,Y)+1 (hdX,Y)为windows系统所在的分区
添加完之后,不要忘了chmod +x 让脚本可以被执行。
接下来在终端键入命令 update-grub 生成 grub.cfg配置文件。

三、Grub2菜单DIY
可以设置/etc/default/grub文件里面的参数
GRUB_DEFAULT 设置默认菜单项,设置成GRUB_DEFAULT=saved,系统将启动上一次启动的菜单项。
GRUB_TIMEOUT 设置等待选择时间,设置成-1表示一直等待。
GRUB_CFXMODE 设置grub菜单界面的分辨率
GRUB_DISABLE_RECOVERY=true 将恢复模式删除,不在菜单中显示
设置背景图片其实是很简单的,只要把图片丢到/boot/grub文件夹下面就可以了,不过要注意一下图片的分辨率,不要太大。
大家可以研究一下05_debian_theme脚本中set_default_theme函数,可以修改grub菜单中的字体的颜色。
设置完之后,还是不要忘了update-grub重新生成配置文件

四、常见问题及解决方法
平时大家最常见的问题是,重装完windows之后,linux就不见了。这个时候其实解决方法很简单,用一张linux启动盘修复一下grub就可以了。
Windows其实是很霸道的,安装的时候要霸占你硬盘整个mbr,mbr上面记录着你磁盘的引导信息和分区表等。grub就是安装在MBR上面的。
1、首先用linux系统盘启动。下面假设硬盘为/dev/sda,Windows所在的分区为/dev/sda1。我们现在要把grub安装在mbr,也就是/dev/sda上面。
2、如果/boot没有分配独立分区,而是和/在同一分区,假设为/sda3。那可以使用下面命令在/dev/sda上面安装grub
  1. mount /mnt /dev/sda3
  2. grub-install --root-directory=/mnt /dev/sda
复制代码
mount /mnt /dev/sda3将linux所在的分区挂载在/mnt下面
grub-install /dev/sda表示在/dev/sda这个分区上面安装grub, --root-directory=/mnt这个参数表示,把grub的安装路径设置在/mnt下面的boot/grub/文件夹下。不添加这个参数的话,默认安装路径就在当前的/boot/grub,但这是从系统盘启动,根目录只是临时的。
如果/boot为/dev/sda2的独立分区,那么就可以先后挂载两个分区,然后再安装grub
  1. mount /mnt /dev/sda3
  2. mount /mnt/boot /dev/sda2
  3. grub-install --root-directory=/mnt /dev/sda
复制代码
安装完后重启系统,应该就没啥问题了。

如何将grub1升级为grub2?直接在终端运行sudo apt-get install grub2(命令限于ubuntu和Debian,Fedora16的本人还没尝试过)

R系的Linux可以手动编译源码安装grub2,具体见  http://ecnc.sysu.edu.cn/viewthread.php?tid=18698

简单给大家介绍到这里,如果有错漏的地方希望大家指出。
更详细的资料大家可以参考  https://help.ubuntu.com/community/Grub2
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值