P0 正确性 - 退出码:改用 .NET Process 直接启动、让子进程继承控制台,不再用 Start-Process -PassThru (在 7.7.0-preview.4 上 ExitCode 恒为 $null,会把成功的压缩判成失败); 7z / RAR / tar 三条解压分支统一走同一个取退出码的封装。 - BackupList 解析:先按第一个 :: 切段再处理引号(整行被一对引号包住的写法不再把排除表 吞进路径);排除表同时接受 , 与 ;(旧实现只认 ;,导致排除从未生效);支持 :- / :+ / @flag。 - 补回 .ssh 与孤儿归档:.ssh 进清单;孤儿归档在备份端也做审计并点名; 带 -Only / -Skip 时不再把未选中的归档误报成孤儿。 - Resolve-BackupEntry 里 $rootName 在赋值前被引用(会读到外层作用域残留值),已提前赋值。 P1 归档可靠性 - 每个条目写进 manifest.json:源、归档、时间、退出码、校验结果、失败原因, 并区分 warnings(在位归档)与 attemptWarnings(本次尝试)。 - 归档后做 7z t 内容校验,先写 .tmp、校验通过再原子替换(File.Move overwrite)。 - manifest.roots 记录归档内**真实**的顶层条目名(原先记的是软件名,Edge 实际是 "User Data")。 P2 可用性 - Restore 支持 -WhatIf / -DryRun / -VerifyOnly / -Only / -Skip; 这三种"只看不写"的模式一个字节都不写(原先会写回 manifest.json)。 - Edge 等高缓存条目加排除规则并实测:1781 MB / 27961 项 -> 72 MB / 2294 项; 书签、密码、Cookies、偏好、历史、IndexedDB、Local Storage 全部保留。 普通模式是相对归档根目录锚定的,嵌套的那些(如 OneAuth\WebView2 里的 Crashpad) 改用 ! 组件形式才会命中。 - 日志落盘 logs/<backup|restore>-<时间戳>.log;退出码按失败数返回。 - tools/Register-BackupTask.ps1 注册每日计划任务;tools/Rename-Archives.ps1 迁移旧归档名。 - root= 标记此前静默失效,现在明确告警(该功能尚未实现)。 P3 测试与验证 - tests/BakNRet.Tests.ps1:Pester 5 套件 62 项(含用子进程跑 Backup.ps1 / Restore.ps1 的端到端与针对上述缺陷的回归)。 - tests/Run-Pester.ps1 + tools/Install-TestDependencies.ps1:把 Pester 装到仓库内 .tools/, 不动机器上的全局模块(系统自带的 3.4.0 缺 Should -Be)。 - tests/Restore-Drill.ps1:真实归档恢复演练,明确区分"源在备份后变过"与"归档/解压有问题"。 - tests/Run-Tests.ps1(49 项,零依赖)与 tests/Run-E2E.ps1(23 项)继续可用;三套共 134 项全通过。 真实机器验证 - 生产归档 22/22 通过 7z t;-VerifyOnly 不再改动 manifest.json(SHA256 前后一致)。 - 真实恢复演练 12/12 通过,27,670 个文件与活源逐字节一致。 - 修复了生产 scoop-persist.7z:原先只有 90 字节(空归档)而源有 1.3 GB, 重打包后 233 MB,恢复演练 26981/26981 全部一致。
84 lines
3.8 KiB
Plaintext
84 lines
3.8 KiB
Plaintext
# BackupList.txt —— 备份 / 恢复共用清单
|
||
#
|
||
# 语法:
|
||
# <软件名 或 路径> [ :: <排除模式>[,<排除模式>...] ] [ @<标记> ]
|
||
#
|
||
# 三种写法都可以,混用也没问题:
|
||
#
|
||
# 1. 软件名(推荐)—— 去 SoftwareCatalog.psd1 里查目录,归档名就是软件名
|
||
# FooClolor
|
||
# Kazumi :: !*Cache
|
||
#
|
||
# 2. 字面路径 —— 含 `\`、`/` 或 `%` 就按路径处理,归档名沿用 <名>_from_<路径>
|
||
# %UserProfile%\Documents\PowerShell
|
||
# C:\Programs\MiFlash
|
||
#
|
||
# 3. 软件名 + @pathname —— 强制用旧的路径命名算法
|
||
# FooClolor @pathname
|
||
#
|
||
# 排除模式:相对归档根目录。以 ! 开头表示"任意层级下匹配这个组件名"(7z 的 -xr!)。
|
||
# 不要自己写引号;模式里的空格会被自动转成 ?(7z 的模式不支持空格)。
|
||
# 标记:
|
||
# encrypt 用 7z 加密该归档(口令来自 BAKNRET_PASSWORD 或 -KeyFile)
|
||
# pathname 用路径命名算法而不是软件名
|
||
# root=<名> 覆盖归档内的根目录名(默认就是软件名)
|
||
#
|
||
# 归档名 = 软件名,所以:**同一个软件不要写两遍**,脚本会直接报重复错误。
|
||
# 软件名(连同排除规则、加密标记)都维护在 SoftwareCatalog.psd1 和本文件里,
|
||
# 两边都进 git,改动可追溯。
|
||
|
||
# ---- 用户配置 / 开发环境 ----
|
||
legendary
|
||
opencode
|
||
scoop-config
|
||
# .ssh 里是私钥。想加密就把下面那行 @encrypt 的注释互换(见 README「加密」)
|
||
.ssh
|
||
CodeSpace :: Shuery-Shuai\ImmortalWrt-BPI-R4-Firmware\immortalwrt\
|
||
PowerShell
|
||
WindowsPowerShell
|
||
scoop-persist
|
||
|
||
# ---- 应用数据 ----
|
||
AutoDarkMode
|
||
Kazumi
|
||
piliplus
|
||
fnm
|
||
twinkle-tray
|
||
|
||
# ---- 浏览器:排除可再生的缓存、遥测与扩展本体 ----
|
||
# 解压后 4.22 GB / 25030 个文件里,下面这组排除会留下约 431 MB / 2164 个文件,
|
||
# 排除掉的 3.79 GB 全部可以重新生成:缓存、组件缓存、Service Worker、
|
||
# 扩展本体(可从商店重装)、遥测与优化数据。
|
||
# 书签/密码/偏好/历史,以及站点数据(IndexedDB / Local Storage)都保留。
|
||
# 想再省 230 MB,可以把 Default\IndexedDB、Default\Local Storage、
|
||
# Default\Session Storage、Default\blob_storage、Default\WebStorage 也加进来。
|
||
# !*Cache 一次覆盖 Cache / Code Cache / GPUCache / DawnCache / GrShaderCache 等一批。
|
||
#
|
||
# 注意:不带 ! 的普通模式是**相对归档根目录锚定**的(会展开成 `-x!User?Data\<模式>`),
|
||
# 所以它只排除根目录下那一份。Edge 的 OneAuth\WebView2\EBWebView\ 里还有一整套
|
||
# 自己的 Crashpad / BrowserMetrics / ProvenanceData / optimization_guide,
|
||
# 根锚定模式碰不到它们 —— 这些可再生的东西一律用 ! 形式按组件名排除(-xr!),任意层级都命中。
|
||
# 实测:根锚定的 Edge 归档 1781 MB / 27961 项 -> 改成 ! 形式后 72 MB / 2303 项,
|
||
# 书签、密码(Login Data)、Cookies、偏好、历史、IndexedDB / Local Storage 全部保留。
|
||
#
|
||
# 注意:Edge 常驻时打包会有上百个文件读不到(含 Login Data / Cookies),
|
||
# 脚本检测到警告后不会用这份不完整的归档覆盖已有的完整归档。备份前建议先退出 Edge。
|
||
Edge :: !*Cache,!component_crx_cache,!ProvenanceData,!optimization_guide,!Crashpad,!BrowserMetrics,Default\Service Worker,Default\Extensions,Default\ExtensionActivityEdge,Snapshots,Edge Sidebar,Edge Shopping
|
||
WindowsTerminal
|
||
|
||
# ---- 系统 ----
|
||
Startup
|
||
|
||
# ---- C:\Programs ----
|
||
BaiduNetdisk
|
||
FooClolor
|
||
March7thAssistant :: 3rdparty\WebBrowser\UserProfile\Integrated,March7thAssistant\logs\
|
||
MiFlash
|
||
MiFlash_Unlock
|
||
QuarkCloudDrive
|
||
translucenttb
|
||
ScoopApps-persist :: persist\ariang-native\UserData\DawnCache,persist\ariang-native\UserData\GPUCache,persist\ariang-native\UserData\Local Storage,persist\ariang-native\UserData\Session Storage
|
||
|
||
# ---- 其它盘 ----
|
||
Aria
|