Syncthing 2.1.0:给你的文件同步加上"分组"和更多控制

2026-05-12 25 预计阅读时间:1 分钟
来源:oschina.net AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:10 分钟

多台机器之间同步文件,很多人第一反应是云盘——上传到中心服务器,再从另一台下载。Syncthing 走的是另一条路:设备之间直接传输,没有中间人,数据不落地第三方。2.1.0 版本带来了 GUI 分组、代理增强等改进,让管理多设备同步场景变得更清晰。

直连同步,为什么值得关注

Syncthing 的核心模型是点对点:你的笔记本直接和家里的 NAS、办公室的台式机建立 TLS 连接,文件块通过 Block Exchange Protocol 传输。这意味着:

  • 没有第三方服务器存储你的数据,隐私边界由你自己划定。
  • 两台机器在同一局域网时,传输速度接近原生网络带宽,不绕公网。
  • 每个设备有唯一 Device ID(基于证书),你可以精确控制谁能连接谁。

对于开发者常见的场景——代码仓库在多台机器间保持一致、大型数据集在服务器和本地之间流转、配置文件跨设备同步——Syncthing 比 Git 更适合二进制和大文件,比 rsync 更适合持续双向同步。

2.1.0 的新东西:设备与文件夹分组

当你在 Syncthing 里管理十几个设备、几十个共享文件夹时,GUI 里的列表会变得很长,找东西费眼。2.1.0 引入了 group 属性,你可以在 Web GUI 中给设备和文件夹打上分组标签,然后按组筛选和折叠显示。

分组不是只影响显示——它也帮你理清同步拓扑。比如你可以把"生产服务器"归一组、"开发机"归一组、"家庭成员设备"归一组,一眼看出哪些文件夹在哪些组之间共享。

在配置文件中,分组是这样设置的:

<!-- ~/.local/state/syncthing/config.xml 中的设备配置片段 -->
<device id="DEVICE-ID-HERE" name="nas-home" compression="metadata">
  <group>生产服务器</group>
</device>

<folder id="data-raw" path="/mnt/data/raw" type="sendreceive" rescanIntervalS="3600">
  <group>数据集</group>
</folder>

修改配置后重启 Syncthing 服务,或在 GUI 中直接编辑设备/文件夹的 Group 字段即可生效。GUI 左侧会出现分组筛选器,点击某个组就能只看该组下的条目。

快速上手:从安装到第一个同步文件夹

下面是一个完整的本地两节点测试流程,你可以在一台机器上跑两个 Syncthing 实例来验证同步行为。

# 1. 安装 Syncthing(macOS 用 Homebrew,Linux 用官方 APT 源或直接下载二进制)
brew install syncthing          # macOS
# 或 Linux:
# curl -fsSL https://syncthing.net/release-key.gpg | sudo tee /usr/share/keyrings/syncthing-archive-keyring.gpg >/dev/null
# echo "deb [signed-by=/usr/share/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
# sudo apt-get update && sudo apt-get install syncthing

# 2. 启动第一个实例(默认端口 8384)
syncthing

# 3. 启动第二个实例用于测试(不同端口,不同配置目录)
syncthing -home=/tmp/syncthing-node2 -gui-address=127.0.0.1:8385 -no-browser

# 4. 在两个 GUI 中互相添加对方 Device ID(GUI 首页右上角可复制本机 ID)
#    然后在任一侧创建一个共享文件夹,指定对方设备为共享目标

# 5. 创建测试文件夹并观察同步
mkdir -p ~/syncthing-test/node1
# 在 GUI 中添加该路径为 Folder,选择 Send & Receive 模式
# 在 node2 的 GUI 中接受共享,设置本地路径为 /tmp/syncthing-node2-recv
echo "hello from node1" > ~/syncthing-test/node1/test.txt
# 几秒后检查 /tmp/syncthing-node2-recv/test.txt 是否出现

这个双节点测试能让你直观看到:文件创建后几秒内就出现在另一端,修改也会双向传播。遇到冲突时,Syncthing 会保留两个版本(文件名加 .sync-conflict 后缀),不会静默覆盖。

SOCKS 代理与网络控制

2.1.0 继续完善了代理支持。如果你的设备需要通过 SOCKS5 代理才能到达对端(比如公司网络限制直连),可以在配置中指定:

<options>
  <globalAnnounceEnabled>false</globalAnnounceEnabled>   <!-- 关闭全球发现,只用本地发现 -->
  <relayEnabled>false</relayEnabled>                      <!-- 关闭中继 -->
</options>

<device id="REMOTE-DEVICE-ID" name="remote-via-proxy">
  <group>远程设备</group>
  <!-- 在 GUI 的设备编辑页面 → Advanced → Proxy 设置 SOCKS5 地址 -->
</device>

在 GUI 中:打开设备编辑页面 → Advanced 栀签 → 填写 socks5://proxy-host:1080。这样与该设备的所有连接都走指定代理,其他局域网设备仍然直连。这种按设备区分代理的策略,比全局代理更灵活——你不必为了一个远程设备把所有流量都绕出去。

日常运维的几个实用命令

# 查看 Syncthing 服务状态
syncthing --status

# 强制重新扫描某个文件夹(配置变更后有用)
curl -X POST http://localhost:8384/api/db/rescan?folder=folder-id \
  -H "X-API-Key: YOUR-API-KEY"

# 查看最近的事件日志(排查同步延迟)
curl http://localhost:8384/api/events?limit=20 \
  -H "X-API-Key: YOUR-API-KEY"

# 忽略特定文件(在每个同步文件夹下创建 .stignore 文件)
echo "*.tmp" >> ~/syncthing-test/node1/.stignore
echo ".DS_Store" >> ~/syncthing-test/node1/.stignore
echo "node_modules/" >> ~/syncthing-test/node1/.stignore

.stignore 的语法类似 gitignore,但只作用于 Syncthing 的扫描范围。对于开发者来说,忽略 node_modules、构建产物、临时文件是必须的——否则同步引擎会浪费大量带宽扫描几万个不会变化的文件。

上手建议与边界提醒

适合用 Syncthing 的场景: - 多台个人设备间同步代码项目、文档、照片(双向、持续) - 服务器之间同步数据目录(配合 Send Only 模式,单向推送) - 团队内部共享大型数据集,不想上传到公有云

不太适合的场景: - 需要版本历史回溯和分支管理的代码协作——这是 Git 的领域 - 百人以上规模的实时协作编辑——Syncthing 的冲突处理是"保留两份",不是自动合并 - 对同步延迟要求毫秒级的场景——Syncthing 的扫描间隔默认 60 秒,可调但不是事件级触发

升级到 2.1.0 的检查清单: 1. 备份现有配置:cp ~/.local/state/syncthing/config.xml config.xml.bak 2. 升级后打开 GUI,为现有设备和文件夹补充 group 属性——哪怕只是粗分"本地/远程",也比平铺列表好找 3. 如果有设备需要走代理,逐个在 Advanced 里配置 SOCKS 地址,不要全局设置 4. 检查 .stignore 是否覆盖了新增的文件夹路径

Syncthing 2.1.0 的分组功能看似只是 UI 改进,但当你管理超过 5 台设备时,它确实减少了"找那个文件夹到底共享给了谁"的摩擦。加上按设备配置代理的能力,多网络环境下的同步拓扑变得更可控。如果你还没用过 Syncthing,花十分钟跑一下上面的双节点测试,比读任何文档都直观。


相关推荐