systemd-min.jpg

systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式激活服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。systemd 支持 SysV 和 LSB 初始脚本,可以替代 SysVinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登陆用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等

Upstart-min.jpg

Upstart 由 Ubuntu 所开发,它基于事件驱动模型(event-based),能够在监听到事件发生后以异步的方式响应事件,从而实现并行启动服务进程(引导过程更快)。同时可以按需启动服务,比如在系统运行期间插入 USB 设备后,会触发相应的事件,此时 Upstart 才启动对应的服务

SysVinit-min.jpg

SysVinit 是 System V 风格的 init 系统,它源于 System V 系列的 UNIX,比 BSD 风格的 init 更灵活,CentOS 5 的初始化程序就采用了它。SysVinit 采用脚本的方式来串行启动服务(速度较慢),一般设置了 6 个运行级别(runlevel),它的默认配置文件 /etc/inittab 中指明了系统启动的默认运行级别,通常是 3 或者 5,以及每个运行级别需要到哪些目录下执行哪些脚本,比如切换到 runlevel 3 时,就会到 /etc/rc3.d/ 目录下先依次停止以 K 开头的服务脚本,再依次启动以 S 开头的服务脚本

Linux boot process-min.png

只有深入了解 Linux 如何启动的,才能在启动出现故障时迅速排查问题原因。POST 加电自检、根据启动顺序(Boot Sequence)去查找 MBR 引导扇区,从而读取到 bootloader(比如 GRUB) 的第一阶段引导代码,这一部分跟操作系统关系不大(通用的流程)。然后 GRUB 会借助它的 1.5 阶段代码(比如 xfs_stage1_5)识别到存放它的第二阶段代的分区,从而开始执行第二阶段代码,并显示引导菜单。当选择了要启动的操作系统后,加载内核并执行,可能需要借助于 initial RAM disk 去识别硬件(比如 rootfs 所在硬盘),最后由内核执行第一个用户空间程序 init,主流的 init 系统包括 SysVinit、Upstart、systemd