CentOS 启动流程
POST --> Boot Sequence(BIOS) --> Boot Loader (MBR) --> Kernel(ramdisk) --> rootfs --> switchroot --> /sbin/init -->(/etc/inittab, /etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端
POST
加电自检
BOOT Sequence
按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备
MBR引导
MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA
启动BootLoder
grub:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权移交给内核
加载kernel
内核加载后,操作系统接管硬件,然后进行自身初始化
探测可识别到的所有硬件设备
加载硬件驱动程序
以只读方式挂载根文件系统
运行用户空间的第一个应用程序:/sbin/init
其中init在不同的CentOS版本中类型不同
SysV: init, CentOS 5 配置文件:/etc/inittab
Upstart: init, CentOS 6 配置文件:/etc/inittab, /etc/init/*.conf
Systemd:systemd, CentOS 7 配置文件:/usr/lib/systemd/system, /etc/systemd/system
另外/sbin/init 分为7个运行级别
0:关机
1:单用户模式(root, 无须登录), single, 维护模式
2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式
3:多用户模式,正常模式;文本界面
4:预留级别;可同3级别
5:多用户模式,正常模式;图形界面
6:重启
init进程首先读取文件 /etc/inittab配置文件
每一行定义一种action以及与之对应的process
id:runlevel:action:process
action:
wait: 切换至此级别运行一次
respawn:此process终止,就重新启动之
initdefault:设定默认运行级别;process省略
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit
/etc/rc.d/rc.sysinit: 系统初始化脚本
(1) 设置主机名
(2) 设置欢迎信息
(3) 激活udev和selinux
(4) 挂载/etc/fstab文件中定义的文件系统
(5) 检测根文件系统,并以读写方式重新挂载根文件系统
(6) 设置系统时钟
(7) 激活swap设备
(8) 根据/etc/sysctl.conf文件设置内核参数
(9) 激活lvm及software raid设备
(10) 加载额外设备的驱动程序
(11) 清理操作
每个运行级别在/etc目录下面,都有一个对应的子目录,指定要加载的程序
/etc/rc0.d
/etc/rc1.d
/etc/rc2.d
/etc/rc3.d
/etc/rc4.d
/etc/rc5.d
/etc/rc6.d设置登录终端