努力
加油

Ubuntu启动时提示EFI stub: Loaded initrd from EFI configuration是什么意思?

这句话本身不是报错,而是一个状态提示。简单来说,它的意思是:Linux 内核(通过 EFI Stub)成功从 UEFI 固件配置中读取到了 initrd(初始内存盘)文件的路径,并准备加载它。

在大多数情况下,你可以直接忽略这个信息,继续等待系统启动。但如果你的系统卡在这里不动了,或者你想深入理解背后的机制,我们需要拆解一下这个过程。

1. 核心概念拆解

要理解这句话,得先搞清楚三个角色:

  • EFI Stub (EFI 存根):
    现代 Linux 发行版(包括 Ubuntu)的内核镜像(vmlinuz)不再是一个纯粹的二进制文件,而是一个可以直接被 UEFI 固件执行的 ELF 格式文件。这意味着你不需要 GRUB 这样的传统引导程序,UEFI 固件可以直接调用内核。这就是所谓的 "EFI Stub"。
  • initrd / initramfs:
    这是“初始 RAM 磁盘”。因为内核太精简,无法驱动所有的硬件(比如 NVMe 硬盘、LVM、加密磁盘等),所以需要先加载一个包含必要驱动和工具的临时文件系统。内核挂载它,用它来挂载真正的根文件系统,然后才进入正常的 Linux 环境。
  • EFI Configuration:
    这里通常指的是 UEFI NVRAM 中的变量,或者更常见的是,GRUB 传递给内核的命令行参数中的 initrd= 部分。当使用 EFI Stub 时,这些信息需要通过特定的方式告诉内核。

2. 为什么会出现这个提示?

这个提示来自 Linux 内核源码中的 efi-stub 代码路径。当内核以 EFI 可执行文件的方式被 UEFI 固件加载时,它会检查自己是否收到了关于 initrd 的信息。

如果收到了,它就会打印这条日志:

EFI stub: Loaded initrd from EFI configuration

这通常发生在以下几种场景:

场景 A:正常启动(最常见)

你使用的是较新的 Ubuntu 版本(如 20.04/22.04/24.04),并且启用了 Direct Boot 模式(即不经过 GRUB,由 UEFI 直接引导内核)。在这种情况下,GRUB 或者安装程序会将内核和 initrd 的路径信息写入 UEFI 变量或命令行。内核启动时检测到这些信息,就会打印此提示,然后继续加载 initrd。

结论:如果你能看到后续的黑底白字滚动,最后进入登录界面,那这就是完全正常的行为,无需任何操作。

场景 B:启动卡住或黑屏

如果系统停在这个提示后不再有任何反应,或者反复重启,问题通常不在于“加载 initrd”这个动作本身,而在于加载之后。可能的原因包括:

  1. 显卡驱动冲突:NVIDIA 闭源驱动在早期初始化阶段导致挂起。这是最常见的“假死”原因。
  2. initrd 构建错误:update-initramfs 生成的文件损坏或不完整,导致内核加载后无法找到根文件系统。
  3. UEFI 变量混乱:之前多次重装系统或切换引导方式(GRUB vs Direct Boot),导致 NVRAM 中的启动项指向了错误的内核或 initrd。
  4. Secure Boot 干扰:虽然较少见,但某些签名验证失败可能导致内核模块加载异常。

3. 如何排查和解决?

如果你的系统卡在提示处,可以尝试以下步骤:

第一步:确认是否为 Direct Boot

检查你是否有意禁用了 GRUB。在 Ubuntu 中,可以通过以下命令查看当前引导方式:

systemctl status systemd-boot
# 或者直接看 /boot/efi/EFI/ubuntu/grubx64.efi 是否存在

如果你希望使用传统的 GRUB 引导(更稳定、更容易调试),可以重新安装 GRUB:

sudo apt install grub-efi-amd64-signed shim-signed
sudo update-grub

重启后,系统将不再显示 EFI stub 提示,而是由 GRUB 接管。

第二步:检查内核参数

如果必须使用 Direct Boot,确保内核参数正确。编辑 /etc/default/grub,确保 GRUB_CMDLINE_LINUX_DEFAULT 中包含必要的参数(如 quiet splash),然后更新:

sudo update-grub
sudo update-initramfs -u

第三步:显卡驱动问题(针对 NVIDIA 用户)

如果是 NVIDIA 显卡导致卡死,尝试在内核启动参数中添加 nomodeset:

  1. 在 GRUB 菜单(如果有)按 e 编辑启动项。
  2. 找到 linux 开头的那一行,在末尾添加 nomodeset。
  3. 按 F10 启动。
    如果能成功进入系统,说明是显卡驱动问题。需要在系统中安装专有驱动或更新内核版本。

第四步:重建 initramfs

有时 initrd 文件损坏会导致加载后无法继续。强制重建:

sudo update-initramfs -u -k all

4. 总结

  • “EFI stub: Loaded initrd from EFI configuration” 是正常日志,表示内核找到了 initrd 文件。
  • 如果系统能正常进入桌面,请忽略它,这是现代 Linux 高效启动的标志之一。
  • 如果系统卡在此处,问题大概率出在显卡驱动、initrd 损坏或 UEFI 引导配置冲突上,而非该提示本身。

建议优先检查显卡驱动兼容性,其次考虑回归传统 GRUB 引导以获得更好的稳定性控制。