# kais-engine 2026-10-11 黑屏 + 主板 Q-Code B0 挂起 8h22m — 根因分析报告（RCA）

- 审计性质：只读审计 + Web 调研 + 修复方案设计（未改动任何系统状态）
- 审计人：GLM（架构审计），2026-10-11
- 机器：kais-engine — ASUS ROG CROSSHAIR VIII HERO (WI-FI) / X570 / BIOS 5302 / 4×32GB DDR4-3600 / RTX 3060 Ti + 2×RTX 3090 / Ubuntu 24.04 HWE
- 证据缩写：`J-1`=journalctl -b -1；`J-0`=journalctl -b 0；`auth`= /var/log/auth.log（本机为 ISO 时间戳格式）；`S.log`= ~/.hermes/state/gpu-reboot-sentinel/sentinel.log；`apt.h`= /var/log/apt/history.log；`uu.log`= /var/log/unattended-upgrades/unattended-upgrades.log

---

## 0. 结论速览

| 问题 | 结论 |
|---|---|
| 黑屏是不是故障 | 不是。01:16:04 是一次**完全有序的 reboot**（哨兵发起、sudo 授权、systemd 停机序列完整走完、journald 正常收 SIGTERM） |
| 真正的故障是什么 | **reboot 后的 warm reset POST 挂在 Q-Code B0 共 8h22m**，09:38 人工断电重开即恢复。B0 = AMI「Runtime Set Virtual Address MAP Begin」，即内存训练/设备枚举已过、OS 交接前最后一个 runtime 检查点 |
| 最可能根因（置信度高） | **内存子系统边际不足**：4×32GB 双 rank DDR4 跑 XMP 3600 是 AM4 IMC 最重负载配置；本机热重启 POST 实测呈双峰分布（12s 跳过重训 vs 66–211s 全量重训），本次落在分布最坏尾。ASUS 官方 FAQ 把 B0 归入 99/15/53 内存异常族 |
| 次因/共因（中） | 3-GPU option ROM/GOP 晚期初始化（`pci=realloc` 是本机 BAR 空间历史压力痕迹；热重启不对 PCIe 槽位断电）；BIOS 5302(AGESA 1.2.0.F) 版本相关回归（该板 5503 曾因 POST 冻结被官方撤回，现最新 5601） |
| 触发链治理 | ①unattended-upgrades 无黑名单自动升 nvidia+内核 → ②NVML 错配 19.5h 无人告警 → ③Kai 授权重启被工具硬线闸拦 → ④哨兵 8h 后空闲补发 → ⑤补发的热重启踩中 B0 挂起 → ⑥哨兵对账 Bug A/B 使其变成「再重启地雷」（10:00 侥幸 DISARMED） |
| P0 | unattended 黑名单落地；外部心跳监控；智能插座远程硬复位；哨兵保持拆除（修复版留档） |

---

## 1. C1 时间线终版（逐秒级触发链）

### 1.1 前置背景（boot -1 = 2026-10-02 11:42:04 起，内核 7.0.0-34，连续运行 8d13h）

| 时刻 | 事件 | 证据 |
|---|---|---|
| 10-02 11:42:05 | NVRM 580.173.02 内核模块加载（boot -1 起点） | J-1 首行：`NVRM: loading NVIDIA UNIX x86_64 Kernel Module 580.173.02` |
| 10-09 06:40:48–06:42:05 | unattended-upgrades 装新内核 7.0.0-38（+headers+meta），删 -31；dkms 为 -34/-38 双内核都编了 nvidia 580.178.04 | apt.h:102–147；`dkms status` |
| 10-10 06:50:47 | u-u 启动；允许源 noble/noble-security/ESM；**初始黑名单为空** | uu.log |
| 10-10 06:50:57 | 列出待升级 27 包：nvidia-580 全家（dkms/driver/compute/gl/firmware…）+ bluez | uu.log |
| 10-10 06:50:58–06:53:16 | nvidia 580.173.02→580.178.04 完成（24 包 upgrade + firmware install）；**已加载的 .173.02 模块无法热替换** | apt.h:149–153 |
| 10-10 06:51:04 | **首条 NVRM API mismatch**（nvidia-smi 用户态 .178.04 vs 内核模块 .173.02）——比 Hermes 预钉的「01:15 关机窗」早 19.5h；至关机共刷 **1,465,116 行** journal（journal 总占用 2.9G） | J-1 kernel 统计（grep -c NVRM） |
| 10-10 06:53:27 | u-u「安装了所有的更新」；无 Automatic-Reboot（默认 false）→ 系统停在错配态等人工重启 | uu.log；/etc/apt/apt.conf.d/50unattended-upgrades:94（注释态） |
| 10-10 17:15:27 | Hermes 会话写 S.log「DIRECT-REBOOT ordered by Kai (跳过空闲等待)」；**reboot 命令被会话执行器硬线闸拦截，从未到达 sudo/systemd** | S.log；反证：auth 中 10-10 17:1x 窗口**零条 sudo 记录** |

### 1.2 关机触发链（10-11 凌晨，逐秒）

| 时刻 | 事件 | 证据 |
|---|---|---|
| 01:00:01 | 系统 cron 常规 tick（tmux-claude-timer / gpu0-desktop-watchdog 每分钟任务） | auth `CRON[2980186/2980187]` |
| 01:00:25 | Hermes cron job `c16b1dce9ff7`（interval 15m）tick：KAP 租约空 + ComfyUI 8188/8189/8190 队列空 + 宿主无杂散 GPU 进程 → **ARMED**，写 armed 标记 + docker/uptime 快照 | S.log@01:00:25 `ARMED (idle confirmed)` |
| 01:15:20–26 | 监控继续 nvidia-smi 探测，NVRM mismatch 刷屏（01:15:20.134 起样本） | J-1（窗口原始日志 168KB） |
| 01:15:26 | 下一 tick（15min 后）仍全空闲且无 ABORT → **FIRING**，`rm armed`、`sync`、echo 预告、`sleep 2` | S.log@01:15:26 `FIRING reboot (double-check idle ok)` |
| **01:15:28.019** | **`sudo[3084701]  kai : PWD=/home/kai/.hermes/scripts ; USER=root ; COMMAND=/usr/bin/systemctl reboot`** —— 授权路径命中 sudoers `(ALL) NOPASSWD: ALL, !/usr/bin/fuser` | auth.log:3495（工单要求核对的行，实测比 S.log 晚 2s = sleep 2 所致）；`sudo -n -l` |
| 01:15:28.023 | `systemd-logind[1575]: The system will reboot now!` | auth.log:3497 / J-1 |
| 01:15:28.059 | Hermes cron.scheduler 投递哨兵 FIRING 消息（live adapter degraded → standalone 兜底）——job id 与哨兵 tick 互证 | J-1 `python[1755775]: WARNING cron.scheduler: Job 'c16b1dce9ff7'` |
| 01:15:28.060 | logind `System is rebooting.`；systemd 开始停 timers/targets/会话（bluetooth→graphical→sound→…） | auth.log:3499；J-1 |
| 01:15:28–01:16:04 | 有序停机全序列：用户会话/GNOME → /data、/mnt/data1（EXT4 nvme1n1 @01:16:03.992 unmounting）→ `umount.target` @01:16:04.105 → `shutdown.target`/`final.target` @01:16:04.106 → `systemd-reboot.service finished` → `reboot.target` → `Shutting down.` | J-1 --since 01:15:25 |
| **01:16:04.157** | `systemd-shutdown[1]: Sending SIGTERM…` → `systemd-journald[416]: Journal stopped` —— **boot -1 最后一条日志，关机干净完成点** | J-1 @01:16:04.157 |
| 01:16:00 | wtmp `shutdown system down 7.0.0-34-generic … - 09:38:14 (08:22)` | `last -x -F` |
| 01:16:05–09:38:14 | **journal 全 boot 范围零条目（--since/--until 实测 No entries）**；`--list-boots` 无新 boot；btmp 空（无失败登录）→ 8h22m 机器无任何 OS 活动、无入侵痕迹。期间主板 Q-Code 停 **B0**（Kai 观察；POST 阶段 OS 天然无记录） | journalctl --since 01:16:05 --until 09:38:14；`lastb` |
| 09:38 | Kai 人工按电源（硬断电后冷启动）→ POST 正常完成 → **09:38:15.138 内核 7.0.0-38 首条日志**；firmware 17.445s + loader 14.711s；NVRM 580.178.04 对 -38 内核加载，错配解除 | `last -x`；`systemd-analyze`；J-0 |
| 09:38:19 | netfilter-persistent failed（见 C5 修正定性，P2） | J-0 -u netfilter-persistent |
| 09:45:06 | 哨兵 tick：MARKER 仍在 + Bug A 判「同 boot」→ 对账跳过 → 模式 A 探测全 idle → **再次 ARMED**（并把 01:00 的 docker/uptime 快照覆盖为 09:45 版——原始证据被覆盖，现 uptime 快照内容 ` 09:45:06 up 6 min, 1 user…` 即 Bug A 活体证据） | S.log@09:45:06；state 目录 pre-reboot-uptime.txt 实测内容 |
| 10:00:06 | tick busy → **DISARMED（侥幸未 FIRE，否则 10:00 又一次热重启再赌一次 B0）** | S.log@10:00:06 |
| ~10:05 | Hermes 拆雷：`hermes cron remove c16b1dce9ff7`（实测 jobs.json 65 个 job 中已无此 ID）+ rm MARKER/ARMED + touch ABORT | state 目录 ABORT mtime 10:05；jobs.json 复验 |

**触发链一句话**：Hermes cron(15m) → 哨兵脚本 01:00 ARMED → 01:15:26 FIRING → `sleep 2` → 01:15:28.019 `sudo systemctl reboot`（NOPASSWD 兜底规则）→ logind → systemd 有序停机 36s → 01:16:04 交回固件 → **warm reset POST 卡 B0**。

---

## 2. C2 B0 POST 挂起 8h22m 根因（工单核心）

### 2.1 本机固件层取证

| 项 | 实测 | 含义 |
|---|---|---|
| 本次(boot 0)启动路径 | 手动电源键冷启动（wtmp：gdm 09:38:22 起重新登录、runlevel5 09:38:43） | 非 warm reset；冷路径 POST 完整走通 |
| 固件阶段耗时 | `systemd-analyze`：**firmware 17.445s + loader 14.711s** + kernel 3.174s + userspace 28.880s | 冷启 POST ~17s 完成（128GB 全训练或有效 MRC 缓存） |
| efibootmgr -v | BootCurrent=0002(ubuntu/shim)；BootOrder=0002,0001；**Timeout=1s；无 BootNext**；efivars 有 BootOrder/DefaultBootOrder/OsIndications/Timeout，无 BootNext 变量 | 无一次性启动项挂起/启动设备悬空问题；UEFI 启动管理层干净 |
| pstore / /var/crash | 双空 | 无固件崩溃记录、无 capsule reset、无 oops/apport |
| BIOS/板 | dmidecode：AMI 5302，Release 10/03/2025（构建日期）；C8H (WI-FI) Rev X.0x；BIOS Revision 5.17 | ASUS 官方发布日为 2025-10-27（见 2.2e），两日期不矛盾（构建 vs 发布） |
| 内存 | 4×32GB **G.Skill F4-3600C18-32GTRS，Configured Memory Speed 3600 MT/s @1.2V** | **XMP/DOCP 3600 激活态**（JEDEC 为 2133）——4 DIMM 全插 + 双 rank 32GB + 3600 = AM4 IMC 最重负载组合 |
| 内核 cmdline | `amd_iommu=off pci=realloc nvidia-drm.modeset=1 pcie_aspm=off`（boot -1 与 boot 0 相同，历史即在） | `pci=realloc` = 本机曾有 **PCI BAR 空间分配失败史**（3 GPU MMIO 压力的直接痕迹）；ASPM 早已关闭 |
| MCE/Xid | 两个 boot 内核日志仅 r8169 `XID 609`（Realtek 芯片 ID，假阳性）与 `MCE: In-kernel MCE decoding enabled` | 排除运行期硬件错误累积 |
| **热重启 POST 耗时分布**（相邻 boot journal 间隙 = journald 停→下内核起，含 firmware+loader） | **有序热重启 5 次全部 66–211s**（9-05：98/172/211；9-09：66；9-13：148）；**10-02 02:54 boot -3 异常截断**（journal 停在一条普通监控 sudo 行、无任何停机序列——非有序关机，疑似运行期冻死/硬复位，成因待验证）→ 恢复 POST ≤12s（训练缓存命中的快路径存在的直接证据）；10-11：**8h22m** | 有序热重启一律全量重训（66–211s）；「缓存命中 ≤12s」与「全量重训」两条路径并存；另 10-02 截断本身是又一例运行期不稳定样本（与 H1 同向，待验证） |
| USB 面 | 5 个外接 hub（Genesys/ASM1074×2/VL815×2/Terminus）+ AURA LED 控制器 + ROG STRIX LC 一体水冷 USB + Jing-Mold 05af:1053（Amanero 系 DAC）+ Logitech Unifying + RTL8153 + AX200 BT | USB 枚举面大；`amanero-guard.sh` 注释自述该 DAC「时钟乱码=硬件劣化，软件无解」「重枚举后 profile 漂移」——但 guard 盯的 16d0:071a **当前不在总线上**（可能已摘/已死） |
| 背板样本 | 主板 2026-09-01 更换（工单述；所指审计文档实测不存在，见 C5-11）；换板后有序热重启 5 次成功（9-05×3、9-09、9-13）+ 1 次挂（10-11），另有 10-02 异常截断 1 例（见上行，待验证） | 间歇性故障（有序热重启挂起率 ~1/6），非确定性配置 bug |

### 2.2 Web 调研（3 路独立调研汇总）

**(a) B0 的官方含义——两个官方口径并存**

| 来源 | 说法 |
|---|---|
| ASUS C8H 手册 Q-code 表（多镜像核实） | **B0 = "Runtime Set Virtual Address MAP Begin"**（B1=End，B2=Legacy Option ROM Initialization，B4=USB hot plug）——处于 BDS 之后、ExitBootServices/OS 交接前的 **runtime 段检查点**：内存训练与 PCIe 枚举**已经完成**，挂在 B0 = 卡在交接前最后一步 |
| ASUS 官方 FAQ 1043948（AMD 板常见 Q-code 排障表） | 把 **B0 与 99/15/53 归同一解法行**：重插内存、检查内存金手指/针脚、按推荐 BIOS 核 QVL —— 官方第二口径把 B0 归**内存异常族** |
| ASRock Dr. Debug 表（社区常误引为 ASUS） | `b0 – Problem related to memory. Please re-install the CPU and memory` |

两口径不矛盾的一种统一解释：SetVirtualAddressMap 阶段会改写/重定位 DRAM 中的 runtime 数据结构——训练边际不足时这一步才首次真正踩到坏路径。**待验证**（见 2.4 探针）。

**(b) 同板/同族先例（社区证据 → 相关性 → 置信度）**

| 案例 | 内容 | 与本机咬合 | 置信度 |
|---|---|---|---|
| **C8H-WiFi「[SOLVED] RESTARTS HANG」**（rog-forum td-p/837667, 2021） | 同一块板：热重启（Linux 与 BIOS 保存退出均）挂起 → **抠 CMOS 电池 1 分钟解决**（清掉 NVRAM/训练上下文） | **同板直接先例**；「热重启挂起是状态问题而非硬件坏死」的直接支撑 | 高 |
| C7H「Cold boot fine, warm restart hangs」Q-Code 1F（td-p/858853, 2023） | DOCP 3200 触发、**64GB 挂 / 32GB 好**、随 BIOS 版本出现/消失；解法=降级 BIOS 或 **VDIMM 1.40V** | AM4 热重启挂起原型：容量相关 + 电压边际 + BIOS 版本相关，与本机 128GB@3600 高度同构 | 高 |
| Strix X570-F + 4×32GB（reddit r/buildapc llwiw9） | 每 3–6 次启动挂一次；**拔到 2 条(64GB)消失；4 条时连 JEDEC 2133 都挂**；MemTest86 干净 | 4×32GB 双 rank 是结构性边际，与频率无关的插槽/总线负载问题；解释本机「间歇性」 | 高 |
| ASUS 官方内存文章「DIMM Fit」（rog-forum ba-p/1159532） | 官方原文把「**fails an occasional warm restart**」列为内存训练边际症状 | 厂商自认此类现象属训练边际 | 高 |
| **5503 BIOS 因 POST 冻结卡 Q-Code 98 被 ASUS 撤回**（td-p/1155880, 2026-07；ASUS HQ 书面确认撤回）→ **5601**（2026-08-21, AGESA 1.2.0.12）替代 | 本板 2026 年发生过 POST 挂起级固件回归；官方变更日志从不写这类细节 | 本机停在 5302，比最新落后两版；「升 BIOS」是合理治理项 | 高（事实本身） |
| C8H + Xonar 声卡挂 92（maxedtech） | BIOS 1105 后 PCI bus init 挂，option ROM + AGESA 版本相关 | 本板 PCIe 选件 ROM 初始化挂起的先例（本机 3 张 NVIDIA 卡 = 3 个 GOP/ROM） | 中 |
| RTX 5090/PRO 6000 reset bug（Tom's Hardware 2025-09 等）；warm reset 不对槽位断电的一般机制 | GPU 在 reset/FLR 后可进入仅整机断电可解的死状态 | 佐证 H2（GPU 热复位不落电）；但无 B0 专属证据 | 中 |

**(c) 负面结果（同样重要）**：三路调研均**未找到**公开帖子同时命中「C8H/X570 + 卡 Q-Code B0 + 仅热重启复现」三要素——即本案例无现成同款判例，最接近的是上表前两条。另一负面：ASUS 官方 Web 站点对自动化抓取全屏蔽，部分 URL 为搜索引擎快照重建（已标注），原帖可人工点开复核。

**(d) 诱因族逐条判定**

| 诱因族 | 结论 | 依据 | 对本机置信度 |
|---|---|---|---|
| Memory Context Restore 设置 | **AM5/DDR5 专属，X570 无此选项**；其 AM4 机制对应物（MRC 上下文复用/Memory Fast Boot）并入下行 | 多源（ASUS 选项文本、MSI AM4「Memory Fast Boot」等价物线程） | 不适用（作为设置） |
| Fast Boot / MRC 上下文复用 | 热重启复用保存的训练上下文，边际不足即挂；CMOS 放电=清此状态 | C8H-WiFi CMOS 电池先例；C7H 线程；MSI MFB 跨 AGESA 版本损坏线程 | **中高** |
| 4-DIMM 双 rank 32GB×4 热重训边际 | AM4 IMC 最重配置；「偶发热重启失败」官方承认为训练边际症状 | Strix X570-F 4×32GB 帖；C7H 64/32GB 对照；ASUS DIMM Fit；本机双峰 POST 分布实测 | **高（首要假说）** |
| Above 4G/ReBAR + 多 GPU MMIO | 多卡 MMIO 分配错误可致启动失败；本机 `pci=realloc` 历史痕迹 | MSI B550 ReBAR 重启回归帖；多 GPU + Above4G 不启动帖 | 中低 |
| GPU 热复位不落电 | warm reset 不给槽位断电，卡持坏状态可拖死宿主 POST；B0 属晚期（option ROM/GOP 参与段） | 5090 reset bug；ZOTAC ReBAR 后热重启黑屏需拔电源；B2(GPU option ROM) 邻码挂起帖 | 中 |
| USB 设备/控制器 | 码不符：USB 挂起族卡 99/B2/A2/B4，不卡 B0 | ASUS FAQ 分桶；X570 USB 帖 | 低 |

**(e) BIOS 版本史（本机 5302 之后已有两版）**

| 版本 | 日期 | AGESA | 变更记录原文 | 备注 |
|---|---|---|---|---|
| 5302（本机） | 2025-10-27（dmidecode 构建日 10/03） | **1.2.0.F**（与 5201 持平，未升级 AGESA） | "Enhance system stability, security, and compatibility." | 同代有用户锁死/需断电循环的报告（rog-forum td-p/1112411 等） |
| 5401 | 2026-06-22 | 未标注 | "Improve system security" | 仅安全更新 |
| 5503 | 2026-07 下旬 | — | （已撤回，无存档） | **POST 冻结卡 Q-Code 98 / SPD-DOCP 丢失，ASUS HQ 书面撤回** |
| **5601（最新）** | **2026-08-21** | **1.2.0.12** | "Updated AGESA to ComboV2 PI 1.2.0.12" + fTPM 固件更新提示 | 5503 的替代版；社区反馈稳定。⚠ 升级会触发 fTPM 重置提示（本机 Linux + 无 BitLocker，影响小，但注意 TMP 相关） |

截至 2026-10-11 无比 5601 更新版本；5401/5601 官方变更日志均**未提及** reboot/POST/内存兼容修复（此类问题 ASUS 惯例不写进 changelog，5503 就是靠社区+撤回才确认的）。

### 2.3 综合判定（假说排序）

> 样本声明：换板后 warm reset 仅 7 次（6 成 1 挂），以下为按证据强度排序的假说，非定谳；每条给出证伪/证实路径（2.4）。

**H1（高）：内存子系统边际不足，热路径晚期 runtime 步骤失稳。**
机制：4×32GB 双 rank @ XMP 3600 = AM4 IMC/布线最重负载；warm reset 时硅片热态 + 训练上下文复用/重训的边际与冷开不同；B0（SetVirtualAddressMap Begin）是训练结果被真正消费的晚期步骤——训练「勉强通过」在此崩掉。咬合点：①ASUS FAQ 把 B0 归内存族；②本机有序热重启一律 66–211s 全量重训、而 10-02 硬复位后 ≤12s 即过（缓存命中快路径），两条路径并存，且 10-02 还有一次原因未明的运行期异常截断（待验证）；③C7H 容量对照 + Strix X570-F 4×32GB 先例；④ASUS 官方「偶发热重启失败=训练边际」；⑤同板 C8H-WiFi 案例抠电池（清上下文）即愈。矛盾点：ASUS 手册 B0 语义是 runtime 检查点而非训练中段（训练挂通常卡 15/1F/53）——故表述为「晚期消费阶段失稳」而非「训练挂」。

**H2（中）：3-GPU option ROM/GOP/MMIO 晚期初始化挂起。**
机制：warm reset 不对 PCIe 槽断电；2×3090（大 MMIO）+ 3060 Ti 的 vBIOS/GOP 在 BDS→runtime 段参与；本机 `pci=realloc`（内核被要求重分配 BAR）是 BAR 空间压力的历史直接证据；C8H+Xonar 挂 92 先例证明本板选件 ROM 初始化可被 BIOS 版本影响。B2（Legacy Option ROM Init）恰在 B0/B1 邻位。

**H3（中低，可与 H1/H2 复合）：BIOS 5302/AGESA 1.2.0.F 版本相关回归。**
依据：5503 Q98 撤回先例证明本板 2026 年存在 POST 挂起级回归；ASUS X570 历史上 boot/restart 挂起随 AGESA 版本进出（1.2.0.5–1.2.0.7 时代大量回滚案例）；5302 同代社区有锁死报告。若判别实验后升级 5601，H1/H3 可被同时处置。

**H4（低）：USB 枚举挂起。** 码不符（99/B2/A2/B4 族）；但 USB 面大（5 hub + 劣化前科 DAC + 水冷 + RGB），保留为最廉价的证伪对象。

**H5（不适用）：MCR 设置。** X570 无此选项（AM5-only）。

**为什么不是 OS/驱动层**：B0 期间 journal/auth/wtmp 三源零记录、无 boot 条目、无 NVRM/pstore/crash 残留；冷开即愈且驱动正常 → 挂点在固件，OS 只负责「触发了 warm reset」这一动作。

### 2.4 判别探针序（方案 only，本轮一律不执行；红线禁重启）

前置 PR-0（成本 S，先做）：
- 智能插座接入主机电源（远程硬断电能力——判别实验的安全网，也是 B0 复发时的唯一远程恢复手段；本板无 BMC）；
- 手机架设对准 Q-Code LED 录像（定位卡点前的最后一个码）；
- 实验窗选 GPU 空闲期，先 `touch ~/.hermes/state/gpu-reboot-sentinel/ABORT`（保持哨兵拆除态的双保险）。

PR-1 复现率基线（成本 S）：`systemctl reboot` 连做 3–5 次，每次开机后等 ≥10min 再重启；记录 Q-Code 与耗时（本机有序热重启正常区间 66–211s，>10min 判挂，挂了用智能插座断电 30s 恢复）。产出：复现率基线（当前估计 ~1/6）。若 0/5 不复现 → 判别实验改为「观察期+心跳告警」，把资源移向 H3（升 5601）。

PR-2 BIOS 静态核对（成本 S，只读记录，不改）：进 BIOS 抄录当前值——Fast Boot（及「POST 报告」）、Above 4G Decoding、Resizable BAR、DRAM 频率/时序源（XMP 3600?）、DRAM/VSOC 电压（Auto?）、Power Down Enable、USB legacy/XHCI hand-off、ErP、CSM。此清单同时是后续单变量实验的基线。

PR-3 最小差异矩阵（成本 S–M，单变量、每档 ≥5 次热重启，按性价比排序）：
- **3a CMOS 放电**（拔电池 1 分钟/CLR_CMOS 跳线）→ 直接复刻同板先例的「治愈」操作；若此后复现率显著降 → H1 上下文路径坐实（成本 S，排第一）。
- **3b 内存降档**：XMP off（JEDEC 2133）跑 5 次热重启 → 不复现则 H1 坐实；再试 3200/3466 找边际点。若 JEDEC 下仍挂 → H1 降权、H2/H3 升权（4×32GB 帖里 JEDEC 也挂=插槽/总线负载，同理）。
- **3c USB 减载**：拔全部外接 hub/DAC/水冷 USB/RGB（键鼠直插）→ 5 次。成本 S、零风险。
- **3d GPU 减载**：断电拆一张 3090（或两张）→ 5 次。成本 M。若只有 3 卡全在才挂 → H2 坐实。
- **3e Fast Boot off**（若 PR-2 显示为 on）→ 5 次；同时观察热重启 POST 是否稳定进入 66–211s 全量重训峰（放弃 12s 快路径）。
- 顺序建议 3a → 3b → 3c → 3e → 3d。

PR-4 若复现：每卡点录像 + 记录挂前最后码（B0 前是否先出现 92/B2/GOP 相关码）；对照 PR-2 基线定位段位。

PR-5 固件升级（成本 M，放在判别之后避免混杂变量）：BIOS 5302 → 5601（跳过被撤回的 5503；5401 无必要）。升级本身会清 NVRAM/重置设置——升级前抄 PR-2 基线，升级后先 JEDEC 起步再逐级回 XMP。注意 fTPM 重置提示；Linux 无 BitLocker 影响小。

PR-6 长期哨控（成本 S）：①开机 oneshot 单元记录 `systemd-analyze time` 到日志（POST 耗时趋势化，复发预警：热重启后无新 boot 记录=又挂了）；②外部心跳：由另一台常开设备（或 Hermes 所在侧）对 kais-engine 做 ping/HTTPS 探测，掉线 >10min 推手机——本次 8h22m 无人发现就是缺这一层。

---

## 3. C3 触发链治理定性（六环因果链）

| # | 环节 | 机制解释 | 已有证据 | 防再发措施 |
|---|---|---|---|---|
| ① | unattended-upgrades 在无人值守窗升级 nvidia 用户态/dkms/内核，不重启 | Ubuntu 默认允许源含 `o=Ubuntu,a=noble`；nvidia/linux 包正常流入；`Automatic-Reboot` 默认 false；DKMS 只能为**未加载**的未来内核准备模块，运行中内核的已载模块无法热替换 → 升级即错配 | uu.log 允许源行 + 06:50:57 包单 + 06:53:27 完成；apt.h:149–153；50unattended-upgrades:94 注释态 | **黑名单方案（见 3.2）** + 月度人工升级窗（`apt list --upgradable` 审后手动，升级完立即受控重启） |
| ② | NVML mismatch 破坏 GPU 监控面 19.5h 无人知晓 | nvidia-smi NVML init 失败（API mismatch）→ 用量页 GPU 全 0、xid-watchdog 失明、新 CUDA 进程不可启动；多路监控每分钟重试 → **1,465,116 行** journal 噪声，且没有任何「错配告警」 | J-1 首条 06:51:04 + 总数统计；journal 2.9G 占用 | 监控侧加一条廉价探针：`nvidia-smi -L` 失败且 dmesg 有 `NVRM: API mismatch` → 立即推告警「驱动错配，需受控重启」；同时给 kernel NVRM 消息加 journald 限速 |
| ③ | Kai 17:15 授权的 DIRECT-REBOOT 被会话执行器硬线闸拦截 | Hermes 工具对含 reboot 字样命令硬线封锁（安全设计），但拦截后既没有转人工通知、也没有等效放行路径 → 重启悬空 8h | S.log@17:15:27；auth 17:1x 零 sudo 行（从未到达系统层） | 硬线闸拦截此类**已获授权**的运维意图时，应即时回消息给出人工执行命令（`sudo systemctl reboot`）并要求确认执行结果；而不是静默失败等哨兵兜底 |
| ④ | 哨兵 01:00 空闲窗补发 reboot | 22:5x 语义升级后的设计行为（ARMED→双 tick→FIRE），本身按预期工作 | S.log 01:00:25/01:15:26；auth.log:3495 | 行为保留；但 FIRE 前加一道「距上次成功 boot <30min 则推迟」护栏（修复版已隐含：对账先于模式 A） |
| ⑤ | **reboot 后 warm reset POST 卡 B0 8h22m（本工单核心根因）** | 见 C2：H1 内存边际（高）+ H2 GPU/option ROM（中）+ H3 BIOS 5302（中低）；间歇性 ~1/7 | C2 全节 | C2.4 探针序 + BIOS 5601 + PR-6 双哨控；**恢复重启类运维前先落智能插座** |
| ⑥ | 哨兵 Bug A/B 使其变成「再重启地雷」 | Bug A：`uptime` 人文输出被 `awk int($1)` 解析成 1（秒）→ 永判「同 boot」→ 对账永不执行；Bug B：MARKER 无「reboot 已发生」判定，模式 A 空闲双 tick 即可再次 FIRE；另发现 Bug C：FIRING 路径从不写 MARKER（自发重启无对账） | 脚本源码两处；state 目录残留 ` 09:45:06 up 6 min`（Bug A 活证据）；S.log 无任何 RECONCILE 行；10:00:06 侥幸 DISARMED | `/tmp/gpu_driver_reboot_sentinel.fixed.sh`（C4）；**哨兵保持拆除**直至下次驱动升级窗 |

### 3.2 环① 防再发：unattended-upgrades 黑名单（精确配置）

**现状核对（2026-10-11 实测）**：`20auto-upgrades`：`Update-Package-Lists "1"` + `Unattended-Upgrade "1"`（全开）；`50unattended-upgrades`：Allowed-Origins 为默认 5 源（noble / noble-security / ESM×3），**`Package-Blacklist {}` 为空块**（第 21 行），Automatic-Reboot 三行均为注释（=false）。即：驱动与内核目前完全暴露在无人值守升级面。

**提案**（追加到 `/etc/apt/apt.conf.d/50unattended-upgrades`，替换空块；匹配规则为 Python 正则前缀匹配 re.match）：

```
Unattended-Upgrade::Package-Blacklist {
    // GPU 驱动栈: 涉及内核模块重载, 必须受控窗口升级+受控重启
    "nvidia-";
    "libnvidia-";
    "xserver-xorg-video-nvidia-";
    // 内核栈: 涉及重启切换, 与驱动联动
    "linux-image-";
    "linux-headers-";
    "linux-modules-";
    "linux-generic-hwe";
    "linux-hwe-";
};
```

- `"nvidia-"` 命中 nvidia-dkms-580 / nvidia-driver-580 / nvidia-compute-utils-580 / nvidia-firmware-580-…；`"libnvidia-"` 命中 libnvidia-compute/gl/encode/decode/fbc1/cfg1/extra/common（含 :i386）；`"xserver-xorg-video-nvidia-"` 补齐 X 驱动；`"linux-image-"` 等命中版本包，`"linux-generic-hwe"`/`"linux-hwe-"` 命中元包（否则元包仍会拉入新内核）。linux-tools 等次要包可自行追加。
- 落地后验证：`sudo unattended-upgrade --dry-run --debug 2>&1 | grep -iE 'blacklist|nvidia|linux-'`（应显示黑名单计数且拟升级列表不含上述包）。
- 不建议改用收紧 Allowed-Origins 的方案：会把全部 noble 更新池的安全修复一并挡掉，黑名单是精准工具。
- 代价：nvidia/内核安全补丁改为月度人工窗处理——对单工作站是合理交换。

---

## 4. C4 哨兵脚本修复提案（`/tmp/gpu_driver_reboot_sentinel.fixed.sh`）

生产脚本未动（红线）。修复版已通过 `bash -n` 语法检查，**未执行**。与原版 diff 说明（标 `[FIX-x]` 注释）：

1. **[FIX-A] 快照格式换秒数**：新增 `write_snapshots()`——`awk '{print int($1)}' /proc/uptime` 写纯秒数（原 `uptime > file` 人文输出是 Bug A 根源），同时新增 `pre-reboot-bootid.txt` 存内核 boot_id；ARM 与 FIRING 各写一次。
2. **[FIX-A] 「reboot 已发生」三重判定**（模式 B 入口重写）：
   - 主判：boot_id 快照 ≠ 当前 boot_id（单调、免解析、免时钟干扰）；
   - 兜底①：MARKER mtime 早于当前 boot 墙钟起点（`now - /proc/uptime`）→ 标记之后必然发生过重启；
   - 兜底②：可信秒数快照满足 `UP <= PRE_UP-60`。
   旧版人文格式快照一律判「不可信」走兜底，不再产生 `int("09:45:06")=9` 式伪判定。
3. **[FIX-B] MARKER 生命周期收敛**：判定为新 boot 后只走进对账分支（`exit 0`），**绝不回落模式 A**——杜绝 09:45 式「重启后误重 ARM」；对账三个终态（全绿 / UP>1500 迟到失败 / UP>1800 超时）全部删 MARKER；部分失败仅记日志静默重试并由超时兜底，**对账失败在任何路径下都不触发 reboot**。
4. **[FIX-C]（新发现）FIRING 时自写 MARKER + 快照**：原版只有外部会话（17:15 式）写 MARKER，脚本自发重启（01:15 式）根本不留对账标记——模式 B 无从触发。修复版 FIRE 前 `touch MARKER` + `write_snapshots`，使自发重启同样可对账、可自清理 cron。
5. 同 boot 分支保留原 2026-10-10 22:5x 语义（悬空标记 → 模式 A 空闲自主补发 + 24h stale drop），快照不可信时记一行 `MODE-B snapshot legacy/missing` 日志便于追溯。
6. **逐字保留**：探测函数（kap/comfy/hostguard）、对账 6 项清单、全部用户消息文案、ABORT/PARKED/unknown-parking 逻辑、cron 自清理与 jobs.json 复验。
7. 部署顺序建议（operator）：审阅 diff → 停用期不变（哨兵现为拆除态）→ 下次驱动升级窗先部署修复版再启用 → 首轮 FIRE 后人工核对 S.log 出现 `MODE-B reconcile start … detect=bootid` 与 `RECONCILE_OK`。

---

## 5. C5 与 Hermes 初判交叉验证

| Hermes 初判 | 结论 | 证据 |
|---|---|---|
| ⅰ 关机是有序 reboot，非 panic/断电/内核挂死 | **✅ 成立** | auth.log:3495（sudo 授权链完整）→ J-1 完整停机序列至 `systemd-reboot.service finished`/`reboot.target` @01:16:04.106 → journald 正常收 SIGTERM @01:16:04.157；pstore//var/crash 空；无 oops/Xid/MCE |
| ⅱ B0 挂起 = POST 阶段问题，非 OS 层 | **✅ 成立** | 01:16:05–09:38:14 全 boot journal 零条目；--list-boots 无新 boot；wtmp (08:22)；冷开即愈且三卡驱动正常。补精化：B0 具体位于** BDS 后、OS 交接前的 runtime 段**（内存训练/枚举之后的最后一步），比「泛 POST 问题」更靠后 |
| ⅲ 哨兵 Bug A（awk 解析错误）是对账失效根因 | **✅ 成立** | 源码 `uptime > file` + `awk '{print int($1)}'`；残留快照实测 ` 09:45:06 up 6 min…`；S.log 在 09:38 后无任何 RECONCILE 行；01:15/09:45 两次 ARMED 走的都是同 boot 分支 |

**Hermes 遗漏点（本次新增）**：

1. **Bug C**：FIRING 路径从不写 MARKER——哨兵自发重启后对账根本不会触发（比 Bug A 更早的断层）；修复版已补。
2. **原始快照被覆盖**：09:45 误重 ARM 把 01:00 的 uptime/docker 快照覆盖为 09:45 版——对账若真跑了会用错基准，且 17:15/01:00 原始证据丢失（仅剩 mtime 佐证）。
3. **NVRM 错配始于 10-10 06:51:04**（非 01:15 关机窗），19.5h/146 万行 journal、监控全盲——「错配告警缺失」是独立治理项，Hermes 只定性为「关机前噪声」。
4. **10-09 内核升级叠加效应**：重启恰逢 -34→-38 切换；因 dkms 恰好双内核都编了才没变成「开机无显卡模块」——侥幸通过项，黑名单方案顺带消除。
5. **热重启 POST 双峰分布**（12s vs 66–211s）与冷开 17.4s 的不对称——本机内存上下文复用路径不稳定的直接实测，Hermes 未提。
6. **netfilter 定性修正**：Hermes 称「25-ip6tables exit 4 NOPERMISSION」；实测 **15-ip4tables 同败**，根因是 `TPROXY_OUT 链 RULE_APPEND failed (Invalid argument)`（iptables-nft 1.8.10 恢复 mihomo TPROXY 规则集 EINVAL，ip4/ip6 双双 exit 4），不是权限/后端切换问题（后端本就是 nft）。P2 维持。
7. **无远程电源/无 BMC**：B0 挂起只能人到现场按电源——8h22m 损失放大器；智能插座是最便宜补丁。
8. **sudoers 为 `(ALL) NOPASSWD: ALL`**（仅排除 fuser）：哨兵任何 bug 都直接拥有 root 面_bias；治理上应至少收窄为白名单（含 systemctl reboot）。
9. **Amanero DAC 有「硬件劣化/重枚举」前科且当前不在总线**（guard 盯的 16d0:071a 消失）——USB 面证据，纳入 H4 探针。
10. **btmp 空、auth 无异常**——排除外部入侵/误操作路径（Hermes 未列，补一句安心项）。
11. **审计文档引用悬空**：工单所指 `infrastructure/system-health-audit/references/audit-2026-09-01-motherboard-swap.md` 在全部 5 个 workspace 副本中均不存在（SKILL.md:63 引用了一个不存在的文件）——按工单规则注明出入；主板更换史仅有工单自述与 9-05 行为证据（4 次快速重启、journal 均正常收尾=人工调试）。
12. **10-02 02:54:37 boot -3 异常截断（新发现）**：journal 停在一条 RAPL 监控 sudo 行（J-3 尾部实测），无停机序列、无 pstore 记录——换板后、B0 事件前 9 天的一次疑似运行期冻死/硬复位。成因待验证；若定性为冻死则与 H1（内存边际）同向，且把「本机不稳定」的样本从 1 例扩到 2 例。

---

## 6. 修复优先级矩阵

| 优先级 | 措施 | 成本 | 对应环节 |
|---|---|---|---|
| 🔴 立即 | unattended-upgrades Package-Blacklist 落地（3.2 配置行）+ dry-run 验证 | S | ① |
| 🔴 立即 | 外部心跳监控（他机 ping/HTTPS 探测 kais-engine，掉线>10min 手机告警） | S | ⑤/总体 |
| 🔴 立即 | 智能插座接入主机电源（远程硬复位能力；判别实验安全网） | S | ⑤ |
| 🔴 立即 | 哨兵保持拆除态；`.fixed.sh` 归档待审（下次驱动窗再启用） | S | ⑥ |
| 🟡 短期 | NVRM 错配告警探针 + journal NVRM 限速（146 万行/19.5h 的教训） | S | ② |
| 🟡 短期 | 硬线闸拦截已授权运维意图时的「转人工」通知路径 | S | ③ |
| 🟡 短期 | C2.4 判别探针 PR-0→PR-3（人在场的维护窗执行） | M | ⑤ |
| 🟡 短期 | BIOS 核对清单（PR-2）→ 视判别结果升级 5601（PR-5，跳过 5503） | M | ⑤/H3 |
| 🟡 短期 | netfilter-persistent TPROXY_OUT EINVAL 修复（ip4/ip6 规则集与 nft 后端核对；mihomo 运行时自愈但开机持久化失败） | S | 附带 P2 |
| 🟢 规划 | PR-6 长期哨控（POST 耗时趋势日志 + 心跳联动） | M | ⑤ |
| 🟢 规划 | 若 PR-3b 命中 H1：内存降档常态化（如 3200）或换 2×64GB kit / 送检 | M–L | ⑤ |
| 🟢 规划 | sudoers 收窄（NOPASSWD: ALL → 白名单） | M | 治理 |

## 7. Operator 割接清单（按序执行）

**A. 立即（无需停机）**
1. `sudoedit /etc/apt/apt.conf.d/50unattended-upgrades` → 填入 3.2 黑名单块 → `sudo unattended-upgrade --dry-run --debug` 验证 nvidia/linux 不再出现在拟升级列表。
2. 外部心跳：在他机（或云函数）加 kais-engine 掉线告警（>10min → Telegram/手机）。
3. 主机电源接智能插座，验证远程通断电。

**B. 维护窗 1（判别，人在场，~2h）**
4. 确认哨兵仍为拆除态（jobs.json 无 c16b1dce9ff7；ABORT 在位）。
5. PR-0：录像对准 Q-Code；PR-1：`systemctl reboot` ×3–5 记录 Q-Code/耗时（>10min=挂，智能插座 30s 断电恢复）。
6. PR-2：进 BIOS 抄录基线（Fast Boot / Above 4G / ReBAR / XMP 3600 / DRAM·VSOC 电压 / Power Down Enable / USB legacy / ErP / CSM）。
7. PR-3a CMOS 放电 → 再 ×5 热重启；→ 3b XMP off JEDEC ×5；→ 3c 拔 USB 外设 ×5；→ 3e Fast Boot off ×5；（视结果）3d 拆一张 3090 ×5。

**C. 维护窗 2（治理）**
8. 视判别结果执行：H1 → 内存降档/换装；H2 → 调 Above4G/ReBAR 或卡位调整；任意情况都可评估 BIOS 5302→5601（跳过 5503；升级前抄基线、升级后 JEDEC 起步）。
9. 部署 NVRM 错配告警探针（②）与 netfilter-persistent 修复（P2）。
10. 下次驱动升级窗：审阅并部署 `.fixed.sh`，启用后首轮人工核对 `MODE-B reconcile start … detect=bootid` → `RECONCILE_OK` 出现。

---

## 8. 摘要（≤300 字）

kais-engine 2026-10-11 黑屏非 OS 故障：01:15:28 哨兵经 `sudo systemctl reboot`（NOPASSWD 规则）发起一次完全有序重启（journal 停机序列完整、journald 正常收尾）。真故障是**重启后的 warm reset POST 卡 Q-Code B0 达 8h22m**，人工断电冷开即愈。B0 为 OS 交接前最后的 runtime 检查点；判根因：**首要=4×32GB 双 rank DDR4 XMP 3600 的内存训练边际不足**（ASUS FAQ 将 B0 归内存族、本机有序热重启 POST 实测 66–211s 全量重训且 10-02 另有一例运行期异常截断、同板 CMOS 放电治愈先例）；次要=3-GPU option ROM 热复位不落电与 BIOS 5302 版本回归（5503 曾因 POST 冻结被撤回，最新 5601）。触发链六环：unattended 升级 nvidia 不重启→NVML 错配 19.5h 无告警→授权重启被硬线闸拦→哨兵 8h 后补发→踩中 B0→对账 Bug A/B/C 使哨兵变再重启地雷。P0：unattended 黑名单、外部心跳告警、智能插座远程断电、哨兵维持拆除（修复版已出）。
