了解 RHEL/Centos7 的Linux 启动过程十分重要,了解了Linux的启动过程,就很容易理解操作系统的运行级别问题。
1. BIOS
当打开系统电源后,他将读取所有设备配置,并进行POST(加电自检)。这个过程是从系统固件(现代的通用扩展固件接口(UEFI)或经典的基本输入输出系统(BIOS))中开始。完成硬件的启动初始化后,将加载MBR(主引导记录)以用于进一步的启动过程。
2.MBR(主引导记录)
主引导记录位于Linux引导硬盘的第一个扇区,此信息是有BIOS预加载到ROM(只读存储器)中。MBR的大小仅为512字节,其中包含用于446字节用于引导操作启动的bootloader程序和64字节分区表还有2字节的“ Magic Number”(用于错误监测)。
MBR发现可引导设备,并将GRUB2引导加载程序加载到内存中,并将控制权转移给该可引导设备
3. GRUB2 (Grand Unified Bootloader 2)
加载引导加载程序。
GRUB 2配置文件位于/boot/grub2/grub.cfg ,是Centos 7 的默认引导程序。
在生成 grub.cfg 的配置文件时,grub2的默认配置来自 /etc/default/grub 文件中
# cat /etc/default/grub
GRUB_DEFAULT=0
GRUB_TIMEOUT_STYLE=hidden
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
可以使用 grub2-mkconfig 生成一个 grub2 的配置文件。
# grub2-mkconfig -o /boot/grub2/grub.cfg
- grub2 会在 /boot 目录中搜索压缩后的内核映像文件,也称做vmlinuz
- grub2 会将 vmlinuz 加载到内存中,并经intramfs 映像文件的内容提取到基于内存的临时文件系统 tmpfs 中。
- 初始化RAM磁盘(initrd)是在实际根文件系统之前安装的
初始根文件系统
。
intramfs
- 初始化RAM文件系统的工作是预加载块设备模块,例如用于 IDE,SCSI或者RAID的块设备模块,以便随后可以访问和安装这些模块所在的根文件系统
4. 加载内核
- systemd进程仍然从 initrd (初始根系统)中加载必要的驱动程序模块。
- 引导加载程序(grub2)可以向用户显示引导菜单,或者将其配置为自动启动默认的操作系统
- 启动Linux, 将内核与initramfs包含启动所需要的所有硬件的内核模块,以及进行下一启动阶段所需要的初始化脚本。
- initramfs 包含完整的操作系统,可以用来排障
5. 启动systemd
内核开始以pid 1 启动 systemd 进程
- systemd 是系统引导后的第一个进程,引导最好阶段并使用系统,
- systemd 读取 /etc/systemd/system/default.target 链接的文件 (例如 /usr/lib/systemd/system/multi-user.target), 以确认默认的系统目标(运行级别)。系统目标文件定义了systemd启动的服务。
- systemd 允许管理系统上的各种类型的单元,包括服务(name.service)和目标(name.target)设备(name.device), 文件系统的安装点(name.mount)和套接字(name.socket)
systemd 进入系统后开始执行系统初始化任务如
- 设定主机名
- 初始化网络
- 初始化SeLinux
- 设置欢迎标语
- 初始化硬件
- 挂在文件系统
- 清理 var 等