跳转至

Project 全目录双向同步 v2 设计

更新:2026-08-28

目标

同步边界固定为 101 /root/project 与 Cloudreve Project 根,覆盖所有项目、目录、普通文件和 Git 元数据。同步不读取 Git 提交状态,因此未提交的新目录和文件也会被纳入变更检测。

运行模型

  • 仅在 101 运行一个 root-only 同步服务;RR 不承载挂载、同步或数据中转。
  • 使用公网 HTTPS WebDAV 到 Cloudreve,不通过 SSH、Tailnet 或节点间复制传输业务文件。
  • 每轮运行前使用 flock 单实例锁,固定低并发(上传/下载并发 2),连接和低层重试各 1 次;收到 HTTP 500、SQLite 锁错误、OOM 或哈希不一致立即失败,不自动全量重试。
  • 本地 /root/project 必须位于 /dev/nvme0n1p2;回退和冲突历史必须位于独立 /dev/sda1/srv/codex-hub-backup

合并与保护

  1. 先生成两端清单和变更摘要,不执行删除。
  2. 新对象按相对路径复制;同名内容不同则保留带时间戳的冲突副本,不覆盖原对象。
  3. 删除只允许在两端清单均已确认、且数量和总容量低于阈值时执行;否则整轮停止。
  4. 每个上传对象完成后下载回读并比较 SHA-256;失败即停止并保留备份。
  5. Git 目录(包括 .git)作为普通目录同步,不触发提交、推送或 Git 清理。

分级验收

顺序固定为:测试目录单文件 → 小批量文件 → 全部 Project。每级都必须验证新增、修改、重命名、删除、回读 SHA-256、服务重启恢复和 DD 资源日志。任何 500、SQLite 锁、OOM 或校验不一致立即停止,不进入下一级。

当前 DD 挂载修正、数据库完整性和最小公网 WebDAV 写入已通过;全量差异盘点、Home 客户端数据库恢复、v2 实现部署及正式范围验收仍未完成,因此不得启用 timer。