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。
合并与保护
- 先生成两端清单和变更摘要,不执行删除。
- 新对象按相对路径复制;同名内容不同则保留带时间戳的冲突副本,不覆盖原对象。
- 删除只允许在两端清单均已确认、且数量和总容量低于阈值时执行;否则整轮停止。
- 每个上传对象完成后下载回读并比较 SHA-256;失败即停止并保留备份。
- Git 目录(包括
.git)作为普通目录同步,不触发提交、推送或 Git 清理。
分级验收
顺序固定为:测试目录单文件 → 小批量文件 → 全部 Project。每级都必须验证新增、修改、重命名、删除、回读 SHA-256、服务重启恢复和 DD 资源日志。任何 500、SQLite 锁、OOM 或校验不一致立即停止,不进入下一级。
当前 DD 挂载修正、数据库完整性和最小公网 WebDAV 写入已通过;全量差异盘点、Home 客户端数据库恢复、v2 实现部署及正式范围验收仍未完成,因此不得启用 timer。