BZIP2 압축파일 (.bz2)
Bzip2 표준Bzip2(BZ2)는 Julian Seward가 개발한 고전적인 특허 없는 Unix 압축 유틸리티 및 파일 형식으로, Burrows-Wheeler 변환을 활용하여 고전적인 Gzip보다 훨씬 더 높은 압축률을 달성합니다.
검사 및 메타데이터
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 BZ2 파일을 식별합니다:
바이트 단위 헤더 시그니처 (매직 바이트)
운영 체제와 파일 분석기는 파일 선두의 바이너리 바이트 시퀀스를 검사하여 BZ2 파일을 식별합니다:
16진수 시그니처 (오프셋 0):
42 5A 68ASCII 표현: BZh
표준화: Bzip2 Open Source Standard
기술 사양
| 컨테이너 아키텍처 | Stream header ('BZh' + block size digit 1-9) followed by compressed data blocks and 32-bit CRC |
| 압축 | Burrows-Wheeler Transform (BWT), Move-to-Front (MTF) transform, and Huffman coding |
| 바이트 엔디안 | Big-Endian bitstream framing |
| 색 공간 | N/A (Byte Compression Stream) |
| 채널 및 구조 | Single-file compressed byte stream |
| 최대 크기 | Unbounded stream length (supports arbitrary file sizes) |
| 투명도 | 100% bit-exact lossless data preservation |
| 스트리밍 및 프로그레시브 | Sequential block-by-block streaming with independent per-block CRC checksums |
기술 비교 매트릭스: BZ2 대 경쟁사
| 기술적 속성 | BZ2 (현재) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| 코어 알고리즘 | Burrows-Wheeler 변환(BWT) | Deflate (LZ77 + 허프만) | LZMA / LZMA2 | 유한 상태 엔트로피 + LZ77 |
| Gzip 대비 압축률 | Gzip보다 10%~20% 더 작음 | 기본 표준 | Gzip보다 20%~30% 더 작음 | Gzip보다 10%~20% 더 작음 |
| 압축 해제 속도 | 느림 (~30-50 MB/s) | 빠름 (~300 MB/s) | 보통 (~100 MB/s) | 매우 빠름 (>1.5 GB/s) |
| 블록 체크섬 | 블록당 32비트 CRC | 단일 스트림 CRC32 | 스트림 CRC64 | 스트림 xxHash64 |
일반적인 손상 모드 및 헥스 복구 가이드
'bzip2: Data integrity error when decompressing' 오류와 함께 추출이 중단됩니다.
근본 원인: 압축된 블록의 비트가 뒤집혀 BWT 역순열 행렬이 CRC32 유효성 검사에 실패했습니다.
복구: 'bzip2recover' 유틸리티를 사용하여 손상된 섹터 주변의 손상되지 않은 블록을 복구합니다.
보안 분석 및 파서 공격 벡터
Bzip2 구현에는 과거에 정수 오버플로 결함이 발생했던 복잡한 비트스트림 정렬 및 허프만 테이블 구문 분석이 포함됩니다.
알려진 공격 벡터
- BWT 정렬 배열 할당에서의 정수 오버플로 (예: CVE-2016-3189).
- 허프만 디코딩 테이블 어셈블리 중 범위를 벗어난 쓰기(Out-of-bounds write).
- 최악의 경우 이차(quadratic) BWT 정렬 시간을 유발하는 병리학적 입력 패턴을 통한 서비스 거부(DoS) 공격.
방어적 모범 사례:
역사적 배경 및 주요 이력
주요 장점
- 소스 코드 타르볼(tarball), 시스템 로그 및 텍스트 데이터베이스에서 고전적인 Gzip보다 지속적으로 10%~20% 더 우수한 성능을 발휘합니다.
- 독립적인 블록 아키텍처(100k~900k)는 강력한 무결성 검사를 위해 블록별 32비트 CRC 체크섬을 포함합니다.
- 모든 Linux, BSD 및 macOS 명령줄 배포판에서 보편적인 기본 가용성을 제공합니다.
기술적 제한 사항 및 단점
- Zstandard와 같은 최신 알고리즘에 비해 압축 및 압축 해제 속도가 눈에 띄게 느립니다.
- 단일 파일 압축 전용: 여러 파일이나 디렉터리를 패키징하려면 TAR(.tar.bz2)와 결합해야 합니다.
- Gzip이나 Zstd에 비해 압축 해제 시 CPU 사용량이 더 높습니다.
흥미로운 기술적 상식
- 'BZh' 매직 바이트는 'Burrows-Wheeler Zip Huffman'을 의미하며, 그 뒤에 백 킬로바이트 단위의 블록 크기를 나타내는 숫자('1'에서 '9')가 옵니다(예: 'BZh9' = 900 KB).
- Linux 커널 소스 코드는 .xz로 마이그레이션하기 전 10년 넘게 .tar.bz2 형식으로만 배포되었습니다.
- Burrows-Wheeler 변환은 데이터를 직접 압축하지 않고 문자의 순서를 치환하여 동일한 글자끼리 뭉치게 하므로, 허프만 코딩을 통해 쉽게 압축할 수 있게 됩니다.
자주 묻는 기술 질문
.gz와 .bz2의 차이점은 무엇인가요?
.bz2는 버로즈-휠러 변환(Burrows-Wheeler transform)을 사용하여 .gz보다 더 작은 파일 크기를 구현하지만, 압축 및 압축 해제에 더 오랜 시간이 걸립니다.
bzip2에 'bzip2recover' 명령어가 있는 이유는 무엇인가요?
bzip2는 데이터를 각각 고유한 CRC가 포함된 독립적인 900 KB 블록으로 압축하므로, 파일의 일부가 손상되더라도 bzip2recover를 통해 손상되지 않은 블록을 추출할 수 있습니다.
.tar.bz2 파일은 어떻게 추출할 수 있나요?
명령줄 도구를 실행할 필요 없이, 웹 브라우저에서 File2File.app을 사용하여 .tar.bz2 파일을 직접 압축 해제할 수 있습니다.