vdi-cloud/docs/overnight-box-observation-20261104.md

4.8 KiB
Raw Blame History

盒子过夜重启与健康记录(2026-11-04)

已为盒子192.168.1.188启用vdi-overnight-observer.service,每60秒落盘一次心跳,并开机自启。记录始于2026-11-04 19:35左右;统计范围是启用之后,不冒充历史累计重启次数。没有重启盒子、Windows、Moonlight,也没有修改显示、输入、网络或GPU配置。

明早看哪里

盒子上的中文汇总:/home/armbian/vdi-terminal/logs/overnight-summary.txt。

详细日志:/home/armbian/vdi-terminal/logs/overnight-health-YYYYMMDD.log,跨午夜自动切换日期,今晚及明早两天都要看。内容为带时间和事件类型的JSON行。状态:/home/armbian/vdi-terminal/state/overnight-state.json。

cat ~/vdi-terminal/logs/overnight-summary.txt
systemctl status vdi-overnight-observer.service --no-pager
grep '"event": "boot_change"\|"event": "restart_assessment"' ~/vdi-terminal/logs/overnight-health-*.log

汇总每分钟更新启用时间、最近心跳、重启次数、当前boot ID、开机时长及最近一次重启线索判断。服务自身停止/重启不算盒子重启。

记录内容和原因边界

  • 每分钟:真实boot ID、/proc/uptime、负载、可用内存、温度、剩余磁盘、网络接口状态/错误计数、Moonlight和Kiosk进程PID、串流目标/分辨率/帧率、X11桌面几何。
  • 每10分钟:当前启动的内核warning/error线索,不将普通USB电源管理或watchdog能力声明直接判断为故障原因。
  • 每次启动:与持久状态比较boot ID;变化时增加一次整机重启计数,保存上次最后心跳/运行时长,并按上次实际boot ID读取journal尾部、warning和last -x。使用单调运行时间辅助发现NTP/RTC时间跳变,不靠墙上时钟或last单独断定是否重启。
  • 重启原因只按证据报告:发现正常关机/重启流程;发现panic/OOM等线索但因果未确认;或证据不足、原因未确认。突然断电和硬复位可能没有完整记录,不能保证区分两者,更不能从缺日志直接断定电源坏了。
  • 原子替换状态/中文汇总、每次写日志执行fsync,并限制重复服务实例。日志仅记录选定进程字段,不复制凭据或连接票据。

低权限观察进程通过root拥有的固定启动辅助程序/usr/local/libexec/vdi-observer-pstore获取/sys/fs/pstore及/var/lib/systemd/pstore的只读、有大小上限快照。快照写到root拥有、systemd-journal组只读的/var/lib/vdi-observer/pstore.json;不清除原档案、不修改内核崩溃参数。现有归档仅含41字节reboot: Restarting system,文件时间陈旧,作为部署前基线保留,不能认定为今晚新发生的重启。

跨重启存储

现场/var/log是zram内存盘,而/var/log/journal是指向/var/log.hdd/journal的符号链接,后者位于eMMC ext4。新增/etc/systemd/journald.conf.d/70-vdi-observer-journal.conf,使用persistent、磁盘日志预算64MB、运行日志预算16MB、保留7天、30秒同步间隔,并已flush/sync到磁盘。

只重启了日志系统journald和本次观察服务;没有停止当前串流。journald容量限制及轮转不是“断电绝不丢最后一秒”的保证。观察日志按日保留7份,每个日期最多4个8MB分段;不会删除原Kiosk、Moonlight或其他业务日志。

验证和限制

11项测试覆盖:首次基线、同boot服务重启、跨boot计数及上次心跳、未知原因不误报、正常关机标记、OOM仅作为线索、旧pstore不冒充新故障、状态版本校验、连续重启/历史上限、状态与中文汇总落盘、跨日期分文件。实际验证了观察服务重启后计数仍为0、文件落盘、自动启动登记、正常显示/串流进程保持。没有为验证而真正重启盒子。

部署首次在systemd-tmpfiles处理Armbian journal符号链接时失败,未启动观察服务,也未影响串流;随后改为处理真实eMMC目标目录,部署成功。升级pstore读取仅重启本次观察服务,仍不计作整机重启。

证据:docs/evidence/overnight-observer-20261104/。原服务/本次配置(如存在)的备份在盒子~/vdi-terminal/backups/overnight-observer-20261104-*。

停止记录和回退

sudo systemctl disable --now vdi-overnight-observer.service

这只停止本次记录,已有日志和汇总保留。如需恢复journald原设置,恢复该drop-in备份或移除本次新增70-vdi-observer-journal.conf后重启journald;不删除已经保存的journal数据。后续不再需要时再清理本次unit/root辅助程序。

依据:systemd journald存储设置、journalctl按boot ID读取和flush/sync。