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. 此时应该两个设备都可以正常上传或下载修改的内容。应该是修复成功。
  • 思源笔记

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

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

    24685 引用 • 101318 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

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

    我也碰到这个问题了

  • 其他回帖
  • lz604 1 评论

    看日志 http 返回码 200,应该是连上了 S3,但是不知道为何解析返回结果失败

    I 2025/02/27 19:22:29 working_mobile.go:67: ____ _ __ __ / ___| (_) \ \ / / _ _ __ _ _ __ \___ \ | | \ V / | | | | / _` | | '_ \ ___) | | | | | | |_| | | (_| | | | | | |____/ |_| |_| \__,_| \__,_| |_| |_| I 2025/02/27 19:22:29 runtime.go:87: kernel is booting: * ver [3.1.23] * arch [arm64] * os [Android 15/SDK 35/WebView 130/Manufacturer Xiaomi/Brand Xiaomi/UA Mozilla/5.0 (Linux; Android 15; 2410DPN6CC Build/AQ3A.240812.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.86 Mobile Safari/537.36] * pid [14925] * runtime mode [prod] * working directory [/data/user/0/org.b3log.siyuan/files/app/app] * read only [false] * container [android] * database [ver=20220501] * workspace directory [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan] I 2025/02/27 19:22:29 runtime.go:100: disabled features [ai] I 2025/02/27 19:22:29 conf.go:147: initialized the specified language [zh_CN] I 2025/02/27 19:22:29 runtime.go:139: use network proxy [system] I 2025/02/27 19:22:29 serve.go:209: kernel [pid=14925] http server [127.0.0.1:6806] is booting I 2025/02/27 19:22:29 blocktree.go:75: reinitialized database [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/temp/blocktree.db] I 2025/02/27 19:22:29 database.go:92: the database structure is changed, rebuilding database... I 2025/02/27 19:22:29 database.go:109: reinitialized database [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/temp/siyuan.db] I 2025/02/27 19:22:29 conf.go:873: tree/block count [0/0] I 2025/02/27 19:22:29 working.go:224: kernel booted I 2025/02/27 19:22:29 walk.go:49: walk dir [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/data/assets] cost [2.188385ms] I 2025/02/27 19:22:29 serve.go:314: serving [/] for user-agent [SiYuan/3.1.23 https://b3log.org/siyuan Android Mozilla/5.0 (Linux; Android 15; 2410DPN6CC Build/AQ3A.240812.002; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/130.0.6723.86 Mobile Safari/537.36] I 2025/02/27 19:22:29 walk.go:49: walk dir [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/data] cost [2.8325ms] I 2025/02/27 19:22:29 box.go:77: auto stat [trees=0, blocks=0, dataSize=36.87 kB, assetsSize=0 B] I 2025/02/27 19:22:30 index.go:220: rebuilt database for notebook [20210808180117-czj9bvb] in [0.04s], tree [count=70, size=1.53 MB] I 2025/02/27 19:22:30 walk.go:49: walk dir [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/data/20210808180117-czj9bvb] cost [16.301979ms] I 2025/02/27 19:22:30 index.go:290: resolved refs [38] in [52ms] I 2025/02/27 19:24:23 repository.go:559: imported repo key [7e430edbf0279f5aaf5bbdc71e168953d13cb376] I 2025/02/27 19:24:25 walk.go:49: walk dir [/storage/emulated/0/Android/data/org.b3log.siyuan/files/siyuan/data/] cost [19.024843ms] I 2025/02/27 19:24:25 repo.go:661: walk data [files=7] cost [22.243438ms] I 2025/02/27 19:24:25 ref.go:93: updated local latest to [device=ubmmae1lmvmy/android, id=25093f6cb5f9537651c77a08dcdccef029e3d515, files=7, size=8.29 kB, created=2025-02-27 19:24:25], full latest [size=1.2 kB], cost [1.615937ms] E 2025/02/27 19:24:37 sync.go:654: sync failed caused by network: operation error S3: ListBuckets, https response error StatusCode: 200, RequestID: , HostID: , deserialization failed, failed to decode response body, XML syntax error on line 9: element <meta> closed by </head>
    EmptyLight
  • zackyj via macOS

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

    CleanShot20250215at19.06.092x.png

    1 回复
  • EmptyLight 1 评论

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

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

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