什么命令会给我两个文件之间的二进制增量并让我应用它?

什么命令会给我两个文件之间的二进制增量并让我应用它?

我有两个大文件。

  • a.qcow2是16GB。

  • b.qcow2是17GB。

的前 16GBb.qcow2a.qcow2.

哪些 Linux 命令可以让我生成两个文件之间的增量? (大小应小于 2GB。)

哪些 Linux 命令可以让我应用增量来a.qcow2生成与 相同的输出b.qcow2

增量格式是否有安全措施,例如源和目标大小以及哈希值?

答案1

如果您将拥有两个相似的虚拟机,我建议您使用 qemu 选项:backing_file

qemu-img create -f qcow2 \
                -o backing_file=/path/to/base/image.qcow2 \
                /path/to/new_guest/image.qcow2 

这让您可以拥有一个主映像,然后只有一个原始映像和第二个映像之间的差异文件,从而节省大量 GB 空间。另外,如果您确实需要知道这些文件之间的二进制差异,我建议您检查以下命令:

  • 差值
  • 地塞克斯
  • 三角洲

答案2

我假设您想要传输两个系统之间的差异,这就是为什么您无法在共享根上重新建立 QCOW 映像的基础。

rsync工具将让您生成二进制差异。这是一个包含(相当)较小文件的示例

ls -l ?.qcow2
-rwxrwx--- 1 root root 76993536 Jan  2  2020 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2

根据您的问题,我们需要获得 到b.qcow2的差异a.qcow2。请注意,提供的rsync可以同时到达源和目标,它们不需要位于同一服务器上

rsync -av --only-write-batch b_to_a.rsyncdiff b.qcow2 a.qcow2

这确定了差异并将其写入b_to_a.rsyncdiff,同时还创建了一个辅助 shell 脚本

ls -l b_to_a*
-rw------- 1 root root 35617731 Oct 26 09:26 b_to_a.rsyncdiff
-rwx------ 1 root root       54 Oct 26 09:26 b_to_a.rsyncdiff.sh

cat b_to_a.rsyncdiff.sh
rsync -av --read-batch b_to_a.rsyncdiff ${1:-a.qcow2}

要应用更改,您只需要原始源a.qcow2和差异

rsync -av --read-batch b_to_a.rsyncdiff a.qcow2
receiving incremental file list
b.qcow2

sent 61,509 bytes  received 35,621,188 bytes  71,365,394.00 bytes/sec
total size is 77,337,600  speedup is 2.17

结果

ls -l ?.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 a.qcow2
-rwxrwx--- 1 root root 77337600 Oct 25 19:00 b.qcow2

答案3

就我个人而言,我是德尔塔普这仅在 Gentoo 用户中广为人知。

它的速度非常快,而且经常会xdelta大幅领先。

相关内容