@@ -1,5 +1,57 @@
# 生产到 ARM 备份传输中断实施计划
## 2026-10-05 最新决定与本地落实:仅手动快照
用户明确选择仅手动快照,不用其他厂商对象存储,也不再选 ARM/hyinda-20c 承担备份。此前对象存储选型、ARM 修复或替换、两个自然周期验收不再作为当前推进目标;原始结果保留,不勾成通过、不自动归档。
- [x] 复用本 task,更新 PRD 当前目标、design 切换方案及部署规则;不再询问备份产品选择。
- [x] 本地确认停用依赖:`scripts/refresh-deployment-contract.sh:verify_timers` 要求三个自动备份 timer 启用且运行;生产身份仍取自 daily service。不能直接卸载或停 timer 后宣称发布兼容。
- [x] 本地 task validate、Trellis governance、process baseline、敏感扫描及 diff 检查通过;docs registry 无错误,保留 22 个未登记文档的既有警告,本轮未改动 docs 或处理这些文件。
- [x] 用户 2026-10-05 批准适配后本地实施并验证:
- `scripts/refresh-deployment-contract.sh` :新增根属普通文件 `/etc/hyb-oa-backup-mode` 显式模式。文件不存在 = 原自动模式(行为不变);内容恰为 `manual_snapshot` 时要求三个自动备份 timer `disabled:inactive` (否则 exit 45 `backup_timer_not_disabled` ),`hyb-oa-warch3-ops.timer` 仍须 `enabled:active` (43);其他内容/符号链接/非 root 属主 → exit 44 `backup_mode_invalid` ,`probe` 同样校验。不删除、不 mask 备份 unit,部署身份仍取自 daily service。
- `deploy/trialrun/deployment-contract-lib.sh` 增加 44/45 分类;`validate-env-contract.js` 增加必需片段;部署规约 Validation Matrix 增加对应条目。
- 验证:`run-deployment-contract-refresh-contract.sh` PASS(新增自动模式下停用失败、手动模式通过/全部运行/部分运行/ops 停用/内容非法/多行/符号链接/移除模式文件回归共 10 组断言);两个源码变异(手动模式接受运行中 timer、跳过内容校验)均使测试变红;`validate-env-contract.js` exit 0;`deployment-safety-contract` 39/39、`deployment-db-lifecycle` 52/52。
- [x] 复核补充(同日):①`probe` 也执行模式与 timer/service 一致性检查,部署前即拦截,`refresh` 部署后复检;②手动模式还要求三个备份 `.service` 为 `inactive` /`failed` ,在途运行 → 45。新增 7 条断言(probe 拦截运行中/部分运行、自动模式 probe 拦截停用、服务 active/activating 拒绝、failed 放行);`probe` 去掉 timer 检查、去掉 service 检查两个变异均使测试变红;合同测试、env 合同、部署安全 + DB 生命周期 91/91 通过。注意:自动模式下 timer 异常现在部署前就失败(原先只在部署后失败),属有意收紧。
- [ ] 远端切换(另批;生产需 root 安装权限,ARM 需用户 sudo)。顺序:
1. 用 `install-deployment-contract-refresh.sh install` 安装新 helper;无模式文件时仍为自动模式,forced-command `probe` 须 PASS。
2. 先 `systemctl disable --now` 三个生产备份 **timer ** (只停定时器,阻止新任务启动,不动 service)。
3. 有界等待三个备份 service 变为 `inactive` /`failed` (上限预先写定,例如 90 分钟);超时则停止切换、保持现状并报告,**不强杀**。
4. 写入 `/etc/hyb-oa-backup-mode` ( root:root 0644,内容 `manual_snapshot` ),forced-command `refresh` 返回 PASS。
5. 由用户 sudo 在 ARM 上 `disable --now hyb-oa-offhost-deadman.timer` 并**单独核验** timer `disabled:inactive` 、service 非 active;生产侧 `refresh` 成功不能代替 ARM 核验。未停 dead-man 时,生产停传后 ARM 会发一次 `archive_stale` 。
- 回滚:删除模式文件,`enable --now` 三个 timer 与 dead-man,再跑 `refresh` 。历史备份、unit 文件、公网健康探针均不动。
- [ ] 完成受限只读独立复核;当前 inline 模式下仅主会话检查,独立复核待完成。
- [ ] 形成固定版本、模式配置、四个备份 timer 及回滚清单,另获生产/ARM 配置变更批准后执行与核验。
运行状态:本轮未连接生产或 ARM,自动备份/告警可能仍按旧配置运行;未停用定时器、未删除历史备份、未创建快照,未提交或归档。当前选择不自动停用独立公网健康监控。手动快照执行时记录目标确认、覆盖确认、创建时间及成功状态,不记录真实资源标识。
## 2026-10-05 告警频繁的只读核验(用户当轮授权,ARM 普通账号)
背景:用户反馈群内仍频繁出现“内部 OA 运维恢复通知”及“OA 公网健康告警/恢复”。授权范围为生产与 ARM 只读核验;生产主机读取被本机工具权限策略拦截,未执行,生产侧数据全部为 NOT_RUN。
ARM 侧结果(13:30–13:45 CST,只记聚合值,不记地址/路径/日志原文):
- dead-man: timer active/enabled,10-05 06:30 service success/0。说明当日 06:30 时 ARM 最新归档未超 26h 阈值;归档完整性未复核(目录及 sudo 仍不可用)。
- 公网健康探针:timer active/enabled,13:30 那次 service 以 exit-code/1 失败,耗时约 11s(与 10s 超时一致);具体类别在 root-only 状态/journal,普通账号读不到(journal 返回“无条目”)。
- ARM → OA 公网入口:ping 三轮丢包 67% / 74% / 52%,RTT 约 143ms;HTTPS `/ready` 40 次中 11 次超时(10s)、13 次 TCP 建连 >1s、平均 3.35s。
- 对照:ARM → 其他三个国内目标 ping 0% 丢包;ARM 本机 DNS 解析约 1ms(已缓存),当前不是 DNS 阶段问题。本机开发环境经代理(假 IP 段)访问,40/40 成功,但路径不同,不能证明生产入口对普通用户正常。
判断(假设,未结案):当前公网健康告警的主要成因是 ARM 到生产入口这条线路持续丢包导致请求超时,不是 OA 应用不可用。同一条线路的丢包也可能是历史 rsync 传输中断(partial)的成因,需生产侧传输记录印证。丢包发生在 ARM 运营商一侧还是生产入口一侧尚未区分;若在生产入口一侧,真实用户也可能受影响。
未完成 / 下一步:
- 生产侧(备份/watchdog 服务结果、告警状态、容量、近 7 天告警类别与部署时间对照):需用户放开本机对生产主机只读命令的权限,或由用户手动执行。
- ARM root-only 公网健康状态文件和 journal 中的类别统计:需用户以 sudo 手动执行固定只读命令。
- 区分线路问题在哪一侧:需要第三个直连观测点(不经代理)对生产入口测丢包。
### 2026-10-05 候选替代节点 hyinda-20c 只读摸底(用户当轮授权)
- 形态:Windows 主机上的 WSL2( Ubuntu 22.04,x86_64,20 核,15 GiB 内存),经动态域名 + 非标端口映射访问;普通账号 sudo 需密码;无 Docker。
- 可用性:开机约 9 天;近两个月重启记录集中在 09-26(多次)与 08-22(多次),生命周期受 Windows 开关机/更新/WSL 实例回收影响。
- 存储:WSL ext4 显示 1 TiB 虚拟盘,实际受宿主 Windows 盘余量约束(宿主两盘分别约 167G / 88G 可用);未见 Linux 层磁盘加密,宿主 BitLocker 未知。
- 网络:节点流量(含指定公共 DNS 的解析)均被本机透明代理接管为假 IP 段,到 OA 入口 HTTPS 70/70 成功、平均约 0.13s,但不是直连测量,不能作为线路证据。
- 容量需求参照:既有记录单批次聚合约 11 MB 量级,容量和带宽对任何候选节点都不是约束;选型关键是常在线、独立、可控访问与恢复能力。
- 用户决定(2026-10-05):不购买轻量“自动备份”(备份点按 60GB 盘容量预付至实例到期,约 983 元);采用**每次部署前手动创建轻量免费快照**(配额 2,满则删最旧),已写入 `.trellis/spec/hyb-oa/deployment-trialrun.md` Rules。快照随实例销毁而删除,不替代实例外副本;实例外副本(另一厂商对象存储)与 ARM 链路退役待用户另行决定。用户确认控制台中名为“Windows Server”的轻量实例即 OA 生产(实际为 Linux,仅实例名称历史遗留),快照对象即此实例。
- 结论:不建议 hyinda-20c 作为主要异机备份节点(WSL 生命周期、代理接管网络、虚拟盘依赖宿主、无加密证据);可作为额外副本候选。主要节点建议改评国内云的独立厂商对象存储或小型云主机,待用户决策。
## 2026-09-17 结案缺口与最小补证方案(本地整理,未执行远端观察)