我正在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
的大小有限,运行了一段时间的服务器很快就会将启动时消息轮换掉。