如何判断我的系统是以EFI/UEFI还是BIOS方式启动的?

如何确定运行Ubuntu的系统是使用EFI/UEFI还是BIOS引导的?

有趣的问题。虽然不是完全重复,但可以尝试在这里找到类似问题的答案。 - Tom Brossman
2http://unix.stackexchange.com/questions/148356/how-to-know-if-im-booting-using-uefi - Ciro Santilli OurBigBook.com
3个回答

最简单的方法是检查是否存在/sys/firmware/efi。如果您使用传统的 BIOS 引导,它将不会显示。

#!/bin/bash
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS

在QEMU 2.0.0、OVFM和Ubuntu 14.04上进行了测试:https://github.com/cirosantilli/runlinux/tree/9f03d08838705082c0e316dcff6a199bd4edac0c - Ciro Santilli OurBigBook.com
适用于Ubuntu 16.04和Fedora 24。 - geek1011
5挑剔一下,这个表达式是POSIX标准的,所以应该在各种不同的shell中都能工作,而不仅仅是bash - iruvar
也适用于Ubuntu 20.04。 - Igor

已弃用

下面的答案是一种可能不总是有效的方法。
请改用基于/sys/firmware/efiColin的答案


判断系统是通过EFI引导还是BIOS引导非常简单:
只需使用命令"dmesg | grep "EFI v""即可。
  • 如果系统是通过EFI引导的,将返回如下一行内容:
    [ 0.000000] EFI v2.00 by American Megatrends
  • 如果没有返回任何内容,则表示系统是通过BIOS引导的。
以下是基于grep退出代码的bash脚本用法示例:
...
dmesg | grep -q "EFI v"    # -q告诉grep不输出任何内容
if [ $? -eq 0 ]      # 检查退出代码;如果为0,则表示EFI引导,否则为BIOS引导
then
    echo "您正在使用EFI引导。"
  else
    echo "您正在使用BIOS引导。"
fi
...
源自:若要确定 EFI 系统是否正在使用传统 BIOS 模拟,以及有关测试 EFI 和 EFI 兼容性的更多信息,以及一些 EFI 供应商/版本的字符串,请参阅 Ubuntu Developer Summit for Precise 的此页面

2我会简化成if dmesg | grep -Fq "EFI v"; then ...。没必要再运行[``]命令来测试成功或失败。$?主要用于检查特定错误。 - geirha
3这是脆弱的,因为无法保证所搜索的字符串是由所需功能生成的。 - Thorbjørn Ravn Andersen
@ThorbjørnRavnAndersen:Ubuntu开发者峰会的人似乎认为这是规范的一部分...你能提供你所主张的来源或参考资料吗? - ish
2@izx,任何脚本都有可能将“EFI v”作为其他内容的一部分进行编写。如果这种情况发生在BIOS机器上,那么这将是一个误报。 - Thorbjørn Ravn Andersen
2最好不要在内核日志中搜索文本,因为它可能会发生变化。最好查看/sys/firmware/efi。 - Colin Ian King
2我想提一下,这是获取EFI版本的好方法! - Alexander Trauzzi
真不敢相信... ls: 无法访问 '/etc/firmware':没有那个文件或目录,但是 [0.000000] efi: EFI v2.60 by American Megatrends。这是在Arch上的情况。 - Vorac
1@Vorac,我相信被接受的方法是查看/sys/firmware/efi,而不是/etc/firmware。你有检查过前者是否存在吗? - tgm1024--Monica was mistreated

检查系统是否使用UEFI或ROM BIOS引导的Python代码:

import os, sys
def main():
    if os.path.exists("/sys/firmware/efi"):
        print("\n\n系统已使用UEFI引导!")
    else:
        print("\n\n系统已使用ROM BIOS引导")
main()
sys.exit(0)

仅限Python2.mumble吗? - tgm1024--Monica was mistreated