ארכיון BZIP2 (.bz2)
תקן תקןBzip2 (BZ2) הוא כלי דחיסה ופורמט קבצים קלאסי של יוניקס, שאינו מוגן בפטנט. הוא נוצר על ידי ג'וליאן סיוורד (Julian Seward) ומשתמש בהתמרת בורווס-ווילר (Burrows-Wheeler) כדי להשיג דחיסה טובה יותר במידה ניכרת מזו של Gzip הקלאסי.
בדיקה ומטא-נתונים
מערכות הפעלה ומנתחי קבצים מזהים קבצי BZ2 על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת כותרת ברמת הבייט (Magic Bytes)
מערכות הפעלה ומנתחי קבצים מזהים קבצי BZ2 על ידי בדיקת רצף הבייטים הבינארי הראשוני:
חתימת HEX (היסט 0):
42 5A 68ייצוג ASCII: BZh
תקינה: תקן קוד פתוח של Bzip2
מפרט טכני
| מבנה המכולה | כותרת זרם (BZh ואחריה ספרה לגודל בלוק 1-9), ולאחריה בלוקי נתונים דחוסים וסכום ביקורת של 32 סיביות |
| דחיסה | התמרת Burrows-Wheeler (BWT), התמרת Move-to-Front (MTF) וקידוד Huffman |
| סדר בתים (Endianness) | מסגור זרם סיביות Big-Endian |
| מרחבי צבע | לא רלוונטי (זרם דחיסת בתים) |
| ערוצים ומבנה | זרם בתים דחוס של קובץ יחיד |
| ממדים מרביים | אורך זרם בלתי מוגבל (תומך בקבצים בכל גודל) |
| שקיפות | שימור נתונים ללא אובדן, בדיוק של 100% ברמת הסיביות |
| הזרמה ופרוגרסיביות | הזרמה רציפה, בלוק אחר בלוק, עם סכומי ביקורת CRC נפרדים לכל בלוק |
מטריצת השוואה טכנית: 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 ריבועיים במקרה הגרוע ביותר.
שיטות מומלצות להגנה: פענח קובצי BZ2 באמצעות מפענחי WASM בטוחים לזיכרון, עם גבולות זיכרון שנאכפים בפועל.
היסטוריה ואבני דרך
יתרונות מרכזיים
- עולה בעקביות על 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 מבלי להריץ כלי שורת פקודה.