我的一位客户使用联想 Thinkpad T450s 已有一年左右了。该机器目前运行的是 Debian jessie,内核来自 jessie-backports 4.5+73~bpo8+1
。最新的 UEFI 版本已刷新/安装。操作系统以“UEFI 模式”安装,带有一个额外的EFI
分区等。直到四周前,这个设置都坚如磐石、稳定:联想 Thinkpad 和 Debian,还有什么可能出错呢?
四周以来,每次启动时,机器都会显示我输入的错误。以下是此错误的图片:
按Esc将继续启动过程,该过程“运行良好”……持续了两周。然后消息从
按 Esc 继续或按 F1 进入设置。
到
清理 是 或 否
(遗憾的是,我没有这方面的图像)。
我的客户端点击了“是”,这删除了存储,就我目前所见,这导致机器无法启动。之后,我恢复了“debian”启动项,机器又恢复正常,启动正常,等等。这种情况持续了几天;大约一周后,每次启动时都会再次弹出该消息。
我曾经在四天之内四次尝试联系联想支持,但每次在电话排队中花费了约 30 分钟后就放弃了。
这几天我用尽了我所有的$(your-favorite-search-engine-here)-技能,却几乎一无所获:这是从哪里来的,如何调试,最重要的是,如何修复它。就目前的情况来看,我猜,这台机器很快就会再次无法启动。
非常感谢任何指点!
答案1
这Linux 内核 3.8 版开始将 UEFI 变量存储抽象为efivarfs
。
安装efivarfs
如果mount | grep '^efivarfs'
没有返回任何内容,您可以efivarfs
使用以下命令进行挂载:
mount -t efivarfs efivarfs /sys/firmware/efi/efivars
现在,您可以浏览/sys/firmware/efi/efivars
以查看是否有任何变量突出。
按大小对 UEFI 变量进行排序
efivarfs
没有磁盘使用情况的概念,但它确实按大小报告每个变量。此命令按大小对变量进行升序排序:
ls -lh /sys/firmware/efi/efivars | sort -k5 -h
下一步
这是我根据您提供的信息所能为您提供的帮助。接下来,您需要弄清楚是什么占用了 UEFI 变量 NVRAM 中的这么多空间。
这Arch Linux 维基建议删除/sys/firmware/efi/efivars/dump-*
文件/变量(如果存在),尽管它没有提到是什么创建了这些变量。
作为在聊天中讨论,一种方法是拍摄 UEFI 变量的快照,按照联想固件的建议刷新它们,重新安装 Debian 的 EFI 启动,再次拍摄快照,等待 UEFI 变量再次填满,然后再拍摄一次快照。然后,您将能够比较快照以查看发生了什么变化,并希望确定是什么导致有问题的变量占用了这么多空间。
如果其他一切都失败了,您可以恢复传统启动。
答案2
我在装有 5.13 内核的 Thinkpad T430 上遇到了同样的错误。在我的情况下,原因是过时的、不兼容的acpi_call
模块(由TLP
通过tpacpi-bat
脚本),导致内核错误,如上所述这里。虽然该漏洞acpi_call
已经固定的,大多数发行版仍然有一个过时的版本。
以下是建议的修复方案,以防有人在谷歌搜索解决方案时偶然发现这个线程。