本文只是简单说下在实际操作grub2中自己遇到的概念不清的问题。
首先你要了解grub2是干什么用的,其中有一些是关于存储设备的知识。
在存储设备中(硬盘,有些U盘),有一个512字节的区域是叫做MBR,
MBR全称(Master boot Record)是一些存储设备的绝对0扇区,MBR是不属于任何一个操作系统,也不能用操作系统提供的磁盘操作命令来读取它,但可以通过命令来修改和重写。它主要由”主引导程序区“,”硬盘分区表“,”扇区结束标志字“三部分组成,
下面图是拷贝别人的东西,说的比较详尽。http://blog.csdn.net/lanxinju/article/details/5714124
MBR由三部分构成:
1.主引导程序代码,占446字节
2.硬盘分区表DPT,占64字节
3.主引导扇区结束标志AA55H
标准 MBR 结构
地址
描述
长度
(字节)
Hex
Oct
Dec
0000
0000
0
代码区
440
(最大 446)
01B8
0670
440
选用软盘标志
4
01BC
0674
444
一般为空值; 0x0000
2
01BE
0676
446
标准 MBR 分区表规划
(四个16 byte的主分区表入口)
64
01FE
0776
510
55h
MBR 有效标志:
0xAA55
2
01FF
0777
511
AAh
MBR, 总大小: 446 + 64 + 2 =
512 这样我们的主引导程序就放在446字节的区域,可想而知这块引导程序受到空间的限制,所以功能定位就比较清楚了,因为大小的限制,这段程序不足以引导起我们的内核,它扮演了一个“接力棒”的角色,BIOS执行完,把执行大权交给这片区域,这片区域代码完成启动的第一阶引导,主要是加载启动分区的 boot或者在/分区加载boot目录,读取第二阶段引导代码,第二阶段引导代码加载内核,解压缩等。(明显是看不到胜利的主)
可以生成这段引导程序的软件有不少,常见的有LILO和GRUB,但貌似GRUB呼声很高,比较好用,优点可以自己去搜索。
使用GRUB可以帮助我们生成这段引导代码,下面说下如何做这件事件。
首先下载GRUB源代码,最新的GRUB2的源代码,
./configure -prefix- 配置一些参数
make 编译
make install 安装
grub依赖其它的库,电脑中不存在的话,少什么装什么就可以了。
安装完成生成一些工具,确认可以使用这些工具后。
其中重要的是
grub-install 在指定的存储设备上设定引导程序
grub-mkconfig 生成grub.cfg
grub-install 后面跟着的是你在使用fdisk -l看到的插到系统中存储设备的名称。
例如你把U盘插入系统,fdisk -l下
设备名称是/dev/sda4
那么执行
grub-install /dev/sda4 在U盘上就生成了那段程序。这个时候不要把自己的系统盘写一次,否则后果很严重。
生成程序后,程序执行结果和配置文件有很大关系,所以还需要生成配置文件,GRUB2的配置文件一般是生成的,GRUB1自己手动写也可以。
生成什么样的配置文件和grub下的/etc/default/grub里面定义的内容有关系。
下面的东西也是拷贝别人,可以参考下
# 设定默认启动项,推荐使用数字
GRUB_DEFAULT=0
# 注释掉下面这行将会显示引导菜单
#GRUB_HIDDEN_TIMEOUT=0
# 黑屏,并且不显示GRUB_HIDDEN_TIMEOUT过程中的倒计时
GRUB_HIDDEN_TIMEOUT_QUIET=true
# 设定超时时间,默认为10秒
# 设定为-1取消倒计时
GRUB_TIMEOUT=10
# 获得发行版名称(比如Ubuntu, Debian)
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
# 将会导入到每个启动项(包括recovery mode启动项)的'linux'命令行
GRUB_CMDLINE_LINUX=""
# 同上,但是只会添加到 normal mode 的启动项
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
# 取消注释以允许图形终端(只适合grub-pc)
#GRUB_TERMINAL=console
# 分辨率设定,否则采用默认值
#GRUB_GFXMODE=640x480
# 取消注释以阻止GRUB将传递参数 "root=UUID=xxx" 传递给 Linux
#GRUB_DISABLE_LINUX_UUID=true
# 取消启动菜单中的“Recovery Mode”选项
#GRUB_DISABLE_LINUX_RECOVERY="true"
# 当GRUB菜单出现时发出鸣音提醒
#GRUB_INIT_TUNE="480 440 1"
设置合适配置后,需要更新下找到,up开头的命令。
执行命令
grub-mkconfig -o 跟路径名称
你想把配置文件放到u盘的boot目录下,后面的路径就是可以进到U盘boot的路径
这时,会根据你当前的系统情况生成个配置文件,一般这个文件需要修改。
在配置文件中也有设置root的位置的地方,这个位置就是你启动另外的系统时,在grub命令行模式下敲打ls之类的命令后显示的存储设备名称,有可能你系统挂载好几个存储设备,选择你内核所在的那个存储设备的分区即可。把内核和文件系统指定正确后,启动系统,一切OK。