硬件看门狗:主板上的倒计时复位电路

背景 homelab 里的 r86s(R86S 小主机,Celeron N5100,跑 Proxmox VE)偶尔整机卡死。卡死后机器既不会自己恢复,也不会留下日志,前几次分别过了约 10.5 小时和 4 小时才被人发现并重启。排查过程见 R86S IRQ 16 nobody cared。 在修不了根因(BIOS 没有更新、microcode 已是最新)的情况下,第一件要做的事是让机器卡死后能自动恢复,这就是硬件看门狗的用途。这篇记录硬件看门狗是什么、Linux 和 Proxmox 怎么用它,以及它在 r86s 这次排查里起的作用。 看门狗是什么 看门狗(watchdog timer,WDT)是一个独立于 CPU 运行的倒计时器: 软件启动看门狗,设一个超时时间,比如 10 秒; 软件定期"喂狗"(kick / pet),每次喂狗把倒计时重置回 10 秒; 如果软件卡死、没人喂狗,倒计时走到 0,看门狗就直接拉复位信号,把整台机器重启。 关键在于独立:倒计时由芯片组里的电路自己走,不依赖 CPU 执行任何指令。CPU 死锁、内核卡死、关了中断,它都照样倒数,照样复位。这一点是软件手段做不到的。 这个思路最早来自嵌入式和工控领域:无人值守的设备死机了没人去按电源键,必须自己恢复。单片机几乎都内置看门狗。 硬件看门狗在哪里 它通常不是一块单独的板卡或模块,而是集成在芯片里的一小块电路。x86 机器上常见的几种: 位置 例子 Linux 驱动 Intel 芯片组(ICH/PCH)里的 TCO 定时器 从 1999 年的 ICH 一直到现在的 PCH,包括 Jasper Lake iTCO_wdt AMD 芯片组(FCH)里的 TCO 定时器 大部分 AMD 平台 sp5100_tco 主板上的 Super I/O 芯片 ITE IT87xx、Nuvoton NCT67xx、Fintek F718xx it87_wdt、w83627hf_wdt、f71808e_wdt 服务器的 BMC IPMI 看门狗 ipmi_watchdog ARM SoC 树莓派的 BCM2835 bcm2835_wdt 所以"几乎所有 x86 主板都有"是成立的,至少芯片组里会有一个 TCO 定时器。但"有"不等于"能用": ...

Created 10106-10-10 · Updated 10106-10-10 · 5 min · 1038 words · -

R86S IRQ 16 nobody cared:HD Audio 控制器引发的共享中断告警

背景 homelab 里的 r86s(R86S 小主机,Celeron N5100,Jasper Lake 平台)跑 Proxmox VE,上面是 K8s 的两台 VM:k8s-50 和 k8s-51,拓扑见 Homelab topology。这台机器偶尔会整机卡死,所以每天 04:00 有一个定时任务自动 apt full-upgrade 加重启。 排查卡死问题时,在内核日志里看到了这样一段: kernel: irq 16: nobody cared (try booting with the "irqpoll" option) kernel: CPU: 0 UID: 0 PID: 47 Comm: kworker/u16:1 Tainted: P O 7.0.14-20-pve #1 kernel: Hardware name: BROUNION R86S/R86S, BIOS 5.19 04/12/2022 kernel: Workqueue: pm pm_runtime_work ... kernel: handlers: kernel: [<...>] idma64_irq [idma64] kernel: [<...>] i2c_dw_isr kernel: [<...>] i801_isr [i2c_i801] kernel: [<...>] sdhci_irq [sdhci] threaded [<...>] sdhci_thread_irq [sdhci] kernel: [<...>] azx_interrupt [snd_hda_codec] kernel: Disabling IRQ #16 这篇记录这条告警是什么意思、根因是什么、影响什么,以及能用哪些 OS 或 BIOS 配置消除它。 ...

Created 10106-10-10 · Updated 10106-10-10 · 6 min · 1182 words · -

Proxmox VE 存储:VG、瘦池与虚拟机磁盘

背景 在 homelab 里用 Proxmox VE(PVE)跑 Kubernetes 节点时,经常会同时遇到两类「空间不够」: PVE 宿主机上 local-lvm 余量、pvesm status 里的 Available; 虚拟机里 df -h / 根分区余量。 二者相关,但不是一回事。本文用一台实际节点 pve03(192.168.50.3)在 2026-06 的布局说明 VG、瘦池(LVM thin)、存储 ID local-lvm,并顺带说明 OpenTofu 里磁盘容量与现网不一致时该怎么对齐。 更偏操作步骤的扩容命令见 硬盘扩容, PVE, Archlinux;PVE 安装与日常命令见 PVE。IaC 侧约定在仓库 w10n-config 的 homelab/opentofu/pve/(不在本站展开)。 pve03 上的分层(2026-06 快照) 物理上只有一块主盘 sda(约 111.8 GiB)。安装 PVE 后,典型结构如下。 sda (~112G) └─ sda3 LVM VG "pve" ├─ pve-swap ~7G ├─ pve-root ~28G ext4,PVE 宿主机 / └─ pve-data ~61G LVM thin pool(供 local-lvm) ├─ vm-102-disk-0 k8s-38 虚拟盘 20G ├─ vm-104-disk-0 k8s-39 虚拟盘 25G └─ base-103-disk-0 模板盘 8G(已关机) 同一次查询里: ...

Created 2026-06-02 · Updated 2026-06-02 · 4 min · 755 words · -

Proxmox VE 虚拟机内存热扩容(虚拟机内 Arch Linux)

背景 在 homelab 里用 OpenTofu 管理 PVE 上的 K8s 节点(例如 r86s 上的 k8s-51 control-plane、k8s-50 worker)。k8s-51 曾长期只分配 4GiB 内存,同时承担 API VIP、kube-apiserver 与 etcd Leader,容易出现 apiserver 访问本地 etcd 超时,进而导致其它节点因 node lease 续租失败 被标为 NotReady。 后续将 k8s-51 内存一度调到 8GiB 缓解压力;在 r86s 物理机仅 16GB、且 K8s 节点统一 balloon: 0 的前提下,又把 k8s-51 调回 6GiB,与 k8s-50 的 6GiB 合计约 12GiB,给宿主机留出缓冲。 本文记录:内存热扩容、memory balloon、以及 balloon: 0 时如何规划 VM 内存。 结论一览 问题 答案 PVE 能否在线加大内存? 一般可以(只增不减时,多数情况无需先关机) 虚拟机内 Linux 能否感知并用上? 可以,内核通过 ACPI 内存热插拔 online 新内存 虚拟机内要不要额外命令? 加内存通常不需要(不同于磁盘要 growpart) 是否保证绝不重启? 不保证;缩内存时更可能重启 balloon 在哪配置? PVE 每台 VM 的配置文件,不是 Arch 里的设置 K8s 节点建议开 balloon 吗? homelab 建议 统一 balloon: 0,靠给够 memory 而不是超卖 PVE / QEMU 侧 只加不减 在 PVE 中增大 VM 的 memory(单位 MiB,6GiB = 6144,8GiB = 8192)时,通常可对运行中的虚拟机通过 QEMU 热插内存条(ACPI DIMM hotplug) 完成。 缩小内存:一般需要关机或会触发重启;运行中缩容既不安全,也基本不可行。 开了 balloon,扩容还要不要 ACPI 热插拔? 不能简单理解成「开了 balloon 就不用 ACPI 热插拔」,要分清你在改什么: ...

Created 29296-05-29 · Updated 29296-05-29 · 4 min · 760 words · -