1、硬件引导启动

通电,BIOS自检,找到启动介质,在启动介质中找到MBR.MBR是启动介质(比如硬盘)第一个分区的第一个扇区,大小为512字节。其中前面446字节是bootloader(centos是Grub),紧接着64字节是分区表,最后2个字节是用来校验的,我们把它叫做55AA。

2、Grub引导程序

找到了MBR,就找到了grub这个引导程序。grub引导分为两个阶段stage1和stage2,stage1是直接在bootloader里面,stage2比较大是放在文件系统里面的。对于新的文件系统(如ext4)来说,stage2是不能识别到的,所以还得借助中间桥梁stage1_5来识别stage2文件系统。stage2执行后,它就会去解析配置文件grup.conf,找到内核和内核映像(initrd)的位置。

3、内核引导阶段

内核和内核映像(initrd)找到后,接管了控制权,内核只包含最基本的硬件驱动,其它的硬件驱动都在initrd中。所以initrd先释放到内存中,临时构成一个只读的文件系统,在这个只读的文件系统中,内核去执行临时文件系统里面的init进程,加载各种硬件的驱动,完成后内核再次挂载真正的根文件系统,内核把控制器教给了/sbin/init进程。

4、系统初始化阶段

/sbin/init进程是 系统其他所有进程的父进程,接管了系统的控制权后,首先会去读取/etc/inittab文件来执行相应的脚本进行系统初始化,如设置键盘、字体、装载模块、设置网络等。主要包括

1)执行系统初始化脚本(/etc/rc.d/rc.sysinit),对系统进行基本的配置,以读写方式挂载根文件系统及其它文件系统,并进行运行级别的确定及相应服务的启动。

2)执行/etc/rc.d/rc脚本,该脚本定义了服务启动的顺序是先K后S,而具体的每个运行级别的服务状态是放在/etc/rc.d/rc*.d(*=0-6)目录下,所有文件均是指向/etc/init.d下相应文件的符号链接。

3)执行用户自定义引导程序/etc/rc.d/rc.local

4)完成了系统所有的启动任务后,Linux会启动终端或X-Window来等待用户登录。