bzip2를 대체하기 위해 tar 아카이브 형식이 xz 압축으로 전환되는 이유는 무엇입니까?


202

점점 더 많은 tar아카이브 xz가 기존 bzip2(bz2)압축 대신 압축을 위해 LZMA2 기반 형식을 사용합니다 . 실제로 kernel.org2013 년 12 월 27 일 " 굿바이 bzip2 " 발표를 발표했습니다. 이 시점에서 커널 소스는 tar.gz와 tar.xz 형식으로 그리고 웹 사이트 의 메인 페이지에서 공개 될 것입니다 직접 제공되는 내용은에 tar.xz있습니다.

왜 이런 일이 발생하고 있으며이 gzip맥락에서 어떤 관련이 있는지 설명하는 특별한 이유가 있습니까?

history  gzip  bzip2  xz 

답변:


198

인터넷을 통해 아카이브를 배포하려면 일반적으로 다음 사항이 우선합니다.

  1. 압축비 (즉, 압축기가 데이터를 얼마나 작게 만드는가);
  2. 압축 해제 시간 (CPU 요구 사항)
  3. 감압 메모리 요구 사항; 과
  4. 호환성 (압축 해제 프로그램이 얼마나 널리 퍼져 있는지)

압축 메모리 및 CPU 요구 사항은 그다지 빠른 컴퓨터를 사용할 수 있고 한 번만 수행하면되므로 중요하지 않습니다.

bzip2와 비교할 때 xz는 압축률이 높고 압축 해제 시간이 짧습니다. 그러나 일반적으로 사용되는 압축 설정에서는 압축을 풀기 위해 더 많은 메모리가 필요하며 [1] 다소 덜 널리 퍼져 있습니다. Gzip은 어느 것보다 적은 메모리를 사용합니다.

따라서 gzip 및 xz 형식 아카이브가 모두 게시되어 다음을 선택할 수 있습니다.

  • 메모리 가 매우 제한된 머신 (<32MB) 에서 압축을 풀어야 합니다 (gzip). 커널 소스에 관해 이야기 할 때 가능성은 낮습니다.
  • 사용 가능한 최소 도구 압축 풀기 : gzip
  • 다운로드 시간 및 / 또는 대역폭을 절약하려는 경우 : xz

bzip2를 선택할 수있는 현실적인 요소 조합은 없습니다. 그래서 단계적으로 폐지되었습니다.

블로그 게시물 에서 압축 비교를 살펴 보았습니다 . 나는 결과를 복제하려고 시도하지 않았으며 일부 결과가 변경되었다고 생각합니다 (대부분 xz최신 버전으로 개선 될 것으로 예상 됩니다).

(bzip2 구현이 xz보다 선호 될 수있는 특정 시나리오가 있습니다. bzip2는 xz보다 많은 제로 및 게놈 DNA 서열로 파일을 압축 할 수 있습니다. xz의 최신 버전에는 이제 데이터 복구를 허용하는 (선택적) 블록 모드가 있습니다. 손상 및 병렬 압축 및 이론상 압축 해제 시점 이후 이전에는 bzip2 만이 기능을 제공했지만 [2] 그러나 커널 배포와 관련이있는 것은 없습니다)


1 : 보관 파일 크기 xz -3는 약 bzip -9입니다. 그런 다음 xz는 압축을 풀기 위해 더 적은 메모리를 사용합니다. 그러나 xz -9(예를 들어, 리눅스 커널 타르볼에 사용되는)는보다 많은 것을 사용 bzip -9합니다. (그리고 심지어 xz -0그 이상이 필요합니다 gzip -9).

2 : F21 시스템 전체 변경 : lbzip2를 기본 bzip2 구현으로


내결함성 주제에 대한 의견 이나 압축 알고리즘 외부에서 항상 완벽하게 구현되는 것이 있습니까?

1
압축률을 희생하지 않으면 @ illuminÉ 복원력을 제공 할 수 없습니다. 그것은 직교 문제이며, Parchive와 같은 도구가 존재하지만 커널 TCP의 오류 처리를 배포하는 작업도 마찬가지로 작동합니다.
Tobu

2
@ illuminÉ 내결함성 (par2와 비슷한 의미라고 가정)은 일반적으로 인터넷을 통해 아카이브를 배포 할 때 문제가되지 않습니다. 다운로드는 충분히 신뢰할 수있는 것으로 간주됩니다 (손상된 경우 다시 다운로드 할 수 있음). 암호화 해시 및 서명이 종종 사용되며 손상 및 변조를 감지합니다. 압축률이 높지만 더 높은 내결함성을 제공하는 압축기가 있습니다. 아무도 HTTP 또는 FTP 다운로드에 대한 가치가 있다고 생각하지 않습니다.
derobert

xz는 LESS 메모리를 사용하여 압축 해제합니다.
MichalH

@Mike 이것을 쓴 이후로 바뀌 었습니까? 특히, 각주 하나는 메모리 사용량을 설명합니다.
derobert

45

우선,이 질문은와 직접 관련이 없습니다 tar. Tar은 압축되지 않은 아카이브를 생성 한 다음 나중에 압축을 적용합니다.

Gzip은 LZMA2 및 bzip2와 비교할 때 비교적 빠른 것으로 알려져 있습니다. 속도가 중요한 경우 gzip(특히 멀티 스레드 구현 pigz) 압축 속도와 압축 비율간에 적절한 절충안이 종종 있습니다. 속도가 문제인 경우 대안이 있지만 (예 : LZ4).

그러나 높은 압축률이 필요한 경우 bzip2거의 모든 측면에서 LZMA2가 이길 수 있습니다. 압축 속도는 종종 느리지 만 압축 속도가 훨씬 빨라지고 메모리 사용량이 높아지면 압축률이 훨씬 높아집니다.

bzip2이전 버전과의 호환성을 제외하고는 더 이상 사용할 이유가 없습니다 . 또한 LZMA2는 멀티 스레딩을 염두에두고 설계되었으며 기본적으로 많은 구현에서 멀티 코어 CPU를 사용합니다 (불행히도 xzLinux에서는 아직 그렇게하지 않습니다). 클럭 속도가 더 이상 증가하지 않지만 코어 수는 증가하기 때문에 이는 의미가 있습니다.

멀티 스레드 bzip2구현 (예 :)이 pbzip있지만 기본적으로 설치되지 않는 경우가 많습니다. 또한 멀티 스레드 는 압축 하는 bzip2동안 실제로 돈을 지불하는 반면 LZMA2와 달리 파일이 단일 스레드를 사용하여 압축 된 경우 압축 해제는 단일 스레드를 사용합니다 . 병렬 버전은 파일이 병렬 버전을 사용하여 압축 된 경우에만 멀티 코어 CPU를 활용할 수 있습니다 .bzip2bzip2bzip2


4
타르는 z옵션을 선택했습니다.
tchrist

"속도"는 답이 혼동 될 수 있으므로 압축 속도 또는 압축 해제 속도를 참조해야합니다. pixz, pbzip2 또는 pigz는 기본적으로 설치되어 있지 않거나 -I 플래그없이 tar에 의해 사용되지 않지만, pixz 및 pbzip2는 압축 및 압축 해제 속도를 높이고 pigz는 압축 전용입니다.
Tobu

@Tobu xz는 기본적으로 멀티 스레딩되므로 pixz향후 설치가 필요 하지 않습니다 . 일부 플랫폼에서는 xz스레딩이 이미 지원됩니다. 반면에이 bzip2형식을 염두에 멀티 스레딩으로 설계되지 않았기 때문에 가능성이 적 다중 스레드됩니다. 또한 pbzip2파일을 사용하여 압축 한 경우에만 압축 해제 속도가 빨라집니다 pbzip2.
Marco

1
@Marco 필자는 lbzip2가 비 병렬 구현 (예 : stock bzip2)으로 압축 된 경우에도 파일의 병렬 압축 풀기를 허용한다고 생각합니다. 그래서 pbzip2보다 lbzip2를 사용합니다. (귀하의 의견 이후에이 기능이 발전했을 가능성이 있습니다.)
RaveTheTadpole

19

짧은 대답 : xz는 압축 비율 측면에서 더 효율적입니다. 따라서 디스크 공간을 절약하고 네트워크를 통한 전송을 최적화합니다. 실제 테스트를 통해 차이점을 발견
할 수 있도록 이 빠른 벤치 마크를 확인할 수 있습니다 .


링크가 끊어졌습니다.
flarn2006

18

LZMA2는 블록 압축 시스템이지만 gzip은 그렇지 않습니다. 이것은 LZMA2가 멀티 스레딩에 적합하다는 것을 의미합니다. 또한 아카이브에서 손상이 발생하면 일반적으로 LZMA2를 사용하여 후속 블록에서 데이터를 복구 할 수 있지만 gzip으로는이를 수행 할 수 없습니다. 실제로 손상된 블록 다음에 gzip으로 전체 아카이브가 손실됩니다. LZMA2 아카이브를 사용하면 손상된 블록의 영향을받는 파일 만 손실됩니다. 파일이 여러 개인 대규모 아카이브에서는 중요 할 수 있습니다.


2
이것은 실제로 매우 유용하고 중요한 차이점입니다!
leden
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.