점점 더 많은 tar
아카이브 xz
가 기존 bzip2(bz2)
압축 대신 압축을 위해 LZMA2 기반 형식을 사용합니다 . 실제로 kernel.org 는 2013 년 12 월 27 일 ” 굿바이 bzip2 ” 발표를 발표했습니다. 이 시점에서 커널 소스는 tar.gz와 tar.xz 형식으로 그리고 웹 사이트 의 메인 페이지에서 공개 될 것입니다 직접 제공되는 내용은에 tar.xz
있습니다.
왜 이런 일이 발생하고 있으며이 gzip
맥락에서 어떤 관련이 있는지 설명하는 특별한 이유가 있습니까?
답변
인터넷을 통해 아카이브를 배포하려면 일반적으로 다음 사항이 우선합니다.
- 압축비 (즉, 압축기가 데이터를 얼마나 작게 만드는가);
- 압축 해제 시간 (CPU 요구 사항)
- 감압 메모리 요구 사항; 과
- 호환성 (압축 해제 프로그램이 얼마나 널리 퍼져 있는지)
압축 메모리 및 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 구현으로
답변
우선,이 질문은와 직접 관련이 없습니다 tar
. Tar은 압축되지 않은 아카이브를 생성 한 다음 나중에 압축을 적용합니다.
Gzip은 LZMA2 및 bzip2와 비교할 때 비교적 빠른 것으로 알려져 있습니다. 속도가 중요한 경우 gzip
(특히 멀티 스레드 구현 pigz
) 압축 속도와 압축 비율간에 적절한 절충안이 종종 있습니다. 속도가 문제인 경우 대안이 있지만 (예 : LZ4).
그러나 높은 압축률이 필요한 경우 bzip2
거의 모든 측면에서 LZMA2가 이길 수 있습니다. 압축 속도는 종종 느리지 만 압축 속도가 훨씬 빨라지고 메모리 사용량이 높아지면 압축률이 훨씬 높아집니다.
bzip2
이전 버전과의 호환성을 제외하고는 더 이상 사용할 이유가 없습니다 . 또한 LZMA2는 멀티 스레딩을 염두에두고 설계되었으며 기본적으로 많은 구현에서 멀티 코어 CPU를 사용합니다 (불행히도 xz
Linux에서는 아직 그렇게하지 않습니다). 클럭 속도가 더 이상 증가하지 않지만 코어 수는 증가하기 때문에 이는 의미가 있습니다.
멀티 스레드 bzip2
구현 (예 :)이 pbzip
있지만 기본적으로 설치되지 않는 경우가 많습니다. 또한 멀티 스레드 는 압축 하는 bzip2
동안 실제로 돈을 지불하는 반면 LZMA2와 달리 파일이 단일 스레드를 사용하여 압축 된 경우 압축 해제는 단일 스레드를 사용합니다 . 병렬 버전은 파일이 병렬 버전을 사용하여 압축 된 경우에만 멀티 코어 CPU를 활용할 수 있습니다 .bzip2
bzip2
bzip2
답변
짧은 대답 : xz는 압축 비율 측면에서 더 효율적입니다. 따라서 디스크 공간을 절약하고 네트워크를 통한 전송을 최적화합니다. 실제 테스트를 통해 차이점을 발견
할 수 있도록 이 빠른 벤치 마크를 확인할 수 있습니다 .
답변
LZMA2는 블록 압축 시스템이지만 gzip은 그렇지 않습니다. 이것은 LZMA2가 멀티 스레딩에 적합하다는 것을 의미합니다. 또한 아카이브에서 손상이 발생하면 일반적으로 LZMA2를 사용하여 후속 블록에서 데이터를 복구 할 수 있지만 gzip으로는이를 수행 할 수 없습니다. 실제로 손상된 블록 다음에 gzip으로 전체 아카이브가 손실됩니다. LZMA2 아카이브를 사용하면 손상된 블록의 영향을받는 파일 만 손실됩니다. 파일이 여러 개인 대규모 아카이브에서는 중요 할 수 있습니다.