【问题标题】:Binary diff and patch utility for a virtual machine image [closed]虚拟机映像的二进制差异和补丁实用程序 [关闭]
【发布时间】:2011-06-11 11:44:46
【问题描述】:

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

【问题讨论】:

标签: binary diff vmware patch


【解决方案1】:

让我从久经考验的方法开始,然后指出一些最近的方法。

我见过的处理二进制文件的方法

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

最近,我一直在使用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”——允许您创建补丁文件。 然后收到该补丁文件的人可以使用它将旧的二进制文件更新为新的二进制文件。

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

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

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

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

【讨论】:

  • 非常感谢您的友好解释,大卫。对于我的问题,经过多次实验,xdelta成为我的选择。
【解决方案2】:

试试xdelta

我一直在为非常大的文件(一个 LVM 逻辑卷及其快照,因为 LVM 尚不支持快照快照)寻找一些二进制差异工具,而 xdelta 适合我。

【讨论】:

    猜你喜欢
    • 2011-09-30
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多