ארכיון 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) | Deflate (LZ77 + האפמן) | LZMA / LZMA2 | אנטרופיית מצבים סופיים + LZ77 |
| דחיסה לעומת Gzip | קטן ב-10% - 20% מ-Gzip | תקן בסיס | קטן ב-20% - 30% מ-Gzip | קטן ב-10% - 20% מ-Gzip |
| מהירות פריסה | איטי (~30-50 מגה-בייט לשנייה) | מהיר (~300 מגה-בייט לשנייה) | בינוני (~100 מגה-בייט לשנייה) | מהיר במיוחד (>1.5 גיגה-בייט לשנייה) |
| בדיקות שלום של בלוקים | CRC של 32 סיביות לכל בלוק | CRC32 של זרם יחיד | CRC64 של זרם | xxHash64 של זרם |
מצבי שיחשות נפוצים ומדריך שחזור הקסדצימלי (Hex)
החילוץ מתבטל עם השגיאה 'bzip2: Data integrity error when decompressing'.
גורם שורש: סיביות הפוכות בבלוק דחוס הגורמות למטריצת התמורה ההפוכה של BWT להיכשל באימות CRC32.
התאוששות: השתמש בכלי 'bzip2recover' כדי להציל בלוקים שלא ניזוקו המקיפים את המגזר הפגום.
ניתוח אבטחה ווקטורי התקפה על מנתחים (Parsers)
יישומי Bzip2 כוללים מיון זרמי סיביות מורכב וניתוח טבלאות האפמן שחוו בעבר פגמי גלישת מספרים שלמים.
ווקטורי תקיפה ידועים
- גלישת מספרים שלמים בהקצאת מערך מיון BWT (למשל CVE-2016-3189).
- כתיבה מחוץ לגבולות במהלך הרכבת טבלת פענוח האפמן.
- מניעת שירות באמצעות דפוסי קלט פתולוגיים הגורמים לזמני מיון BWT ריבועיים במקרה הגרוע ביותר.
השיטות המומלצות להגנה:
היסטוריה ואבני דרך
יתרונות מרכזיים
- עולה בעקביות על Gzip הקלאסי ב-10% עד 20% בקובצי tar של קוד מקור, יומני מערכת ומסדי נתונים טקסטואליים.
- ארכיטקטורת בלוקים עצמאית (100k עד 900k) כוללת בדיקות שלום מסוג CRC של 32 סיביות לכל בלוק לבדיקת תקינות איתנה.
- זמינות מקומית אוניברסלית בכל הפצות שורת הפקודה של Linux, BSD ו-macOS.
מגבלות טכניות וחסרונות
- מהירויות דחיסה ופריסה איטיות משמעותית בהשוואה לאלגוריתמים מודרניים כמו Zstandard.
- דחיסת קובץ יחיד בלבד: דורש שיוך ל-TAR (.tar.bz2) כדי לארוז קבצים או ספריות מרובים.
- שימוש גבוה יותר במעבד במהלך הפריסה בהשוואה ל-Gzip או ל-Zstd.
עובדות טכניות מעניינות
- בייטים קסמים 'BZh' מייצגים את 'Burrows-Wheeler Zip Huffman', ואחריהם ספרה ('1' עד '9') המציינת את גודל הבלוק במאות קילו-בטים (למשל 'BZh9' = 900 קילו-בייט).
- קוד המקור של ליבת לינוקס הופץ אך ורק בפורמט .tar.bz2 במשך למעלה מ-10 שנים לפני המעבר ל-.xz.
- התמרת בורווס-ווילר אינה דוחסת נתונים ישירות; היא מתמירה את סדר התווים כך שאותיות זהות מתקבצות יחד, מה שהופך אותן לדחיסות בקלות על ידי קידוד האפמן.
שאלות טכניות נפוצות
מה ההבדל בין .gz ל-.bz2?
.bz2 משתמש בהמרת Burrows-Wheeler כדי להשיג גדלי קבצים קטנים יותר מאשר .gz, אך לוקח לו יותר זמן לדחוס ולפענח.
מדוע ל-bzip2 יש פקודת 'bzip2recover'?
מכיוון ש-bzip2 דוחס נתונים בבלוקים עצמאיים של 900 קילו-בייט, שלכל אחד מהם יש קוד CRC משלו, bzip2recover יכול לחלץ בלוקים שלא נפגעו גם אם חלק מהקובץ מושחת.
כיצד אוכל לחלץ קובץ .tar.bz2?
ניתן לפרוס קבצי .tar.bz2 ישירות בדפדפן האינטרנט שלך באמצעות File2File.app מבלי להריץ כלי שורת פקודה.