用 Rust 写了个跨机器文件同步工具,基于 P2P 虚拟网络,不需要云盘

9 阅读2分钟

大家好,最近折腾了一个小工具 CrossBag,今天 v0.2.0 MVP 终于跑通了,来分享一下。

为什么写这个?

痛点很真实:家里台式机 ↔️ 云端云电脑,文件要同步,但:

  • 云盘?不想把数据放第三方
  • SMB/NFS?跨公网太麻烦
  • rsync + ssh?每次都要手动跑,不够实时

于是想搞一个:自动发现、实时同步、数据不过第三方的方案。

CrossBag 做了什么

核心思路很简单:

你的文件 → 文件系统监听 (毫秒级)
         ↓ 变更事件
      BLAKE3 快速哈希 → 只传变了的部分
         ↓
    Easytier 虚拟网络 (加密 P2P 隧道)
         ↓
     对端机器 → 写入文件

技术栈:

  • Rust — 性能 + 安全,零成本抽象
  • Tokio — 异步运行时
  • Notify — 跨平台文件监控
  • Easytier — 虚拟组网,自动打洞,不需要公网 IP
  • BLAKE3 — 超快哈希,diff 速度是 SHA256 的 8x+

现在能干什么

# 初始化配置
crossbag init

# 添加同步对
crossbag add --id my-sync \
  --local ~/Documents \
  --remote-node office-pc \
  --remote ~/Documents

# 启动守护进程(后台持续同步)
crossbag serve

# 查看状态
crossbag status

支持三种同步模式:

  • Push — 只上传
  • Pull — 只下载
  • Bidirectional — 双向同步 + 冲突检测

也可以装成系统服务:

crossbag service install   # Windows sc / Linux systemd / macOS launchd
crossbag service start

测试情况

  • 21 个单元测试 ✅
  • 8 个集成测试 ✅(全量同步、增量、嵌套目录、大文件分块、冲突检测)
  • Windows / macOS / Linux CI 全绿

还不够完善的地方

毕竟是 v0.2.0 MVP,以下还没有:

  • ❌ GUI 管理界面
  • ❌ 移动端支持
  • ❌ 断点续传(大文件传输中断会重新传)
  • ❌ Web UI

欢迎提 Issue 和 PR,项目完全开源(Apache 2.0)。

安装

cargo install --git https://github.com/bit-torch/CrossBag.git --tag v0.2.0

或者去 Releases 页面下载预编译 binary(GitHub Actions 自动构建)。


🔗 GitHub: github.com/bit-torch/C…

有问题欢迎评论区交流,觉得有用的话给个 Star 吧 ⭐