CentOS 启动流程
CentOS 启动流程
linux组成:kernel+rootfs
kernel的功能:进程管理,内存管理、网络管理、文件系统、驱动程序、安全管理
rootfs:
glibc(库):函数(function)的集合,提供调用接口。
过程调用:procedure
函数调用:function
程序:
二进制程序文件(用户程序)
内核设计的流派:
单内核设计:Linux
把所有功能集成一个程序,所有子系统使用线程实现
微内核设计:Windows, Solaris
每个子系统独立运作,在一个核心框架下协同工作
Linux内核特点:
支持模块化:*.ko(文件)
支持模块的动态装卸载
组成部分:
核心文件:/boot/vmlinuz-VERSIOM-release
ramdisk:/boot/initramfs-VERSIOM-release.img
模块文件:/lib/modules/VERSIOM-release/
CentOS6系统启动流程
POST:加点自检(CMOS,BIOS)
Boot Sequence(BIOS设置的启动顺序):按照设置次序逐个进行寻找,直到找到第一个有引导程序的设备,进行引导。
bootloader:引导加载器
Windwos:ntloader
Linux:
LILO: LInux LOader(Android常用)
GRUB:GRand Uniform Bootloader
加载内核版本,解压内核,展开,移交系统控制权至内核。
MBR:共计512bits
446bits:bootloader
64bits:FAT(分区表)
2bits:55AA
GRUB:
bootloader:1st stage
disk:2nd stage
kernel:
自身初始化:
探测可识别的硬件设备:
加载硬件驱动程序:有可能会借助于ramdisk加载驱动
以只读方式挂载根文件系统:
运行用户空间的第一个应用程序:/sbin/init
init程序类型:
SysV:init, CentOS5
配置文件:/etc/inittab
Upstart:init,CentOS6
配置文件:/etc/inittab,/etc/init/*.conf
Systemd:systemd,CentOS7
配置文件:/usr/lib/systemd/system,/etc/systemd/system
ramdisk:
ramdisk --> ramfs
CentOS5:initrd, 生成工具:mkinitrd
CentOS6:initramfs,生成工具:mkinitrd,dracut
系统初始化:
POST-->BootSequence(BIOS)-->Bootloader(MBR)-->kernel(ramdisk)-->rootfs(readonly)-->init
/sbin/init
第一个应用程序init
CentOS5:
运行级别:0-6 7个级别:
0:关机
1:单用户模式,single,维护模式
2:多用户模式,会启动网络功能,不会启动NFS。
3:多用户模式,正常模式,文本界面。
4:预留级别。
5:多用户模式,正常模式,图形界面。
6:重启
级别切换
init #
级别查看
who -r
runlevel
配置文件:/etc/inittab
根据启动级别启动相关脚本:
/etc/rc.d/rc#.d/S##*
0,6级别时额外启动脚本:
/etc/rc.d/rc#.d/K##*
启动终端设备(1-6):
tty1:2345:respawn:/usr/sbin/mingetty tty1
...
tty6:2345:respawn:/usr/sbin/mingetty tty6
mingetty会调用login程序
/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)清理操作
CentOS6:
init程序为:upstart,
配置文件:/etc/inittab, /etc/init/*.conf
注意:/etc/init/*.conf文件语法遵循upstart配置文件语法格式
总结:
/sbin/init -->(/etc/inittab)-->设置默认运行级别-->运行系统初始化脚本、完成系统初始化-->关闭对应下需要关闭的服务,启动需要启动的服务-->设置登录终端