CentOS 系统启动流程
1. linux系统的组成部分 内核 + 根文件系统
内核: 进程管理 内存管理 网络协议栈 文件系统 驱动程序 安全功能
IPC : inner Proccess communication
本地进程间通信机制 消息对列 semerphor shm
远程通信机制 socket
运行中的系统分为两层 内核空间 用户空间
用户空间: 应用程序(进程或线程)
内核空间:内核空间(系统调用)
启动分区:/boot
rootfs: FHS /bin /sbin /lib /etc /proc /sys /dev , init 是最关键的 /boot
这些都存在于磁盘 谁加载他们?
内核设计流派:
- 单内核设计 所有功能集成
linux - 微内核设计 每个功能使用子系统实现
windows、Solaris
linux 内核特点:
- 支持模块化 .ko (kernel object)
- 支持模块运行时的动态装在和卸载
组成部分:
- 核心文件 /boot/vmlinuz-3.10.0-862.14.4.el7.x86_64c
- 模块文件 /lib/modules/3.10.0-862.14.4.el7.x86_64/
2. ramdisk
要加载内核和根文件系统,需要首先加载根文件系统下的 fs 模块
要实现这个操作 需要使用一个临时的根系统首先加载 fs 模块。
这个临时根系统叫做ramdisk: 使用内存的一部分加载 内核模块。
使用ramdisk 加载完内核后,ramdisk 会释放
ramdisk路径
centos6、7 :initramfs-3.10.0-862.14.4.el7.x86_64kdump.img 使用fs(文件系统) 比 rd 避免了双缓存,提高效率。
3. CentOS 启动流程(内核)
内核级别: POST -> BootSequence(BiOS) --> BOOTLoader(MBR) --> kernel(ramdisk) -->rootfs(readoly) --> /sbin/init
1.POST: Power ON Self Test 加电自检
ROM:CMOS
BIOS: 基本输入输出系统
ROM(Read Only Memory),只读存储器,ROM是非挥发性内存,在没有通电的时候,也能将数据记录下来。
BIOS(Basic Input Output System)是一套程序,这套程序写死在ROM上。BIOS是系统开机时首先去读的程序,用来读取和更新CMOS内的数据。
CMOS用来保存主板上组件的参数,如是否启动网卡或显卡,CMOS芯片需要借助额外的电源来发挥记录功能,这也会主板上会有一个电池的缘故,将该电源断电会重置各项主板组件参数。
2. 根据BIOS 的bootSequence设置 按次序去查找第一个有引导程序的设备
- windows ntloader
- linux:
- LILO(不支持1024以后的柱面 太小, 但是andrid 使用 即手机使用)
- GRUB
- 0.X Grub Legacy
- 1.X Grub2
功能: 提供一个菜单,让用户选择内核版本
将内核加载到RAM 空间中,解压展开,然后将系统的控制权移交给内核;
MBR:Master Boot Record
硬盘 头 512 bytes
446bytes bootloader
64bytes 分区表
2bytes 55AA (表示MBR可用)
GRUB:
bootloader: 第一阶段
Parttion: 1.5 阶段 文件系统驱动 filesystem driver
Parttion: /boot/grub 第二阶段
UEFI ,GPT
3. 加载内核 kernel 阶段
自身初始化:
探测可识别到的所有硬件设备
加载硬件驱动程序;
以 只读方式挂载跟文件系统
运行用户态的第一个应用程序 /sbin/init
CentOS 5 : /etc/inittab
CentOS 6 : /etc/init/*.conf
CentOS 7 : /etc/systemd/system /usr/lib/systemd/system
ramdisk
linux 内核的特性之一 使用缓冲和缓存来加速对磁盘上的文件访问:
ramdisk ——> ramfs
CentOS5 :initrd
CentOS 6,7 dracut , initrd
4. init 级别(用户空间)
0 关机
1 单用户模式
2 多用户模式,无nfs
3 多用户模式 完全功能模式
4 预留级别
5 多用户级别 完全功能 图形界面
6 重启 reboot
配置文件 /etc/inittab
初始化脚本/etc/rc.d/rc.sysint
- 设置主机名称
- 设置欢迎信息
- 激活udev 和 selinux
- 挂载/etc/fstab 中定义的文件系统
- 检测根文件系统,并以读写方式重新挂载
- 设置系统时钟;
- 激活lvm 以及软raid设备;
- 激活swap 设备
- 加载额外设备的驱动程序
- 清理操作
CentOS5
总结用户空间运行流程(sbin/inittab)
设置默认的运行级别 --> 运行系统的初始化脚本 --> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务--> 设置登录终端 -->启动图形终端
CentOS6
init 程序:upstart 但名称依然是/sbin/init
配置文件/etc/init/*.cnf(将配置文件切割成多个片段
/etc/inittab(仅配置运行级别)
CentOS7
init 程序:systemd 配置文件 /usr/lib/systemd/system/* /etc/systemd/system/*
兼容SysV脚本机制,建议使用systemctl 来控制服务
5. 启动总结
CentOS6
POST --> BOIS BOOT Sequence --> Boot Load --> kernel(RAMdisk) --> rootfs(只读) --> 加载/sbin/init --> /etc/inittab /etc/init/*.conf --> 设置默认运行级别 --> 运行 初始化脚本 --> 启动或者关闭对应运行级别的服务 --> 启动终端
6 grub
功能:
- 提供菜单 并提交交互时接口
e: 编辑模式 用于编辑菜单
c: 命令模式 交互式接口
2)加载用户选择的内核或者操作系统
3) 为菜单提供保护机制