引导加载程序连接固件发现与内核执行。GRUB 常用于 Linux PC,但 systemd-boot、U-Boot、固件直接加载 EFI stub 内核等设计会实现这一角色的不同部分。
启动系统 · 第 3 课
启动过程:引导加载程序
了解引导加载程序如何选择 Linux 启动内容、构造内核命令行并移交控制权。
选择启动内容
加载程序条目可以标识:
- Linux 内核映像
- 可选的 initramfs 或传统 initrd 映像
- 内核命令行
- 平台特有元数据或另一个操作系统的加载程序
GRUB 可以显示多个内核和恢复条目。只有匹配的模块与 initramfs 仍然可用且经过测试时,后备内核才真正有用。加载程序通过自身支持的存储和文件系统模块读取文件,并不依赖尚未运行的 Linux VFS。
Linux 引导加载程序通常把控制权交给什么?
内核命令行参数
加载程序传递一段文本命令行,由内核和早期用户空间解析。常见示例包括:
root=...:标识预期根文件系统或早期用户空间的来源说明ro或rw:请求初始根目录挂载模式quiet:减少内核控制台消息init=...:为专门恢复请求另一个第一个用户空间程序- 由 initramfs 工具解释的发行版特有
rd.*参数
initrd 通常是指定映像的加载程序指令,而不是通用内核参数。BOOT_IMAGE= 可能出现在某些 GRUB 配置生成的命令行中,但它并不是加载内核的机制。
使用以下命令检查当前启动所用命令行:
$ cat /proc/cmdline
root= 内核命令行参数有什么用途?
quiet 参数通常请求什么?
临时编辑与恢复
GRUB 通常允许获授权的控制台用户编辑一个只用于本次启动的条目,常通过菜单显示的编辑按键进入。这可用于移除 quiet、选择恢复参数或纠正错误的根目录标识符。具体界面和授权方式有所不同,尤其是在启用安全启动或 GRUB 密码保护时。
命令行参数可能通过 /proc/cmdline、启动日志和崩溃报告暴露敏感文本,也可能削弱安全性或使系统无法启动。绝不能把密钥放在其中,并应保留已知可用条目和控制台恢复路径。
在 GRUB 菜单中交互编辑条目以启动一次,通常具有什么特性?
持久 GRUB 配置
发行版通常会根据模板、默认值、脚本和发现的内核生成最终 GRUB 配置。除非发行版明确规定此流程,否则不要直接编辑生成的 grub.cfg;重新生成可能覆盖它。
应对配置源进行一项限定范围的更改,运行发行版文档规定的重新生成命令,检查输出并测试,同时保留较旧的已知可用条目和可启动恢复介质。Debian、Fedora、UEFI 和 BIOS 安装所用命令和输出路径会有所不同。
为什么直接编辑生成的 grub.cfg 通常不可靠?
只能在具备恢复能力的实验环境中使用自定义 GRUB2 引导菜单。
课程已完成
你已完成 启动过程:引导加载程序
现在,你可以区分加载程序指令与内核命令行参数。
识别内核、initramfs、命令行和备选条目。
根据实际用途使用
root=、ro和quiet。通过
/proc/cmdline检查当前启动参数。把交互编辑视为临时且涉及安全的操作。
通过发行版工作流程更改持久的生成配置。