# AutoBackup **Repository Path**: yicko/AutoBackup ## Basic Information - **Project Name**: AutoBackup - **Description**: Windows 单机自动备份软件(WPF + .NET 8) - **Primary Language**: C# - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-09-07 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # AutoBackup — Windows 单机自动备份软件 纯本地运行的 Windows 图形化文件备份工具:支持全量/增量备份、定时无人值守调度,备份目标覆盖本地磁盘、网络磁盘(UNC/映射盘)、移动存储设备。数据不上云。 > ⚠️ **测试版声明**:本项目**仅为测试版,仅供测试使用**,可能存在错误或缺陷;如需使用,请**务必先备份好自己的文件**再使用,以防程序出错导致文件丢失或损坏。 > **镜像模式说明**:默认备份引擎为**镜像同步模式**——目标目录始终与源端保持一致,**源端删除的文件/目录会同步从备份中删除**,且默认**不保留历史版本**。镜像模式本身无法防护勒索软件加密与误删;如需版本保护,请**启用「硬链接快照版本化」**(任务高级设置,每次成功备份保留一个历史恢复点),或另建「全量」任务定期备份到另一块目标盘(全量任务不同步删除,可保留最后一份完整状态)。 ## 环境要求 - Windows 10/11 x64 - .NET 8+ 桌面运行时(本项目配置 `RollForward=LatestMajor`,.NET 8/9/10 运行时均可运行) - 构建需要 .NET SDK 8 及以上 ## 构建 ```bash cd AutoBackup dotnet build AutoBackup.sln # 0 警告 0 错误 dotnet test AutoBackup.sln # 325 个测试(含端到端冒烟) ``` > 沙箱/精简终端环境若缺 `APPDATA` 等环境变量导致 NuGet 报错,先 `source build-env.sh` 再构建。 ## 运行 **GUI 模式**(主入口): ``` src\AutoBackup\bin\Debug\net8.0-windows\AutoBackup.exe ``` **无界面模式**(供脚本/计划任务调用,跑完退出): ``` AutoBackup.exe --run-now # 运行一次(按任务配置走增量/滚动校验) AutoBackup.exe --deep-verify # 运行一次并强制全量哈希深度校验(读全量数据) AutoBackup.exe --dry-run # 预演:只读推算将写入/删除哪些文件,不修改任何数据 AutoBackup.exe --dry-run --force-full # 按强制全量口径预演 AutoBackup.exe --manifest [--out <文件>] [--no-hash] # 导出校验清单 AutoBackup.exe --verify-manifest <清单文件> [--root <目录>] [--check-extra] # 按清单校验 ``` 退出码:`0` 成功(`--dry-run` 预演完成 / `--verify-manifest` 全部一致)|`1` 部分成功,或 `--verify-manifest` 存在差异|`2` 任务不存在|`3` 失败(预演未完成 / 清单不可读)|`4` 任务正在其他进程中运行 ## 功能速览 | 功能 | 说明 | |---|---| | 备份任务 | 多源路径、排除规则(扩展名/子目录/通配)、目标类型:本地盘/映射盘/UNC/移动设备 | | 全量/增量 | 首次全量、后续增量;增量判断 mtime+size,可选哈希校验(**滚动切片**:每次运行校验 1/N 数据,N 天覆盖全量;支持 `--deep-verify` 手动全量校验);支持强制全量 | | 镜像同步 | 备份引擎为镜像模式:单一镜像目录与源端保持一致,**源端删除的文件/目录同步从镜像删除**;增量仅复制新增/变化文件;空目录 `.empty` 占位;manifest(SQLite)链式记录 | | 预演(dry-run) | **只读**推算本次运行将写入与删除哪些文件,并给出空间预检、同步删除熔断、不可访问子目录等提示;不创建镜像目录、不复制/删除任何文件、不写快照清单、不修改任务配置。GUI 工具栏「预演…」,或 CLI `--dry-run`(预演删除清单是防误配的最后一环) | | 定时调度 | 每日/每周/每月/开机延迟/手动;错过补跑;每任务防并发。可选**同时注册为 Windows 计划任务**:由系统在计划时刻调用 `--run-now`,**界面没在运行也能按时备份**(以当前用户身份注册,无需管理员权限、不保存密码;「手动」类型不支持) | | 校验清单 | 把最新成功备份的文件清单与 xxHash64 指纹导出为独立 JSON 文件;支持**按清单反向校验**(缺失 / 大小不符 / 哈希不符 / 清单之外的文件),可脱离本机数据库与程序使用——备份盘换机挂载、长期归档后复查、审计留痕。GUI 工具栏「校验清单…」,或 CLI `--manifest` / `--verify-manifest` | | 可靠性 | 单文件失败重试(默认 3 次)不中断任务;目标不可达轮询等待(默认 30 分钟);空间预检;源目录不可访问时跳过同步删除(防误删备份);镜像补漏校验长度/哈希 | | 卷影副本 | 可选开启(任务高级设置):备份前为各源所在卷创建 VSS 卷影副本,**扫描与复制均读取快照**——被独占锁定或正在写入的文件也能完整备份,且整次备份看到的是同一时刻的一致视图。需以管理员身份运行、且源位于本地卷(不支持网络路径);不满足时**自动回退为实时复制**并在运行日志与统计中说明,不影响备份本身 | | 历史版本 | 默认**镜像模式不保留历史版本**(单一目录持续覆盖);可在任务高级设置中**启用「硬链接快照版本化」**——每次成功备份保留一个零额外空间的历史版本点,恢复时可选任意历史点。注意边界:硬链接快照可防误删/整体替换式覆盖,**无法防御对目标盘文件的直接就地改写**,建议把目标盘放在独立磁盘或受限访问位置 | | 恢复 | 从镜像最新状态恢复到原位/新位置;冲突策略:覆盖/跳过/保留两者;恢复采用原子写入(先写临时文件校验后落位),中断不损坏已有文件 | | 驻留 | 开机自启(注册表 Run 键)+ 托盘常驻,关闭窗口即最小化,气泡通知 | ## 数据位置 - 全局数据库:`%ProgramData%\AutoBackup\autobackup.db`(任务/快照 manifest/运行日志) - 诊断日志:`%ProgramData%\AutoBackup\logs\`(按天滚动,保留 30 天) - 应用设置:`%ProgramData%\AutoBackup\settings.json`(与数据库同目录,故对同机所有用户可见) - 备份镜像:`<目标路径>\<源目录名>`(单源);多源为 `<目标路径>\<源目录名_i>\`(各源独立子目录,目录名首用时自动分配并持久化,同名冲突自动加序号避让) ## 功能实现状态(截至最新开发版) **尚未实现(预留)** - AES-256 加密备份 - 配置导入导出 - 恢复对话框为列表勾选(非树形目录) - 硬链接去重 **已实现** - VSS 卷影副本(任务高级设置;需管理员权限,不可用时自动回退实时复制) - 校验清单导出 + 按清单比对(GUI「校验清单…」/ CLI `--manifest`、`--verify-manifest`) - Windows 计划任务注册(任务编辑 → 计划;界面未运行也能按时触发) - 低优先级 IO(`Core/Io/IoPriority.cs`,可在配置中开启) - 镜像 dry-run 预演(GUI「预演…」/ CLI `--dry-run`,零副作用) - 硬链接快照版本化(任务高级设置,每次成功备份保留一个零额外空间的历史恢复点) - 启动时自动更新检查(比对远程 Release,附 SHA-256 校验) - 邮件 / Webhook 备份结果通知(工具栏「通知设置」;SMTP 邮箱 + 企业微信/钉钉/飞书 Webhook;默认仅失败/部分失败时通知;敏感凭据存 Windows 凭据管理器,不落 settings.json) - xxHash64 增量哈希兜底(与 mtime+size 配合) ## 安装包 `installer/setup.iss` 为 Inno Setup 6 脚本。安装 Inno Setup 6 后执行: ``` ISCC.exe installer\setup.iss ```