多数文件同步产品先从账号体系入手,把控制关系安置在云厂商一侧。Syncthing 的起点落在设备关系这一层。到 2026 年,官方文档仍把它定义为一套在自有设备之间同步文件的软件,数据停留在你掌握的机器上,设备在同时在线时直接交换内容。[1] 这条路线解释了它为何仍旧值得关注。顺着这个角度看,Syncthing 给出的,是一个本地优先的工程答案:当端点成为事实源头时,文件同步应当如何组织。[1][11]

这条判断很早就出现了。LWN 在 2014 年的评测里,已经把它的去中心化运行方式、TLS 加密链路与简洁配置界面提了出来。[11] 当前的维护者页面说明,核心项目仍有明确的技术负责人;最新发布标签 v2.0.16 发布于 2026 年 4 月 7 日。[2][3] 顺着这些材料看,Syncthing 现在更值得问的问题已经转到另一层:面对云同步套件、NAS 厂商的配套工具,或者解决的是另一类问题的备份软件,这套设计在哪些场景里依旧更合适。[1][2][3][11]

图片说明:题图采用维护者 Jakob Borg 的 GitHub 真实头像页。这个选择与文章的重心一致,因为这里讨论的是一套长期软件设计立场及其运维边界,视觉焦点落在具体的人与项目脉络上。[12]

你真正引入的是什么

Syncthing 的核心承诺很容易概括,也很容易被看浅。FAQ 写得很直接:一台机器上的创建、修改与删除会自动复制到共享集合里的其他设备,同时数据继续停留在你的控制之下,存储位置由你自己的设备体系来承接。[1] LWN 从外部观察时说的也是同一件事:Syncthing 是一套点对点同步系统,可以连接多个节点、多个目录,唯一真相也由这些节点共同收敛出来。[11]

这件事听上去简单,技术契约却相当具体。Syncthing 会把文件切成块,计算 SHA-256 哈希,比较本地版本与全局版本,再去请求仍然缺失的块。[4] 协议规格说明,这些块的大小从 128 KiB 到 16 MiB 不等,传输落在 Block Exchange Protocol 之内,底层加密与认证层要求使用 TLS 1.3 或更高版本。[4][5] 设备身份也不落在用户名体系上。设备 ID 文档写明,设备 ID 是所用公钥的直接属性,这个 ID 由证书数据本身导出。[6] 这一点很关键,因为它解释了产品的气质。Syncthing 没有围绕一个带 ACL 的 SaaS 租户去组织逻辑,它围绕的是一组彼此命名、彼此决定是否信任的端点。[5][6]

因此,引入 Syncthing,表面上是让文件夹开始同步,进一步看则是在引入一种模型:信任、可达性与文件夹语义都停留在你掌控的端点上。对 homelab 用户、摄影工作流、研究资料库,以及只需要几台笔记本、工作站和存储节点彼此收敛的小型工程环境来说,这一点很有吸引力。[1][4][11]

这套架构之所以清楚,是因为身份层和传输层贴得很近

Syncthing 最整洁的地方,在于身份逻辑和传输逻辑可以顺着同一条线读下去。设备第一次启动会生成自己的密钥对,在 TLS 握手里出示证书,只有对端已经配置并接受这个设备 ID 时,连接才会继续成立。[5][6] 连接建立之后,各端共享文件夹状态元数据,计算集群中的全局模型,再按需拉取缺失的块去完成收敛。[4][5]

这样做带来两层很务实的收益。第一,面对重命名频繁、持续追加、局部修改的文件,行为会比朴素的整文件复制更节制,因为软件会先在哈希块、临时文件与现有本地数据之间做判断,再决定是否向网络请求字节。[1][4] 第二,信任边界非常清楚。某个 peer 没有进入配置,它就不在集群里。某个 peer 进入了配置,它依赖的是证书导出的设备 ID,不依赖某个可以被上层服务撤销或改写的登录会话。[5][6]

当前 2.0 线的发布说明也让这条端点优先的思路更清楚。Syncthing 2.0 把数据库后端从 LevelDB 切到了 SQLite,调整了若干运行默认值,并且在 v2 设备之间默认使用三条连接:一条负责索引元数据,两条负责数据交换。[3] 这看上去只是一个实现细节,真正的含义却不小。项目仍在打磨多设备收敛的具体机制,没有把自己改造成一套在顶层再叠一层协作界面的办公产品。[3]

运维表面比一套完整存储平台小得多,运维本身依旧存在

Syncthing 让人愿意采用,一个重要原因在于它比完整存储控制面轻,文档也写得很诚实,运维工作仍会留下来。同步机制文档说明,变更检测同时依赖文件系统 watcher 与定期全量扫描;默认启用 watcher,默认每小时做一次全量扫描,watcher 发现的改动会先积累一小段时间,再向其他设备传播。[4] 这很符合真实文件同步的节奏,也意味着大目录仍会有哈希成本,传播也会存在短延迟。

网络层同样保持了边界清楚的写法。直连失败时,Syncthing 可以退回 relay;relay 文档明确指出,relay 下的传输速率会低于直连,relay 运营方虽然看不到有效载荷内容,仍能看到你的 IP、设备 ID 与流量规模。[7] 这一层边界在跨城网络、移动热点、办公室防火墙与 CGNAT 这些环境里尤其重要。Syncthing 对“能连上”这件事很执着,对“所有路径都一样快”这件事并没有许愿。[7]

文件夹策略也沿着同一逻辑展开。Folder Types 允许你用普通 send-receive 共享、send-only 参考副本以及 receive-only 镜像。[8] File Versioning 可以把来自远端的删除与替换归档到 .stversions,文档也直说,这个版本保留保护的是其他设备送来的变更,本机自己改写掉的内容不在这层保护里。[9] 这些功能之所以强,是因为它们非常具体。它们能表达“笔记本是权威副本”“NAS 是镜像”“远端替换保留 30 天”。它们不会悄悄把 Syncthing 扩张成一整套拥有不可变保留、异地恢复演练与策略报表的备份系统。[1][8][9]

Syncthing 最适合落在哪些地方

最合适的场景,往往是云同步显得过重、手工复制又显得易碎的地方。Syncthing 很适合个人知识档案在桌面机、笔记本与家用服务器之间流动;适合以一台可信机器为主副本的家庭照片库;适合需要跟着少量设备移动、又不想被锁进单一供应商账户模型里的研究资料;也适合那些需求非常朴素的小型自托管环境:这几个目录需要在这些机器之间保持收敛,需求到这里就结束。[1][4][8][11]

项目还有一条很有意思的延伸路线:加密的非信任设备。文档描述了一种模式,可信设备把加密后的文件夹数据发送到只保存不可读字节的节点,同时又明确警告,这项能力仍应被视为 beta 或 testing only。[10] 这一点很能说明 Syncthing 的世界观。即便接近“云端存一份”的用法,表达方式仍是端点选择与逐文件夹密码策略,语义继续停在本地控制这一侧。[10]

很多人会在边界处做错比较

理解 Syncthing,较稳妥的方法是把它与正确的对手放在一起比较。它和专有的点对点同步工具、NAS 同步代理,以及“文件应该留在我自己机器上”的工作流相比,优势非常清楚。[1][11] 它和那些主要任务落在协作编辑、团队权限治理、法律保留,或者独立于实时同步状态的长期备份保留上的产品相比,位置就完全不同了。

把几份文档并在一起读,这条边界写得相当直白。FAQ 单独列出了“Syncthing 是否是理想的备份应用”这一问法,本身就在提醒同步与备份属于两类问题。[1] 同一份 FAQ 也写到,当前团队没有官方 iOS 客户端计划,因为后台处理限制使可靠集成非常困难。[1] 同步机制文档记录了冲突副本、大小写敏感路径边界与临时文件行为。[4] 加密非信任设备文档则把相关能力标成 beta/testing only。[10] 这些都构成了这套产品自觉守住范围之后留下来的清楚边界。

也正因为范围守得住,我仍会推荐它。Syncthing 最强的地方,在于你已经信任这些设备,它们之间需要收敛,而你又不想再引入一层托管控制面去中介所有人与数据之间的关系。若真实需求落在协作编辑、不可变备份或大范围企业管理,起点应放在别的产品上。若需求是“让我拥有的这些机器把这些目录同步起来,同时把身份与存储控制留在本地”,Syncthing 依旧是当前最清楚的开源答案之一。[1][4][8][11]

来源

  1. Syncthing 文档,《FAQ》——项目定义、设备直连的数据流、性能说明、iOS 支持边界,以及与备份相关的使用问题。
  2. Syncthing 文档,《Project Presentation》——当前主 Syncthing 应用的核心维护者列表。
  3. GitHub 上 syncthing/syncthingv2.0.16 发布页——当前版本发布时间,以及 2.0 线里 SQLite 与多连接默认值等运维变化。
  4. Syncthing 文档,《Understanding Synchronization》——块哈希、扫描、全局/本地版本、冲突处理与临时文件行为。
  5. Syncthing 文档,《Block Exchange Protocol v1》——集群模型、块大小、TLS 传输要求与消息结构。
  6. Syncthing 文档,《Understanding Device IDs》——由证书导出的设备身份、发现路径与连接建立流程。
  7. Syncthing 文档,《Relaying》——relay 回退行为、性能取舍与 relay 侧可见性边界。
  8. Syncthing 文档,《Folder Types》——send-receive、send-only 与 receive-only 的语义差异。
  9. Syncthing 文档,《File Versioning》——.stversions 的行为、仅覆盖远端变更的范围,以及不同保留策略。
  10. Syncthing 文档,《Untrusted (Encrypted) Devices》——beta/testing 状态、receive-encrypted 模式与加密文件夹边界。
  11. Nathan Willis,《Sync things with Syncthing》;LWN.net,2014-10-01——从独立视角概括项目去中心化与安全导向的早期设计。
  12. Jakob Borg(@calmh)的 GitHub 资料页——本文题图所用真实头像的来源页。