آرشیو BZIP2 (.bz2)
Bzip2 استانداردفرمت Bzip2 (BZ2) یک ابزار فشردهسازی و فرمت فایل کلاسیک و بدون پتاع (مختص یونیکس) است که توسط ژولیان سیوارد (Julian Seward) ایجاد شد و با استفاده از تبدیل باروز-ویلر (Burrows-Wheeler)، فشردهسازی بسیار فشردهتری نسبت به Gzip کلاسیک حاصل میکند.
بررسی و فراداده
سیستمعاملها و تحلیلگرهای فایل، فایلهای BZ2 را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای هدر در سطح بایت (Magic Bytes)
سیستمعاملها و تحلیلگرهای فایل، فایلهای BZ2 را با بررسی توالی بایتهای دودویی ابتدایی شناسایی میکنند:
امضای HEX (آفست 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 |
| ترتیب بایتها (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 | استاندارد پایه | ۲۰٪ تا ۳۰٪ کوچکتر از Gzip | ۱۰٪ تا ۲۰٪ کوچکتر از Gzip |
| سرعت خارجسازی | کند (~۳۰ تا ۵۰ مگابایت بر ثانیه) | سریع (~۳۰۰ مگابایت بر ثانیه) | متوسط (~۱۰۰ مگابایت بر ثانیه) | بسیار سریع (>۱.۵ گیگابایت بر ثانیه) |
| چکسامهای بلوک | CRC ۳۲ بیتی به ازای هر بلوک | CRC32 جریان تک | CRC64 جریان | xxHash64 جریان |
حالتهای رایج خرابی و راهنمای بازیابی هگز
استخراج با خطای 'bzip2: Data integrity error when decompressing' متوقف میشود.
علت ریشهای: بیت معکوس شده در بلوک فشرده شده که باعث میشود ماتریس جایگشت معکوس BWT در اعتبارسنجی CRC32 شکست بخورد.
بازیابی: از ابزار 'bzip2recover' برای بازیابی بلوکهای آسیبی ندیده اطراف بخش آسیبدیده استفاده کنید.
تحلیل امنیتی و بردارهای حمله تجزیهکننده (Parser)
پیادهسازیهای Bzip2 شامل مرتبسازی پیچیده جریان بیت و تجزیه جدول هافمن است که از نظر تاریخی دچار ایرادات سرریز عدد صحیح (integer overflow) بودهاند.
بردارهای حمله شناختهشده
- سرریز عدد صحیح در تخصیص آرایه مرتبسازی BWT (به عنوان مثال CVE-2016-3189).
- نوشتن خارج از محدوده (Out-of-bounds) در حین مونتاژ جدول رمزگشایی هافمن.
- حمله محرومیت از سرویس (DoS) از طریق الگوهای ورودی نابهنجار که باعث بدترین زمانهای مرتبسازی درجه دوم BWT میشود.
بهترین روشهای پدافندی:
تاریخچه و نقاط عطف
مزایا و نقاط قوت کلیدی
- به طور مداوم ۱۰٪ تا ۲۰٪ بهتر از Gzip کلاسیک روی تاربالهای کد منبع، گزارشهای سیستم (system logs) و پایگاههای داده متنی عمل میکند.
- معماری بلوک مستقل (۱۰۰ کیلوبایت تا ۹۰۰ کیلوبایت) شامل چکسامهای CRC ۳۲ بیتی به ازای هر بلوک برای بررسی دقیق صحت دادهها است.
- دسترسی بومی سراسری در تمام توزیعهای خط فرمان لینوکس، BSD و macOS.
محدودیتها و معایب فنی
- سرعت فشردهسازی و خارجسازی (Decompression) بهطور قابلتوجهی کندتر در مقایسه با الگوریتمهای مدرن مانند Zstandard.
- فقط فشردهسازی تکفایلی: برای بستهبندی چند فایل یا پوشه، نیاز به جفت شدن با TAR (.tar.bz2) دارد.
- مصرف پردازنده (CPU) بالاتر در طول خارجسازی در مقایسه با Gzip یا Zstd.
نکات فنی جالب
- بایتهای جادویی 'BZh' مخفف عبارت 'Burrows-Wheeler Zip Huffman' هستند که به دنبال آن یک رقم (از '۱' تا '۹') نشاندهنده اندازه بلوک به صدها کیلوبایت است (به عنوان مثال 'BZh9' = ۹۰۰ کیلوبایت).
- کد منبع هسته لینوکس بیش از یک دهه قبل از مهاجرت به .xz، منحصراً با فرمت .tar.bz2 توزیع میشد.
- تبدیل باروز-ویلر دادهها را به طور مستقیم فشرده نمیکند؛ بلکه ترتیب کاراکترها را جایگشت میدهد تا حروف یکسان در کنار هم جمع شوند و با کدگذاری هافمن به راحتی قابل فشردهسازی باشند.
سوالات فنی متداول
تفاوت بین پسوندهای .gz و .bz2 چیست؟
فرمت .bz2 برای دستیابی به حجم فایلهای کوچکتر نسبت به .gz از تبدیل باروز-ویلر استفاده میکند، اما فشردهسازی و فشردهزدایی آن زمان بیشتری میبرد.
چرا bzip2 دارای دستور 'bzip2recover' است؟
از آنجایی که bzip2 دادهها را در بلوکهای مستقل ۹۰۰ کیلوبایتی که هر کدام CRC مخصوص به خود را دارند فشرده میکند، دستور bzip2recover میتواند حتی در صورت خراب شدن بخشی از فایل، بلوکهای سالم را استخراج کند.
چگونه میتوانم یک فایل .tar.bz2 را استخراج کنم؟
شما میتوانید فایلهای .tar.bz2 را مستقیماً در مرورگر وب خود با استفاده از File2File.app و بدون نیاز به اجرای ابزارهای خط فرمان استخراج کنید.