MBR开机流程与主引导程序;

CMOS是记录各项硬件参数且嵌入在主板上面的存储器;

BIOS是一个写入到主板上的一个韧体(韧体就是写入到硬件上的一个软件程序),BIOS是计算机开机时系统主动执行的第一个程序;

接下来BIOS会去分析计算机里面有哪些存储设备,我们以硬盘为例BIOS会依据用户的设置去取得能够开机的硬盘,并且到该硬盘里面去读取第一个扇区的MBR位置。MBR这个仅有446bytes的硬盘容量里面会放置最基本的引导加载程序,此时BIOS就功成圆满,而接下来就是MBR内的引导加载程序的工作了;

这个引导加载程序的目的是在加载内核文件,由于引导加载程序是操作系统在安装时提供,所以他会识别硬盘内的文件系统格式,因此就能够读取内核文件,然后接下来就是内核文件的工作,引导加载程序业工程圆满,之后就是大家所知道的操作系统的任务啦!

  简单的说,整个开机流程到操作系统之前的动作应该是:

1、  BIOS:开机主动执行的韧体,会认识第一个可开机的设备。

2、  MBR:第一个可开机设备的第一个扇区内的主引导分区块,内包含引导加载程序。

3、  引导加载程序(Boot loader):一支可读取内核文件来执行的软件。

4、  内核文件:开始操作系统的功能。

 Boot loader主要执行的任务:

提供菜单:用户可以选择不同的开机选项,这也是多重引导的重要共能。

载入内核文件:直接执行可开机的程序区段来开始操作系统。

转交其他loader:将引导加载功能转交其他loader负责。

  boot loader有两个stage

stage1 执行boot loader 主程序

第一阶段为执行boot loader的主程序,这个主程序必须要被安装在启动区,即使MBR或者是boot sector。但如前所述,因为MBR实在太小了,所有MBRboot sector通常仅安装boot loader的最小主程序,并没有安装loader的相关配置文件;

Stage2 主程序加载配置文件

第二阶段为通过boot loader加载所有配置文件与相关的环境参数文件(包括文件系统定义与主要配置文件menu.lst),一般来书,配置文件都在/boot下面。

  有关grub须知:

grub是目前使用最广泛的linux引导装载程序;

grub具有较多有点:

  认识与支持较多的文件系统并且可以使用grub的主程序直接在文件系统中查找内核文件名;

  启动的时候,可以自行编辑与修改配置选项,类似bash的命令模式;

可以动态查找配置文件,而不需要在修改文件后重新安装grub,即我们只要修改完/boot/grub/menu.lst里面的设置后,下次启动就生效了

有关grub的配置文件(/boot/grub/menu.lst):

vim /boot/grub/menu.lst

显示如下视图:

计算机开机流程分析及grub的两种安装方式_第1张图片

其中:

default=0为默认启动选项,使用第一个启动菜单(title

title 定义同一个操作系统的不同内核或者不同操作系统

timeout 为若5秒内未动键盘,使用默认菜单启动

splashp_w_picpath=hd0,0/grub/splash.xpm.gz 后台图示所在的文件

hiddenmenu 读秒期间是否显示出完整的菜单界面(默认隐藏)

root 代表是内核文件放置的那个分区,而不是根目录

kernel 指定文件内核,后面接的是内核的文件名,文件名后接的是内核的参数。由于启动过程中需要挂载根目录,因此kernel后面接的那个root=LABEL=/1指的是linux的根目录在哪个分区的意思

initrd 是制作出RAM Disk的文件名

eg

我的系统分区是/dev/hda1(/)/dev/hda2(swap)而已,且我的内核文件为/boot/vmlinuz,请问grubmenu.lst内该如何编写内核文件位置?

答:kernel (hd0,0) /boot/vmlinuz root=/dev/hda1…

chain loader 引导装载程序的连接

所谓chain loader仅是将控制权交给下一个boot loader而已,所以grub并不需要“认识”与找出kernel的文件名,它只是将boot的控制交给下一个boot sectorMBR内的boot loader而已,所有通常它也不需要去检查下一个boot loader的文件系统;

  安装grub的两种方式:

grub 进入编辑模式如下:

  计算机开机流程分析及grub的两种安装方式_第2张图片

  计算机开机流程分析及grub的两种安装方式_第3张图片

quit 退出

grub-md5-crypt 给编辑模式增加密码编辑时须输入密码

  2grub 安装二举例说明:

新建磁盘/dev/sdb 创建分区sdb1

mkdir /mnt/boot

挂载光盘 mount /dev/sdb1 /mnt/boot

grub-install - -root-directory=/mnt /dev/sdb