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

Linux系统当前是UEFI还是Legacy BIOS启动,最直接可靠的判断依据就是内核是否挂载了EFI固件接口——/sys/firmware/efi 目录是否存在且可读。其他方法要么依赖外部工具(可能未安装),要么存在误判风险(比如GPT分区不等于UEFI启动)。
检查 /sys/firmware/efi 目录是否存在
这是内核层面最权威的信号:UEFI启动时,内核会自动挂载EFI运行时服务到该路径;Legacy BIOS下该目录根本不会创建。
- 运行
ls /sys/firmware/efi:若输出类似config_table/ efivars/ fw_platform_size/ runtime-map/等内容 → UEFI - 若提示
No such file or directory→ Legacy BIOS - 脚本中可直接用:
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS - 注意:仅检查存在性即可,无需读取子目录内容;即使
efivars为空或权限受限,只要目录存在就足以确认UEFI
efibootmgr 命令输出是否正常
efibootmgr 是用户空间工具,它通过读取/sys/firmware/efi/efivars与固件通信。它的行为能辅助验证,但不能单独作为唯一依据。
- 执行
sudo efibootmgr:若显示BootCurrent、BootOrder和带*号的启动项(如Boot0001* ubuntu)→ UEFI - 若报错
EFI variables are not supported on this system.→ 大概率是Legacy BIOS(极少数UEFI固件禁用了变量支持,但非常罕见) - 注意:某些BIOS系统也能安装
efibootmgr,但必然报错;不要因为命令“能运行”就误判为UEFI
查看 dmesg 中的内核启动日志
内核在初始化阶段会打印固件类型信息,这是启动瞬间的原始记录,不受用户空间干扰。
- 运行
dmesg | grep -i "efi\|bios" - 看到类似
[0.000000] EFI v2.80 by AMI或efi: EFI v2.xx→ UEFI - 只看到
BIOS-e820:、BIOS-provided physical RAM map且无任何EFI字样 → Legacy BIOS - 注意:
dmesg缓冲区可能被刷掉,建议在刚启动后尽快检查;若日志滚动过快,可用dmesg -T | head -30查看带时间戳的前30行
为什么不要依赖 /boot/efi 或分区表类型?
这两个常被误用,实际可靠性低,容易导致错误结论。
-
/boot/efi只是ESP(EFI系统分区)的常见挂载点,但可以被手动挂载、卸载,甚至完全不挂载;目录存在 ≠ UEFI启动(例如有人把ESP挂载到/mnt/efi做备份) - GPT分区表只是UEFI的常见配套,但UEFI规范本身允许从MBR启动(虽然少见);反过来,GPT硬盘在CSM/Legacy模式下也能启动(此时
/sys/firmware/efi仍不存在) -
fdisk -l显示Disk label type: gpt不能直接推导启动模式,必须结合固件接口状态
真正关键的只有内核是否暴露了EFI接口——也就是/sys/firmware/efi这个目录。其他所有方法都是围绕它展开的佐证或fallback。一旦发现该目录存在,哪怕efibootmgr报错或/boot/efi未挂载,也应认定为UEFI启动。这点在双系统、重装引导或调试启动问题时最容易被忽略。











