了解:老版本Linux系统的init启动过程
- 主机启动并进行硬件自检后,读取硬盘MBR中的启动引导程序,并进行加载legacy grub;
MBR是放在硬盘的第一个扇区,一共512字节,可以分成两部分:
主引导记录:安装启动引导程序的地方,446字节
分区表:记录整个硬盘分区的的状态此外,64字
- 启动引导器程序负责引导硬盘中的操作系统,根据用户在启动菜单中选择项不同,可以引导不同的操作系统,引导加载程序负责加载内核和初始 RAM 磁盘(initramfs)到内存中;
- Linux的内核程序(立即初始化设备和内存)负责操作系统启动的前期工作,并进一步加载系统的INIT进程;
- INIT进程是Linux系统中运行的第一个进程,该进程根据其配置文件/etc/inittab执行相应的启动程序,并进入指定的系统运行级别;
- 在不同的运行级别中,根据系统的设置将启动相应的服务程序;
- 在启动过程的最后,将运行控制台程序提示并允许用户输入账号和口令进行登录。
RHEL9的启动过程
- 计算机通电。系统固件(UEFI或 BIOS)开机自检(POST),并初始化部分硬件。
- 系统固件搜索可启动设备,可能在 UEFI启动固件中配置,也可能在 BIOS 中配置的磁盘主启动记录(MBR)。
- 系统固件从磁盘读取 boot loader,然后将系统控制权交给 boot loader。RHEL9 中,boot loader 为 GRand Unified Bootloader version 2(GRUB2),
- GRUB2 基于 /boot/grub2/grub.cfg(BlOS)和/boot/efi/EFl/redhat/grub.cfq(UEFI)加载配置并显示一个菜单,从中选择要启动的内核。grub.cfg 由使用 /etc/grub.d/目录、/etc/default/grub 文件和 grub2-mkconfig 命令进行配置。
- 选择内核或超时到期后,boot loader 会从磁盘中加载 kernel和initramfs,放入内存中。initramfs 中包含启动时所有必要硬件的内核模块、初始化脚本等。在 RHEL9 中,initramfs 包含自身可用的整个系统。
- boot loader 将控制权交给内核,传递 boot loader 的内核选项,及initramfs。
- 内核会初始化 initramfs中含有驱动的所有硬件, initramfs 中的/sbin/init 以 PID1启动。在 RHEL9 中,/sbin/init 是一个指向systemd 的链接。
- initramfs 中的 systemd 会执行 initrd.target 中所有 unit。包括将磁盘上的根文件系统挂载到 /sysroot 目录。
- 内核将根文件系统从 initramfs切换到 /sysroot 中的根文件系统。随后,systemd 使用磁盘中的 systemd 来自行重新执行systemd 会查找系统默认 target (/etc/systemd/system/default.target),然后启动(或停止)/etc/systemd/system/中的 unit。
Linux版本放弃init用systemd,init与systemd有什么区别:
systemd克服init启动服务慢
systemd属于用户空间
systemd对于服务病处理化处理
systemed借助Linux cgroups实现对进程资源的掌控
普通用户环境下可以用systemd管理自己的服务,安全性提升