虚拟机映像的二进制差异和补丁实用程序

时间:2011-01-19 01:54:24

标签: binary diff vmware patch

我需要经常发布一些软件,软件包含在VMWare磁盘文件中,即.vmdk文件。 我想要的是某种二进制差异和补丁实用程序,以使生成的delta尽可能小。

1 个答案:

答案 0 :(得分:8)

让我从尝试真实的方法开始,然后指出一些更近期的方法。

我见过使用二进制文件的方法

很久以前,人们将二进制文件的旧版本和新版本扩展为临时“文本”文件(每个字节扩展为3个字节:2个十六进制数字和一个换行符)。 然后通过旧版本的“diff”(绝对无法处理二进制文件)运行这两个“文本”文件来制作补丁文件。 然后我们通过尚未8位清理的通信线路传输了“文本”补丁文件。 在接收端,一个将旧的二进制文件扩展为临时文本版本,然后修补旧文本文件,然后将新文本文件压缩回二进制文件(将每对十六进制数字压缩成一个字节,然后扔掉新线和任何可能已经悄悄进入的回车符。)

最近,我一直在使用rsync(或者在其上构建的一些实用程序,例如Unison)。 它处理任意二进制文件就好了。 我通常会进行实时更新,Unison在我的本地计算机上运行,​​rsync在文件服务器上运行,互相交谈。

无论如何生成补丁文件,您都可以使用任何数据压缩实用程序来压缩该文件。

据我所知,

接近应该使用二进制文件

StackOverflow: "how to crate a PATCH file for the binary difference output file" 建议使用bsdiff

另一个StackOverflow question暗示“vimdiff”似乎可以充分处理任意字节。

StackOverflow: "Useful Binary Diff Tool"提到了一些其他的二元差异工具。

我听说基于rsync的一些工具 - “rdiff”和“rdiff-backup”和“duplicity” - 允许您创建补丁文件。 然后,收到该补丁文件的人可以使用它将旧的二进制文件更新为新的二进制文件。

最新版本的标准“diff”和“patch”实用程序支持二进制文件的Wikipedia claims。 你试过了吗?

可执行文件压缩的​​前沿研究

如果您对更新可执行文件时使delta文件尽可能小的前沿研究感兴趣,那么您需要查看 "How Courgette works" 作者:Stephen Adams 2009年在The Chromium Projects。

除此之外,接收补丁的计算机“反汇编”旧应用程序,将所有绝对地址和偏移转换为符号;然后修补反汇编的代码;然后将修补后的代码“重新组装”到新版本的应用程序中。