跳转到内容

Syncthing:设备之间的点对点同步

在你自己的设备之间同步文件夹,数据直接在设备间传输,不经过中间服务器。适合把电脑上的工作目录实时同步到 NAS,或者在两台异地 NAS 之间同步。

同步不是备份

Syncthing 会把删除操作同步到所有设备。误删一个文件,几秒后它在每台设备上都消失了。要用它做备份,必须开启文件版本控制功能,并且把 NAS 端设为「仅接收」。区别见3-2-1 原则

部署

yaml
services:
  syncthing:
    image: syncthing/syncthing:latest
    container_name: syncthing
    restart: unless-stopped
    hostname: nas-syncthing
    ports:
      - "8384:8384"
      - "22000:22000/tcp"
      - "22000:22000/udp"
      - "21027:21027/udp"
    volumes:
      - /vol1/docker/syncthing/config:/var/syncthing/config
      - /vol1/sync:/var/syncthing/data

端口说明:8384 是管理界面,22000 是数据传输,21027 用于局域网设备发现。

关键配置

  1. 管理界面加密码,默认无密码时局域网内任何人都能改配置。
  2. NAS 端的共享目录设为「仅接收」,防止 NAS 上的改动反向覆盖源端。
  3. 开启文件版本控制(简易版本或交错版本),这是防误删的唯一手段。
  4. 异地同步时,两端设备互相添加设备 ID 即可,见异地备份

数据与备份

config 目录里是设备 ID、密钥和同步配置,值得备份。同步的数据本身按常规策略处理。

已知坑

  • 同步大量小文件时,扫描和索引会占用不少 CPU 和内存。
  • 两端同时修改同一个文件会产生冲突副本,文件名里带 .sync-conflict,需要手动处理。
  • 容器内的文件属主由 PUID/PGID 决定,与 NAS 用户不匹配时会出现权限问题。

参考资料

fnOS 非官方中文使用指南,与飞牛官方无隶属关系。