Linux 系统开机启动流程

可能没有完全理解,后期整理完Linux的内容,应该理解会深入一些,试着用更简洁的方式和图形来记录,以及一些概念的完善
2023-12-14

一、开机流程

BIOS + MBR/GPT

  1. 加载 BIOS 的硬件信息与进行自检,并依据设定取得第一个可开机(可引导)的装置
  2. 读取并执行第一个开机装置内 MBR(Master Boot Record) 的 boot Loader (亦即是 grub2, spfdisk 等程序)
  3. 依据 boot loader 的设定加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序
  4. 在硬件驱动成功后,Kernel 会主动呼叫 systemd 程序,并以 default.target 流程开机

注意:
如果开机使用类似 grub 的开机管理程序,要额外分区出一个『 BIOS boot 』的分区,才能放置其他开机过程所需的程序代码,Centos 中通常占用2MB 左右,如下sad1分区,与系统的/boot分区不同

# lsblk
NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda                     8:0    0  100G  0 disk 
|-sda1                  8:1    0    1M  0 part 
|-sda2                  8:2    0  512M  0 part /boot
`-sda3                  8:3    0 99.5G  0 part 

UEFI + GPT

1、BIOS 无法识别GPT ,能识别兼容分区时才能读取到GPT磁盘分区
2、BIOS 通过汇编语言开发,UEFI 通过C语言开发能实现更多可能
3、UEFI 开机会比BIOS 快,只需要加载驱动程序即可控制操作
4、硬件资源的管理使用轮询 (polling) 的方式来管理,比BIOS 的CPU中断要慢一些
5、UEFI 并不能提供完整的快取功能,因此执行效率也没有办法提升
6、加载所有的 UEFI 驱动程序之后, 系统会开启一个类似操作系统的 shell 环境
7、UEFI 加入了一个所谓的安全启动 (secure boot) 机制,不通过验证就无法启动
8、虽然 UEFI 可以直接取得 GPT 的分区表,不过最好依旧拥有 BIOS boot 的分区支持
9、为了与 windows 兼容,并且提供其他第三方厂商所使用的 UEFI 应用程序储存的空间必须要格式化一个 vfat 的文件系统, 大约提供 512MB 到 1G 左右的容量

二、服务启动流程

RHEL7 启动流程简介:

  1. Kernel呼叫systemd服务
  2. systemd 执行 sysinit.target 初始化系统及 basic.target 准备操作系统
  3. systemd 启动 multi-user.target 下的本机与服务器服务
  4. systemd 执行 multi-user.target 下的 /etc/rc.d/rc.local 文件
  5. systemd 执行 multi-user.target 下的 getty.target 及登入服务
  6. systemd 执行 graphical (图形模式)需要的服务
# 启动流程查看 (此方式适用于查看其它服务启动流程):
systemctl list-dependencies graphical.target
# 查看系统启动日志
more /var/log/boot.log
# 查看服务列表以及状态 failed的需要注意,可能会影响系统启动
systemctl

三、分区类型

MSDOS(MBR)

描述:
  1. 为了兼容于 Windows 的磁盘,因此使用的是支持 Windows 的 MBR(Master Boot Record, 主引导记录) 的方式来处理开机管理程序与分区表
  2. 开机管理程序纪录区与分区表则通通放在磁盘的第一个扇区,这个扇区通常是 512bytes 的大小
第一个扇区(512bytes):
  1. 主引导分区(Master Boot Record, MBR):可以安装开机管理程序的地方,有 446 bytes
  2. MBR分区表(partition table):记录整颗硬盘分区的状态,有 64 bytes
    1)最多仅支持四组分区记录,即只支持4个主分区(Primary)或者扩展分区(Extended)
概念:
  1. 其实所谓的『分区』只是针对那个 64 bytes 的分区表进行设定
  2. 硬盘默认的分区表仅能写入四组分区信息
  3. 四组分区信息我们称为主要(Primary)或扩展(Extended)分区
  4. 分区的最小单位『通常』为磁柱(cylinder),磁柱是同一磁道组成的柱状面
  5. 当系统要写入磁盘时,一定会参考磁盘分区表,才能针对某个分区进行数据的处理
分区:
  1. 1-4 分区为主分区或扩展分区,扩展分区不能格式化,且只能有一个
  2. 主分区与扩展分区共计最多可以有四个(硬盘的限制)
  3. 扩展分区最多只能有一个(操作系统的限制)
  4. 逻辑分区是由扩展分区持续切割出来的分区槽,逻辑分区号从5开始
  5. 能够被格式化作为数据存取的分区槽为主要分区与逻辑分区,扩展分区无法格式化
  6. 逻辑分区的数量依操作系统而不同,在 Linux 系统中 SATA 硬盘已经可以突破 63 个以上的分区限制
限制:
  1. 由于单个分区16bytes,操作系统无法抓取到 2.2T 以上的磁盘容量
  2. MBR 仅有一个区块,若被破坏后,经常无法或很难恢复
  3. MBR 内的存放开机管理程序的区块仅 446bytes,无法容纳较多的程序代码

GPT 磁盘分区表(partition table)

LBA:

过去扇区512bytes,现在已存在4K扇区,为了兼容于所有的磁盘,因此在扇区的定义上面,大多会使用所谓的逻辑区块地址(Logical Block Address, LBA)来处理

GPT:
  1. 将磁盘所有区块以此 LBA(预设为 512bytes 喔!) 来规划,而第一个 LBA 称为 LBA0 (从0 开始编号)
  2. GPT 使用了 34 个 LBA 区块来纪录分区信息
  3. GPT 磁盘的最后 33 个 LBA 也拿来作为另一个备份
LBA0 兼容区块
  1. 一个就是跟之前 446 bytes 相似的区块,储存了第一阶段的开机管理程序
  2. 在原本的分区表的记录区内,这个兼容模式仅放入一个特殊标志的分区,用来表示此磁盘为 GPT 格式

#####LBA1 (GPT 表头纪录)

  1. 纪录了分区表本身的位置与大小
  2. 纪录了备份用的 GPT 分区
  3. 放置了分区表的检验机制码 (CRC32)
  4. 操作系统可以根据这个检验码来判断 GPT 是否正确
  5. 若有错误,还可以透过这个纪录区来取得末尾备份的 GPT区块恢复
LBA2-33 (实际纪录分区信息处)
  1. 从 LBA2 区块开始,每个 LBA 都可以纪录 4 笔分区纪录
  2. 总共可以有 4*32 = 128 笔分区纪录
  3. 每个 LBA 有 512bytes
  4. 每笔纪录用到 128bytes 的空间
    1)纪录所需要的标识符与相关的纪录
    2)GPT 在每笔纪录中分别提供了 64bits 来记载开始/结束的扇区号码
    3)GPT 分区表对于单一分区最大容量限制2 ^ 64 * 512bytes =8ZB (这个不确定)

四、一些概念

Boot loader(开机管理程序):

描述:

1、操作系统安装在 MBR 上面的一套软件
2、由于MBR 仅提供446bytes ,开机管理程序是非常小而美的
3、开机管理程序除了可以安装在 MBR 之外,还可以安装在每个分区的启动扇区(boot sector)

作用:

1、提供选单:用户可以选择不同的开机项目,这也是多重引导的重要功能
2、载入核心文件:直接指向可开机的程序区段来开始操作系统
3、转交其他 loader:将开机管理功能转交给其他 loader 负责

总结:

1、每个分区都可以拥有自己的启动扇区(boot sector)
2、实际可开机的核心文件是放置到各分区内的
3、loader 只会认识自己的系统槽内的可开机核心文件,以及其他 loader 而已
4、loader 可直接指向或者是间接将管理权转交给另一个管理程序

其他

1、Linux 在安装的时候,你可以选择将开机管理程序安装在 MBR 或各别分区的启动扇区,Linux 的loader 可以手动设定
2、Windows 在安装的时候,安装程序会主动的覆盖掉 MBR 以及自己所在分区的启动扇区,且不能手动选择
3、所以一般多系统,先安装Windows 再安装Linux ,避免Windows覆盖MBR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值