文件同步是个大坑,在那些自架方案里我还没找到一个完全靠谱的。

我之前用的是群辉的 CloudStation。这个东西一般来说还是比较可靠的,我日常用它同步一个 2GB 一千多个文件的目录,基本没出过岔子。但是我曾经试图用它同步一个很大而且经常更新的目录,它就不干了。

在 VM 服务器装好以后,我最先考虑的是 git-annex,这个东西虽然强大而且灵活,但是并不适用于我的国情。在我的服务器里,我把同步的目录都用 samba 挂在群辉上,但是 git-annex 干啥都靠符号连接,在 samba 里会失效。

后来我又试了 Resilio Sync,也就是以前的 BT Sync。在正常工作一天之后,它把一部分文件同步成了空文件⋯⋯ 于是我赶紧把它删了,还好我有备份。

我现在用的是 Syncthing,总算是能凑合使用了,但也仅仅是凑合。我目前发现的问题有,

Conflict
Figure 1. 谜之 conflict

在我用 Syncthing 以后还有一件奇怪的事。在编辑文件的时候,Emacs 会在同一个目录里生成一个 lock 文件,名叫 .#xxxxxx#,这个文件是个符号连接。文件保存以后 Emacs 就会删掉这个连接。刚才说了,在服务器上同步目录是挂在 samba 上的,不支持符号连接,所以这个连接会变成一个普通的文件。但奇怪的是 Syncthing 会在服务器上试图把这个文件更名成那个(曾经)在编辑的文件,更奇怪的是更名会因为权限而失败,然后同步就会终止,告诉我有一个失败的文件。如果我进入那个 samba 挂载的目录,试图直接 mv 更名,同样会因为权限失败。我目前的解决办法是在 Emacs 里把 file locking 关掉,但是这件事情太走进科学了⋯⋯