使用 efibootmgr 管理 UEFI 启动项:修复丢失的启动项

适用场景:Linux/Windows 双系统环境中 Linux 启动项从 BIOS 启动菜单消失(重装 Windows、清空 NVRAM、主板更换后)。你会学到用 efibootmgr 查看 NVRAM 启动项、定位 EFI 分区、创建/删除启动项与调整启动顺序的完整流程。

概述

UEFI(统一可扩展固件接口)已取代传统 BIOS 成为现代计算机的标准引导方式。掌握 UEFI 启动项管理技术对多系统用户至关重要。本文将详细介绍如何使用 efibootmgr 工具修复丢失的启动项,特别是在 Linux/Windows 双系统环境中。

UEFI 基础概念

  • UEFI:统一可扩展固件接口,现代计算机标准固件
  • CSM:兼容性支持模块,用于启动传统 MBR 设备
  • 安全启动:仅支持 UEFI 启动的操作系统,Windows 7 等系统需关闭此功能
  • 纯 UEFI 模式:关闭 CSM 后仅支持 UEFI 启动设备

准备工作

当 Linux 启动项丢失时,推荐使用 Linux LiveCD 环境进行修复:

  1. 制作 Ubuntu LiveCD 启动 U 盘(比光盘启动更快)
  2. 从 U 盘启动进入 LiveCD 环境
  3. 打开终端准备操作

查看现有启动项

$ efibootmgr
BootCurrent: 0012
Timeout: 0 seconds
BootOrder: 0012,0010,0011,000F,000B,000A,0006,0007,0008,0009,000C,000D,000E
Boot0000 Setup
Boot0001 Boot Menu
# ... 更多启动项 ...
Boot000F* Windows Boot Manager
Boot0010* ubuntu
Boot0011* ubuntushim
Boot0012* opensuse-secureboot

输出说明:

  • BootCurrent:当前启动项
  • Timeout:启动菜单等待时间
  • BootOrder:启动顺序优先级
  • 各启动项按编号列出,星号表示有效项

定位 EFI 系统分区

$ sudo fdisk -l
设备        Start    末尾    扇区   Size 类型
/dev/sdb1    2048  206847  204800   100M EFI System          # EFI系统分区
/dev/sdb2   206848  468991  262144   128M Microsoft reserved
# ... 其他分区 ...

挂载并探索 EFI 分区

$ sudo mount /dev/sdb1 /mnt/    # 挂载EFI分区
$ sudo -i                       # 切换root用户
$ cd /mnt/EFI                   # 进入EFI目录
$ ls                            # 查看内容
Boot  Microsoft  opensuse  ubuntu

各目录内容概览:

  • Boot/:通用启动加载程序(bootx64.efi)
  • Microsoft/:Windows 启动文件
  • opensuse/:openSUSE 启动文件(grub.efi, shim.efi 等)
  • ubuntu/:Ubuntu 启动文件(shimx64.efi, grubx64.efi 等)

添加启动项

基本命令格式:

efibootmgr -c -w -L "描述标签" -d /dev/sdX -p Y -l \\EFI\\路径\\文件.efi

参数说明:

  • -c:创建新启动项
  • -w:立即写入 NVRAM
  • -L:启动项显示名称
  • -d:磁盘设备(如 /dev/sdb)
  • -p:EFI 分区号(通常是 1)
  • -l:EFI 文件路径(使用双反斜杠)

实际操作示例:

efibootmgr -c -w -L "Linux Rescue" -d /dev/sdb -p 1 -l \\EFI\\opensuse\\grubx64.efi

重要注意事项

  1. 避免使用通用启动文件:不要添加 /EFI/Boot/bootx64.efi,此文件可能被 Windows 覆盖
  2. 选择正确的 EFI 文件:应使用发行版特定目录下的文件(如 /EFI/ubuntu/shimx64.efi)
  3. 多系统引导顺序:最后安装的系统 GRUB 通常会管理所有系统启动项
  4. 测试添加的启动项:重启系统验证启动项是否正常工作

管理启动项

删除启动项

efibootmgr -b 0013 -B  # 删除编号0013的启动项

调整启动顺序

efibootmgr -o 0012,0010,0011,000F  # 设置启动顺序

设置超时时间

efibootmgr -t 5  # 设置5秒超时

验证与自查

  1. efibootmgr 输出中包含新添加的启动项编号,且带 * 星号(有效项)
  2. BootOrder 第一项就是你想默认启动的系统编号
  3. 重启后 BIOS 启动菜单/GRUB 界面出现对应系统,可正常进入
  4. 操作前先 efibootmgr -v 记录原有启动项,便于出错时恢复

总结

efibootmgr 是管理 UEFI 启动项的强大命令行工具,特别适合解决双系统启动项丢失问题。通过本文介绍的方法,您可以有效修复启动问题,维护多系统引导环境的稳定性。

提示:操作前请确保备份重要数据,修改启动项有一定风险,建议在了解各参数含义后再进行生产环境操作。

参考