두 파일 사이의 바이너리 델타를 제공하고 이를 적용할 수 있는 명령은 무엇입니까?

두 파일 사이의 바이너리 델타를 제공하고 이를 적용할 수 있는 명령은 무엇입니까?

두 개의 큰 파일이 있습니다.

  • a.qcow216GB 입니다.

  • b.qcow217GB 입니다.

.b.qcow2a.qcow2

두 파일 간의 델타를 생성할 수 있는 Linux 명령은 무엇입니까? (크기는 2GB 미만이어야 합니다.)

a.qcow2와 동일한 출력을 생성하기 위해 델타를 적용할 수 있는 Linux 명령은 무엇입니까 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 

이렇게 하면 마스터 이미지를 만든 다음 원본 이미지와 두 번째 이미지 사이에 diff 파일만 만들어서 많은 GB 공간을 절약할 수 있습니다. 또한 이러한 파일 간의 바이너리 차이점을 정말로 알고 싶다면 다음 명령을 확인하는 것이 좋습니다.

  • 차이점
  • 텍사스
  • 델타

답변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큰 차이로 앞서갑니다.

관련 정보