在 缓解数据焦虑,思源笔记文件存储介绍 这个帖子里我罗列了思源本地文件的结构与用途。
本帖会简要介绍一下思源的同步流程及其与本地文件的关系。
工作空间
同一台电脑上可以设置多个工作空间,每个工作空间是彼此独立的。
一个工作空间内和笔记数据相关的文件夹是 data、history 和 repo,如下图。
data 是最重要、最根本的文件夹,在思源笔记里写的笔记明文存在这里。
history 是 data 的历史版本,也是明文保存的,在思源笔记中进行下列操作时,会从 data 文件夹保存一份副本到 history 文件夹:
- update。思源每隔 10 分钟会从 data 文件夹保存一正在编辑的笔记副本到 history 文件夹。
- sync。从云端同步笔记到本地时,会先把 data 文件夹里的笔记版本保存到 history 文件夹,再用云端同步回来的数据覆盖 data 文件夹里的数据。
- format。使用 优化排版 功能时,会先把 data 文件夹里的笔记版本保存到 history 文件夹,再对 data 文件夹里的文件进行优化排版。
- delete。手动删除笔记本、文档和资源文件时,实际上是将相关数据从 data 文件夹挪到了 history 文件夹,没有进入系统回收站。
- clean。用清理未引用资源时,会把资源文件从 assets 文件夹移动到 history 文件夹。
repo 是加密后的 data 文件夹,加密使用密钥是当前工作空间的数据仓库密钥。每个工作空间都可以设置自己独立的密钥。
如果没有设置过密钥,本地就只有 data 和 history 两个文件夹。
本地数据与云端数据
思源笔记进行同步时,只有 repo 文件夹参与了同步过程,也就是说参与同步的是加密后的数据。
- 上传。把本地 repo 文件夹里的加密数据上传到服务器的同步目录。
- 下载。把服务器同步目录下载到本地 repo 文件夹。下载完成后,将 repo 文件夹数据解密后合并到 data 文件夹。
由于从服务器下载的是加密后的数据,所以需要把 repo 文件夹里的数据解密后再合并到 data 文件夹,在电脑 2 上解密使用的密钥要与电脑 1 上加密用的密钥一致。
本地不同的工作空间数据要上传到服务器不同的同步目录,两台电脑上的同一个工作空间要选择同一个服务器同步目录。简单罗列集中情况:
电脑 1 工作空间 | 电脑 1 密钥 | 电脑 1 上传到 | 电脑 2 从云端下载 | 电脑 2 工作空间 | 电脑 2 密钥 | 同步结果 |
---|---|---|---|---|---|---|
工作空间 1 | 密钥 1 | 同步目录 1 | 同步目录 1 | 工作空间 1 | 密钥 1 | 同步成功 |
工作空间 1 | 密钥 1 | 同步目录 1 | 同步目录 1 | 工作空间 1 | 密钥 2 | 同步失败。 密钥不一致,解密失败。 |
工作空间 1 | 密钥 1 | 同步目录 1 | 同步目录 1 | 工作空间 2 | 密钥 2 | 同步失败。 密钥不一致,解密失败。 |
工作空间 1 | 密钥 1 | 同步目录 1 | 同步目录 1 | 工作空间 2 | 密钥 1 | 同步成功,电脑 1 工作空间 1 的数据会和电脑 2 工作空间 2 的数据合并。 |
工作空间 2 | 密钥 2 | 同步目录 2 | 同步目录 2 | 工作空间 2 | 密钥 2 | 同步成功 |
云端数据损坏了怎么办
出现云端数据损坏提示应该是在解密 repo 文件夹的时候,发现解密失败,所以认为云端数据有问题,提示数据损坏了。此时还没有对本地 data 文件夹进行操作,所以对本地数据没有影响。
由于云端保存的是加密数据,一旦出现损坏是没有办法进行修复的,只能从本地重新上传数据。所以解决的办法也十分简单粗暴:
- 在电脑 1 上设置一个新的云端同步目录,将电脑 1 数据上传到新的云端同步目录,然后电脑 2 从新的云端同步目录下载数据。
这种方案旧的同步目录还会保存在云端。 - 删除旧同步目录。也可以不删除,留着当个纪念
同步注意事项
由于云端保存的是加密数据,云端是没法对两台设备上传的数据进行差异分析、合并的,所以不要在两台设备同时往云端上传数据,可能会造成数据损坏。
思源的同步算法详见:https://github.com/siyuan-note/dejavu/
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于