2つのファイル間のバイナリデルタを提供し、それを適用できるコマンドは何ですか?

2つのファイル間のバイナリデルタを提供し、それを適用できるコマンドは何ですか?

2つの大きなファイルがあります。

  • a.qcow216GBです。

  • b.qcow217GBです。

.b.qcow2a.qcow2

2つのファイル間のデルタを生成できるLinuxコマンドは何ですか? (サイズは2 GB未満でなければなりません。)

a.qcow2と同じ出力を生成するためにデルタを適用できるLinuxコマンドは何ですかb.qcow2

ソースとターゲットのサイズ、ハッシュなどのデルタ形式のセキュリティ対策はありますか?

答え1

2つの類似した仮想マシンがある場合は、qemuオプションを使用することをお勧めします。backing_file

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

これにより、マスターイメージを作成し、元のイメージと2番目のイメージの間にdiffファイルのみを作成して、多くのGBスペースを節約できます。また、これらのファイル間のバイナリの違いを本当に知りたい場合は、次のコマンドを確認することをお勧めします。

  • 違い
  • テキサス
  • デルタ

答え2

2つのシステム間の違いを転送したいとします。これが、共有ルートからQCOWイメージをリベースできない理由です。

このrsyncツールを使用すると、バイナリdiffを生成できます。以下は(かなり)小さなファイルの例です。

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セカンダリシェルスクリプトも生成します。

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大きな違いに先んじる。

関連情報