关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程
  R6ZO6z1TYi7r 2023年11月02日 41 0

系统启动流程

*服务器上电(按下开机键的这一刻),系统固件(BIOS)运行,开机自检,开始初始化部分硬件

#BIOS==》最小化的输入输出系统,存在与主板的芯片上,出厂时已内置

*BIOS根据启动引导项来加载各项设备

BIOS根据哪些设备来启动系统呢?
1,Hard Drive(硬盘),如果硬盘中没用启动项则往下
2,CD-ROM Drive(光盘),如果光盘中也没有启动项则继续往下
3,Network boot from ***(网卡)

如图:

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_根文件系统

*系统固件从磁盘上读取boot loader,将系统控制器转移到boot loader==》在 RHEL8中,boot loader 为 GRand Unified Bootloader Version 2(GRUB2)

GRUB2引导菜单:

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_根文件系统_02

*使用 grub2-install 命令可以在磁盘上安装GRUB2作为boot loader

*GRUB2加载 /boot/grub2/grub.cfg 配置文件,选择所需要启动的内核

*/boot/grub2/grub.cfg 配置文件由/etc/grub.d/目录,/etc/default/grub 文件和grub2-mkconfig命令配置

*boot loader 加载内核和 initramfs,并放到内存里面,initramfs 包含启动时硬件必要的内核模块(释放内核所需要的各种驱动)和初始化脚本

*initramfs 如果是rhel7以下的版本,使用init老初始化系统,如果是rhel7以上的版本,使用systemd来初始化

*boot loader将控制权交给内核,内核在initramfs中找到所有硬件的驱动程序,并初始化这些硬件,在rhel8中,/sbin/init 是一个指向systemd的链接

*initramfs中的systemd会执行initrd.target目标所有的单元,包括将磁盘中的root文件系统挂载与/sysroot

*使用的是/etc/fstab 配置

*内核将根文件系统从initramfs切换到/sysroot中的根文件系统,随后systemd会使用磁盘中安装的systemd来重新执行

*systemd最终会查找默认的启动目标,还会启动一个基于文本登陆或图形登陆的界面

*使用 /etc/systemd/system/default.target 和 /etc/systemd/system、配置

#注:系统的第一个分区永远是boot,因为系统的前446字节的引导程序就写在硬盘的最前面

#思考:逻辑卷为什么不能作为boot分区呢?

#因为boot分区是启动引导分区,要在系统还没启动之前去加载这个分区,但是逻辑卷是一个软件上的虚拟概念,所以它必须要等到系统启动之后才能产生逻辑卷,如果你将逻辑卷作为boot分区,就会诞生你在系统启动时逻辑卷都还没有,就无法加载到boot的问题

简化:

(1)硬件上电
(2)BIOS质检
(3)加载引导启动项
(4)在引导项上加载446字节引导程序(硬盘上的一串代码)
(5)引导程序读取grub.cfg的配置得到启动选项菜单
(6)选择启动引导项菜单
(7)内核通过initramfs来加载根文件系统,并且这个是只读权限
(8)initramfs 通过自身的systemd启动后将真正的根挂载到/sysroot 下
(9)initramfs 将自身的根文件系统切换成/sysroot 下真正的根文件系统
(10)内核将重新运行真正根中的systemd初始化操作系统
(11)用户的得到指定运行级别也就是启动目标

查看内核启动项信息:

grubby --default-kernel #查看默认启动的内核菜单

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_03

grubby --info=ALL #查看所有的内核

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_04

示例:

#所以由启动流程就可以分析如果我root密码忘记了该如何重置

#从启动顺序不难看出,因为 initramfs 之后才是真正的根文件系统,所以可以从这里开始入手

注:在rhel8中,可以让initramfs运行的脚本暂停,并提供给你shell,然后在继续执行。

第一步:选择到要启动的内核,并且按 e 来进行编辑这个条目

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_05

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_初始化_06

第二步:找到内核命令行,并且在末尾加上rd.break

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_07

第三步:通过ctrl+x保存启动后用读写的权限来挂载/sysroot

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_初始化_08

第四步:切换到操作系统的根/sysroot 后重置密码

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_09

第五步:打上 .autorelabel 标签(SELINUX 在这一块存在限制)

关于菜鸡学习RHEL8的一些小笔记--->系统启动的流程_redhat_10

第六步:输入两次exit即可正常启动(修改密码后启动系统会给你自动打标签,所以会稍微慢一点,稍等即可)

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
git
  KRsXEGSB49bk   2023年11月19日   20   0   0 git远程仓库初始化
  KRsXEGSB49bk   2023年11月24日   39   0   0 Server客户端加载
  oIa1edJoFmXP   2023年11月19日   25   0   0 加载css进度条
  eHipUjOuzYYH   2023年12月06日   22   0   0 nginx加载IPV6
  L83A5jZvvg3Q   2023年11月19日   26   0   0 vim初始化物理内存
R6ZO6z1TYi7r