# 两台 Windows 工作主机数据同步方案 ## 1. 背景与环境 | 项目 | 笔记本(源) | 台式机(目标) | |------|-------------|---------------| | 型号 | 联想 R9000P | 自组装台式机 | | 系统 | Windows 11 专业版 | Windows 11 LTSC | | 用户 | `wddsh` | `wdd` | | 局域网IP | - | `192.168.1.194` | | WSL2 | 可用 | 已安装 | | 网络 | 局域网互通,台式机已配置 Clash Verge TUN | ## 2. 同步场景分析 ### 场景 A:微信数据(高优先级) - **路径**: 笔记本 `C:\Users\wddsh\Documents\xwechat_files` / 台式机 `C:\Users\wdd\xwechat_files` - **特征**: ~30GB,海量小文件(聊天记录、图片、视频、语音、缓存) - **难点**: 文件数量极多(可能 10 万+),微信运行时数据库锁定,两端都会登录微信产生新数据 - **频率**: 实时同步(微信关闭后触发最佳) - **方向**: **双向**(两端都可能产生新聊天记录和文件) ### 场景 B:Git 项目仓库(高优先级) - **路径**: 多个项目分布在 `Documents\IdeaProjects` 等目录 - **特征**: 含 `.git` 目录,大量小文件,已有版本管理 - **难点**: 需要保持 `.git` 完整性,可能有 node_modules 等超大依赖目录 - **频率**: 持续双向同步 - **方向**: 双向 ### 场景 C:开发工具配置(中优先级) - **路径**: IDEA 配置在 `%APPDATA%\JetBrains`,VS Code 配置等 - **特征**: 配置文件体量小,但路径分散 - **难点**: 部分配置含绝对路径,需要筛选可移植项 - **频率**: 变动时同步 - **方向**: 单向或双向 --- ## 3. 方案对比 ### 方案一:WSL2 rsync(通过 SSH 隧道) > [!TIP] > 你已有一个可用的微信 rsync 脚本([6-微信数据备份.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/35-黑苹果DELL/6-微信数据备份.md)),可以复用和扩展。 | 维度 | 评价 | |------|------| | **海量小文件性能** | ⭐⭐⭐⭐ rsync 增量算法高效,`-z` 压缩减少传输量 | | **断点续传** | ⭐⭐⭐⭐⭐ `--partial` 原生支持 | | **双向同步** | ⭐⭐ 原生不支持双向,需要额外脚本或 unison 替代 | | **自动化** | ⭐⭐⭐⭐ 配合 cron/Task Scheduler 轻松定时 | | **部署复杂度** | ⭐⭐⭐ 两端都需要 WSL2 + SSH 配置 | | **文件监控** | ⭐⭐ 需要额外工具(inotifywait/fswatch) | | **适合场景** | 仅作为首次全量灌入工具,不适合持续双向同步 | **关键优势**: - 增量传输,只传输变化的部分,对 30GB 小文件场景极其高效 - 你已有成熟的 rsync 脚本基础 - 可精确控制 `--exclude` 排除规则 **关键劣势**: - 双向同步困难,冲突解决需要手动处理 - WSL2 访问 Windows 文件系统(`/mnt/c`)有 I/O 性能损耗 - 非实时,需定时触发 --- ### 方案二:Syncthing(P2P 实时同步) | 维度 | 评价 | |------|------| | **海量小文件性能** | ⭐⭐⭐ 初次扫描慢,后续增量快;有文件监控加速 | | **断点续传** | ⭐⭐⭐⭐ 支持 | | **双向同步** | ⭐⭐⭐⭐⭐ 原生双向,冲突自动检测并保留两个版本 | | **自动化** | ⭐⭐⭐⭐⭐ 后台服务,文件变化自动触发 | | **部署复杂度** | ⭐⭐⭐⭐⭐ 图形界面,零配置发现 | | **文件监控** | ⭐⭐⭐⭐⭐ 内置 fsnotify,变化秒级感知 | | **适合场景** | A(微信数据双向)、B(Git仓库双向)、C(配置文件双向) | **关键优势**: - 原生双向同步 + 冲突处理 - 实时文件监控,修改即同步 - Windows 原生运行,无 WSL 性能损耗 - Web UI 管理界面,可视化监控同步状态 - P2P 加密传输,无需第三方服务器 - 支持 `.stignore` 排除规则(类似 `.gitignore`) **关键劣势**: - 首次同步 30GB 小文件扫描建索引较慢(约 10-30 分钟) - 不如 rsync 的增量算法精细(rsync 做块级 diff,Syncthing 做文件级 diff) - 内存占用相对较高(索引占用) --- ### 方案三:Robocopy(Windows 原生) | 维度 | 评价 | |------|------| | **海量小文件性能** | ⭐⭐⭐ 多线程 `/MT:16` 有帮助,但无增量 diff | | **断点续传** | ⭐⭐⭐ `/Z` 可恢复模式 | | **双向同步** | ⭐ 不支持,纯镜像/复制 | | **自动化** | ⭐⭐⭐⭐ 配合 Task Scheduler | | **部署复杂度** | ⭐⭐⭐⭐⭐ 系统自带,零安装 | | **文件监控** | ⭐⭐⭐ `/MON` 参数支持变化监控 | | **适合场景** | 简单的单向镜像 | **关键优势**: - 系统自带,无需安装任何东西 - `/MT` 多线程复制,对大量小文件有帮助 - 通过 SMB 共享直接访问,无需 SSH **关键劣势**: - 无块级增量,每次传输完整变化文件 - 依赖 SMB 网络共享,需配置防火墙和共享权限 - 无双向同步能力 --- ### 方案四:Unison(双向 rsync 增强) | 维度 | 评价 | |------|------| | **海量小文件性能** | ⭐⭐⭐⭐ 基于 rsync 算法 | | **双向同步** | ⭐⭐⭐⭐⭐ 专为双向设计,冲突检测与合并 | | **部署复杂度** | ⭐⭐⭐ 两端需要相同版本 | | **适合场景** | B(Git仓库精确双向) | --- ## 4. 推荐方案:Syncthing 统一管控 + rsync 辅助首次灌入 > [!IMPORTANT] > 三大场景全部需要双向同步,**Syncthing 作为唯一的持续同步引擎**,rsync 仅在首次全量灌入时使用以加速初始化。 ### 总体架构 ``` ┌────────────────────────────────────────────────────────────┐ │ 笔记本 (R9000P, Win11 Pro) │ │ │ │ ┌──────────┐ ┌──────────────┐ ┌───────────────────┐ │ │ │ 微信数据 │ │ Git 项目仓库 │ │ 开发工具配置 │ │ │ │ 30GB │ │ 多个 repos │ │ IDEA/VSCode 等 │ │ │ └────┬─────┘ └──────┬───────┘ └────────┬──────────┘ │ │ │ │ │ │ │ └───────────────┼───────────────────┘ │ │ │ │ │ ┌────────┴────────┐ │ │ │ Syncthing │ │ │ │ (统一双向实时) │ │ │ └────────┬────────┘ │ │ │ │ └───────────────────────┼────────────────────────────────────┘ │ P2P 加密传输 (局域网) │ ┌───────────────────────┼────────────────────────────────────┐ │ │ │ │ ┌────────┴────────┐ │ │ │ Syncthing │ │ │ │ (统一双向实时) │ │ │ └────────┬────────┘ │ │ ┌───────────────┼───────────────────┐ │ │ │ │ │ │ │ ┌────┴─────┐ ┌──────┴───────┐ ┌────────┴──────────┐ │ │ │ 微信数据 │ │ Git 项目仓库 │ │ 开发工具配置 │ │ │ │ 双向同步 │ │ 双向同步 │ │ 双向同步 │ │ │ └──────────┘ └──────────────┘ └───────────────────┘ │ │ │ │ 台式机 (Win11 LTSC) │ └────────────────────────────────────────────────────────────┘ 首次全量灌入(可选加速): 笔记本 WSL2 ──rsync──▶ 台式机 WSL2 (一次性,完成后切换到 Syncthing) ``` --- ### 场景 A:微信数据 → Syncthing(双向实时)+ rsync 首次灌入 > [!WARNING] > **微信数据双向同步的核心风险:** 微信不支持同一账号在两台 PC 同时登录。因此「双向同步」的实际含义是——你在哪台机器上登录微信,新产生的聊天数据就从那台同步到另一台。两端不会同时产生新数据,冲突风险较低。 **为什么选 Syncthing:** - 双向同步是硬需求,rsync 无法满足 - 微信数据以追加为主(新聊天、新图片),Syncthing 的文件级增量足够高效 - 实时文件监控,切换登录设备后新数据自动同步 - Windows 原生运行,无 WSL I/O 损耗 **为什么首次灌入用 rsync:** - 30GB 海量小文件的首次传输,rsync 的块级增量 + 压缩 + 断点续传最稳定 - Syncthing 首次扫描建索引 + 传输 30GB 小文件可能需要数小时 - 用 rsync 先把数据灌到台式机,再让 Syncthing 「发现」已有数据建索引,速度大幅提升 **实现要点:** 1. **首次灌入**:复用已有 rsync 脚本([6-微信数据备份.md](file:///c:/Users/wddsh/Documents/IdeaProjects/ProjectAGiPrompt/35-黑苹果DELL/6-微信数据备份.md)),将笔记本微信数据全量推送到台式机 2. **持续同步**:两端 Syncthing 配置微信数据目录为共享文件夹,类型设为 **Send & Receive**(双向) 3. **排除规则**(`.stignore`): ``` // .stignore - 微信数据排除规则 temp cache apm_record *.lock *.tmp crash_report log ``` 4. **数据库保护策略**: - 同步前确保微信已关闭(避免 db 锁定导致同步损坏文件) - 启用 Syncthing 的 **Staggered File Versioning**(阶梯式版本保留),保留最近 30 天的版本 - 关键目录 `db_storage` 建议在微信运行时通过 `.stignore` 临时排除,关闭微信后恢复同步 5. **同步触发优化**: - Syncthing 默认使用 fsnotify 实时监控,但微信关闭时会批量释放文件锁 - 配置 `rescanIntervalS` 为 300(5分钟全量扫描兜底) - 可配合脚本在检测到微信关闭时手动触发 Syncthing API 重新扫描 > [!TIP] > **微信只能单端PC登录**的特性反而降低了双向同步的冲突风险。实际上是一种「跟随主力设备」的同步模式:你在哪台机器工作,新数据就从哪台流向另一台。 --- ### 场景 B:Git 项目仓库 → Syncthing(双向实时) **为什么选 Syncthing:** - 项目仓库需要双向同步(两台机器都可能编辑) - 实时文件监控,代码修改即同步 - `.stignore` 可以排除 `node_modules`、`build` 等目录 - 不破坏 `.git` 完整性 **实现要点:** 1. 两端安装 Syncthing(Windows 原生版本) 2. 同步 `Documents\IdeaProjects` 整个目录 3. 配置 `.stignore` 精确排除: ``` // .stignore 排除规则 node_modules .gradle build dist target *.class *.jar *.pyc __pycache__ .idea/workspace.xml .idea/tasks.xml .idea/usage.statistics.xml .idea/shelf *.iws ``` 4. 设置冲突处理策略:默认保留两个版本,手动解决 5. 设置为 Windows 服务开机自启 > [!WARNING] > **Git 仓库同步注意事项:** > - 避免两端**同时编辑同一文件**,否则会产生冲突文件(`*.sync-conflict-*`) > - 建议在同一时间只在一端进行开发,另一端作为同步镜像 > - 如果需要真正的多端协作,应通过 Git remote(如 GitHub/GitLab)push/pull,而非文件同步 --- ### 场景 C:开发工具配置 → Syncthing + JetBrains Settings Sync **分层策略:** | 工具 | 同步方式 | 说明 | |------|---------|------| | IDEA / WebStorm 等 | JetBrains Settings Sync | 内置云同步,登录 JetBrains 账号即可 | | VS Code | Settings Sync | 内置,登录 GitHub/Microsoft 账号 | | 其他散落配置 | Syncthing 同步指定目录 | `%APPDATA%` 下的特定子目录 | | Windows Terminal 配置 | Syncthing | `settings.json` 文件同步 | | SSH 配置 | 手动复制 | `~/.ssh/config` 一次性迁移 | **实现要点:** 1. IDEA 和 VS Code 优先使用内置的 Settings Sync(最稳定、无兼容性问题) 2. 对于没有内置同步的工具,用 Syncthing 同步其配置目录 3. SSH 配置、Git 全局配置等一次性手动复制 --- ## 5. 部署顺序 | 阶段 | 内容 | 预计耗时 | |------|------|---------| | **Phase 1** | 两端 WSL2 环境搭建 + SSH 免密配置(为 rsync 首次灌入做准备) | 30 分钟 | | **Phase 2** | rsync 微信数据首次全量灌入(笔记本 → 台式机) | 1-2 小时 | | **Phase 3** | 两端安装 Syncthing + 配置三个共享文件夹(微信/Git/配置) | 1 小时 | | **Phase 4** | Syncthing 首次索引建立 + 验证双向同步 | 30-60 分钟 | | **Phase 5** | 开发工具内置 Settings Sync 启用(IDEA/VSCode) | 15 分钟 | | **Phase 6** | Syncthing 设为 Windows 服务开机自启 + 监控脚本 | 30 分钟 | --- ## 6. 安全与容错 1. **首次同步前全量备份**:在台式机上先做一次完整的本地备份 2. **rsync 首次灌入使用 `--dry-run`**:先预览,确认无误再执行 3. **Syncthing 版本控制**:所有共享文件夹启用 Staggered File Versioning(阶梯式版本保留) - 最近 1 小时:保留所有版本 - 最近 1 天:每小时保留一个版本 - 最近 30 天:每天保留一个版本 4. **微信数据库保护**:同步脚本检测 `Weixin.exe` 进程,运行时临时跳过 `db_storage` 目录 5. **日志审计**:Syncthing Web UI 自带同步日志,额外配置日志输出到文件 6. **磁盘空间监控**:Syncthing 配置 `minDiskFree` 参数,磁盘空间不足时自动暂停同步 7. **冲突文件清理**:定期检查并清理 `*.sync-conflict-*` 文件 --- ## 用户审阅结果(已确认 ✅) | # | 审阅项 | 用户确认 | |---|--------|----------| | 1 | Git 仓库同步目录 | ✅ 仅 `Documents\IdeaProjects`,无其他目录 | | 2 | 台式机微信数据路径 | ✅ `C:\Users\wdd\xwechat_files` | | 3 | NAS / 外部存储 | ✅ 不考虑 | | 4 | 台式机 WSL2 | ✅ 已安装完成 | | 5 | 台式机磁盘空间 | ✅ 充足 | | 6 | 采用方案 | ✅ **Syncthing 统一管控 + rsync 辅助首次灌入** | > [!NOTE] > 所有审阅项已确认,方案可以进入实施阶段。