Tar.bz2 7zip 선택적 압축 해제 성능

Tar.bz2 7zip 선택적 압축 해제 성능

우리는 tar.bz2를 서버 로그 아카이브로 사용합니다. 또한 이러한 보관된 로그를 선택적으로 구문 분석하는 도구도 작성했습니다. 동일한 아카이브에 포함된 다른 로그가 구문 분석 요구와 관련이 있는지 확인하기 위해 아카이브의 파일 행에서 정규식 검색을 수행해야 하는 경우가 많습니다. (파일 이름/경로의 정규식 일치가 있습니다.) 성능 관점에서 볼 때 몇 가지 제한 사항에 직면한 것 같습니다. 하지만 내 지식 수준에 격차가 있을 수도 있습니다. 저는 주로 Python으로 스크립트를 작성하고 기본적인 bash 기술을 가지고 있습니다. 아카이브는 대용량이며 설치에 저장됩니다. 특히 아카이브가 전체 구문 분석에 적합하지 않은 경우에는 읽기 및 로컬/임시 저장을 최대한 피하고 싶습니다.

옵션 1(대역폭 및 CPU 리소스 낭비, 로컬 스토리지 절약)

  1. 전체 bz2 파일을 로컬 디스크로 읽습니다.
  2. 파일 목록을 스캔하면 tar의 압축이 풀립니다.
  3. 다시 압축을 풀어 첫 번째 로그 파일을 검색하세요.
  4. 그런 다음 아카이브가 기준을 충족하면 다시 압축을 풀어 구문 분석해야 하는 로그를 추출합니다.
  5. 다음 아카이브로 이동

또는 (로컬 스토리지를 낭비하고 대역폭을 덜 낭비함)

  1. 전체 bz2 파일을 로컬 디스크로 읽습니다.
  2. 잠재적으로 흥미로운 기준을 충족하는 대부분의 파일을 추출합니다(대부분의 콘텐츠를 가져와야 함).
  3. 이제 모든 파일은 내 로컬 파일 시스템에 있습니다. 첫 번째 로그 스캔
  4. 그런 다음 기준을 충족하면 구문 분석해야 하는 로그를 계속 진행합니다.
  5. 로컬 저장소를 모두 삭제하고 다음 아카이브로 이동합니다.

7zip zip rar bz2와 같은 압축 도구를 조사할 때...대부분의 링크는 압축 속도와 압축 크기에 대한 정보를 제공합니다. 장기적으로 압축 크기가 중요하기 때문에 7zip과 같은 것을 사용하고 싶습니다. 이것은 내 질문의 기초가 아닙니다! 그러나 나는 또한 zip이 전체 파일 목록을 노출하고 전체 아카이브의 압축을 풀지 않고도 단일 파일을 추출할 수 있다고 "생각"합니다. (파일 목록이 헤더에 있기 때문에...) 하지만 zip은 Linux에서 그다지 기본적이지 않습니다.
프로세스를 최적화하기 위해 기존 tar.bz2를 사용할 수 있는 방법이 있습니까? 어떤 도구/접근 방식을 고려해야 합니까? (타르를 버리고 7zip을 사용하시겠습니까?)

답변1

zipLinux 고유의 것은 아니지만 소스 코드가 있다면 신경 쓰지 않아도 됩니다.

반면에 7zip유사한 데이터의 여러 항목이 포함된 tar 파일의 성능이 더 좋고 압축하는 것이 xz기본적으로 한 번에 하나의 파일을 압축하는 것보다 낫습니다. zip이를 통해 zip파일이 손상된 경우(손상으로 인해) 복구할 수 있는 반면, 압축된 tar 아카이브는 일반적으로 복구해야 할 문제가 더 많거나 복구할 수 없는 경우가 더 많습니다.

압축된 bz2 파일 생성을 변경할 기회가 있는 경우(그렇지 않으면 묻지 않을 것임) 생성하는 대신 다음을 수행하십시오 tar.bz2.

  • index.lst사용하여 생성find <list_of_files_to_archive> > index.lst
  • index.lst + list_of_files_to_archive에서 tar.xz를 생성합니다.

이를 통해 index.lst전체 아카이브의 압축을 풀지 않고도 파일을 빠르게 추출하고 index.lst의 내용을 기반으로 올바른 아카이브가 있는지 확인할 수 있습니다. tar압축 해제 후 표준이 중지되는지 확실하지 않으므로 index.lst(아카이브에 다른 표준이 있을 수 있음) Python tar 모듈을 사용하여 압축 해제 후 중지되도록 하고 index.lst 파일을 디스크에 저장하지 않고 즉시 구문 분석합니다. , 추가 속도 향상).

관련 정보