0%

使用 Zstd 代替 bsdiff/bspatch 差分还原文件

最近由于需要远程进行开发联调,经常需要外发联调版本镜像。

这些镜像动辄数百兆,奈何网络质量堪忧,传输这些镜像成为整个流程最大的阻塞点。

为了减小镜像文件的大小,使用了 bsdiff 工具制作差分包,因为本身改动很小,可以实现将几百兆的文件差分为几兆的差分包,大大加速版本传输。

但使用 bsdiff 仍然有个痛点:生成差分包太慢了,几百兆的镜像需要十几分钟。

忍无可忍无需再忍,找到了它的替代工具:大名鼎鼎的 Zstd,它也能制作差分包,并且速度和质量直接秒杀 bsdiff

网上使用 bsdiff 的人多,使用 Zstd 的人少,写篇笔记记录一下用法。

bsdiff/bspatch

download

https://github.com/reitowo/bsdiff-win/releases

官方没有 Windows 直接可运行的二进制,这是三方编译的 Windows 可运行版本,如有需要可自行编译。

patch

bsdiff.exe oldfile newfile patchfile

apply

bspatch.exe oldfile newfile patchfile

Zstd

download

https://github.com/facebook/zstd/releases/

zstd 是静态编译的,实际使用时只需要这一个程序文件就可以了。

patch

zstd.exe --patch-from=<oldfile> <newfile> -o <patchfile>

实测文件大于 2G 不支持:zstd: error 42 : Can't handle files larger than 2 GB
作者通过修改源码,搞了一个解除 2G 文件支持的版本:有需要请移步

apply

zstd.exe -d --patch-from=<oldfile> <patchfile> -o <newfile>

原始文件太大可能会报错 Window size larger than maximum,按照提示加优化参数再次调用即可。
会推荐使用 --long=31 参数。

资源