【win备份还原工具开发日记】27:审查清单全部修复、PE 内续跑救援、recover 通道 D1-D4 与 V2 第二系统验收
【win备份还原工具开发日记】27:审查清单全部修复、PE 内续跑救援、recover 通道 D1-D4 与 V2 第二系统验收(v2.6.19→v2.6.20)
对应文档(同日 5 篇):docs/20261019-0015-v2.6.19全部修复实机验收-Step-5-Preview.md、docs/20261019-0843-A入口离线还原PE续跑完成与四处阻塞缺陷-DeepSeek-V4.1-Flash.md、docs/20261019-1137-手动recover通道D1D2D3D4实机全通与两处代码页缺陷-Hy3.md、docs/20261019-1226-残留清理与P2核对与剩余链路状态-Hy3.md、docs/20261019-1918-V2还原到第二系统实机验收与接手交接-DeepSeek-V4.1-Flash.md
今天做了什么
v2.6.19 审查清单全部修复 + 实机验收(00:15,Step-5-Preview):用户针对 10-18 审查清单下达「全部修复并验收」——高危 3(H1–H3)+ 中危 10 + 低危 11 + 设计观察 7 + 10-18 两个新缺陷(待续跑框文案-行为不一致、ef71fccc 三按钮死锁)+ 僵尸任务自动/手动收口,共 27 项。核心实机项:①僵尸任务收口——tasks\ef71fccc(卡 stage:"capturing" 的任务)用 abandon-task exit 0 收口:can_abandon_before_target_write 放行 Capturing(该阶段只捕获暂存 WIM、目标卷未碰过)、abandon_task 的 BCD 补偿失败不再以 ? 中断收口(BFSVC 持锁 → raw 访问错误 32,补偿失败照实记 ERROR 后继续);回读 stage=failed + bootsequence 撤销 + 证据保留。②真实备份端到端:T: 5G 卷 → br-2619-progress.wim 415,761,551 B、副档 SHA 一致、durationSecs=46、索引名 Windows (T:) 20261018(非系统盘降级命名)。③稳定性三件套:EventID=1000 近 2h 零条、WerFault=0、GUI 截图。未实机项明示:B 键 RE 内端到端、待续跑框文案(代码级+单测)。新坑:cmd start 挂 prlctl exec 管道(改 PS Start-Process)、Session 0 GUI 对交互桌面不可见。
A 入口离线还原 PE 内续跑救援(08:43,DeepSeek-V4.1-Flash):A 入口那轮在 RE 内被宿主满盘打断——C: 停在「已格式化 + 只灌了 19GB」半成品,机器陷入 Preparing Automatic Repair → 失败 → 重启的无限重启(CPU 107% 常驻)。期间一度把 VM memsize 压到 512MB 腾空间导致 WinRE 0xc0000017(内存不足建 ramdisk),已恢复 6144MB。冲出通道:停 VM → prlctl set --device-bootorder "cdrom0 hdd0..."(CdRom 已指向 artifacts/BaseWinPE.iso)→ Press any key 窗口用 send-key-event --scancode 28 每 0.8s 连发 40 次顶住 → 进 PE 后无 Parallels Tools、无 prlctl exec,只能 scancode 注入 + 截图回读。用 CLI recover 续跑完成:镜像应用 → bcdboot → 系统实机启动(序列号 468E-BF7C→84CD-3D47、70.8 GiB 已用、零崩溃)。最后一段 WinRE 重接被拒:D4 = winre_registration::reconnect 把「WinRE 在独立恢复分区」当异常,bcdboot 成功后拒绝重接 → 任务 failed、WinRE 被禁用、recoverysequence 被清空,需手工 reagentc /enable 补回(已补,Enabled @ partition6)。四处阻塞缺陷:D1 <task-root> 是工作区根(传错报 os error 3 且错误不含路径);D2 resolve_volume_root 只用任务记录盘符、PE 盘符一变即失败(同卷只能挂一个字母,diskpart assign 是搬移);D3 recover 在 PE 不自动挂 ESP,失败点在 STEP 3/4 之后(镜像白灌一次)需 --efi-root S:\。
手动 recover 通道 D1–D4 实机全通(11:37,Hy3,v2.6.20):在 PE 内手动跑 BackupRestore.exe recover <workspace-root> <task-id>(不依赖 prepare 武装的一次性 bootsequence)端到端验证四个修复:D1 第一参是工作区根(内部拼 tasks/<id>);D2 镜像卷按卷 GUID 重解析盘符(PE 里 H: 实测变 E:,不认记录盘符);D3 STEP 1 前自动解析/挂载 ESP;D4 WinRE 在独立恢复分区(disk0/partition6)时校验载荷齐备后按独立分区重接。全链通过:DONE_EXIT=0、任务 success、目标卷真实重写(序列号 625D0AD5→D2BCAA82 + 哨兵法)、WinRE 仍 Enabled @ partition6、重启进桌面零崩溃。通过前连栽两处缺陷并修复:A 设备路径大小写(BCD 值统一小写化后旧 partition_of_device_path 只认大写 \Device\ 前缀 → text_parsing::device_path_volume_name 大小写无关);B 菜单名回读在非 CJK 代码页误判(PE 的 ANSI 代码页把每个汉字回读成 ?,BCD 内存的是正确 UTF-16 → boot_menu::menu_name_matches 容忍有损回读,纯 ASCII 名仍严格)。
残留清理 + P2 核对 + 剩余链路(12:26,Hy3,v2.6.20 收尾):①残留任务 02138f14(backup/capturing 20% 非终态、带 payload、已武装 bootsequence,每次 GUI 启动弹待续跑框)经 abandon-task <root> <id> 清理(root=工作区根非 tasks 目录):stage=failed、bootsequence 撤销、payload 删、证据保留;②构建同步:发现包目录 exe 是旧版(01:37,2,825,728 B)而 H:\brwork 才是 v2.6.20(2,853,888 B)——recover 验收用的是 H: 那份;执行 ./build-win.sh --deploy 两处统一 SHA 253022cb…,部署自动终止仍在跑的旧 GUI;③P2 数据卷硬拒核对:windows_prepare.rs:2510 按目标卷 SYSTEM hive 探测判定(数据卷放行),4 例单测三层闭环,CLI 端到端因当时 F: 已转数据卷缺「非活动 Windows 卷」未跑(该缺口次日补上)。
V2 还原到第二系统实机验收 + 接手交接书(19:18,DeepSeek-V4.1-Flash):create-secondary 把 br-2619-cur.wim 还原到原 E:(249GB)做成第二系统,任务 79445787 success/100%。铁证:镜像 capturedUsedBytes 76,903,538,688 对实测 C: 已用 76,869,029,888(差 34MB);序列号 6402-82D5→48D5-196E;BCD 新条目 {c46f6056} description=Windows Backup E、default 指向它;新系统实机启动(build 26200,五 hive 齐全);原系统完好退到 F:(6E64-5D70);bootsequence 已清;WinRE Enabled@partition4。★ 盘符重排:C:/E: 身份互换(BCD device 同步成运行字母,Windows 正常行为别去「修」)。★ 失误教训:DISM 灌镜像途中 prlctl restart 打断(exit 1235),靠 bootsequence 残留自动二次进 WinRE 重跑才成功。★ 按键坑:WinRE 内点弹框必须用 tools/win-clicker/vmkey.sh(N=57),手写 scancode 连错两次(31=M、48=B)。文末含独立代码审查记录:用户担心结论有误,另一 AI 对全部可证伪断言逐条回源码核对——核心判断全部成立,两处描述已订正。
教训与经验
- 宿主满盘 = VM 静默停机:连日志都写不下去,C: 半成品 + 无限重启;救援只能走 PE + CLI recover,且要先把 memsize 恢复原值(512MB 会让 WinRE 起不来)。
abandon-task <root> <id>两参、root=工作区根:只传 id 会被当成 root 报task id is required。- PE 内无 prlctl exec:只能 scancode 注入 + 截图;
Press any key窗口短,--scancode 28每 0.8s 连发顶住;Shift 必须 press→150ms→字符→150ms→release。 - 部署一致性:包目录与
H:\brwork可能各一份不同版本 exe,验收前必须./build-win.sh --deploy统一并核对 SHA;部署会自动终止旧 GUI。 - 盘符重排是 Windows 正常行为:BCD device 同步成运行字母,别去「修」;判身份用卷 GUID/分区号。
- 代码页坑:BCD 值是 UTF-16 但
bcdedit /enum回读受 ANSI 代码页影响,非 CJK 代码页把中文回读成?——比对要容忍有损回读。
下次接手的注意
- 剩余链路表:B 键 RE 内端到端、V2 后的 V4–V6 场景、P5 缺组件、清理项(次日 10-20 陆续完成)。
- P2 CLI 端到端缺口(非活动 Windows 卷硬拒)待补;
restart-gui-h.ps1从H:\brwork启动 GUI 是验收标配。
- 点赞
- 收藏
- 关注作者
评论(0)