Peng's Blog

Peng's Blog

马上订阅 Peng's Blog RSS 更新: https://pengs.top/atom.xml

「行云流水」在挂载移动硬盘时自动启动Syncthing开始同步的丝滑体验

2025年8月9日 04:24

syncthing

Syncthing是一款持续文件同步程序。它能实时在两台或多台计算机之间同步文件,安全防范窥探。您的数据仅属于您自己,您理应选择数据的存储位置、是否与第三方共享,以及数据如何在互联网上传输。

很多人称Syncthing为一个网盘,实际上Syncthing本身不提供文件存储的服务。它只是一个工具,让你的数据可以在你的多个设备之间点对点增量传输,如果你有一台自己的NAS,那么你确实可以收获一个速度秒杀绝大部分网盘的“网盘”

Syncthing的安装并不难,网上有很多教程,我就不重复造轮子了。

Syncthing的分布式存储理念很棒,但是在我的使用中,还是有点痛点。

痛点

我的上一台电脑只有256GB的存储空间,分给linux的只有60GB,在这样的空间上,我想要备份手机相册就捉襟见肘了。所以我一向把相册、音乐等等存储到一张1TB大小的机械硬盘上(1TB在机械盘中算小了,但是暂时够用)。

So,在设置Syncthing的时候我选择将Syncthing备份数据的位置放在机械硬盘上。为了防止Syncthing在我不需要的时候常驻后台,我并没有设置开机自启。于是在每次需要同步数据的时候,都需要把机械硬盘插上电脑,挂载打开,手动启动电脑和手机上的Syncthing,虽然只是一行命令的事,但是作为对系统要求到近乎苛刻的我,这一不流畅的工作流实在不够优雅。我希望实现类似于传统网盘客户端那样的“无感”体验。

你永远可以相信你对linux的自定义程度

想到要做这个事啊,我就想到了systemd 这个linux上几乎已成标准的服务管理程序。

要实现这个需求,我们希望有一个trigger触发器,在我的移动硬盘挂载的时候触发,激活我们编写的service,然后启动Syncthing

思路还挺清晰的。接下来找这个trigger

还是要吐槽一下linux,虽然可自定义性挺高,提供的接口也很多,这赋予了系统强大的能力,但是这些接口的文档太多太杂,且分散在各处。对于新手、老手都是个头疼的问题,好在现在AI吸收了天地之精华,问一下,很快就找出来了,在这一点上,AI真是提高了我的效率。

正如服务有对应的单元文件一样,设备挂载时也会产生固定的单位(但是并不存在实际文件)可以使用systemctl查看:

1
systemctl list-units --type=mount --user

我这里的输出如下:

屏幕截图_20250809_115538

第一列为我们需要的systemd挂载名称,最后一列为挂载路径。如果你参考持续化设置一节配置过/etc/fstab,则挂载名称会短一些。

参考ArchWiki我编写了如下的service:

1
2
3
4
5
6
7
8
9
[Unit]
Description=Syncthing
BindsTo=mnt-btrfs.mount

[Service]
ExecStart=/usr/bin/syncthing

[Install]
WantedBy=mnt-btrfs.mount

保存至~/.config/systemd/user/syncthing.service

创建后还需要运行:

1
systemctl enable syncthing --user

该服务才会生效,不用担心额外的资源占用,因为这个enable不会导致Syncthing在系统启动时开始运行。在设备卸载后,Syncthing也会随之停止运行

效果

服务启动时,也会弹出浏览器中的WebUI,还挺好

Zcc见过很惊讶。