centos启动流程

1、加电自检(power on system test POST)

2、引导加载程序(Boot Loader)的功能

引导加载程序(Boot Loader)是一个统称,它的主要功能就是去识别、加载操作系统中的核心文件并提交到内存中运行。由于不同的操作系统的文件格式不一样,因此每种操作系统都有自己引导加载程序。既然 boot loader 是一个程序那么它必须要保存在硬件设备中,此设备一般为硬盘的第一个扇区,也就是我们常说的主引导扇区MBR(Master Boot Record)。

引导加载程序的主要功能:

在学习磁盘管理的时候,我们知道每个磁盘分区都会有一个启动扇区,操作系统默认会在这个扇区中安装bootloader程序。Windows系统默认是同时在MBR和每个磁盘分区中安装 boot loader 的,而Linux系统在安装时会询问我们是否将 bootloader 程序安装到MBR上。因此我们安装双系统时要先安装Windows在安装Linux。

3、加载系统内核(Kernel)和 ramdisk的功能

我们知道通过bootloader的管理而开始读取内核文件后,接下来,Linux会将内核解压缩到内存中,并利用内核的功能开始检查各个硬件设备,也就是说内核会自己再检测一次硬件,而不会使用BIOS检测到硬件信息,此时内核就开始接管BIOS后的工作了。

那么Linux内核文件存放在哪里呢?答案是/boot目录中,并且以 vmlinuz-VERSION 命名,但是boot目录是挂载在根(/)目录下的而此时系统还没有启动,根目录是不存在的,也就是说没有办法直接将/boot目录的内核文件加载到内存中。怎么办?

此时就要借用虚拟文件系统(InitialRAM DISK)了,简写为ramdisk,此文件系统也同样存放在/boot目录中,它作用在于启动正在的根目录。ramdisk在系统安装时会根据用户主机的硬件设备自动生成。ramdisk在不同系统的称呼不同,centos 5 中 /boot/initrd-VERSION-release.img,centos 6,7 中 /boot/initramfs-VERSION-release.img。

bootloader可以加载kernel和ramdisk至内存中,然后让ramdisk加压缩为根目录,kernel就能够借此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统(只读挂载),然后开始后续的正常启动流程。

其实,虚拟文件系统是用在当系统启动时无法挂载根目录的情况下的,比如你的根目录在特殊的磁盘接口(USB STAT SCSI)中,或者你的文件系统较为特殊(LVM RAID)。如果你的Linux系统安装在IDE接口的磁盘上,并且使用 ext2或ext3 文件系统,那么即使没有ramdisk也可以正常启动Linux,但是IDE接口的磁盘已经很少使用了。

补充:kernel初始化的功能

以上是内核空间中的启动流程。

4、启动用户空间的第一个进程/sbin/init

注意:至此以后的内容都是用户空间内的操作,并且以CentOS 5为例,其实CentOS 6的用户空间的启动流程根5的是类似的,只不过它将配置文件分成多个/etc/init/*.conf,/etc/inittab(此文件仅用于定义默认运行级别)。

在内核加载完毕并进行完硬件检测与驱动程序加载后,此时内核会主动调用第一个进程/sbin/init。init程序的主要功能是:准备程序的运行环境,包括系统的主机名、网络配置、文件系统格式及其他服务的启动管理,而这些操作都是通过/etc/inittab文件来规划的,在此文件中设置了默认的启动执行等级(runlevel)。先来查看一下/etc/inittab文件的内容(以centos 5 为例)

从上面可以看到系统有0-6共7个运行级别(本机的默认级别为5),分别如下: 0 :关机 1 :单用户模式(root 自动登录), single, 维护模式 2 :多用户模式,启动网络功能,但不会启动NFS ;维护模式 3 :多用户模式,正常模式;文本界面 4 :预留级别;可同3 级别 5 :多用户模式,正常模式;图形界面 6 :重启

此文件每一行定义一种 action 以及与之对应的process命令。格式为 id:runlevel:action:process ,其中action的常用值有:

常用的级别为3、5,1模式多用来系统维护,相当于Windows的安全模式。可以使用 runlevel 命令和 who -r 命令查看当期系统的级别。级别切换可以使用init #(#:0-6)命令

5、初始化脚本(/etc/rc.d/rc.sysinit)

/etc/rc.d/rc.sysinit文件是Linux系统运行的第一个脚本,主要是用来设置系统环境的。此脚本所做的事情主要有以下几点:

6、关闭或启动对应级别下的服务

在/etc/rc.d/rc.sysinit初始化系统环境后,系统将会关闭或启动对应级别下的服务,此处以/etc/inittab中默认的5级别为例。先看一下/etc/rc.d目录的内容(下图)。

可以看到每个级别都有与之对应的目录,而每个目录里面就记录的就是该级别要启动或关闭的服务(下图,级别5)。

以大写“K”开头的是要关闭的服务,大写“S”开头的是要启动的服务,后面接的数字为此服务关闭或开启的优先级。这些服务的文件都是链接到/etc/rc.d/init.d目录下对应的文件的。

7、启动终端

在完成了前面的所有操作之后,系统会调用/sbin/mingtty命令启动终端,用户输入了账号密码即可登录系统。至此Linux的整个启动流程结束。

原创文章,作者:pao,如若转载,请注明出处:/45329

联系我们

400-080-6560

在线咨询:点击这里给我发消息

邮件:1823388528@qq.com

工作时间:周一至周五,9:30-18:30,节假日同时也值班

友情链接:万达注册  万达直属QQ  测试  万达娱乐主管QQ  万达招商QQ  万达娱乐注册  万达主管  guoqibee.com  万达娱乐招商QQ  万达娱乐直属QQ