[菜鸟学Linux]外传01-Linux的启动过程(以RHEL7+MBR为例)(V0.1版)

一、总体过程
BIOS–>MBR(GRUB2)–>Kernel–>Init(systemd)–>Runlevel

二、各过程详解
1、BIOS(Basic Input/Output System),基本输入输出系统

  • 该系统存储于主板的ROM芯片上,计算机在开机时,会最先读取该系统,然后加电自检CPU和内存等,如无异常就开始加载BIOS程序到内存当中。详细的BIOS功能略
  • BIOS按照启动顺序去查找第一个启动设备(基本上是磁盘)的MBR信息,并加载和执行MBR中的BootLoader程序,若第一个启动设备不存在MBR,则会继续查找第二个启动设备。设备的启动顺序可以在BIOS的界面中进行设置,一旦BootLoader程序被检测并加载内存中,BIOS就将控制权交接给了BootLoader程序。

2、MBR(Master Boot Record),主引导记录

  • MBR储于磁盘的头部,大小为512bytes。
  • MBR的512bytes分配如下:446bytes用于存储BootLoader程序,64bytes用于存储分区表信息(一个分区需要16bytes,所以一块物理硬盘只能划分为4个主分区),最后2bytes是固定的,值为0x55AA,用于MBR的有效性检查。

3、GRUB(GrandUnified Boot Loader 2),大一统启动加载器2代

  • GRUB2是BootLoader这类程序中的一种。RHEL7中,BootLoader从GRUB更新为了GRUB2。在Windows中也有类似的BootLoader程序,叫Windows Boot Manager。还有其他的BootLoader程序,如GRUB、LILO、UBoot等。
  • 以往GRUB管理开机启动过程分成了三个阶段,分别是stage1/stage1.5/stage2,其中stage1主要负责BIOS和GRUB之间的交接,stage1.5是负责加载文件系统,最核心的stage2可以让用户以选项的方式将操作系统加载、修改选项以及新增参数等。GRUB2管理开机启动的过程将以上3个阶段改为了2个img文件阶段(可选3个)。
  • GRUB2支持两种方式引导操作系统:直接引导和链式引导,其中直接引导通过默认的GRUB2 BootLoader来引导写在默认配置文件中的操作系统,链式引导使用默认GRUB2 BootLoader链式引导另一个BootLoader,该BootLoader将引导对应的操作系统,一般只使用第一种方式,只有想引导GRUB默认不支持的操作系统时才会使用第二种方式。
  • 当使用GRUB2来管理启动菜单时,那么BootLoader都是GRUB2程序安装的。传统的GRUB将stage1转换后的内容安装到MBR中的BootLoader部分,将stage1.5转换后的内容安装在紧跟在MBR后的扇区中,将stage2转换后的内容安装在/boot分区中。GRUB2将boot.img转换后的内容安装到MBR中的BootLoader部分,将diskboot.img和kernel.img结合成为core.img,同时还会嵌入一些模块或加载模块的代码到core.img中,然后将core.img转换后的内容安装到磁盘的指定位置处。GRUB开发团队建议将GRUB2(即core.img,因为boot.img的位置是固定在MBR上)嵌入到MBR和第一个分区之间,除非有特殊需求,但仍必须要保证第一个分区至少是从第31kB(第63个扇区)之后才开始创建的。
  • 总体来说,GRUB2的第一阶段加载程序(stage 1)由BIOS从主引导记录(MBR)加载和执行,或者由分区引导扇区的另一个引导加载程序加载和执行,它的工作是发现和访问各种文件系统,稍后可以从这些文件系统读取配置,可选的中间阶段加载器(stage 1.5)由第一阶段加载器加载执行,以防第二阶段加载器不是连续的,或者文件系统或硬件需要特殊处理疑问点1:什么情况下需要特殊处理)才能访问第二阶段加载器,第二阶段加载器(stage 2)最后加载,并显示GRUB2启动菜单,允许用户选择操作系统或检查和编辑启动参数疑问点2:是否是在GRUUB2彩蛋中按e进入的模式?都有哪些启动参数?),选择菜单项并给出可选参数后,GRUB2将内核加载到内存并将控制权递给它。

4、Kernel,内核(疑问点3:要结合密码破解再深入理解一下)

  • Kernel是Linux系统最主要的程序,但是Kernel文件很小,只保留了最基本的模块,并以压缩的文件形式存储在硬盘中,当GRUB2将Kernel读进内存,内存开始解压缩内核文件。讲内核启动,应该先讲下initrd这个文件。
  • initrd(Initial RAM Disk),它在stage2这个步骤就被拷贝到了内存中,这个文件是在安装系统时产生的,是一个临时的根文件系统(rootfs)。因为Kernel为了精简,只保留了最基本的模块,因此,Kernel上并没有各种硬件的驱动程序,也就无法识rootfs所在的设备,故产生了initrd这个文件,该文件装载了必要的驱动模块,当Kernel启动时,可以从initrd文件中装载驱动模块,直到挂载真正的rootfs,然后将initrd从内存中移除。
  • Kernel会以只读方式挂载rootfs,当根文件系统被挂载后,开始装载第一个进程(用户空间的进程,即systemd)(,执行/sbin/init,之后就将控制权交接给了init程序。

5、init(systemd)

  • systemd是所有进程的父进程。也是一个守护进程,它管理其他守护进程。包括systemd,都是后台进程,systemd是第一个启动的守护进程(在引导期间),也是最后一个终止的守护进程(在关闭期间)。
  • 首先systemd按照/etc/fstab文件中的配置进行挂载。再根据运行级别(通过/etc/systemd/system/default.target链接文件得知运行级别)启动该运行级别的一系列的依赖(详细的启动顺序可使用命令systemd-analyze plot > boot.html然后用浏览器查看)。最后执行getty.target启动终端和登陆程序。至此,整个过程结束。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值