Linux开机引导的整个过程

一、简单描述

1.开机BIOS自检
2.MBR引导
3.grub引导菜单
4.加载内核kernel
5.启动init进程
6.读取inittab文件,执行rc.sysinit,rc等脚本

7.启动mingetty,进入系统登陆界面

二、图形描述

Linux开机引导的整个过程_第1张图片

三、系统启动过程

(1)BIOS自检

开机自检完成后,CPU首先读取位于CMOS中的BIOS程序,按照BIOS中设定的启动次序(Boot Sequence)逐一查找可启动设备,找到可启动的设备后,去该设备的第一个扇区 中读取MBR。

(2)MBR引导

MBR(Main Boot Record 主引导记录区) ,MBR存在于可启动磁盘的:0磁道,0柱面,1扇区。占用512字节,它主要用来告诉计算机从选定的可启动设备的哪个分区来加载引导加载程序(Boot loader),MBR中存在如下内容:
   1) Boot Loader 占用446字节,存储有操作系统(OS)相关信息,如操作系统名称,操作系统内核位置等,它的主要功能是加载内核到内存中运行。
   2) Partition Table 分区表,占用64字节,每个主分区占用16字节,4*16=64字节(这就是为啥一块硬盘只能有4个主分区)

   3)分区表有效性标记占用2字节 (最后两个字节“55,AA”是分区的结束标志)

这一步CPU将MBR读取至内存中。


(3)GRUB加载

grub启动过程可以分为三个阶段:
1)阶段1(stage1):
在传统的常规 MBR 中,引导代码实际所占用的空间大小为 446 字节。这个阶段 1 的 446 字节的文件通常被叫做引导镜像(boot.img)。
由于引导记录必须非常的小,它不可能非常智能,且不能理解文件系统结构。因此阶段 1 的唯一功能就是定位并加载阶段 1.5 的代码。

2)阶段1.5(stage1.5):
阶段1.5 的代码必须位于引导记录与设备第一个分区之间的位置。该空间由于历史上的技术原因而空闲。第一个分区的开始位置在扇区 63 和 MBR(扇区 0)之间遗留下 62 个 512 字节的扇区(共 31744 字节),该区域用于存储阶段 1.5 的代码镜像 core.img 文件。 

因为有更大的存储空间用于阶段 1.5,这意味着 GRUB2 的阶段 2 能够放在标准的 EXT 文件系统,阶段 1.5 的功能是开始执行存放阶段 2 文件的 /boot 文件系统的驱动程序,并加载相关的驱动程序。

3)阶段 2(stage2):
GRUB阶段 2 的主要功能是定位和加载/boot中的Linux内核文件到内存中,如:vmlinuz,initrd,initramfs等,并转移控制权到内核。该阶段还需要从/boot/grub2/i386-pc 目录下加载一些内核运行时模块。

Linux开机引导的整个过程_第2张图片


(4)Kernel内核初始化

Kerenl在得到系统控制权之后,首先要进行自身初始化,载入并运行vmlinuz,initrd,initramfs等。

(1)探测可识别到的所有硬件设备;
(2)加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于ramdisk加载驱动);
(3)以只读方式挂载根文件系统;如果有借助于ramdisk这个临时文件系统(虚根),则在这一步之后会执行根切换;否则不执行根切换。
(4)运行用户空间的第一个应用程序:/sbin/init.

(5)启动第一个用户进程INIT

用户进程后/sbin/init依次执行下面的:
1)/etc/rc.d/rc.sysinit
1、获得网络环境 
2、挂载设备 
3、开机启动画面Plymouth(取替了过往的 RHGB) 
4、判断是否启用SELinux 
5、显示于开机过程中的欢迎画面 
6、初始化硬件 
7、用户自定义模块的加载 
8、配置内核的参数 
9、设置主机名 
10、同步存储器 
11、设备映射器及相关的初始化 
12、初始化软件磁盘阵列(RAID) 
13、初始化 LVM 的文件系统功能 
14、检验磁盘文件系统(fsck) 
15、设置磁盘配额(quota) 
16、重新以可读写模式挂载系统磁盘 
17、更新quota(非必要) 
18、启动系统虚拟随机数生成器 
19、配置机器(非必要) 
20、清除开机过程当中的临时文件 
21、创建ICE目录 
22、启动交换分区(swap) 
23、将开机信息写入/var/log/dmesg文件中
init执行完/etc/rc.d/rc.sysinit后,将会执行/etc/inittab来设定系统运行的默认级别。

2)/etc/rc.d/inittab
linux中共有[0-6]七个运行级别,系统的默认运行级别是3,
rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d ,所以执行rc3.d中的脚本,该脚本最终会指向到init.d中的相应程序。

3)/etc/rc.d/rc.local
   最后,将执行/etc/rc.d/rc.local脚本,可以根据自己的需求将一些执行命令或者脚本写到其中,当开机时就可以加载。

Linux开机引导的整个过程_第3张图片


(6)系统登录界面

系统初始化完成后,init给出用户登录提示符(login)或者图形化登录界面,用户输入用户和密码登陆后,整个启动流程结束。





你可能感兴趣的:(Linux,服务器)