<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>文件同步 on MowMark的个人博客</title><link>https://mowmark.github.io/mowmark_blog/tags/%E6%96%87%E4%BB%B6%E5%90%8C%E6%AD%A5/</link><description>Recent content in 文件同步 on MowMark的个人博客</description><generator>Hugo -- gohugo.io</generator><language>zh-cn</language><lastBuildDate>Tue, 14 Jul 2026 17:59:42 +0800</lastBuildDate><atom:link href="https://mowmark.github.io/mowmark_blog/tags/%E6%96%87%E4%BB%B6%E5%90%8C%E6%AD%A5/index.xml" rel="self" type="application/rss+xml"/><item><title>使用Syncthing进行文件同步</title><link>https://mowmark.github.io/mowmark_blog/computer/application/sync/000_syncthing/</link><pubDate>Tue, 14 Jul 2026 14:18:28 +0800</pubDate><guid>https://mowmark.github.io/mowmark_blog/computer/application/sync/000_syncthing/</guid><description>&lt;h2 id="什么是syncthing"&gt;&lt;a href="#%e4%bb%80%e4%b9%88%e6%98%afsyncthing" class="header-anchor"&gt;&lt;/a&gt;什么是Syncthing?
&lt;/h2&gt;&lt;p&gt;简而言之, Syncthing 是一款专门用于文件同步的开源软件. 它自主设计了一套名为 BEP (Block Exchange Protocol) 的协议, 并基于此搭建了 P2P 架构, 每一端都能独立进行文件的发送与接收.&lt;/p&gt;
&lt;p&gt;需要说明的是, 文件内容本身是点对点直连传输的. 但两台设备要&amp;quot;找到彼此&amp;quot;, 默认还是依赖官方维护的 discovery server (设备发现) 和 relay server (NAT 穿透失败时的中继). 这两个服务器不经手你的文件内容, 只负责牵线搭桥. 如果你对隐私要求极高, 也可以自建这两个服务, 但对大多数人来说没有必要.&lt;/p&gt;
&lt;h2 id="为什么要使用-syncthing"&gt;&lt;a href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e8%a6%81%e4%bd%bf%e7%94%a8-syncthing" class="header-anchor"&gt;&lt;/a&gt;为什么要使用 Syncthing?
&lt;/h2&gt;&lt;p&gt;日常跨设备同步文件, 常见的做法无非是丢云盘或插移动硬盘倒来倒去. 但这两种方式各有各的问题: 云盘要经过第三方服务器, 大文件同步慢, 免费额度有限; 移动硬盘完全依赖人工操作, 谈不上&amp;quot;同步&amp;quot;.&lt;/p&gt;
&lt;p&gt;Syncthing 的优势在于:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;去中心化&lt;/strong&gt;: 不经过任何第三方存储, 文件只在你自己的设备之间流转.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;增量同步&lt;/strong&gt;: 只传输变化的部分, 不用每次全量拷贝.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;跨平台&lt;/strong&gt;: Windows, Linux, macOS, Android 都有对应客户端.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;开源免费&lt;/strong&gt;: 没有容量限制, 也不用担心某天服务商跑路.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果你有多台常驻设备 (比如台式机 + 笔记本 + NAS), 且不想依赖云盘, Syncthing 是一个相当稳妥的选择.&lt;/p&gt;
&lt;h2 id="步骤"&gt;&lt;a href="#%e6%ad%a5%e9%aa%a4" class="header-anchor"&gt;&lt;/a&gt;步骤
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;下载&lt;/strong&gt;: 前往 &lt;a class="link" href="https://syncthing.net/downloads/" target="_blank" rel="noopener"
 &gt;Syncthing&lt;/a&gt; 下载适合的架构版本, 解压或安装运行.
&lt;ul&gt;
&lt;li&gt;如果你的发行版软件源收录了 Syncthing, 也可以用包管理器安装 (比如 Ubuntu/Debian: &lt;code&gt;sudo apt install syncthing&lt;/code&gt;). 好处是系统自带了 systemd 服务模板, 后面开机启动省事很多. 坏处是版本会落后一些.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;Windows 用户直接从官网下载安装包, 双击安装即可, 后续的 Web UI 操作和 Linux 完全一致, 不再赘述.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;ol start="2"&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;打开Web UI&lt;/strong&gt;: 启动后, 进入浏览器, 访问&lt;code&gt;http://localhost:8384&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加设备&lt;/strong&gt;: 点击&amp;quot;添加远程设备&amp;quot;, 填入另一台设备的 Device ID. Device ID 可以在对方的 Web UI 里点击右上角&amp;quot;操作 → 显示 ID&amp;quot;查到, 是一长串字符或者一个二维码. 添加之后, 需要在两台设备上分别完成这个操作 (互相添加对方), 并在对方的界面上手动接受连接请求, 双方才算配对成功.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;添加并共享文件夹&lt;/strong&gt;: 点击&amp;quot;添加文件夹&amp;quot;, 填写文件夹路径和文件夹标签 (Folder ID). 标签是两台设备之间识别同步关系的唯一标识, 两边必须一致. 保存后, 记得在文件夹的&amp;quot;共享&amp;quot;选项卡中勾选刚才配对好的目标设备. 对方会收到一条共享邀请, 接受后选择本地存放路径, 同步才会真正开始. 只加设备不共享文件夹, 或者加了文件夹不勾目标设备, 都不会触发任何同步.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在另一台电脑上重复上述操作即可.&lt;/p&gt;
&lt;h2 id="设置开机启动"&gt;&lt;a href="#%e8%ae%be%e7%bd%ae%e5%bc%80%e6%9c%ba%e5%90%af%e5%8a%a8" class="header-anchor"&gt;&lt;/a&gt;设置开机启动
&lt;/h2&gt;&lt;p&gt;Linux 通过 systemd 管理系统后台服务, 控制程序何时启动、以什么身份运行、异常退出后如何处理. Windows 则通过系统服务和任务计划程序管理. 下面按平台和安装方式分别说明.&lt;/p&gt;
&lt;h3 id="通过包管理器安装-linux"&gt;&lt;a href="#%e9%80%9a%e8%bf%87%e5%8c%85%e7%ae%a1%e7%90%86%e5%99%a8%e5%ae%89%e8%a3%85-linux" class="header-anchor"&gt;&lt;/a&gt;通过包管理器安装 (Linux)
&lt;/h3&gt;&lt;p&gt;如果你是用 &lt;code&gt;apt&lt;/code&gt; / &lt;code&gt;dnf&lt;/code&gt; 等包管理器安装的, 系统已经自带了 &lt;code&gt;syncthing@&amp;lt;user&amp;gt;.service&lt;/code&gt; 模板服务, 一条命令搞定:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; --now syncthing@&amp;lt;user&amp;gt;.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;不需要手写 unit 文件, 手动安装的读者请继续往下看.&lt;/p&gt;
&lt;h3 id="手动安装-linux"&gt;&lt;a href="#%e6%89%8b%e5%8a%a8%e5%ae%89%e8%a3%85-linux" class="header-anchor"&gt;&lt;/a&gt;手动安装 (Linux)
&lt;/h3&gt;&lt;p&gt;如果你是手动下载的二进制文件, 才需要走完下面完整的流程:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;创建软链接&lt;/strong&gt;: 有些教程在 &lt;code&gt;/usr/bin/&lt;/code&gt; 下创建软链接, 但那是发行版包管理器管辖的目录, 自己放文件容易和系统更新冲突. 更推荐放在 &lt;code&gt;/usr/local/bin/&lt;/code&gt; 下&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo ln -s &amp;lt;你的Syncthing可执行文件的绝对路径&amp;gt; /usr/local/bin/syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;&lt;strong&gt;编辑 service 服务文件&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo vim /etc/systemd/system/syncthing.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;&lt;strong&gt;粘贴如下内容&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Unit]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Description=Syncthing - Open Source Continuous File Synchronization
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;After=network.target
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Service]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User=&amp;lt;user&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ExecStart=/usr/local/bin/syncthing
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Restart=on-failure
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SuccessExitStatus=3 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RestartForceExitStatus=3 4
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[Install]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;WantedBy=multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;code&gt;Restart=on-failure&lt;/code&gt;: 服务异常退出时自动重启.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;SuccessExitStatus=3 4&lt;/code&gt; + &lt;code&gt;RestartForceExitStatus=3 4&lt;/code&gt;: Syncthing 自动升级或手动重启时以退出码 3 或 4 退出. 不加这两行, systemd 会把正常重启当成崩溃, 触发不必要的报错.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;WantedBy=multi-user.target&lt;/code&gt;: 在多用户模式下启动.&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;记得把 &lt;code&gt;User&lt;/code&gt; 换成你自己的用户名, 用 root 跑 Syncthing 没有必要, 也不安全.&lt;/p&gt;
&lt;ol start="4"&gt;
&lt;li&gt;&lt;strong&gt;重新加载 daemon&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="5"&gt;
&lt;li&gt;&lt;strong&gt;设置开机启动&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="6"&gt;
&lt;li&gt;&lt;strong&gt;手动启动&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start syncthing
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;如果是包管理器安装的, 则用 &lt;code&gt;sudo systemctl start syncthing@&amp;lt;user&amp;gt;.service&lt;/code&gt; 启动.&lt;/p&gt;
&lt;p&gt;完成后, 用 &lt;code&gt;sudo systemctl status syncthing&lt;/code&gt; (或 &lt;code&gt;syncthing@&amp;lt;user&amp;gt;&lt;/code&gt;) 确认服务为 &lt;code&gt;active (running)&lt;/code&gt; 状态即可.&lt;/p&gt;
&lt;h3 id="安装版-windows"&gt;&lt;a href="#%e5%ae%89%e8%a3%85%e7%89%88-windows" class="header-anchor"&gt;&lt;/a&gt;安装版 (Windows)
&lt;/h3&gt;&lt;p&gt;Windows 安装包默认将 Syncthing 注册为系统服务. 打开 &lt;code&gt;Win+R&lt;/code&gt; 输入 &lt;code&gt;services.msc&lt;/code&gt;, 找到 &lt;code&gt;Syncthing&lt;/code&gt; 服务, 确认启动类型为&amp;quot;自动&amp;quot;即可.&lt;/p&gt;
&lt;h3 id="便携版-windows"&gt;&lt;a href="#%e4%be%bf%e6%90%ba%e7%89%88-windows" class="header-anchor"&gt;&lt;/a&gt;便携版 (Windows)
&lt;/h3&gt;&lt;p&gt;便携版不会注册系统服务. 可以在任务计划程序中创建一条基本任务: 触发器选&amp;quot;当前用户登录时&amp;quot;, 操作选&amp;quot;启动程序&amp;quot;, 填入 &lt;code&gt;syncthing.exe&lt;/code&gt; 的完整路径. 一般情况用安装版就够了.&lt;/p&gt;
&lt;h2 id="补充说明"&gt;&lt;a href="#%e8%a1%a5%e5%85%85%e8%af%b4%e6%98%8e" class="header-anchor"&gt;&lt;/a&gt;补充说明
&lt;/h2&gt;&lt;h3 id="忽略不需要同步的文件"&gt;&lt;a href="#%e5%bf%bd%e7%95%a5%e4%b8%8d%e9%9c%80%e8%a6%81%e5%90%8c%e6%ad%a5%e7%9a%84%e6%96%87%e4%bb%b6" class="header-anchor"&gt;&lt;/a&gt;忽略不需要同步的文件
&lt;/h3&gt;&lt;p&gt;有些文件夹或文件类型不需要也不应该被同步. 在同步文件夹根目录创建 &lt;code&gt;.stignore&lt;/code&gt;, 按行写入忽略模式, 语法和 &lt;code&gt;.gitignore&lt;/code&gt; 类似. 一个常见的配置如下:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 版本控制
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.git/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 依赖目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;node_modules/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;__pycache__/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 编译产物
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.o
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.class
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 临时文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;*.swp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;~*
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;配置后 Syncthing 会自动跳过这些路径, 不再传输和扫描.&lt;/p&gt;
&lt;h3 id="文件版本控制"&gt;&lt;a href="#%e6%96%87%e4%bb%b6%e7%89%88%e6%9c%ac%e6%8e%a7%e5%88%b6" class="header-anchor"&gt;&lt;/a&gt;文件版本控制
&lt;/h3&gt;&lt;p&gt;日常使用中误删或误覆盖的情况难以完全避免. 在 Web UI 中点击对应文件夹 → 编辑 → File Versioning, 可以启用版本控制. 推荐使用 &lt;code&gt;Simple File Versioning&lt;/code&gt;, 设置保留最近 N 个旧版本. 当文件被修改或删除时, 旧版本会被保留下来, 而不是被彻底丢弃.&lt;/p&gt;
&lt;h3 id="冲突处理"&gt;&lt;a href="#%e5%86%b2%e7%aa%81%e5%a4%84%e7%90%86" class="header-anchor"&gt;&lt;/a&gt;冲突处理
&lt;/h3&gt;&lt;p&gt;两台设备同时在同一个文件上做了修改, Syncthing 不会静默覆盖任意一方. 它会保留最后一次同步的版本作为基础, 另一端的修改另存为冲突副本. 副本命名格式为 &lt;code&gt;文件名.sync-conflict-YYYYMMDD-HHMMSS.ext&lt;/code&gt;. 你发现冲突后手动核对两个版本的内容, 保留正确的, 删除多余的那个即可.&lt;/p&gt;
&lt;h3 id="纯局域网模式"&gt;&lt;a href="#%e7%ba%af%e5%b1%80%e5%9f%9f%e7%bd%91%e6%a8%a1%e5%bc%8f" class="header-anchor"&gt;&lt;/a&gt;纯局域网模式
&lt;/h3&gt;&lt;p&gt;如果所有设备都在同一个局域网内, 不需要经过公网的 discovery 和 relay 服务器. 进入 &lt;code&gt;操作 → 高级 → 连接&lt;/code&gt;, 取消勾选 &lt;code&gt;Global Discovery&lt;/code&gt; 和 &lt;code&gt;Enable Relaying&lt;/code&gt;, 只保留 &lt;code&gt;LAN Discovery&lt;/code&gt;. 这样 Syncthing 只会在局域网内广播和连接, 不走公网, 速度更快, 隐私性也更高.&lt;/p&gt;</description></item></channel></rss>