LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 238|回复: 0

boot loader 的两个 stage

[复制链接]
发表于 2024-1-16 15:56:24 | 显示全部楼层 |阅读模式
曾经讲到,在 BIOS 读完信息后,接下来会到第一个开机设备的 MBR 去读取 boot loader 。该 boot loader 可以具有选单功能、字节加载核心文件以及控制权移交功能等,系统必须要有 loader 才能够加载该操作系统的核心。

但是 MBR 是整个硬盘的第一个 sector 内的一个区块,整个大小才 446 bytes 。即使 GPT 也没有很大的扇区来存储 loader 数据,那么功能强悍的 loader 是怎么放进去的?

为了解决这个问题,Linux 将 boot loader 的程序代码执行与设置值加载分成两个阶段(stage)执行

Stage 1:执行 boot loader 主程序

第一阶段执行 boot loader 的主程序,该主程序必须被安装在开机区,即 MBR 或则是 boot sector,但是因为 MBR 是在太小了,所以通常仅安装 boot loader 的最小主程序,并没有安装 loader 的相关配置文件

Stage 2:主程序加载配置文件

第二阶段通过 boot loader 加载所有配置文件与相关的环境参数文件,包括文件系统定义与主要配置文件 grub.cfg,一般来说,配置文件都在 /boot 下

与 grub2 相关的都放在 /boot/grub2

[root@study ~]# ls -l /boot/grub2
total 32
-rw-r--r--. 1 root root   84 Oct  4 18:31 device.map                        # grub2 的设备对于文件
drwxr-xr-x. 2 root root   25 Oct  4 18:31 fonts                                                # 开机过程中的画面会使用到的字体数据
-rw-r--r--. 1 root root 4309 Oct  4 18:32 grub.cfg                                # grub2 的主配置文件,非常重要
-rw-r--r--. 1 root root 1024 Oct  4 18:32 grubenv                                        # 一些环境区块的符号
drwxr-xr-x. 2 root root 8192 Oct  4 18:31 i386-pc                                        # 针对一般 x86 PC 所需要的 grub2 的相关模块
drwxr-xr-x. 2 root root 4096 Oct  4 18:31 locale                                        # 语系相关数据


[root@study ~]# ls -l /boot/grub2/i386-pc/
acpi.mod                                # 电源管理有关的模块
ata.mod                                        # 磁盘有关的模块
chain.mod·                        # 进行 loader 控制全移交的相关模块
command.lst                 # 一些指令相关性的列表
efiemu32.o                        # 与 uefi BIOS 先关的模块
efiemu64.o
efiemu.mod
ext2.mod                                # EXT w文件系统家族相关模块
fat.mod                                        # FAT 文件系统模块
gcry_sha256.mod        # 常见的加密模块
iso9660.mod                        # 光盘文件系统模块
lvm.mod                                 # LVM 文件系统模块
mdraid09.mod                # 软件磁盘阵列模块
minix.mod                                # MINIX 相关文件系统模块
msdospart.mod                # 一般 MBR 分区表
part_gpt.mod    # GPT 分区表
part_msdos.mod        # MBR 分区表
scsi.mod                                # SCSI 相关模块
usb_keyboard.mod        # usb 模相关模块
usb.mod
vga.mod                                        # VGA 显卡相关模块
xfs.mod                                        # XFS 文件系统模块
。。。。 等等很多模块



        Copied!

/boot/grub2 目录下最重要的是 grub2.cfg 配置文件,以及各种文件系统的定义。所以 loader 读取了这种文件系统定义数据后,就能够认识文件系统并读取在该文件系统内的核心文件了

从上面的文件来看, grub2 认识的文件系统与磁盘分区格式真的非常多,正因为如此,grub2 才会取代 Lio/grub 这个老婆的 boot loader

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表