15 KiB
15 KiB
两台 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),可以复用和扩展。
| 维度 | 评价 |
|---|---|
| 海量小文件性能 | ⭐⭐⭐⭐ 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 「发现」已有数据建索引,速度大幅提升
实现要点:
- 首次灌入:复用已有 rsync 脚本(6-微信数据备份.md),将笔记本微信数据全量推送到台式机
- 持续同步:两端 Syncthing 配置微信数据目录为共享文件夹,类型设为 Send & Receive(双向)
- 排除规则(
.stignore):
// .stignore - 微信数据排除规则
temp
cache
apm_record
*.lock
*.tmp
crash_report
log
-
数据库保护策略:
- 同步前确保微信已关闭(避免 db 锁定导致同步损坏文件)
- 启用 Syncthing 的 Staggered File Versioning(阶梯式版本保留),保留最近 30 天的版本
- 关键目录
db_storage建议在微信运行时通过.stignore临时排除,关闭微信后恢复同步
-
同步触发优化:
- Syncthing 默认使用 fsnotify 实时监控,但微信关闭时会批量释放文件锁
- 配置
rescanIntervalS为 300(5分钟全量扫描兜底) - 可配合脚本在检测到微信关闭时手动触发 Syncthing API 重新扫描
Tip
微信只能单端PC登录的特性反而降低了双向同步的冲突风险。实际上是一种「跟随主力设备」的同步模式:你在哪台机器工作,新数据就从哪台流向另一台。
场景 B:Git 项目仓库 → Syncthing(双向实时)
为什么选 Syncthing:
- 项目仓库需要双向同步(两台机器都可能编辑)
- 实时文件监控,代码修改即同步
.stignore可以排除node_modules、build等目录- 不破坏
.git完整性
实现要点:
- 两端安装 Syncthing(Windows 原生版本)
- 同步
Documents\IdeaProjects整个目录 - 配置
.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
- 设置冲突处理策略:默认保留两个版本,手动解决
- 设置为 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 一次性迁移 |
实现要点:
- IDEA 和 VS Code 优先使用内置的 Settings Sync(最稳定、无兼容性问题)
- 对于没有内置同步的工具,用 Syncthing 同步其配置目录
- 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. 安全与容错
- 首次同步前全量备份:在台式机上先做一次完整的本地备份
- rsync 首次灌入使用
--dry-run:先预览,确认无误再执行 - Syncthing 版本控制:所有共享文件夹启用 Staggered File Versioning(阶梯式版本保留)
- 最近 1 小时:保留所有版本
- 最近 1 天:每小时保留一个版本
- 最近 30 天:每天保留一个版本
- 微信数据库保护:同步脚本检测
Weixin.exe进程,运行时临时跳过db_storage目录 - 日志审计:Syncthing Web UI 自带同步日志,额外配置日志输出到文件
- 磁盘空间监控:Syncthing 配置
minDiskFree参数,磁盘空间不足时自动暂停同步 - 冲突文件清理:定期检查并清理
*.sync-conflict-*文件
用户审阅结果(已确认 ✅)
| # | 审阅项 | 用户确认 |
|---|---|---|
| 1 | Git 仓库同步目录 | ✅ 仅 Documents\IdeaProjects,无其他目录 |
| 2 | 台式机微信数据路径 | ✅ C:\Users\wdd\xwechat_files |
| 3 | NAS / 外部存储 | ✅ 不考虑 |
| 4 | 台式机 WSL2 | ✅ 已安装完成 |
| 5 | 台式机磁盘空间 | ✅ 充足 |
| 6 | 采用方案 | ✅ Syncthing 统一管控 + rsync 辅助首次灌入 |
Note
所有审阅项已确认,方案可以进入实施阶段。