一台关机后整夜烫到 91°C 的 Ubuntu 笔记本:一次完整的调试记录

RTX 5070 + Ubuntu 26.04 + 内核 7.0:关机后整夜不断电、开机 91°C。折腾了两天 systemd、NVIDIA 驱动、udev 规则……最后发现真正的解决方案是拔电源长按电源键 30 秒。EC(嵌入式控制器)状态异常才是一切症状的根因。

起因:开机摸到的热度

那天早上我打开笔记本,开机瞬间 sensors 报出来一个让人手心发凉的数字——CPU 最高 91°C。问题是,我昨晚明明关机了。一台关了机的笔记本,放了一晚上,内部温度居然还在 91°C。这不是物理学能解释的余热。

我的硬件配置是个相对前沿的组合:

  • 双系统:Windows + Ubuntu 26.04
  • RTX 5070(Blackwell 架构)
  • 独显直连,内部屏幕直接挂在 N 卡上
  • 用 rEFInd 引导,不是 GRUB
  • nvidia-driver-595-open + CUDA 13.1
  • 主要工作负载是在多机集群上跑 llama.cpp 分布式推理

这个组合在 2026 年初的 Linux 上属于「踩坑重灾区」——RTX 50 系是新硬件,驱动还在演化;内核 7.0 是新内核;Ubuntu 26.04 是新系统。叠加起来,怎么折腾都不奇怪。


漫长的调试过程

第一阶段:锁定嫌疑对象

最初的怀疑很直接:是不是根本没关机,只是黑屏?但出风口没风、电源灯灭了。而开机瞬间 91°C 不是物理余热——这是内部核心的当前温度,说明有什么东西整夜都在通电运行

搜了一圈,社区里有个非常匹配的已知问题:RTX 50 系 Blackwell + Linux 7.0 内核,nvidia-open 驱动在关机流程中会挂死。屏幕黑了像是关机了,但 GPU 实际没断电,整机持续发热。这个 bug 在 NVIDIA 开源驱动 GitHub 上有 issue #1117,两个版本 580.142 和 595.58.03 都复现。

第二阶段:发现 systemd 循环依赖

看关机日志,发现报错:

sysinit.target: Found ordering cycle: 
  nvidia-persistenced.service/stop after 
  systemd-backlight@backlight:nvidia_0.service/stop after 
  sysinit.target/stop - after nvidia-persistenced.service

Found ordering cycle 是 systemd 的死锁警告——A 等 B 停、B 等 A 停。systemd 强行打破,但后续整个关机流程进入混乱状态,没执行到真正断电。

同时还发现日志里有 USB 错误,追查发现是劣质 USB 防尘塞——里面有金属触点,被系统当成幻影设备反复尝试枚举,拖慢关机流程。拔掉。

第三阶段:找到 NVIDIA 官方 service 文件的 bug

调试循环依赖时,看了 nvidia-persistenced 的完整配置:

# /usr/lib/systemd/system/nvidia-persistenced.service
StopWhenUnneeded=true
Before=systemd-backlight@backlight:nvidia_0.service

这是 NVIDIA 官方写的 service 文件,两条配置自相矛盾

  • StopWhenUnneeded=true:当没有服务需要它时自动停止
  • Before=systemd-backlight@backlight:nvidia_0.service:但 backlight 服务依赖它,所以它永远“被需要”

死循环就从这里来。同时还发现自己写的 brightness.service 在关机时调用 save-brightness.sh 读 nvidia 设备,也在加剧这个循环依赖。

第四阶段:修复 systemd 层

针对这些问题做了一系列修复:覆盖 NVIDIA 官方 service 文件的两条有毒配置;把亮度服务改造成用 udev 实时保存而不是关机时保存;清理了 3.9G 的 journal 日志。

修复后关机日志走完了完整流程:

Reached target poweroff.target - System Power Off.
Shutting down.
Journal stopped

systemd 层修好了——但第二天早上机器还是烫。

第五阶段:发现 GPU 硬件层没断电

systemd 走完了、GPU 还是整夜通电——说明问题比 systemd 循环依赖更混:NVIDIA 驱动在 systemd-poweroff 真正执行时,GPU 硬件接口没干净下电。继续调试,加了 nvidia 模块卸载钩子,开始考虑降驱动、降内核……

第六阶段:EC 重置——一脚踢到了真凶

同时参考了另一个 AI 的建议,做了一次 EC(嵌入式控制器)重置

1. 正常关机
2. 拔电源适配器
3. 长按电源键 30 秒
4. 静置 5 分钟
5. 接电源,开机

重置后对比:

指标 之前 重置后
开机总时间 1分47秒 24.5秒
initrd 阶段 1分7秒 1.6秒
GPU 温度(开机) 91°C 45°C
CPU Tctl(空闲) 74°C 58°C

一次 EC 重置,所有异常指标同时恢复正常。

为了验证 EC 重置是真正的根因,把所有 systemd 修改还原,只保留 EC 重置后的硬件状态,当晚关机。第二天早上——不烫了


真正的根因

EC(嵌入式控制器)状态异常

EC 是笔记本主板上一颗独立的小芯片,管理电源、风扇、按键、温度、ACPI 电源状态。它“卡住”会导致:

  • PCIe 总线电源状态异常 → 关机后 GPU 不断电 → 整夜发热
  • ACPI 设备枚举异常 → initrd 等待所有设备超时 68 秒 → 开机 1分47秒
  • systemd 看到设备状态和实际不符 → 循环依赖、destructive transaction → 关机日志一片报错

我以为在调试的那些“问题”——systemd 循环依赖、nvidia 关机挂起、USB 幻影设备、initrd 超时——本质上都是 EC 异常的次生现象

NVIDIA 官方 service 文件确实有 bug,但在 EC 正常的情况下,systemd 能自动处理这个环、完成关机。只有在 EC 异常导致整个电源状态混乱时,这个 bug 才会被放大到导致关机失败的程度。


技术总结

EC 重置方法(OMEN / HP 游戏本)

1. 正常关机
2. 拔电源适配器
3. 长按电源键 30 秒(强制放掉主板残留电)
4. 静置 5 分钟
5. 接电源,开机

什么时候需要做:

  • 关机后机器持续发热
  • 开机时间莫名变长(原本 30 秒变成 1–2 分钟)
  • 风扇行为异常(关机后风扇还在转)
  • 大量设备枚举超时(systemd-analyze blame 显示一堆设备卡几十秒)

建议频率:出现以上症状时做;平时每隔几个月预防性做一次。

几个值得记的诊断经验

1. 先做 EC 重置再做软件调试

游戏本出现电源相关怪问题时,EC 重置应该是第一步,不是最后手段。成本零、无风险、效果立竿见影。这次花了整整两天调试 systemd,最后发现一个 30 秒的物理操作就解决了。

2. systemd-analyze blame 的数字会误导人

某个设备显示“用了 68 秒”,不一定是它自己慢——可能是整个 sysinit 阶段被某个底层问题卡了 68 秒,所有设备在解锁那一刻同时被记为可用。这种情况下追查软件层是南辕北辙。

3. 开机症状和关机症状可能是同一根因

开机慢(68 秒)和关机后不断电,看起来是两个独立问题,实际是同一个 EC 异常的两面。遇到多个怪异症状同时出现时,优先找共同根因。

4. NVIDIA 官方 service 文件的 bug 是真实存在的

/usr/lib/systemd/system/nvidia-persistenced.service 里的 StopWhenUnneeded=true + Before=systemd-backlight 确实自相矛盾。这个 bug 在 EC 正常时不会造成实质影响,但如果你在正常状态下也遇到 ordering cycle 警告,可以用 drop-in 覆盖:

sudo mkdir -p /etc/systemd/system/nvidia-persistenced.service.d/
sudo tee /etc/systemd/system/nvidia-persistenced.service.d/fix.conf > /dev/null << 'EOF'
[Unit]
StopWhenUnneeded=false
Before=
Before=shutdown.target

[Service]
TimeoutStopSec=5
EOF
sudo systemctl daemon-reload

还没解决的事(已不紧急)

  • USB 5-1.1 幻影端口:笔记本内部 hub 的空端口,每次开机重试 20 秒。EC 重置后开机已经 24 秒,优先级低了很多。
  • NVIDIA issue #1117:RTX 50 系关机挂起的驱动 bug 依然存在,只是 EC 正常状态下 systemd 能绕过去。等 NVIDIA 出新版驱动修复。

结语

这两天调试中最讽刺的时刻:花了整整两天修 systemd、翻 NVIDIA 的 service 文件、写各种 udev 规则和 systemd 钩子,最后发现真正的解决方案是拔掉电源、长按电源键 30 秒、等 5 分钟

但这两天也不是白折腾的——至少现在清楚了:

  • EC 异常是游戏本最常见、最容易被忽视的故障模式之一
  • NVIDIA 官方 service 文件有个设计缺陷
  • systemd 的循环依赖报错有时是底层硬件问题的投影
  • systemd-analyze blame 的数字在硬件异常时完全不可信

如果你有类似症状(RTX 50 系 + Ubuntu + 关机后发热 + 开机变慢),先做 EC 重置,再考虑软件层的修复。

Leave a Reply

Your email address will not be published. Required fields are marked *