블록 수준 중복 제거를 위해 gzip 파일 최적화

블록 수준 중복 제거를 위해 gzip 파일 최적화

클라우드 볼륨에 약 100TiB의 압축된 gzip 데이터가 있습니다. 블록 수준 중복 제거(btrfs의 경우 duperemove)를 실행하는 도중에 가 없이 압축된 것을 발견했습니다. -n이로 인해 동일한 파일에 대한 압축 출력의 블록 수준 차이가 발생합니다.

로 모든 것을 다시 압축하는 것 외에 gzip -n수억 개의 gzip 파일을 해당 헤더를 "잃게" 만드는 다른 지름길이 있습니까? 이미 모두 다시 압축해야 한다면 --rsyncable중복 제거 가능성을 최대화하는 등 다른 최적화 방법도 조사해야 합니까?

(데이터에는 많은 중복 항목이 포함될 가능성이 매우 높습니다. 우리는 대규모 데이터베이스 테이블의 매일 전체 덤프에 대해 이야기하고 있습니다.)

답변1

zcat을 사용하여 파일을 추출한 다음 각 파일에 대한 체크섬을 계산할 수 있습니다.

for x in *.gz
do
    zcat $x | sha256sum > $x.sum
done

그런 다음 해당 *.gz.sum 파일에 속이 있는지 확인하십시오. "something.gz.sum"이라는 속임수를 제거할 때마다 해당 "something.gz"도 제거하세요.

답변2

내 질문의 전반부에 답하기: gzip 파일의 날짜/이름 스탬프 자르기. 아니요, 아직 기성 코드 조각을 찾지 못했지만 시각적 바이너리 diff 도구인 vbindiff를 설치할 시간을 찾았고 헤더가 압축되지 않았으므로 실제 압축된 스트림은 gzip및 와 동일합니다 gzip -n. 그리고 남은 것은 통합 버전을 얻기 위해 압축 파일의 맨 처음 부분에서 몇 바이트를 조작하는 것뿐입니다. 누군가가 sed바이너리에 대해 알지 않는 한 작은 C 프로그램이 내 문제를 해결할 것입니다 :-)

두 번째 부분에서는 여러 데이터를 실험해 봐야 합니다. 확실한 결과가 있으면 여기에 게시하겠습니다.

관련 정보