CentOS 系统启动流程

1. linux系统的组成部分 内核 + 根文件系统

内核: 进程管理 内存管理 网络协议栈 文件系统 驱动程序 安全功能

IPC : inner Proccess communication

本地进程间通信机制 消息对列 semerphor shm

远程通信机制 socket

运行中的系统分为两层 内核空间 用户空间

用户空间: 应用程序(进程或线程)

内核空间:内核空间(系统调用)

启动分区:/boot

rootfs: FHS /bin /sbin /lib /etc /proc /sys /dev , init 是最关键的 /boot

这些都存在于磁盘 谁加载他们?

内核设计流派:

  1. 单内核设计 所有功能集成
    linux
  2. 微内核设计 每个功能使用子系统实现
    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

功能:

  1. 提供菜单 并提交交互时接口

e: 编辑模式 用于编辑菜单

c: 命令模式 交互式接口

2)加载用户选择的内核或者操作系统

3) 为菜单提供保护机制