ไฟล์เก็บถาวร BZIP2 (.bz2)
Bzip2 มาตรฐานBzip2 (BZ2) คือยูทิลิตี้การบีบอัดและรูปแบบไฟล์แบบ Unix แบบดั้งเดิมที่ไม่มีสิทธิบัตร สร้างขึ้นโดย Julian Seward โดยใช้การแปลงแบบ Burrows-Wheeler เพื่อให้ได้อัตราการบีบอัดที่แน่นหนากว่า Gzip แบบดั้งเดิมอย่างเห็นได้ชัด
ตรวจสอบและดู Metadata
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ BZ2 โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็นส่วนหัวในระดับไบต์ (Magic Bytes)
ระบบปฏิบัติการและเครื่องมือวิเคราะห์ไฟล์จะระบุไฟล์ BZ2 โดยการตรวจสอบลำดับไบต์ไบนารีส่วนต้น:
ลายเซ็น HEX (OFFSET 0):
42 5A 68การแสดงผลรูปแบบ ASCII: 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 |
| การจัดลำดับไบต์ (Byte Endianness) | 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 |
|---|---|---|---|---|
| อัลกอริทึมหลัก | เบอร์โรว์ส-วีเลอร์ ทรานสฟอร์ม (BWT) | ดีเฟลท (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) |
| ค่าตรวจสอบความถูกต้องของบล็อก | CRC 32 บิตต่อบล็อก | สตรีมเดี่ยว CRC32 | สตรีม CRC64 | สตรีม xxHash64 |
รูปแบบความเสียหายทั่วไปและคู่มือการกู้คืน Hex
การแตกไฟล์หยุดทำงานพร้อมข้อความ 'bzip2: Data integrity error when decompressing'
สาเหตุหลัก: บิตที่พลิกในบล็อกที่บีบอัดทำให้เมทริกซ์การสลับย้อนกลับของ BWT ล้มเหลวในการตรวจสอบความถูกต้องของ CRC32
การกู้คืน: ใช้ยูทิลิตี้ 'bzip2recover' เพื่อกู้คืนบล็อกที่ไม่เสียหายรอบ ๆ เซกเตอร์ที่เสียหาย
การวิเคราะห์ความปลอดภัยและเวกเตอร์การโจมตีตัวแยกวิเคราะห์
การใช้งาน Bzip2 เกี่ยวข้องกับการเรียงลำดับบิตสตรีมที่ซับซ้อนและการวิเคราะห์ตาราง Huffman ซึ่งในอดีตเคยมีข้อบกพร่องเรื่องจำนวนเต็มล้น (integer overflow)
เวกเตอร์การโจมตีที่ทราบ
- จำนวนเต็มล้นในการจัดสรรอาร์เรย์การเรียงลำดับ BWT (เช่น CVE-2016-3189)
- การเขียนนอกขอบเขตระหว่างการประกอบตารางการถอดรหัส Huffman
- การปฏิเสธการให้บริการ (Denial of Service) ผ่านรูปแบบอินพุตที่ผิดปกติซึ่งทำให้เกิดเวลาการเรียงลำดับ BWT ที่แย่ที่สุดในกรณีคอดราติก
แนวทางปฏิบัติที่ดีที่สุดในการป้องกัน:
ประวัติความเป็นมาและเหตุการณ์สำคัญ
ข้อได้เปรียบและจุดเด่นสำคัญ
- มีประสิทธิภาพเหนือกว่า Gzip แบบดั้งเดิมอย่างสม่ำเสมอถึง 10% ถึง 20% บนซอร์สโค้ด tarball, บันทึกของระบบ และฐานข้อมูลข้อความ
- สถาปัตยกรรมบล็อกอิสระ (100k ถึง 900k) รวมถึงการตรวจสอบความสมบูรณ์แบบ CRC 32 บิตต่อบล็อก เพื่อการตรวจสอบความสมบูรณ์ที่แข็งแกร่ง
- ใช้งานได้ฟรีและเป็นพื้นฐานบนทุกการแจกจ่ายบรรทัดคำสั่ง Linux, BSD และ macOS
ข้อจำกัดทางเทคนิคและข้อควรพิจารณา
- ความเร็วในการบีบอัดและการคลายการบีบอัดช้ากว่าอัลกอริทึมสมัยใหม่ เช่น Zstandard อย่างมาก
- การบีบอัดไฟล์เดี่ยวเท่านั้น: ต้องจับคู่กับ TAR (.tar.bz2) เพื่อแพ็กเกจไฟล์หรือไดเรกทอรีหลายไฟล์
- การใช้ CPU สูงกว่าระหว่างการคลายการบีบอัดเมื่อเทียบกับ Gzip หรือ Zstd
เกร็ดความรู้ทางเทคนิคที่น่าสนใจ
- ไบต์วิเศษ 'BZh' ย่อมาจาก 'Burrows-Wheeler Zip Huffman' ตามด้วยตัวเลข ('1' ถึง '9') ที่ระบุขนาดบล็อกเป็นร้อยกิโลไบต์ (เช่น 'BZh9' = 900 KB)
- ซอร์สโค้ดของ Linux Kernel ถูกแจกจ่ายเฉพาะในรูปแบบ .tar.bz2 นานกว่าทศวรรษก่อนที่จะย้ายไปที่ .xz
- การแปลงแบบ Burrows-Wheeler ไม่ได้บีบอัดข้อมูลโดยตรง แต่จะเรียงลำดับอักขระใหม่เพื่อให้ตัวอักษรที่เหมือนกันมารวมกัน ทำให้สามารถบีบอัดได้ง่ายด้วยการเข้ารหัสแบบ Huffman
คำถามทางเทคนิคที่พบบ่อย
ความแตกต่างระหว่าง .gz และ .bz2 คืออะไร?
.bz2 ใช้ขั้นตอนวิธี Burrows-Wheeler เพื่อให้ขนาดไฟล์เล็กกว่า .gz แต่ต้องใช้เวลาในการบีบอัดและคลายบีบอัดนานกว่า
ทำไม bzip2 ถึงมีคำสั่ง 'bzip2recover'?
เนื่องจาก bzip2 บีบอัดข้อมูลเป็นบล็อกขนาด 900 KB ที่เป็นอิสระต่อกัน และแต่ละบล็อกจะมีค่า CRC ของตัวเอง bzip2recover จึงสามารถดึงข้อมูลในบล็อกที่ไม่เสียหายออกมาได้ แม้ว่าบางส่วนของไฟล์จะเสียหายก็ตาม
ฉันจะคลายไฟล์ .tar.bz2 ได้อย่างไร?
คุณสามารถแตกไฟล์ .tar.bz2 ได้โดยตรงในเว็บเบราว์เซอร์ของคุณด้วย File2File.app โดยไม่ต้องใช้เครื่องมือบรรทัดคำสั่ง (command-line tools)