systemd-analyze
在我的计算机上运行给了我Startup finished in 15.862s (firmware) + 3.356s (loader) + 1.391s (kernel) + 5.199s (userspace) = 25.810s
.固件的时间比我预期的要长,因为我的另一台计算机上的时间要短得多,而且我的系统 BIOS 界面中已经启用了快速启动。
我如何诊断固件的哪一部分导致花费了这么多时间?我正在寻找类似systemd-analyze blame
(用于用户空间)或访问带时间戳的固件日志的能力。
答案1
我希望只有在严格的服务器级硬件上,单个固件事件级别的带时间戳的启动日志才会出现。但对于这些,自检往往更复杂,可能需要几分钟的时间。对于消费级硬件,根据我的经验,这种级别的固件诊断几乎是闻所未闻的。
关于诊断花费时间的一些建议,按所需努力/资源的增加顺序:
在启动过程的固件阶段运行时查看显示屏。如果系统仅显示制造商的徽标,则按Esc可以将其切换到信息更丰富的显示。或者您可能需要在 BIOS 设置中禁用启动徽标。您可能会在屏幕上看到一些消息,涉及固件启动过程的不同部分。例如,网卡、硬件 RAID 控制器等可能会显示它们自己的启动消息,并且可能会在它们自己的初始化中花费大量时间。在大多数情况下,此初始化只是为了启用从该设备启动的可能性。如果您知道不需要从网络或额外的磁盘/RAID 控制器启动,请寻找禁用它们的方法。可能有 BIOS 设置,或者这些组件可能有自己的迷你 BIOS 设置屏幕,其中包含用于在启动时显示的组合键来访问它们。或者您可能需要特定的配置实用程序来“禁用特定组件的 BIOS 扩展/UEFI 驱动程序”。
如果您有一台高档台式机,其主板可能有一个用于显示 POST 代码的两位数 LED 显示屏。如果没有,则可以通过以下方式显示 POST 代码一张小诊断卡(旧系统)或 USB诊断设备(具有“USB 调试端口”功能的现代系统)。您还需要获取适用于您的系统的 POST 代码列表:检查系统/主板手册或系统/主板/BIOS 供应商的支持网页。然后,需要监视启动期间显示的代码,并检查显示时间最长的代码的实际含义:是否有任何相关的 BIOS 设置可能会缩短或完全跳过该特定阶段?
如果您可以获得系统 BIOS 的 OEM 自定义实用程序,您也许能够更改普通人无法更改的一些设置。这需要了解您在做什么,并且完全属于 BIOS 改装领域。
如果您的硬件兼容核心引导,您可以用 Coreboot 固件完全替换您的普通 BIOS,它可以更加自定义并且通常启动速度更快。这是一个重大且并不总是容易逆转的步骤,如果出错,就会冒着硬件变砖的风险:在决定这样做之前,请先进行仔细的研究。