我有两个大文件。
a.qcow2
是16GB。b.qcow2
是17GB。
的前 16GBb.qcow2
与a.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
大幅领先。