背景
一直在使用 onedrive 作为文件同步盘,最近有了一些加密同步的需求,就对加密同步的方式进行了一番了解,首先想到的是将文件加密后再放进 onedrive 进行同步,可以通过一些软件实现:
| 软件 | cryptomator | gocryptfs cppcryptfs |
Cryfs | Duplicati | 思源笔记 |
|---|---|---|---|---|---|
| 加密方式 | 文件整体加密 | 文件整体加密 | 文件分块加密 | 文件分块加密 | 文件分块加密 |
| 增量同步 | 不支持 | 不支持 | 支持 | 支持 | 支持 |
| 加密速度 | 快 | 快 | 超级慢 | 快 | 快 |
| 实时挂载 | 支持 | 支持 | 支持 | 不支持 | 支持 |
| 图形界面 | 有 | 有 | 需要安装第三方软件 | 有 | 有 |
| 文件版本控制 | 使用同步盘对加密文件进行版本控制 | 使用同步盘对加密文件进行版本控制 | 有 | 有 | history 和快照 |
| 主要用途 | 文件加密同步 | 文件加密同步 | 文件加密同步 | 文件加密备份 | 文件加密同步 |
| 操作难度 | 简单 | 简单,但是需要额外安装 Dokany | 略麻烦 | 简单 | 简单 |
我的主要需要是文件加密同步,不是文件加密备份,结合各项因素,最后选择了 cryptomator 来辅助 onedrive。
作为思源用户,我也将思源和这些软件做了对比,功能齐全,加密、分块速度比 Cryfs 不知道高到哪里去,结论是思源很有所为加密同步软件的潜力,不过也有一些问题需要克服,主要是文件版本控制。
思源笔记的问题
思源笔记的文件版本控制可以通过两种方式来实现:history 文件、文件快照系统。
history 方案
history 文件夹里保存了附件的历史版本,比如我使用 pdf 编辑软件对 工作空间/data/同步盘/测试文档.pdf 文件增加了注释,然后点击同步,则会生成备份文件:工作空间/history/2025-07-13-185305-sync/同步盘/测试文档.pdf。
这个方案有 3 个问题:
- 直接保存了文件的旧版本,占用硬盘空间比较多,编辑频繁的文件会生产很多的副本,硬盘爆炸。
- 只会在修改附件的电脑上生成 history 文件,在另一台电脑上同步下载后,只会覆盖
工作空间/data/同步盘/测试文档.pdf 文件,而不会生成 history 文件,导致各台电脑上的历史版本都不全。 - 文件重命名则无法查找历史版本。思源没有记录新旧文件名的对应关系,文件名一旦修改,则无法通过文件名去 history 中查找历史版本。
快照系统方案
这个方案需要利用思源的快照系统,大概流程可以这样实现:
- 在文件管理器中选中一个文件
- 在文件右键菜单中选择“查看历史版本”。
- 遍历所有的快照索引,看看该文件在哪些索引中发生了变化,提取出变化记录。
- 用户选择版本后,从分块数据中还原出对应版本。
这个方案目前是实现不了的,只存在于我的设想中,存在很多问题:
- 没有“查看历史版本”的右键菜单。
- 无法获取每个快照索引里的文件列表。
工作空间/repo/indexes 文件夹下保存了很多快照索引,每个索引中都记录了该快照中发生变化的文件的文件列表,思源在同步时会解析出文件列表,但仅限程序内部使用,没有提供相关的解析 API。 - 没有从分块数据中还原某个文件的接口。
- 文件重命名则无法查找历史版本。快照中并不会记录新旧文件名称对应关系,只会记录:删除了文件 A,新增了文件 B。由于文件 A、B 的内容相同,所以分块数据并不会发生变化,给人一种记录了文件名称变化的错觉。
- 思源笔记会自动清理本地快照,导致历史版本减少。思源从 3.1.13 版本开始会自动清理本地数据仓库:

不过可以通过设置进行调整,以保留更多的快照:



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