关于思源笔记使用第三方同步盘可能造成数据损坏的问题

本贴最后更新于 1171 天前,其中的信息可能已经时移世改

第三方同步盘可能造成数据损坏

先说结论:目前因为使用同步盘带来的数据损坏问题是无法彻底解决的。

原因:同步盘在同步时会锁定文件,此时思源就无法写入文件。加上一些不确定的原因(比如同步盘自身卡顿、网络质量不好等)会导致锁定文件时长不确定,思源只能在很短的时间内(300-400 毫秒)尝试重新写入(如果重试时间过长,还会带来其他问题),这时如果文件还是被同步盘锁定,则只能在旁边生成临时文件以备手动恢复。

这个问题要彻底解决只能由思源来锁定文件,但这样的结果就是同步盘无法同步文件,失去了使用第三方同步盘的意义。

一个折中方案

我们目前采取了一个折中的方案:有数据写入后思源锁定一段时间,如果没有继续数据变更则自动解锁。解锁以后同步盘就可以同步了,但是这个期间内如果发生数据变更,就依然还是会面临上面提到的问题。所以这个方案只是降低了问题发生的概率,并不能彻底解决问题。

使用建议

  • 请勿使用第三方同步盘进行实时同步。思源内核启动之前同步好数据,暂停同步以后再启动思源,使用结束后关闭思源内核,最后再打开同步盘同步数据。虽然麻烦,但是可靠……
  • 请勿同时使用第三方同步盘和思源官方同步,鱼肉和熊掌只能二选一……
  • 定期备份数据,安全第一

大家如果有更好的思路欢迎随时讨论。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22337 引用 • 89382 回帖
1 操作
88250 在 2021-09-07 23:31:49 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • 我能想到的:如果写入失败,在思源软件目录(而非笔记目录)创建临时文件,写入,做下记录,用一个单独的线程,每 1s 根据记录写入指定文件,并删除临时文件。

    如果把临时文件写到笔记文件夹,可能会导致进一步的 同步错乱。

    临时文件创建后就不会再次写入,没有同步错乱的风险。
    88250
  • 其他回帖
  • 我目前用坚果云同步笔记所在的文件夹,还没有出现过题主说得问题。不过不知道是不是因为我每一篇笔记的体积都比较小的原因。

    3 回复
  • luyeok 1 1 赞同

    我建议作者可以研究下 keepass 的同步思路,keepass 是直接把硬盘上存有密码的数据库文件解密后读入内存。本地修改后,再存入硬盘。在实际的使用中,可以直接把存有密码的数据库放到网盘上同步,基本上不会出现同步的问题。这么做好处有两点:1. 硬盘上的文件是加密的,读入内存后存放在内存安全区域,数据比较安全,甚至不怕软件扫描硬盘;2. 因为改动是直接在内存上作出的,然后手动或者定期存入硬盘,这个时候可以检测硬盘文件被网盘占用情况,改善了同步冲突的问题。

    当然,keepass 数据库非常的小,所以可以整个读入内存。不过我觉得这个思路不错,思源笔记可以将笔记分成冷数据和热数据、图像和文字,分开存储。

  • isyuewang

    感觉解决方案只能是,手动点击同步按钮,然后思源内核收到信号后放开对文件的锁定,也不写入任何内容了,然后同步功能收到信号,开始同步,同步完之后思源内核才继续正常运行(或者重启)。这一整套下来,必然涉及思源笔记内核,用户,第三方同步功能的信号传递,所以感觉最好的解决方案应该还是需要官方配合,然后放弃 onedrive 这种自动的第三方同步盘,改用官方提供的同步服务端(如果可以开放给用户自己在自己的服务器上搭建的话)。或者是搞一些接口,利用 rsync 这种让用户自己搭,但是需要官方提供信号传递的接口。 考虑到移动端,前者似乎是最理想的方案。不知道大佬们有没有考虑,可以把这种权限放在付费订阅里面都没问题的。

    因为感觉思源笔记的设计思路就没考虑到实时同步功能,所以这与 onedrive 这种第三方同步盘本来就是违背的。这些同步盘的设计思路就是实时同步共享。

    1 回复
  • 查看全部回帖