여러 .tar.gz 아카이브 내의 파일 중복 제거

여러 .tar.gz 아카이브 내의 파일 중복 제거

웹 호스팅 서비스에서 .tar.gz로 야간 백업을 수행합니다. 매일 밤 변경되는 데이터는 매우 적습니다(<10MB).

각 개별 백업 파일을 추출하지 않고 여러 .tar.gz 아카이브에서 이러한 파일을 보관하고 파일의 중복을 제거(고체 압축)하고 싶습니다.

단순화된 예:

2013-02-24.tar.gz포함 a.pdf 2013-02-25.tar.gz포함 a.pdfb.pdf

2013-02-24.tar.gz압축해서 보관 하고 한번만 2013-02-25.tar.gz저장하고 싶어요 .a.pdf

중복 제거가 작동하도록 하는 유일한 방법은 .tar.gz의 압축을 풀고 다시 압축하는 것이었습니다(단단한 압축 사용). 그러나 이것은 하나의 추가 단계이며 다른 OS로 인해 파일 시스템 정보가 지워질 수 있습니다. 단순히 tar/gz 두 .tar.gz 파일이 모두 작동하지 않으며, 이 아카이브의 최종 크기는 두 원본 .tar.gz 파일의 합계가 됩니다.

여러 .tar.gz 파일의 콘텐츠에 중복 제거를 사용하는 방법이 있나요?

답변1

나는 파티에 늦었지만 요구 사항은 본질적으로 다음과 같이 요약되는 것 같습니다.

  1. tarball 파일 내용 중복 제거
  2. 원본 gzip 파일을 복원할 수 있어야 합니다.

처음에는 이것이 불가능해 보입니다. 중복 제거는 일반적으로 압축되지 않은 파일에 대한 작업 가능 여부에 따라 달라집니다. 하지만 나는 gunzip/gzip을 사용하여 정확히 동일한 파일을 생성할 수 있다면(테스트하는 것이 더 좋음) 다음을 사용할 수 있다는 것을 깨달았습니다.zbackup, 이는 실제로 타르볼을 중복 제거하도록 설계되었습니다. 그래서:

  1. gunzip당신이 얻는 타르볼
  2. gziptarball을 다시 실행하여 정확히 일치하는지 확인합니다(gzip 구현이 동일해야 하지만 예를 들어 압축 수준이 다를 수 있으므로 이를 알아내야 할 수도 있음).
  3. 타르볼을 공급합니다.zbackup

답변2

나는 당신이 "쉽게" 하려는 일을 할 수 없다고 생각합니다.

.tgz 파일이 충분히 유사한 경우 xdelta를 사용하여 첫 번째 파일을 전체 백업한 다음 첫 번째 파일과 두 번째 파일 간의 차이점이 있는 xdelta를 백업할 수 있습니다.

대체 부분 솔루션은 매우 큰 파일에서 압축을 찾도록 설계된 rzip(또는 lrzip ??)을 사용하는 것입니다. 이상적이지는 않지만 CPU 및 CPU를 희생하여 현재 사용하는 것보다 훨씬 작을 수 있습니다. 메모리.

답변3

비슷한 목적으로 squashfs를 사용합니다.

mksquashfs dir1 dir2 dir3 backup_file.fs -keep-as-directory

답변4

우수한 것이 있습니다해결책요청한 대로 여러 TAR 파일 내의 블록을 중복 제거합니다. 이는 변경되지 않은 파일을 제거할 뿐만 아니라 유사한 파일 중 변경된 부분만 저장합니다.

그러나 이는 서버가 유료 제품인 클라이언트/서버 솔루션입니다. 그러나 중복 제거 덕분에 가격이 매우 저렴하며 암호화 기능을 제공하고 파일을 안전하게 저장합니다.

클라이언트는 일반 tar 코드를 사용하므로 명령을 사용하기 쉽습니다.

관련 정보