Linux启动过程分为2种,init方式和systeamd方式。ide
先说init启动过程:spa
1.首先,启动电源。操作系统
2.启动POST(Power on self test),加电自检程序,检查主板硬件上有无短路等等,若是正常,会“滴”的响一声,这是不少人熟知的开机“滴”声。(上面那篇文章没写到。)进程
3.而后处理器会在系统存储中找到BIOS(Basic Input Output System)。内存
(注:BIOS一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、开机后自检程序和系统自启动程序。)get
4.BIOS找到第一个引导设备。(通常是硬盘 ,装系统的时候多是USB多是CD,装过系统的童鞋知道能够进BIOS设置启动顺序。 )it
5.查找硬盘的的主引导记录MBR(Master Boot Record),磁盘的第一扇区第一磁道,并将其加载到内存中,之后的启动过程就由MBR程序引导。前面是BIOS在引导。ast
(注:MBR描述了逻辑分区的信息,包含文件系统以及组织方式。此外,MBR还包含计算机在启动的第二阶段加载操做系统的可执行代码或链接每一个分区的引导记录VBR。)class
6.MBR初始化引导程序(Grub或LILO,前者居多,用Grub为例)Grub。test
7.Grub程序加载内核kernel。
8.内核kernel会去查找/sbin下的init程序,而且执行该程序。init即是Linux的父进程,是全部进程的父进程,PID为1。
9.init读取/etc/inttab,肯定这次运行的级别runlevel。
10.init读取/etc/fstab,根据文件信息挂载分区。
11.init读取/etc/init.d,开启对应启动级别(第9步确认)的脚本和服务。
12.进入Shell(这是第11步启动出来的。)
至此,开机成功!
咱们再来讲说systemd方式启动:
1.前面7步与init方式相同。
8.内核kernel将加载systemd做为引导管理程序。(使用systemd仍是init取决于Grub里的配置。)
9.加载default.target,实际上default.target是指向graphical.target的软连接,文件的内容是须要加载的target文件。
10.启动multi-user.target,为多用户设定系统环境,开起防火墙服务。
11.加载basic.target,开启普通服务特别是图形服务。(它经过/etc/systemd/system/basic.target.wants目录来决定哪些服务会被启动)
12.加载sysinit.targe,开启重要服务,例如挂载等。
13.加载local-fs.target,来处理底层核心服务。
14.进入Shell(这是第11步启动出来的。)
至此,开机成功!