「行云流水」在挂载移动硬盘时自动启动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 |
我这里的输出如下:

第一列为我们需要的systemd挂载名称,最后一列为挂载路径。如果你参考持续化设置一节配置过/etc/fstab,则挂载名称会短一些。
参考ArchWiki我编写了如下的service:
1 | [Unit] |
保存至~/.config/systemd/user/syncthing.service
创建后还需要运行:
1 | systemctl enable syncthing --user |
该服务才会生效,不用担心额外的资源占用,因为这个enable不会导致Syncthing在系统启动时开始运行。在设备卸载后,Syncthing也会随之停止运行