Sirius
Sirius

目录

linux如何不进入bios切换efi启动顺序

在 Linux 系统下,您可以使用 efibootmgr 这个命令行工具来列出和管理 UEFI 启动项。这个工具允许您查看当前的启动顺序、每个启动项的详细信息,以及修改它们。

在大多数现代 Linux 发行版中,如果您的系统是以 UEFI 模式安装的,efibootmgr 通常已经预装。如果尚未安装,您可以使用您的发行版的包管理器来安装它。

  • Debian/Ubuntu/Linux Mint 等衍生发行版:

    Bash

    sudo apt update
    sudo apt install efibootmgr
  • Fedora/CentOS/RHEL 等衍生发行版:

    Bash

    sudo dnf install efibootmgr
  • Arch Linux/Manjaro 等衍生发行版:

    Bash

    sudo pacman -S efibootmgr

要列出当前的 UEFI 启动项,只需在终端中以 root 权限运行 efibootmgr 命令。

Bash

sudo efibootmgr

输出示例:

BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0000,0002
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002* UEFI: SanDisk Extreme Pro, Partition 1

efibootmgr 的输出包含了几个关键部分:

  • BootCurrent: 显示当前启动会话所使用的启动项编号。在上面的例子中,系统是通过 Boot0001 (ubuntu) 启动的。

  • Timeout: 表示在启动默认条目之前,启动菜单将显示的秒数。

  • BootOrder: 这是最重要的部分,它定义了固件尝试启动设备和操作系统的顺序。这是一个以逗号分隔的列表,固件会按照这个顺序依次尝试每个启动项。在上面的例子中,它会首先尝试 0001 (ubuntu),如果失败,则尝试 0000 (Windows Boot Manager),然后是 0002

  • 启动项列表 (BootXXXX): 每一行都代表一个 UEFI 启动项。

    • BootXXXX: 每个启动项都有一个唯一的四位十六进制编号。

    • * (星号): 表示该启动项是活动的。一个非活动的启动项不会被包含在 BootOrder 中,也不会被系统尝试启动。

    • 描述: 启动项编号后面是该启动项的标签或描述,例如 “ubuntu” 或 “Windows Boot Manager”。

如果您想查看每个启动项更详细的信息,包括其对应的设备和 EFI 文件的路径,可以使用 -v--verbose 选项:

Bash

sudo efibootmgr -v

详细输出示例:

BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0000,0002
Boot0000* Windows Boot Manager	HD(1,GPT,abcdef12-3456-7890-abcd-ef1234567890,0x800,0x100000)/File(\EFI\Microsoft\Boot\bootmgfw.efi)WINDOWS.........x...B.C.D.O.B.J.E.C.T.=.{...}...
Boot0001* ubuntu	HD(1,GPT,abcdef12-3456-7890-abcd-ef1234567890,0x800,0x100000)/File(\EFI\ubuntu\shimx64.efi)
Boot0002* UEFI: SanDisk Extreme Pro, Partition 1	PciRoot(0x0)/Pci(0x14,0x0)/USB(10,0)/HD(1,MBR,0x12345678,0x800,0x1d1c800)..BO

在详细输出中,可以看到每个启动项指向的硬盘分区(通过分区的 GUID 或其他标识符)以及具体的 .efi 启动文件的路径。这对于调试启动问题非常有用。


修改启动顺序主要通过 -o--bootorder 选项来实现。

首先,运行 efibootmgr 来查看当前的启动项和顺序,确定你想要设置的新顺序。

Bash

sudo efibootmgr

示例输出:

BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0000,0002
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002* UEFI: SanDisk Extreme Pro, Partition 1

在这个例子中,当前的启动顺序是 0001 (ubuntu) -> 0000 (Windows) -> 0002 (U盘)。

假设你希望将默认启动项从 Ubuntu 改为 Windows Boot Manager。这意味着你需要将 0000 放在 BootOrder 的最前面。

efibootmgr -o 的语法是:

sudo efibootmgr -o XXXX,YYYY,ZZZZ,...

其中 XXXX, YYYY, ZZZZ 是你希望设置的启动项编号,用逗号隔开,并且不能有空格

根据上面的示例,如果你想让 Windows (0000) 成为第一启动项,Ubuntu (0001) 成为第二启动项,可以运行以下命令:

Bash

sudo efibootmgr -o 0000,0001,0002

重要提示:

  • 包含所有你需要的项-o 选项会完全覆盖旧的 BootOrder。请确保将所有你希望保留在启动顺序中的条目都包含进去。如果遗漏了某个编号,它将不会出现在启动顺序中(尽管该启动项本身不会被删除)。

  • 编号格式:编号必须是四位数的十六进制,例如 0001000A

修改完成后,再次运行 efibootmgr 来确认 BootOrder 是否已经更新为你想要的样子。

Bash

sudo efibootmgr

修改后的预期输出:

BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0000,0001,0002
Boot0000* Windows Boot Manager
Boot0001* ubuntu
Boot0002* UEFI: SanDisk Extreme Pro, Partition 1

可以看到 BootOrder 已经成功修改。现在,当你下次重启计算机时,UEFI 固件会首先尝试加载 Windows Boot Manager。

如果你只是想让系统下一次启动时使用一个特定的启动项,而不想永久改变默认的启动顺序,可以使用 -n--bootnext 选项。

例如,你想在下次重启时从 U 盘 (0002) 启动,以进行系统维护,可以运行:

Bash

sudo efibootmgr -n 0002

执行后,efibootmgr 的输出会增加一行 BootNext: 0002。当计算机重启时,它会优先尝试 BootNext 指定的条目。这个设置是一次性的,在成功启动后,该设置会自动清除,下次启动时依然会恢复到 BootOrder 定义的顺序。

你也可以激活或禁用某个启动项。一个被禁用的启动项不会出现在 BootOrder 中,也无法被设置为 BootNext

  • 禁用 (Deactivate) 启动项,使用 -A 选项。例如,禁用 Windows Boot Manager (0000):

    Bash

    sudo efibootmgr -A -b 0000

    -b 用于指定要操作的启动项编号。

  • 激活 (Activate) 启动项,使用 -a 选项。例如,重新激活它:

    Bash

    sudo efibootmgr -a -b 0000

可以看到,被禁用的启动项后面的 * (星号) 会消失。

操作 命令示例 描述
列出启动项 sudo efibootmgr 显示当前启动顺序和所有启动项。
修改启动顺序 sudo efibootmgr -o 0000,0001,0002 将启动顺序设置为 Windows -> Ubuntu -> U盘。
设置下次启动 sudo efibootmgr -n 0002 下次重启时,临时从 U盘 启动。
激活启动项 sudo efibootmgr -a -b 0001 激活编号为 0001 的启动项 (ubuntu)。
禁用启动项 sudo efibootmgr -A -b 0001 禁用编号为 0001 的启动项。

通过这些命令,你可以在 Linux 环境下灵活地管理你的 UEFI 启动顺序。操作前请务必确认启动项编号,避免设置错误导致系统无法正常启动。