启动流程介绍
1.简介*
现代计算机系统启动是硬件与软件复杂组合。从定义的端点开始,到拥有登录提示符的运行中
系统,需要大量的硬件和软件配合工作。以下列表从较高层面概述了启动系统时所涉及的任务。
x86_64虚拟机列表大致相同。
1)BIOS加电自检
2)把MBR加载到内存
3)加载grub引导程序
4)Kernel自身初始化
5)启动第一个程序systemd
1、计算机接通电源。系统固件(现代UEFI或更旧的BIOS)运行开机自检(POST),并开始
初始化部分硬件。
使用系统BIOS或UEFI配置屏幕(早期按F2可进入设置)
2、系统固件会搜索可启动设备,可能是在UEFI启动固件中配置的,也可能按照BIOS中配置的顺序搜索所有磁盘上的主引导记录(MBR)
使用系统BIOS或UEFI配置屏幕(早期按F2可进入设置)
3、系统固件会从磁盘读取启动加载器,然后将系统控制权交给启动加载器。红帽企业版Linux8中,启动加载器为GRand Unified Bootloader version2(GRUB2)
使用grub2-install命令进行配置,它将安装GRUB2作为磁盘上的启动加载器。
4、GRUB2将从/boot/grub2/grub.cfg文件加载配置并显示一个菜单,从中可以选择要启动的内核。
使用/etc/grub.d/目录、/etc/default/grub文件和grub2-mkconfig命令进行配置,以生成/boot/grub2/grub.cfg文件。
5、选择内核超时到期后,启动加载器从磁盘中加载内核和initramfs,并将他们放入内存中。initramfs是一个存档,其中包含启动时所有必要硬件的内核模块、初始化脚本等等。在redhat8中,initramfs包含自身可用的整个系统。
使用/etc/dracut.conf.d/目录、dracut命令和lsinitrd命令进行配置,以检查initramfs文件。
6、启动加载器将控制权交给内核,从而传递启动加载器的内核命令行中指定的任何选项,以及initramfs在内存中的位置
7、对于内核可在initramfs中找到驱动程序的所有硬件,内核会初始化这些硬件,然后作为PID1从initramfs执行/sbin/init。在redhat8中/sbin/init是一个指向systemd的链接。
8、initramfs中的systemd进程会执行initrd.target目标的所有单元。这包括将磁盘上的root文件系统挂载于/sysroot目录。
使用/etc/fstab进行配置
9、内核将root文件系统从initramfs切换回/sysroot中的root文件系统。随后,systemd会使磁盘中安装的systemd副本来重新执行。
10、systemd会查找从内核命令行传递或系统中配置的默认目标,然后启动或停止单元,以符合该目标的配置,从而自动解决单元之间依赖关系。本质上,systemd进程是一组系统应激活以达到所需状态的单元。这些进程通常启动一个基于文本的登录或图形登录屏幕
可使用/etc/systemd/system/default.target和/etc/systemd/system/进行配置。#