记一次离谱的 syncthing 同步冲突

背景 一句话概括:zerotier + syncthing 用于文件同步,网络有时不稳定;多平台同步,涉及跨系统的问题。 环境:zerotier + syncthing syncthing:局域网网同步软件。可以自动向其他设备同步指定文件夹的文件,同步功能类似onedrive。 zerotier:内...
记一次离谱的 syncthing 同步冲突
记一次离谱的 syncthing 同步冲突

背景

一句话概括:zerotier + syncthing 用于文件同步,网络有时不稳定;多平台同步,涉及跨系统的问题。

环境:zerotier + syncthing

syncthing:局域网网同步软件。可以自动向其他设备同步指定文件夹的文件,同步功能类似onedrive。

zerotier:内网穿透工具。可以搭建虚拟局域网,这里为 syncthing 提供局域网网环境。

由于设备和虚拟机比较多比较杂,我使用 zerotier(内网穿透)+ syncthing(局域网同步) 实现文件夹的同步。

这套方案的好处是:可以和其他服务一起复用虚拟局域网,且 syncthing 不需要部署额外服务器————云服务器只需要部署 zerotier 提供公网IP即可,迁移极其方便,适合以学生身份薅云服务器的羊毛。

缺点是:内网穿透有时网络不稳定,这种情况下 syncthing 偶尔会无法秒传,导致莫名其妙的冲突。

涉及设备:win10、debian13、Android14

  • 白笔记本:debian13
  • 黑笔记本:debian13
  • 手机:Android14(红米,MIUI版本)
  • 台式机:win10
  • 虚拟机:win10(开着tun模式的梯子,宿主机为台式机)
  • 其他设备(与本事件完全无关的设备)

起因

一句话概括:在 黑笔记本 上误操作,使其中一个CA证书的文件名称改为了 . ,导致同步故障。

  1. 我想要将 某CA证书 传输给所有设备,所以放到了共享文件夹。
  2. (不知道怎么操作的,也许是我复制/改名时误操作了)。
  3. syncthing 由 黑笔记本台式机虚拟机 同步失败,报冲突,发现这个 . 文件。
  4. 在黑笔记本上发现可以直接看见的 . 文件,在文件管理器可以点开,是个CA证书,属性、信息 和 某CA证书 一模一样。

暴露问题

一句话概括:这个文件可以用 rm . 直接删除,大多数设备恢复正常,但手机仍然显示同步失败,手机认为还有 . 这个文件没同步过来。

  1. 不同于正常目录中的 .黑笔记本 中名称为 . 的文件可以用 ls 直接看到。
  2. 使用 rm . 直接删除后,台式机虚拟机 都恢复正常。
  3. 第二天发现 手机 的 syncthing 同步出现冲突,这个冲突通常类似于 git 中的文件冲突。排查后发现在 黑笔记本 认为最新进度应该有 79 个文件,手机 认为最新进度应该有 80 个文件,手机 在试图下载 第 80 个文件 时报错,而 黑笔记本 没有报错。
  4. 在手机的界面上,这个 第 80 个文件 的名称正是 . ,连文件路径都一模一样。
  5. 我感到格外困惑:黑笔记本 上已经没有这个文件了,但是 手机 认为有,那应该是缓存卡住了吧?是不是想办法刷新一下它的缓存就好了?
  6. (折腾了很久,没有效果)

问题解决

一句话概括:名称为 '.'$'\r' 的文件被部分设备显示为 .

  1. 点开冲突项仔细查看,突然发现 手机 认为有这个文件的地方不是 黑笔记本 ,而是 白笔记本
  2. 打开白笔记本的 syncthing 管理界面,发现 白笔记本 也和 手机 一样认为现在应该有 80 个文件。
  3. 我找到了这个文件,在白笔记本中,它不叫 . ,而叫 '.'$'\r'
  • 黑笔记本 不同,使用 ls 查看,看不到这个文件;使用 ls -a 查看,可以看到这个文件,它叫 '.'$'\r',可能由 黑笔记本 同步过来;
  • 黑笔记本 中,这个CA文件名字就叫 . ,但是与目录的 . 的高亮颜色不同,且可以直接用 rm . 删除。
  1. rm '.'$'\r' 删除这个文件,手机上的冲突解除。

原因推测

  • 我一度以为是我的网络问题导致冲突,从结果来看也许与这个无关。
  • 同步过来的 某CA证书 可能被我误操作改名成了 .,第一次冲突也由此产生。
  • '.'$'\r' 这个文件可能由 黑笔记本 根据 . 同步过来。但在删除时,syncthing认为 '.'$'\r'. 不同名,于是没有把 '.'$'\r' 删除。于是导致了不同设备间存在差异但都不认为自己有问题的局面,第二次冲突由此产生。
  • 希望这只是一个bug,希望我的电脑没中病毒。

1 个帖子 - 1 位参与者

阅读完整话题

来源: LinuxDo 最新话题查看原文