diff --git a/docs/测试说明/存储维护与容量恢复.md b/docs/测试说明/存储维护与容量恢复.md index 177b6d63..a02eb40f 100644 --- a/docs/测试说明/存储维护与容量恢复.md +++ b/docs/测试说明/存储维护与容量恢复.md @@ -81,9 +81,33 @@ ## 5. 变更记录 +### 4.2 自检台账清零,重建 S7 审计基线(2026-10-22 实测) + +`@test --require-selftest-pass --selftest-scope all`(累计口径)在台架上**永远 FAIL**: +`/log/selftest.log` 里躺着 29 条历史记录,`2026-10-10 09:24:12 → 2026-10-14 06:55:02`, +组成为 **16 × `watchdog reset` + 13 × `heap low water`**——都是看门狗引入期与堆迁移期 +留下的,两件事后来都已结案。新判据(只看本次新增)已不受影响,但**审计口径要能用,就得 +有一块干净的基线**,所以按用户决定清掉台账。 + +- 安全性判据:`sys_log_mcu.c` 是**每条记录开-写-关**(`f_open(FA_WRITE|FA_OPEN_APPEND)` + → `f_write(64)` → `f_close`),**不持有常驻句柄** → 从 FTP 侧 `DELE` 不会撕裂,下次有 + 故障时自动重建文件。清理前先把导出副本留档(1856 B = 29×64)。 +- **产品数据一条不动**:`run.log`(运行记录)、`wdev.log`(掉电取证,带 8 KB 护栏)、 + `soe.log`(B9 SOE 动作记录)——这三条是固件在写的活文件,容量护栏由固件自己管,别手删。 +- **顺带清掉的孤儿**:`/log/flushchk.bin` **32,768 B**,全库零引用——已退役的 flush 诱导实验 + 留下的(`sys_log_mcu.c` 注释里那句"旧称 flush 诱导"就是它)。**删前先 RETR 出来验过内容**: + 256 种字节值全部出现、前 64 字节全 `FF` → 就是一份 0..255 图案的写盘校验填充,没有任何 + 产品语义;留档后再 `DELE`(判据同 §4.1:先知道删的是什么)。 +- 清理后 `/log` 只剩三条、**全是产品数据**:`run.log`(运行记录)、`wdev.log`(掉电取证)、 + `soe.log`(SOE 动作记录)。之后再跑 `@test --require-selftest-pass` → **PASS** + (699 ms、`SELFTEST_BASELINE: 既有记录 0 条`)。 +- 验收(两条判定路径都要过):`--require-selftest-pass` → `SELFTEST_BASELINE: 既有记录 0 条 + (status=absent)` → PASS;`--selftest-scope all` → `selftest: no fault record` → **PASS** + (清零前这条是 `29 fault record(s)` FAIL)。设备侧无此文件时 lftpd 回 450,被按"台账干净" + 处理,这条映射见 `../架构设计/STM32F4-Base存储架构说明.md` §10.3 与 S7 判定表。 + | 日期 | 变更 | |---|---| | 2026-09-21 | 新建:A/B/C 三个维护动作;容量恢复原理(dhara checkpoint 坏块计数不清零)与全片擦除恢复路径(实测 95200 → 96064) | -| 2026-10-22 | 加 §4.1「根目录残留文件清理」(动作 D,与 A/B/C 区分):台架实测 27 个探针残留文件 / - 262 KB 已清;判据 = 只删显式点名、保留 `/config.ini`、`/PROT_SET.BIN`、`/log`;清后 `@test` - PASS + LIST 完整性回归 PASS | +| 2026-10-22 | 加 §4.1「根目录残留文件清理」(动作 D,与 A/B/C 区分):台架实测 27 个探针残留文件 / 262 KB 已清;判据 = 只删显式点名、保留 `/config.ini`、`/PROT_SET.BIN`、`/log`;清后 `@test` PASS + LIST 完整性回归 PASS | +| 2026-10-22 | 加 §4.2「自检台账清零,重建 S7 审计基线」:29 条历史记录(16 × `watchdog reset` + 13 × `heap low water`,10-10 → 10-14,两案均已结案)按用户决定删除;安全判据 = `sys_log_mcu.c` 每条记录开-写-关、不持常驻句柄;`run.log`/`wdev.log`/`soe.log` 属产品数据不动;顺带删掉孤儿 `/log/flushchk.bin`(32 KB、0..255 图案的写盘校验填充、全库零引用,删前留档);清后 `this-run` 与 `all` 两条判定路径都 PASS(清零前 `all` 是 29 条 FAIL) |