最权威的判断依据是/sys/firmware/efi目录是否存在:存在则为UEFI启动,不存在则为Legacy BIOS启动,因其由内核在UEFI模式下自动挂载,是固件接口的权威体现。

Linux 下判断系统是 BIOS 还是 UEFI 启动,关键不在于“看差异”,而在于**确认当前实际生效的启动模式**。因为 BIOS 和 UEFI 是固件层面的行为,系统运行后只有一种真实状态——要么是 UEFI 模式启动,要么是 Legacy BIOS(或称 CSM)模式启动。所谓“详细差异”,其实是两种启动机制在 Linux 环境中留下的可观测痕迹,而非并存可切换的选项。
看 /sys/firmware/efi 目录是否存在
这是最权威、内核级的判断依据,无需额外工具:
- 执行 ls /sys/firmware/efi:若列出 efivars/、runtime-map/、config_table/ 等子目录 → 确认为 UEFI 启动
- 若提示 No such file or directory → 系统以传统 BIOS 模式启动
- 注意:该目录由内核在 UEFI 启动时自动挂载,不可手动创建或伪造;即使权限受限或 efivars 为空,只要目录存在就足以确认 UEFI
用 efibootmgr 验证 EFI 变量支持
该命令依赖 /sys/firmware/efi/efivars,是用户空间的辅助验证手段:
- 运行 sudo efibootmgr:成功输出 BootCurrent、BootOrder 及带 * 的启动项(如 Boot0001* ubuntu)→ UEFI 模式正常工作
- 若报错 EFI variables are not supported on this system. → 基本可断定为 BIOS 启动(极少数 UEFI 固件禁用变量,但极为罕见)
- 不要仅因能安装 efibootmgr 就误判:BIOS 系统也能装这个包,但必然失败
查内核启动日志中的固件标识
dmesg 记录了开机瞬间的原始信息,不受运行时干扰:
- 执行 dmesg | grep -i "efi\|bios"
- 出现 EFI v[数字].xx by [厂商](如 EFI v2.80 by American Megatrends)→ UEFI 启动
- 仅见 BIOS-provided physical RAM map 且无任何 EFI 字样 → BIOS 启动
- 注意:dmesg 缓冲区可能被刷掉,建议刚开机后立即检查;可用 dmesg -T | head -30 查看带时间戳的前30行
别被分区或挂载点误导
常见误区来源,可靠性低,容易误判:
- /boot/efi 是否存在或有内容? —— 仅反映 ESP 分区是否被挂载,不代表启动模式。有人把 ESP 挂到 /mnt/efi 备份,/boot/efi 就不存在;UEFI 系统也可不挂载它
- 硬盘是 GPT 还是 MBR? —— GPT 常配 UEFI,但 UEFI 规范允许从 MBR 启动;MBR 硬盘在 CSM 模式下也能启动,此时 /sys/firmware/efi 仍不存在
- GRUB 文件路径是 /boot/grub2/ 还是 /boot/efi/EFI/*/grubx64.efi? —— 后者是 UEFI 典型特征,但需结合实际启动行为判断;BIOS 系统也可能手动复制 .efi 文件过去,却不使用


















