如何检查 Linux 是否在具有 UEFI 的 PC 上以 CSM/Legacy/BIOS 模式启动?

如何检查 Linux 是否在具有 UEFI 的 PC 上以 CSM/Legacy/BIOS 模式启动?

我正在ssh对一台尚未有人实际接触到的电脑进行操作。说PC是2011年以后生产的,所以它肯定有 UEFI

问题是网络上的每个帖子都是关于检查 PC 是否有 UEFI 或 BIOS(例如如何知道我是否使用 UEFI 启动?),即不是我想知道什么。

 

我的问题很简单: 如何判断电脑是否UEFI,启动是否启用 CSM/Legacy/BIOS 模式?

 

更新1:有很多方法可以判断是否是 UEFI,但没有一个可以明确判断,因为它们都自相矛盾。

细节:

  • 驱动器是MBR
  • 根本没有 ESP 分区的迹象(fstab 等)
  • /boot根本没有 EFI 文件打开的迹象
  • cat /sys/firmware/efi/fw_platform_size给出了64,如果在另一台电脑上处于 CSM 模式,则根本无法工作。
  • update-grub给了Adding boot menu entry for EFI firmware configuration
  • efibootmgr给了我一个启动顺序,通常会在有 UEFI 时显示。

答案1

我没有发现任何迹象dmesg表明系统实际上是以 EUFI 模式启动的,而不是 BIOS/CSM,但这里有一种绝对确定的方法:

运行sudo efibootmgr,如果它抱怨EFI variables are not supported on this system然后尝试sudo mount -t efivarfs none /sys/firmware/efi/efivars

如果你成功了,你会看到类似这样的东西:

$ sudo efibootmgr 
BootCurrent: 0002
Timeout: 1 seconds
BootOrder: 0002,0000,0001,0003,0004
Boot0000* Windows Boot Manager
Boot0001* UEFI:CD/DVD Drive
Boot0002* Fedora
Boot0003* UEFI:Removable Device
Boot0004* UEFI:Network Device

即使没有这个,我想

# show the bitness of the internal EFI firmware
cat /sys/firmware/efi/fw_platform_size

可能就足够了。

答案2

尝试似乎合理:-

dmesg | grep efi:这将产生合理的输出电喷启动。

答案3

如果/sys/firmware/efi/目录存在,则意味着固件已向内核提供了 UEFI 运行时服务,这必然意味着您已以 UEFI 模式启动。

如果系统以 BIOS 兼容模式 (CSM) 启动,则 UEFI 编程接口(包括 UEFI 运行时服务)将不可用于内核,也/sys/firmware/efi不会出现。

答案4

dmesg | grep efi:这将为 EFI 启动产生合理的输出。

仅当启动是最近的时。缓冲区dmesg的大小有限,运行了一段时间的服务器很快就会将启动时消息轮换掉。

相关内容