Linux 系统启动流程

  Fedora/Linux 启动时先载入内核 (Kernel),随后启动名为 init 的程序,再由 init 执行任务并调用其他程序。

  在了解 Linux 的启动流程之前,先来认识认识运行级别 (Runlevels)。不同的运行级别有不同的用途,因此启用的服务也不一样。

  Linux 包含七个默认级别 

Runlevel 描述
0 关机
1 单用户模式,用于维护(备份/还原)和修复系统
2 无网络功能的多用户模式
3 多用户模式
4 保留 (未定义)
5 默认为 X11 图形界面
6 重启

 

  系统的默认级别设置保存在 /etc/inittab 文档中

id:5:initdefault:

  上面配置说明系统的默认运行级别是 5,要更改默认级别,只需使用 root 权限更改其中的数字,然后重启就行了。

注意:不要将默认运行级别设置成 0 或 6,这会导致系统一启动便关机或不断重启,常用的运行级别是 3 和 5。

 

  启动流程

  kernel 通过执行 /etc/rc.d/rc.sysinit 脚本激活 init 进程,它会完成“配置网络环境”、“挂载分区”、“设置计算机名称”等等一系列工作。然后 init 通过查看 /etc/inittab 文档,取得 initdefault 条目设置的运行级别。再依照运行级别调用 /etc/rc.d 目录下的相关脚本。

  /etc/rc.d 目录下存在下列目录,除 init.d 外,每个目录都对应一个运行级别,如运行级别为 5 时,则执行 rc5.d 目录下的脚本

init.d
rc0.d
rc1.d
rc2.d
rc3.d
rc4.d
rc5.d
rc6.d

  rc[0-6].d 目录下的文档都是以 K 或者 S 开头,K 表示 Kill,S 表示 Start,可以使用 "ls -la /etc/rc.d/rc5.d" 命令查看,结果类似于以下输出

[lugir@hope ~]$ ls -la /etc/rc.d/rc5.d
……
lrwxrwxrwx. …… K01smartd -> ../init.d/smartd
lrwxrwxrwx. …… K01smolt -> ../init.d/smolt
lrwxrwxrwx. …… K10psacct -> ../init.d/psacct
……
lrwxrwxrwx. …… K95firstboot -> ../init.d/firstboot
lrwxrwxrwx. …… S00microcode_ctl -> ../init.d/microcode_ctl
lrwxrwxrwx. …… S02lvm2-monitor -> ../init.d/lvm2-monitor
lrwxrwxrwx. …… S06cpuspeed -> ../init.d/cpuspeed
……

  不难看出,rc[0-6].d 目录下的文件都是指向 init.d 目录下的链接文件。在启动时,init 会停止以 K 开头的进程,再启动以 S 开头的进程,有相同开头的服务按照数字大小的顺序依次执行,如 K01 > K10 > S01 > S06

  待指定运行级别下的脚本全都执行完成之后,系统启动就完成了。


付费阅读