syncthing,跨平台远程自动同步工具

简介

Syncthing 是一个跨平台的同步工具,支持 Windows、MacOS、Linux、FreeBSD、Android 等等平台。

特点:易于使用,界面简单,支持版本管理

图片.png syncthing 首页主要分为三部分:

  • 文件夹:正在同步的文件夹
  • 此设备:本地设备的信息
  • 远程设备:同步文件夹的远程设备

安装

Windows

下载地址:https://github.com/syncthing/syncthing/releases/tag/v1.29.2

下载对应架构的压缩包,解压,点击 syncthing.exe 即可运行

浏览器打开:http://127.0.0.1:8384/

Linux

使用包管理器安装

1
2
# Debian/Ubuntu
sudo apt install syncthing

如果觉得自带的包管理器版本低,可以添加 syncthing 的仓库

1
2
3
# Add the release PGP keys:
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
1
2
# Add the "stable" channel to your APT sources:
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable" | sudo tee /etc/apt/sources.list.d/syncthing.list
1
2
3
# Update and install syncthing:
sudo apt-get update
sudo apt-get install syncthing

启动

1
systemctl --user start syncthing

停止

1
systemctl --user stop syncthing

开机自动启动

1
systemctl --user enable syncthing

删除开机自动启动

1
systemctl --user disable syncthing

浏览器打开:http://127.0.0.1:8384/

如果是服务器,需要编辑修改监听地址

1
vim $HOME/.config/syncthing/config.xml
1
2
3
4
5
<address>127.0.0.1:8384</address>

修改为

<address>0.0.0.0:8384</address>

重启服务

Android

syncthing-fork

这是第三方开发的 Syncthing 安卓 App

下载方式:

根据提示安装

Docker

docker compose

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
services:
  syncthing:
    image: syncthing/syncthing
    container_name: syncthing
    hostname: my-syncthing
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - ./syncthing_data:/var/syncthing
      - $HOME:/root
    ports:
      - 8384:8384 # Web UI
      - 22000:22000/tcp # TCP file transfers
      - 22000:22000/udp # QUIC file transfers
      - 21027:21027/udp # Receive local discovery broadcasts
    restart: unless-stopped
    healthcheck:
      test: curl -fkLsS -m 2 127.0.0.1:8384/rest/noauth/health | grep -o --color=never OK || exit 1
      interval: 1m
      timeout: 10s
      retries: 3

远程设备

远程设备:顾名思义,表示同步文件夹的另一个设备

配对设备

首次使用需要配对设备,步骤:

  1. 添加远程设备:找到需要添加的设备 ID,添加即可,手机可直接扫码
  2. 在目标设备同意添加

设备地址

发现设备默认采用dynamic策略,会自动判断同步网络情况选择合适的网络传输

如果需要设置优先策略,比如局域网内设备传输,可以优先设置局域网地址。步骤:

  1. 点击 添加远程设备或 编辑 已经添加的设备
  2. 找到 高级,更改地址
  3. dynamic前添加设备的 IP 地址和端口,格式:tcp://ip:port,多个地址使用英文 ,隔开
  4. 示例:tcp://192.168.68.11:22000, dynamic

同步文件夹

设置想要同步文件的文件夹,实现跨设备自动同步

步骤:

  1. 回到 Syncthing 主页,找到 文件夹部分,点击 添加文件夹
  2. 填写相关信息,具体内容参考后续介绍

常规

  • 文件夹标签:描述性标识,可随意定制,建议使用 文件夹/文件夹这种命名,这样做的好处一是识别性,二是在其他设备可自动作为文件夹目录,同步到 Android 设备尤为有用
  • 文件夹 ID:文件夹的唯一标识,不需要更改,也没必要更改
  • 文件夹路径:要想分享的文件夹所在的本地路径

共享

将文件夹同步到哪个远程设备,选择共享设备,以及密码设置。

如果设备作为中转,可以设置密码。

  • 不设置密码,密码为空:目标设备不加密,同步的设备可以直接看见同步的文件。
  • 设置密码,密码不为空:强制要求共享的目标设备加密,加密后,文件无法直接查看。

设置密码可以用在中转设备上,这样中转设备上的文件将会加密,再从中转设备上添加的文件夹分享给第三个设备,第三个设备填入第一个设备设置的密码,就可以解密。疑似会存在本地文件删除后,加密设备文件不会被同步删除??

文件版本控制

Syncthing 支持文件版本控制,在同步文件夹自动创建 .stversions文件夹,删除的文件会自动放入此文件夹。具体的版本策略有如下几个:

  • 不启用文件版本控制:顾名思义
  • 回收站版本控制:当 Syncthing 替换或删除文件时,文件将移动到 .stversions 目录。
  • 简单文件版本控制:当 Syncthing 替换或删除文件时,文件将移动到 .stversions 目录中,文件名带有日期版本。
  • 阶段文件版本控制:当 Syncthing 替换或删除文件时,文件将移动到 .stversions 目录中,文件名带有日期版本。 超过最长保留时间,或者不满足下列条件的历史版本,则会自动删除……
  • 外部文件版本控制:外部命令处理版本控制。必须从共享文件夹中移除文件。如果应用程序的路径包含空格,应用半角引号括起来。

忽略模式

这个忽略模式适用于本机设备,只针对本次分享的文件夹的忽略,开启后会在同步文件夹新建 .stignore文件用于保存忽略语法。

忽略模式很有用,分享的文件夹含有大量的临时生成文件,或者同步的文件夹有不想同步的文件,就可以用忽略模式忽略。

比如:

  • Windows 上想同步某个文件夹,但是某些子文件夹不想同步,就可以忽略
  • Android 上会产生一些 .开头的文件夹,同步到其他设备会污染文件夹,也可以忽略

关于忽略的具体情况请自行把握

以下 Syncthing 忽略语法前缀和通配符的表格整理:

忽略语法 说明
(?d) 删除文件前缀:如果文件阻止删除目录,则该文件可被删除。
(?i) 不区分大小写前缀:后面的模式在匹配时不区分大小写。
! 反转匹配:给定条件的反转(即不排除)。通常用于包含原本会被排除的文件。
* 单级通配符:匹配单一级别的目录或文件名。不匹配路径分隔符 (/)。
** 多级通配符:匹配任意数量(包括零个)的目录或文件。可以跨越目录边界。
// 注释:在行首使用时,该行被视为注释,Syncthing 将忽略它。

示例:

有如下文件夹结构

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
sync-test
├── a.txt
├── aliyun
│   └── service
│       ├── a.txt
│       ├── container_service.txt
│       ├── openlist
│       └── service.txt
├── application
├── huaweicloud
├── onecloud
│   └── service

忽略语法

1
2
// 忽略所有名为 service 的文件夹和文件
service

反向排除

1
2
3
4
5
// 除了 service 其他都忽略
!service
*

// 注意,* 在最后一行,不可在开头一行

高级

  • 监视更改:使用来自文件系统的通知来检测更改的项目。 监视更改无需定期扫描即可发现大多数更改。
  • 文件夹类型:可以选择发送接收,只发送,只接受,加密接收
  • 完全重新扫描间隔(秒):默认 3600 秒,表示间隔 1 小时会重新扫描一次文件夹是否有更改

其他暂略

系统服务

Windows

直接运行 syncthing 会有一个前台的窗口,关掉就会退出运行,解决方法是安装为系统服务,让系统开机自动启动

要想实现这个功能,需要借助第三方工具NSSM

关于 NSSM 介绍和安装可查看这篇文章:nssm,创建 Windows 系统服务的工具

创建 syncthing 服务

1
nssm install syncthing "D:\remote\syncthing\syncthing.exe" -no-browser

修改 syncthing 服务,指定运行用户

1
nssm edit syncthing

找到 Log on,选择 This account,输入当前用户,密码。保存退出

启动服务

1
nssm start syncthing

停止服务

1
nssm stop syncthing

删除服务

1
nssm remove syncthing

软件数据备份和恢复

对 syncthing 软件本身的设置(包括同步文件夹和设备等等)备份和恢复

Windows

配置文件所在位置:

1
%LOCALAPPDATA%\Syncthing

备份该文件夹的内容即可,恢复把备份的文件放入此文件夹即可

Linux

配置文件所在位置:

1
$HOME/.config/syncthing

备份该文件夹的内容即可,恢复把备份的文件放入此文件夹即可

Android

syncthing-fork

  1. 点击左上角 三横杠打开设置
  2. 左下角点击设置
  3. 点击 导入与导出

具体的路径页面有所提示,目前是:

1
backups/syncthing/

恢复也需要在此文件夹存在文件

备份模式

如果想要达到备份效果,即是在备份设备不会自动删除文件,可以在备份设备通过以下步骤做到不发送文件,不删除文件

  1. 编辑共享的文件夹,把文件夹类型设置仅接受
  2. 在 Syncthing 主界面,右上角 操作-高级-文件夹,选中共享的文件夹,找到Ignore Delete,选中,保存

这样就不会在同步时,如果某一方设备删除了文件,备份设备不会跟着删除,达到备份效果。而且备份设备删除的文件也不会同步到其他设备,相当于独立开,只作为备份。

常见用途:备份照片,视频等。

重要提示

软件升级前一定要查看发布日志!!,防止升级导致的兼容问题从而导致数据丢失

问题汇总

问题 1

Documents/school" (l9jth-kpuji): folder marker missing (this indicates potential data loss, search docs/forum to get information about how to proceed

出现这样的错误,需要在分享的文件下新建 .stfolder 文件夹,重新确认

页面浏览量Loading
网站总访客数:Loading
网站总访问量:Loading
使用 Hugo 构建
主题 StackJimmy 设计
-->