linux如何不进入bios切换efi启动顺序
在 Linux 系统下,您可以使用 efibootmgr 这个命令行工具来列出和管理 UEFI 启动项。这个工具允许您查看当前的启动顺序、每个启动项的详细信息,以及修改它们。
1. 安装 efibootmgr
在大多数现代 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
2. 列出 UEFI 启动项
要列出当前的 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
3. 解读输出信息
efibootmgr 的输出包含了几个关键部分:
-
BootCurrent: 显示当前启动会话所使用的启动项编号。在上面的例子中,系统是通过Boot0001(ubuntu) 启动的。 -
Timeout: 表示在启动默认条目之前,启动菜单将显示的秒数。 -
BootOrder: 这是最重要的部分,它定义了固件尝试启动设备和操作系统的顺序。这是一个以逗号分隔的列表,固件会按照这个顺序依次尝试每个启动项。在上面的例子中,它会首先尝试0001(ubuntu),如果失败,则尝试0000(Windows Boot Manager),然后是0002。 -
启动项列表 (
BootXXXX): 每一行都代表一个 UEFI 启动项。-
BootXXXX: 每个启动项都有一个唯一的四位十六进制编号。 -
*(星号): 表示该启动项是活动的。一个非活动的启动项不会被包含在BootOrder中,也不会被系统尝试启动。 -
描述: 启动项编号后面是该启动项的标签或描述,例如 “ubuntu” 或 “Windows Boot Manager”。
-
4. 获取更详细的信息
如果您想查看每个启动项更详细的信息,包括其对应的设备和 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 选项来实现。
1. 列出当前的启动项
首先,运行 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盘)。
2. 使用 -o 选项设置新的启动顺序
假设你希望将默认启动项从 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。请确保将所有你希望保留在启动顺序中的条目都包含进去。如果遗漏了某个编号,它将不会出现在启动顺序中(尽管该启动项本身不会被删除)。 -
编号格式:编号必须是四位数的十六进制,例如
0001、000A。
3. 验证新的启动顺序
修改完成后,再次运行 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。
其他有用的操作
设置下一次启动项 (One-time Boot)
如果你只是想让系统下一次启动时使用一个特定的启动项,而不想永久改变默认的启动顺序,可以使用 -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 启动顺序。操作前请务必确认启动项编号,避免设置错误导致系统无法正常启动。