Syncthing 常见问题与排障

学习目标

  • 掌握 Syncthing 常见错误的识别方法。
  • 掌握网络连接问题的排查步骤。
  • 掌握同步冲突与数据恢复的处理流程。
  • 了解日志分析与诊断工具的使用。
  • 建立系统化的故障排查思维。

前置条件

故障排查通用原则

在遇到 Syncthing 问题时,按以下层次依次排查:

┌─────────────────────────────────────┐
│  1. 服务状态检查                     │
│  • Syncthing 是否在运行?            │
│  • Web UI 是否能打开?               │
├─────────────────────────────────────┤
│  2. 网络连通性检查                   │
│  • 设备是否在同一局域网?            │
│  • 防火墙是否放行?                  │
│  • 能否直连?                        │
├─────────────────────────────────────┤
│  3. 配置一致性检查                   │
│  • 设备 ID 是否正确?                │
│  • 文件夹 ID 是否匹配?              │
│  • 共享权限是否正确?                │
├─────────────────────────────────────┤
│  4. 日志分析                         │
│  • 查看 Web UI 的最近日志。          │
│  • 使用诊断工具。                    │
└─────────────────────────────────────┘

1. 安装与启动问题

问题:Syncthing 无法启动

可能原因与解决方案:

原因解决方案
端口被占用(8384/22000/21027)修改 Syncthing 配置中的端口号,或结束占用端口的进程
权限不足以管理员身份运行(Windows),或使用 sudo(Linux)
配置文件损坏停止 Syncthing,备份并删除配置目录,重新启动生成默认配置

配置目录位置:

  • Windows%LOCALAPPDATA%\Syncthing\
  • macOS~/Library/Application Support/Syncthing/
  • Linux~/.config/syncthing/
  • Android/sdcard/Android/data/com.github.catfriend1.syncthingfork/files/(实际路径可能因设备而异,可在 Syncthing-Fork 设置 → 关于中查看)

删除配置目录会丢失所有设备配对信息

删除配置目录前请先备份,或在删除前记录设备 ID 和共享配置。重新启动后 Syncthing 会生成新的设备 ID,需要重新配对。

问题:Web UI 无法访问

  1. 确认 Syncthing 进程正在运行:

    • Windows:检查任务管理器中是否有 syncthing.exeSyncTrayzor.exe
    • macOS/Linux:终端运行 ps aux | grep syncthing
    • Android:检查通知栏是否有 Syncthing-Fork 的运行图标(常驻通知 “Syncthing 正在运行”)。
  2. 确认监听地址正确:

    • 默认地址为 127.0.0.1:8384
    • 如果修改过,在 Syncthing 日志中查看实际监听的地址。
  3. 检查是否有其他程序占用了 8384 端口:

    # Windows
    netstat -ano | findstr :8384
     
    # macOS / Linux
    lsof -i :8384

2. 网络连接问题

问题:设备无法互相发现

排查步骤:

  1. 检查局域网连通性

    # 在设备 A 上 ping 设备 B 的 IP 地址
    ping 192.168.1.x

    如果 ping 不通,检查:

    • 两台设备是否连接到同一路由器/交换机。
    • 是否开启了客户端隔离(AP Isolation)功能(常见于公共 Wi-Fi 或访客网络)。
  2. 检查 Syncthing 端口

    • Syncthing 使用 TCP 22000(数据传输)和 UDP 21027(本地发现)。
    • 确认防火墙已允许这些端口通过专用网络
      • Windows:控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙 → 确保 Syncthing 的 专用 已勾选。
      • macOS:系统设置 → 网络 → 防火墙 → 添加 Syncthing 为例外。
      • Linuxsudo ufw allow 22000/tcp && sudo ufw allow 21027/udp
      • Android:系统防火墙通常不需配置。如果连接异常,检查 Syncthing-Fork 是否被省电策略限制(设置 → 应用 → Syncthing-Fork → 电池 → 选 无限制),以及是否授予了附近设备权限(Android 12+,用于局域网设备发现)。
  3. 检查路由器设置

    • 如果路由器启用了 AP 隔离客户端隔离,同一 Wi-Fi 下的设备无法互相访问。请在路由器管理后台关闭该功能。
  4. 手动添加设备地址(如果不能自动发现):

    • 在 Web UI → 远程设备 → 编辑设备 → 地址 字段。
    • 添加静态地址:tcp://192.168.1.x:22000(将 x 替换为目标设备的 IP)。
    • 这样可以绕过本地发现,直接连接指定地址。

问题:通过中继而非直连

症状:Web UI 显示连接地址为 relay://...,同步速度较慢。

解决方案:

  1. 确认两台设备在同一局域网。
  2. 关闭中继以强制直连:
    • 设置 → 连接 → 取消勾选 启用中继
    • 两台设备都需操作。
  3. 启用 NAT 穿透(如果设备在不同子网):
    • 设置 → 连接 → 勾选 启用 NAT 穿透
  4. 手动指定对方地址(最可靠):
    • 远程设备 → 编辑 → 地址 → 输入 tcp://192.168.x.x:22000

3. 同步问题

问题:文件夹状态持续为 “未同步”

可能原因与解决方案:

原因解决方案
正在进行初始同步(大量文件)等待同步完成。可以在 Web UI 查看同步进度条。
文件夹 ID 不匹配确认所有设备上共享文件夹的 文件夹 ID 完全一致(区分大小写)。
设备未连接排查网络连通性问题(见上节)。
.stignore 配置导致文件被忽略检查 .stignore 文件中的规则是否过于宽泛。
文件权限问题确认 Syncthing 对同步文件夹有读写权限。
磁盘空间不足检查磁盘剩余空间,清理不必要的文件。
文件路径过长(Windows)Windows 路径长度限制为 260 字符,移动文件夹到较浅的目录。

问题:同步速度很慢

可能原因与解决方案:

  1. 首次同步大量文件 → 耐心等待,首次同步会扫描所有文件并计算哈希。
  2. 通过中继而非直连 → 见上节”通过中继而非直连”的解决方案。
  3. 启用了速率限制 → 设置 → 连接 → 检查速率限制是否设置得太低。
  4. 磁盘 I/O 瓶颈 → 如果有大量小文件(如 Obsidian 的 .obsidian/ 缓存),同步可能变慢。可在 .stignore 中忽略缓存目录。
  5. 加密/校验计算负载 → Syncthing 会对传输数据进行加密和完整性校验,CPU 较弱的设备(如旧款笔记本)可能较慢。

问题:频繁出现冲突副本

原因: 同一文件在两台设备上几乎同时被修改。

减少冲突的策略:

  1. 等待同步完成再编辑:在开始编辑文件前,确认 Web UI 显示 最新(绿色)。
  2. 错开编辑时间:避免在多台设备上同时编辑同一文件。
  3. 使用仅发送/仅接收模式:如果某台设备只是展示用途,设为仅接收模式。
  4. 增大扫描间隔:减少频繁扫描导致的冲突机会。高级设置 → 扫描间隔设为 300 秒(5 分钟)或使用 监视模式

问题:文件被误删或误覆盖

恢复步骤:

  1. 如果启用了版本控制

    • 进入同步文件夹同级的 .stversions 目录。
    • 按时间戳查找被删除/覆盖前的版本。
    • 将文件复制回原位置。
  2. 如果未启用版本控制

    • 立即在另一台已同步的设备上查找文件(如果文件是在本机被误删,另一台设备可能仍有副本)。
    • 从另一台设备复制文件回来。
    • 紧急操作:在另一台设备上暂停 Syncthing(防止同步删除操作传播),然后恢复文件。
  3. 如果所有设备都已同步删除

    • 从回收站/垃圾桶中找回(如果系统回收站未清空)。
    • 从 Git 历史中恢复(如果仓库同时受 Git 管理)。
    • 从定期备份中恢复。

版本控制是第一道防线

Syncthing 的文件版本控制是防止意外删除/覆盖的最有效手段。在实战章节中我们已经配置了简单版本控制,如果你还没有配置,请立即配置。

4. 配置与权限问题

问题:设备配对后无法同步文件夹

  1. 确认文件夹已共享给远程设备:
    • Web UI → 编辑文件夹 → 共享 标签页 → 勾选目标设备。
  2. 确认远程设备已接受共享请求:
    • 在远程设备的 Web UI 上查看是否有待接受的共享通知。
  3. 检查文件夹 ID 是否一致:
    • 两台设备上同一个共享文件夹的 文件夹 ID 必须完全一致。

问题:Windows 上文件同步时提示权限错误

  • 运行 SyncTrayzor 或 Syncthing 时 以管理员身份运行
  • 检查同步文件夹是否设置了 只读 属性。
  • 如果文件夹在系统保护目录(如 C:\Program Files),请移动到用户目录(如 D:\C:\Users\你的用户名\)。

问题:macOS 上同步 .obsidian 文件夹中的文件被忽略

macOS 的文件系统事件可能与 Syncthing 的监听机制冲突。可以尝试:

  1. 编辑文件夹 → 高级 → 扫描间隔 设为 60(秒),同时取消勾选 “监视文件系统更改”
  2. 或者忽略整个 .obsidian 目录(通过 .stignore),仅同步笔记内容(推荐)。

问题:Android 上无法选择仓库文件夹

Android 的存储访问框架(SAF) 可能限制对特定目录的访问:

  1. 确保 Syncthing-Fork 已授予文件和媒体权限(设置 → 应用 → Syncthing-Fork → 权限 → 允许文件和媒体)。
  2. 如果仓库在外置 SD 卡,部分 Android 版本可能无法直接访问,建议将仓库移到内部存储
  3. 如果使用 Obsidian 且仓库位于 Obsidian 应用的默认 Vault 目录,确保 Syncthing-Fork 有权限访问 Android/data/md.obsidian/ 目录(Android 11+ 限制较严,建议将 Vault 放在外部存储如 Documents/ 下)。

5. 日志与诊断工具

查看 Web UI 日志

  1. 在 Web UI 右上角点击 操作 → 日志
  2. 日志按时间倒序显示,包含以下重要信息:
    • [WARN][ERROR] 级别的警告/错误。
    • 连接建立/断开记录。
    • 文件同步开始/完成记录。
  3. 你可以复制日志内容,在搜索引擎或 GitHub Issues 中查询。

导出诊断信息

  1. 在 Web UI 上点击 操作 → 诊断
  2. 诊断信息包含:连接状态、设备列表、文件夹状态、最近错误等。
  3. 点击 保存 可导出为文本文件,在寻求帮助时提供。

命令行诊断

# 查看 Syncthing 进程是否运行
ps aux | grep syncthing
 
# 测试端口连通性(在设备 B 上测试设备 A 的 22000 端口)
telnet 192.168.1.x 22000
 
# 或使用(Windows PowerShell)
Test-NetConnection -ComputerName 192.168.1.x -Port 22000
 
# 查看 Syncthing 的详细日志
# 日志文件位置:
# Windows: %LOCALAPPDATA%\Syncthing\syncthing.log
# macOS: ~/Library/Application Support/Syncthing/syncthing.log
# Linux: ~/.config/syncthing/syncthing.log

6. 故障排查流程图

当同步出现问题时,按照以下流程图操作:

同步出问题了吗?
│
├─ Syncthing 是否运行? ─── 否 ──→ 启动 Syncthing
│
├─ 设备是否已连接? ─── 否 ──→ 检查网络连通性
│                                  ├─ ping 对方设备
│                                  ├─ 检查防火墙
│                                  └─ 确认同一局域网
│
├─ 文件夹状态是否为 "最新"? ─── 否 ──→ 检查文件夹配置
│                                            ├─ 文件夹 ID 是否一致
│                                            ├─ 共享权限是否勾选
│                                            └─ .stignore 是否误忽略
│
├─ 是否有冲突副本? ─── 是 ──→ 手动合并或恢复
│
├─ 同步速度太慢? ─── 是 ──→ 检查连接方式(直连/中继)
│                                  ├─ 关闭中继
│                                  └─ 检查速率限制
│
└─ 问题仍未解决? → 查看日志 → 搜索 GitHub Issues → 寻求社区帮助

7. 获取帮助

当以上排查步骤均无法解决问题时,可以通过以下渠道获取帮助:

官方资源

提交 Issue 前的准备

为帮助开发者快速定位问题,请在提交 Issue 时提供以下信息:

  1. 操作系统与版本:如 Windows 11 / macOS 15 / Ubuntu 24.04。
  2. Syncthing 版本:Web UI → 设置 → 关于 → 查看版本号。
  3. 问题描述:具体的错误现象、发生时间、触发操作。
  4. 日志片段:从 Web UI 日志中复制相关的 [WARN] / [ERROR] 日志。
  5. 诊断信息:操作 → 诊断 → 保存并附上。
  6. 网络环境:是否在同一局域网、是否有特殊网络配置(代理/VPN/AP 隔离)。

练习任务

  1. 模拟一个常见故障场景(如关闭一台设备的防火墙),观察同步状态变化。
  2. 查看 Syncthing 的 Web UI 日志,找到最近一次同步完成或失败的记录。
  3. .stignore 中添加一行忽略 .obsidian/workspace.json,确认该文件不再被同步。
  4. (选做)在两台设备上模拟同时编辑同一文件产生冲突,记录冲突副本的命名格式,并尝试恢复。

验收清单

  • 能够按通用排查原则系统化定位问题。
  • 能够检查网络连通性(ping / 端口检测)。
  • 能够配置防火墙放行 Syncthing 端口。
  • 能够查看和解读 Web UI 日志。
  • 能够导出诊断信息用于寻求帮助。
  • 能够在发生文件误删时通过版本控制恢复。
  • 了解如何获取官方帮助(文档 / GitHub Issues / 论坛)。