GRUB2及启动过程详解

2019-04-16 00:04

GRUB2及启动过程详解

作者: 南瓜剪子 2016年7月28日

1. 概述 ............................................................................................................................................ 2 2. CentOS7中GRUB2 ..................................................................................................................... 2 3. GRUB2 的 bootstrap image文件 .............................................................................................. 3

3.1. boot.img ............................................................................................................................ 3 3.2. diskboot.img ...................................................................................................................... 3 3.3. kernel.img .......................................................................................................................... 4 3.4. core.img ............................................................................................................................. 4 3.5. *.mod ................................................................................................................................. 4 4. 对比GRUB Legacy ...................................................................................................................... 5

4.1. stage1 ................................................................................................................................ 5 4.2. *_stage1_5 ........................................................................................................................ 5 4.3. stage2 ................................................................................................................................ 5 5. grub2-mkimage定制core.img ................................................................................................... 6 6. GRUB2安装 ................................................................................................................................ 7

6.1. Linux是怎么命名设备(/dev/sda) ..................................................................................... 7 6.2. MBR(Master Boot Record) ................................................................................................. 8 6.3. MBR分区表DPT(Disk Partition Table) ............................................................................. 9 6.4. LBA and CHS..................................................................................................................... 14

6.4.1. CHS(cylinders-heads-sectors) ................................................................................ 14 6.4.2. LBA(Logical Block Address) .................................................................................... 14 6.5. boot.img和core.img安装 ............................................................................................. 14 6.6. 硬盘总结 ........................................................................................................................ 17 7. 启动过程................................................................................................................................... 19

7.1. BIOS ................................................................................................................................. 19 7.2. GRUB2中boot.img ......................................................................................................... 20

7.2.1. Step1无条件跳转 ................................................................................................ 20 7.2.2. Step2 初始化 ....................................................................................................... 20 7.2.3. Step3 判断硬盘是否支持LBA还是只支持CHS ................................................ 22 7.2.4. Step4 采用LBA加载core.img第一个扇区 ....................................................... 23 7.2.5. Step5 拷贝core.img第一个扇区到内存指定位置 ............................................ 25 7.2.6. Step6 执行core.img第一条语句 ....................................................................... 26 7.2.7. Step7 boot.img总结 ............................................................................................. 26 7.3. GRUB2中core.img.......................................................................................................... 28

7.3.1. diskboot.img .......................................................................................................... 28 7.3.2. GRUB2 core Startup .............................................................................................. 34 7.3.3. GRUB主函数即GRUB主要功能 ......................................................................... 37 7.3.4. 加载Linux Kernel ................................................................................................. 38

7.4. Linux kernel...................................................................................................................... 46 8. 结束语....................................................................................................................................... 47 9. 参考文献................................................................................................................................... 47

1. 概述

计算机系统上电之后由固化到ROM中的BIOS(UEFI)进行操作,然后导入硬盘MBR中Boot Loader并调到其运行,由Boot Loader对操作系统内核进行加载,并将控制权交给操作系统.下图简单描述了CentOS7的启动过程(CentOS7使用GRUB2作为Boot Loader):

现在的Boot Loader有很多类型,大致如下: 1.对Linux来说GRUB2占据了统治地位

2.对Windows来说Bootmgr/BCD占据了统治地位 3.对Apple系统缺省的是BootX

作为一名计算机工程师,了解Boot Loader的原理是很重要。本文着重介绍GRUB2及其启动流程.读完本文,相信读者能够对Boot Loader原理有一定深刻理解,并能大致知道其他Boot Loader的作用.

本文在介绍一些基本知识后,在第7章会引入基本的反汇编过程来讲解GRUB2的启动流程,因为只有直接读代码才能深入学习原理.需要读者:

- 有一定的汇编语言知识,如果读者对汇编不敢兴趣,可以跳过相关章节 - 同时也需要读者有一定C语言知识

本文稍微有点长,但都是作者本人的经验总结,如果静下心读完,相信对你会有帮助,相比其它GRUB一厚本书,能节约你很多时间。但由于作者水平有限,有不足之处忘谅解。

2. CentOS7中GRUB2

GRUB2是GNU下面的一个项目,有关其详细信息,请参考官方网站: http://www.gnu.org/software/grub/. 相对于GRUB2, 原先的GRUB(i.e. version 0.9x)被称为: GRUB Legacy. 官网上说明: GRUB Legacy is no longer being developed.

从 1.x 开始的新版本就称为 GRUB 2(注意,虽然称为GRUB2,但其版本号却是从1.x开始 1.99也是GRUB2). 现在各种最新发行版本的Linux(包括CentOS7)都采用GRUB2.

在CentOS7上可以查看安装的GRUB2版本

[root@controller ~]# rpm -qa | grep \grub2-2.02-0.34.el7.centos.x86_64

在CentOS7下面/boot/grub2目录可以看到有关GRUB2相关文件. 在/boot/grub2/i386-pc目录下是GRUB2 bootstrap images文件,该目录大部分文件是以.mod结

尾,这些文件为GRUB2模块文件,最后在该目录下面有以下两个image文件:

[root@controller i386-pc]# ls -lrt *.img

-rw-r--r--. 1 root root 26618 7\月 11 23:33 core.img -rw-r--r--. 1 root root 512 7\月 11 23:33 boot.img

以上两个img文件都会被grub2-install命令安装到硬盘上相应位置(在硬盘什么位置后面会说),很有意思的是请注意两点

1) boot.img固定为512Byte 2) core.img小于32KByte

如果你觉得好奇,可以用file命令查看这些image文件类型

[root@controller i386-pc]# file boot.img

boot.img: x86 boot sector; partition 4: ID=0xd4, starthead 205, startsector 4277266767, 0 sectors, code offset 0x63

[root@controller i386-pc]# file core.img core.img: data

[root@controller i386-pc]# file xfs.mod

xfs.mod: ELF 32-bit LSB relocatable, Intel 80386, version 1 (SYSV), not stripped

对于boot.img file命令明确指出其为x86 boot sector,而mod文件却是ELF文件,接下来让我们进一步了解这些bootstrap image文件

3. GRUB2 的 bootstrap image文件

GRUB2有以下各种bootstrap images文件,大伙应悉知,这些image会被grub2-install安装到硬盘相应的位置,当BIOS完成后,他们会被加载并引导系统继续完成启动.

3.1. boot.img

在PC BIOS系统中,这个image是GRUB2第一个被运行的.它被写在MBR(Master Boot Record)或者在分区(partition)的boot sector中.因为MBR或PC boot sector是固定512字节,这个文件的大小也固定为512byte.

boot.img功能很简单,主要是读磁盘中core.img中的第一个扇区(sector)到内存中并跳到该部分运行(如果是硬盘启动,那么该扇区就是下面要介绍的diskboot.img).因为只有512字节,boot.img不能够加载文件系统(比如CentOS7中XFS或其它Linux的EXT4等等),并且只能是从硬盘固定的位置加载.

3.2. diskboot.img

当从硬盘启动的时候这是core.img第一个扇区(sector)的内容,主要功能是读剩下的core.img到内存中并开始运行kernel.img. 同样diskboot.img没有文件系统的功能(XFS,EXT4等),当他读取剩余的core.img时候,依然从硬盘固定位置读取.

根据启动的介质不同,类似diskboot.img文件有很多,在安装GRUB时候选用其中一个,目前大部分都是从硬盘启动diskboot.img

1.cdboot.img: 从CD-ROM启动

2.pxeboot.img: 从PXE网络启动

3.Lnxboot.img: 如果从其他bootloader比如LILO(用image=’ section)启动,这个image使GRUB看上去像一个Linux内核.

3.3. kernel.img

这个文件包含了GRUB2基本的运行时支撑:对设备及文件的框架,环境变量,恢复模式下的命令行等等.一般我们不会直接使用它,但是它是core.img中必不可少的一部分.

3.4. core.img

这个是GRUB的核心.他是被grub2-mkimage命令生存,包含了kernel.img以及一些必须必要的modules. 通常core.img包含了足够的模块(modules)为了访问XFS/EXT4文件系统/boot/grub2目录,并且在运行时加载从文件系统(XFS)所有剩余的模块,这些剩余模块包含启动目录处理,加载操作系统等等功能.

模块化的设计思路最主要的目的是使core.img保持足够小,目前disk限制core.img安装必须小于32KB. core.img一般被安装在硬盘特殊区域:embedding area(夹层区),这个区一般有32K限制,我们在后面会介绍什么是夹层区.

3.5. *.mod

所有GRUB其他部分被称为模块,他们大部分被core.img在运行时自动动态加载,其中一小部分被整合到core.img中,这小部分是必须,比如文件系统支持(xfs.mod)

模块可以手工加载,请参考insmod command(在本文不作介绍,请查阅相关文档)

注意:如果对以上各种image文件还是不清楚,请继续往下读,后面会有详细说明。

4. 对比GRUB Legacy

GRUB2 与GRUB Legacy不同,很多人都熟悉GRUB Legacy里面的stage1, stage1_5,stage2等等概念,而在GRUB2里面,这些被各种bootstrap image文件替代:

boot.img diskboot.img core.img

大伙应悉知以上三个images

4.1. stage1

GRUB Legacy中stage1相当于GRUB 2中boot.img, 他们完成相同的功能.

4.2. *_stage1_5

GRUB Legacy中Stage 1.5包含了足够的文件系统(XFS或EXT4)代码而允许Stage2从文件系统中直接载入系统,就这个意义上来说很像GRUB 2中的core.img.

不过core.img功能更加强大,它提供了恢复shell,使能够在不能加载其他模块(modules)情况下(比如partition number已经改变)能够人工恢复。Core.img能够被灵活的创建,允许从LVM或者RAID加载模块.

GRUB Legacy 能够运行stage1和stage2而不运行stage1.5, 但是对GRUB2来说,core.img是必须的。

4.3. stage2

GRUB 2 没有对应stage2的image. 它从/boot/grub加载相应的模块。


GRUB2及启动过程详解.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:110kV线路断线故障分析专题报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: