Linux 发行版通常将可启动的内核构件存放在 /boot 下,但 UEFI 和引导加载程序规范布局也可能把构件放在 EFI 系统分区或扩展启动分区中,并挂载到 /boot、/boot/efi 或 /efi 等路径。应检查挂载点和加载程序配置,而不是假定所有系统都使用同一路径。
内核 · 第 5 课
内核的位置
了解发行版将内核映像、initramfs 文件、配置、符号和按版本划分的模块放在哪里。
`/boot` 下按版本划分的文件
传统的发行版布局可能包含:
vmlinuz-KERNEL_RELEASE:可启动的 Linux 内核映像initrd.img-KERNEL_RELEASE或initramfs-KERNEL_RELEASE.img:早期用户空间映像config-KERNEL_RELEASE:构建该发行版内核时使用的配置System.map-KERNEL_RELEASE:内核构建生成的符号地址映射
具体名称各不相同。现代发行版中,名称带 initrd 的文件通常包含 initramfs 归档。vmlinuz 这一命名惯例并不能说明确切的内部压缩方式或平台启动格式;应使用发行版工具检查。
带版本号的 vmlinuz-* 文件通常包含什么?
初始 RAM 文件系统与构建元数据
initramfs 必须包含与其匹配的内核和根存储设计在早期启动阶段所需的模块与工具。文件名匹配并不足够;过期或生成失败的文件仍可能造成无法使用的启动项。
config-* 有助于了解哪些功能被内置、编译为模块或省略。System.map-* 可辅助符号解析和调试,但地址随机化、拆分的调试信息以及发行版工具都会影响其用法。这些是辅助构件,并非替代内核。
为什么 initramfs 与特定内核版本和系统配置相关联?
按版本划分的内核模块
当前运行版本的可加载模块通常位于:
$ printf '/lib/modules/%s\n' "$(uname -r)"
在合并文件系统布局中,该路径可能解析到 /usr/lib/modules/KERNEL_RELEASE。每个已安装内核都需要兼容的模块树和依赖索引。modprobe 使用特定版本的元数据,而不会在整个磁盘上任意搜索 .ko 文件。
按照惯例,哪个目录存放当前运行内核版本的模块?
统一内核映像与固件路径
统一内核映像(Unified Kernel Image,UKI)是一个经过签名的 EFI 可执行文件,可以捆绑内核、initrd、命令行和元数据。UKI 通常存放在 EFI 可访问的启动位置,而不是表示为独立的 vmlinuz 和 initramfs 文件。
因此,传统 /boot 布局看起来为空,并不能证明系统未安装内核。应使用 findmnt、软件包数据库、启动管理器工具和加载程序配置来确定实际使用的构件。
统一内核映像可以组合哪些内容?
安全管理空间
如果启动文件系统已满,应先确定已挂载的启动路径,并查询每个构件归哪个软件包所有。使用软件包管理器提供的内核清理流程,保留当前运行的内核和一个确认可用的备用内核,重新生成或检查启动项,最后验证可用空间。
不要仅根据文件年龄手动删除 vmlinuz、initramfs、UKI 或模块树。即使某个文件当前没有运行,它也可能是唯一可启动的恢复项。
课程已完成
你已完成 内核的位置
现在,你可以将一个内核软件包对应到它的启动构件和模块构件。
检查实际的
/boot和 EFI 相关挂载点。区分内核映像、initramfs、配置文件和符号映射。
将模块树与确切的内核版本相匹配。
考虑统一内核映像和发行版特有的布局。
只有制定经过验证的软件包与备用启动方案后,才释放启动空间。