v3.1.21 同步失败:magic number mismatch(含个人解决方案)

遇到问题过程

遇到问题过程

先说我遇到问题的全流程。

  1. 首先在 3.1.20 版本,我在启动应用的情况下通过 GitHub 下载了 3.1.21 版本安装包,随后安装包自动启动,停止了 3.1.20 版本运行。这时候可能是在同步还是什么的,我实在没注意。就当它在同步吧。
  2. 之后安装新版本的安装包。
  3. 启动思源,产生同步报错:input error: magic number mismatch。这个我认为是同步锁里面存的校验码。这个报错不会阻止同步,而是导致一直会上传数据,而无法完成同步。并且一次同步结束之后会立即启动下一次同步。
  4. 我停止了思源运行,上储存桶删除了同步锁文件,重启思源观察变化。这时候的报错变为云端同步错误,不过那边的链接点不了(毕竟不是弹出报错提示)
  5. 我停止了思源运行,清空了整个存储桶。之后启动思源,由思源上传整个存储桶。这时候数据正常上传。
  6. 之后再次同步,发现仍然存在报错。这时候我再次清空存储桶,并重置数据仓库。通过重新生成数据密钥的方式重置了数据仓库。这时候重新上传数据。
  7. 这时候发现上传数据仓库会一直重复这个过程。重启思源,发现这次上传正常生成了 index 等文件夹,而上一次没有。上传结束后继续重复这个过程。
  8. 切换新数据仓库之后重复上述重置过程,问题仍然存在。不过有趣的是每次重新上传文件数量都在减少。

进度到目前为止,已经重建了数据仓库,重建了云端存储,修复云端存储的帖子有链接吗?后续有新内容我再更新帖子,先歇一下。晚点我开个新存储桶试试。


进度更新:在通过小手段让思源忘记之前的同步错误之后,我重建数据仓库并且清空云端存储,等待多次同步完成(好像只有两次)。之后点击同步按钮,检查发现不再提示错误信息,而是显示正常的同步结果。现在尝试将思源版本又更新上去试试。

在更新思源版本之后,上传设备在启动同步时显示正常的同步结果(上传/下载 1 文件),手动触发同步也是正常的。在退出的时候又需要全部上传,并且又是两次(先全量再少几个文件)。打开其他设备同步,使用相同的仓库和密钥可以正常同步,但是需要全量上传。

另外,在本次尝试中,发现如果一个设备在启动中同步(条件可能出错),它可能忽略云端的同步锁。我在最后这次尝试中先点击了电脑退出,之后过一段时间后打开手机端。这时候发现电脑端回退到全量同步,而手机端在启动后也进入同步状态。即此时电脑端和手机端同时进入全量上传阶段。这个显然是存在问题的。于是强行停止手机同步(断网),之后电脑端又一次报错标题错误,于是认为标题错误可能由一个设备在同步中同步锁被替换(或类似原因)导致。


我累了,这里是今天的日志:siyuan.zip,这是从 20 升级到 21 前后的日志都有,实在累了。这里观察到,今天出现若干次的重复上传现象主要是获取 S3 存储为空,从而导致新一次上传。但实际上是有东西的,就在几秒前还获取到 600 多 M 的存储。这个我不知道了,又没有套 CDN,又没有缓存。

关于最后一次同步:通过手动上传启动同步,出现重复上传,之后通过关闭思源结束上传。之后去手机选择下载,出现云端数据损坏。无法下载云端数据。但是只要云端上传的循环不结束,云端数据永远都是损坏的,因为这一次上传不完整,又覆盖了上次上传的数据(尽管数据理论上一样,但是这样的循环中文件数量不一样,猜测是什么地方改变了)。

解决方案

这边的解决方案仅为个人看法,并未完全经过验证,可能存在问题。请优先从最保守的方法开始试验。

方法 1

通过更新到 3.1.22 版本解决问题。

方法 2

如果你乱搞云端储存桶导致出了什么错误,只能重建云端储存桶(像我前面写的操作过程一样),那么可能需要一些额外操作。

我是在 21 版本重建了云端储存桶,因为 21 版一直出现同步错误,应该没有完整上传数据。这时候需要更换版本重新上传数据仓库(将正确的数据上传)。比如降到 20 或者使用 dev 版。这里简要介绍一下我进行的操作。(请注意,重建数据仓库会导致数据历史丢失,请谨慎操作,并做好完全的数据备份)

这里进行的操作是云端损坏那篇帖子的修改版,本质相同,可通过那篇帖子方式重建云端数据仓库。以下内容部分经过验证,不保证可行。请不要贸然删除本地数据,至少留有一份备份,数据无价。这里因为只有手机电脑两个设备,因此过程只写两个设备。多设备请自行变通。

此方法可分解为:重置云端数据仓库重置本地数据仓库。如果仅云端数据仓库报错,则只进行云端数据仓库的重置,如果本地数据仓库报错,则重置本地数据仓库和云端数据仓库。

  1. 首先停止所有设备的云端同步,切换成手动同步模式(可选,建议),选用数据最完整的设备进行下列操作
  2. 切换思源版本到 22 版(dev 版)(我也不知道为什么我 20 版也会报这个错,不是 21 版应该都可以)
  3. 清空云端储存桶(用于重建云端数据仓库
  4. 在思源设置-关于中复制数据密钥备用(可选,用于重建本地数据仓库,如不重建本地数据仓库可跳过)
    1. 重置本地的数据仓库(可选,会丢失本地的数据历史)
    2. 通过导入密钥或生成密钥初始化数据仓库(可选)
  5. 点击同步按钮上传数据仓库,等待上传完成
    1. tips:如果数据量较大,可能看到上传的进度条要走两次,这个是正常的,因为两次上传的是不一样的内容,两次上传的总量不超过 repo 文件夹的大小
    2. tips:如果两次上传完成之后提示报错或出现循环现象,前者按报错给出的提示操作,后者建议想办法停止上传,因为真的会重复上传(并且这时候云端数据仓库应该是损坏的)
    3. tips:正常来说 20 版或 22 版应该不会出现重复上传现象,这个问题是 21 版遇到的
  6. 上传完成之后点击同步按钮测试同步状态。因为目前没有修改任何内容应该很快就能同步完成
    1. 之后可以修改一点内容试试上传是否成功
  7. 退出当前设备上的思源,不干扰同步
    1. 如果设置自动同步则退出
    2. 如果手动同步则可不退出,但是先不要进行同步
  8. 另一设备上使用 22 版
    1. 可选:将前一个设备的 data 导入到此设备(用于减少流量消耗,不进行操作则可以观察到内容变化)
    2. 可选:重建本地数据仓库
  9. 从云端下载数据,如果不出现报错则可看到前一设备的内容同步到此设备。
    1. 如果第六步修改了内容并且在此设备上没有,就可打开修改的那篇文章之后同步,观察界面是否刷新以及修改内容是否成功同步
    2. 成功同步之后修改部分内容上传,观察是否上传成功。如果上传成功可在前一设备下载,观察是否可下载修改内容
  10. 此时应该两个设备都可以正常上传或下载修改的内容。应该是修复成功。
  • 思源笔记

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

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

    24794 引用 • 101973 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
  • shellingford

    我也碰到这个问题了

  • 其他回帖
  • EmptyLight 1 评论

    进度更新:目前电脑 dev1 还会提示 magic number mismatch,但是数据上传应该是成功的。反倒是手机使用 20 提示 magic number mismatch 应该是上传失败,现在测试只有从电脑到手机的单向同步,不过核心问题应该缓解一些了。

    同时在手机新建工作空间,从云端下载同步倒是会一直全量下载,并且表现与之前全量上传一致,是先下载全部文件,之后少几个文件。查看本地 data 为空。因为走下行流量我就不一直试了。昨天一天时间,不到 6k 的数据文件个数给我干了 27w 写请求,虽然不贵(1w 就 1 分)但是吓人,这次走下行流量我就先到此为止,换角度测试了。

    在这次全量下载里面,云端的读请求数是对的,但是总共下行只有 15MB,这可能是导致第二次下载的原因。当时在手机端的日志中未发现错误,第二次同步应该是在计划内的。我再尝试同步。
    EmptyLight
  • EmptyLight

    现在已经不需要改 HTTP 和 TLS skip 了。

    可以看看我写的方法二,重建云端数据仓库和本地数据仓库。之后其他设备通过完全手动同步模式下载云端数据仓库应该就没问题了。方法二就是为了解决这个问题的。

    代价是删除数据历史。不过可以先考虑仅清空云端数据仓库,如果不行再重置本地数据仓库。

  • zackyj

    我这边尝试确实是这样,而且我没有动过存储桶的任何文件,只要用 v202502131818 这个版本就可以

    CleanShot20250215at19.06.092x.png

    1 回复
  • 查看全部回帖