آخرین بهروزرسانی: 20 Aug, 2026

GZIP در مقابل BZIP2 در مقابل XZ: کدام فرمت فشردهسازی لینوکس بهترین است؟
چه در حال فشردهسازی نسخههای پشتیبان روزانه پایگاه داده باشید، چه در حال چرخاندن لاگهای چندگیگابایتی وبسرور، یا توزیع باینریهای کامپایلشده به هزاران گره، فشردهسازی یک واقعیت روزمره در مدیریت لینوکس است.
هنگام فراخوانی tar یا پردازش دادههای جریاندار از طریق ورودی استاندارد، معمولاً با سه ابزار استاندارد مواجه میشوید: GZIP (.gz)، BZIP2 (.bz2) و XZ (.xz).
در حالی که هر سه ابزار هدف فشردهسازی بایتهای خام به آرشیوهای کوچکتر را دارند، تعادلهای مهندسی متفاوتی بین نسبت فشردهسازی، زمان پردازش CPU و مصرف حافظه برقرار میکنند. انتخاب قالب نادرست میتواند بهصورت ساکن گلوگاه در استقرارهای خودکار شما ایجاد کند، پنجرههای پشتیبانگیری زمانبندیشده را متوقف کند یا به مرور زمان فضای ذخیرهسازی ارزشمند را هدر دهد.
این راهنما نحوه کار هر قالب را از زیرساخت بررسی میکند، عملکرد آنها را در بارهای کاری واقعی ارزیابی میکند و به شما کمک میکند تا قالب مناسب برای زیرساخت خود را انتخاب کنید.
1. پروفایلهای فنی سریع: سه رقیب
GZIP (GNU Zip)
- الگوریتم پایه: DEFLATE (ترکیبی از LZ77 و کدگذاری هوفمان)
- پسوند پیشفرض:
.tar.gz,.tgz,.gz - دوره انتشار: 1992 (ایجاد شده توسط ژان-لوپ گیللی و مارک آدلر به عنوان یک جایگزین بدون حق ثبت اختراع برای
compress) - مزیت اصلی: سرعت اجرای بیرقیب و پشتیبانی تقریباً جهانی از اکوسیستم.
- معایب اصلی: نسبت فشردهسازی پایینتر نسبت به رمزگذارهای آماری و مبتنی بر فرهنگلغت مدرن.
GZIP بهعنوان ابزار پیشفرض محیطهای یونیکس برای بیش از سه دهه خدمت کرده است. چون الگوریتم DEFLATE آن با پنجرههای لغزان کوچک (32 کیلوبایت) کار میکند، GZIP در طول فشردهسازی و استخراج نیاز به حافظه ناچیزی دارد.
BZIP2
- الگوریتم پایه: تبدیل بوروز-ویلر (BWT) ترکیبشده با تبدیل Move-to-Front (MTF) و کدگذاری هوفمان
- پسوند پیشفرض:
.tar.bz2,.tbz2,.bz2 - دوره انتشار: 1996 (ایجاد شده توسط جولیان سوئارد)
- مزیت اصلی: نسبتهای فشردهسازی بهتر بر روی فایلهای ASCII تکراری و لاگهای ساختاریافته نسبت به GZIP.
- معایب اصلی: بهطور کلی کندتر، بهویژه در حین استخراج، و بهطور عمده توسط الگوریتمهای جدید منسوخ شده است.
BZIP2 دادهها را در بلوکهای جداگانه (معمولاً ۹۰۰ کیلوبایت) پردازش میکند با استفاده از جابجاییهای قابل بازگشت که کاراکترهای مشابه را قبل از رمزگذاری گروهبندی میکند. در حالی که در اواخر دهه ۱۹۹۰ و ۲۰۰۰ بهخاطر کاهش اندازه فایل نسبت به GZIP مورد تحسین قرار گرفت، هزینه محاسباتی آن نسبتاً بالا است.
XZ (LZMA2)
- الگوریتم پایه: LZMA2 (الگوریتم زنجیره لِمپِل‑زیو‑مارکوف، بهبود یافته)
- پسوند پیشفرض:
.tar.xz,.txz,.xz - دوره انتشار: 2009 (معرفی شده برای جایگزینی فرمت قدیمی
lzma) - مزیت اصلی: نسبتهای فشردهسازی فوقالعاده بالا و استخراج سریع و سبک.
- معایب اصلی: مصرف زیاد RAM و زمان طولانی اجرای CPU در طول فشردهسازی اولیه.
XZ از اندازههای متغیر دیکشنری (اغلب بهصورت پیشفرض تا ۳۲ مگابایت یا ۶۴ مگابایت) استفاده میکند تا الگوهای بایت تکراری را در بازههای دادهای بسیار وسیعتری نسبت به GZIP پیدا کند. این باعث میشود که در کاهش حجم فایلهای بزرگ و تکراری مانند رسانههای نصب سیستمعامل، درختهای منبع هسته، و تصاویر firmware بهطرز شگفتانگیزی مؤثر باشد.
2. ماتریس مقایسه عملکرد
جدول زیر دینامیکهای عملکرد عملی هر ابزار را هنگام اجرای تنظیمات پیشفرض بر روی سختافزار سرور استاندارد خلاصه میکند:
| معیار / بُعد | GZIP (-6) | BZIP2 (-9) | XZ (-6) |
|---|---|---|---|
| نسبت فشردهسازی | متوسط (~۶۵-۷۵٪ کاهش) | خوب (~75-80% کاهش) | عالی (~80-88% کاهش) |
| سرعت فشردهسازی | بسیار سریع | آهسته | خیلی آهسته |
| سرعت استخراج | بسیار سریع | آهسته تا متوسط | سریع |
| استفاده از RAM فشردهسازی | ناچیز (~1–2 مگابایت) | کم (~8–10 مگابایت) | بالا (~100–700 مگابایت+) |
| مصرف RAM هنگام استخراج | ناچیز (< 1 مگابایت) | کم (~4 مگابایت) | متوسط (~10–65 مگابایت) |
| نقطهٔ ایدهآل اصلی | لاگها، خطوط لوله CI/CD، جریانهای زمان واقعی | سازگاری بایگانیهای قدیمی | مخازن بستهها، ایزوهای سیستمعامل، ذخیرهسازی سرد |
۳. بینشهای بنچمارک دنیای واقعی
برای درک نحوه رفتار این ابزارها تحت بار واقعی، یک لاگ دسترسی سرور خام ۱ گیگابایتی نماینده و یک دایرکتوری کد منبع نرمافزاری ۵۰۰ مگابایتی بدون فشردهسازی را در نظر بگیرید.
سناریو A: فشردهسازی فایلهای لاگ بزرگ (متن ۱ گیگابایت)
- GZIP: در کمتر از ۱۲ ثانیه تمام میشود و یک بایگانی حدود ۱۸۰ مگابایت ارائه میدهد.
- BZIP2: حدود ۴۵ تا ۵۰ ثانیه طول میکشد و فایل را به حدود ۱۳۰ مگابایت کاهش میدهد.
- XZ: در تنظیمات پیشفرض ۸۰ تا ۹۰ ثانیه زمان میبرد و بایگانیای حدود ۹۵ مگابایت تولید میکند.
سناریو B: بارهای کاری استخراج
یک معیار حیاتی که اغلب نادیده گرفته میشود نامتقارن است.
- GZIP در ۲–۳ ثانیه بازگشایی میشود با مصرف حافظه میکروسکوپی.
- XZ در ۴–۶ ثانیه بازگشایی میشود. در حالی که فشردهسازی اولیه کند بود، استخراج
.xzتقریباً به سرعت استخراج.gzاست. - BZIP2 برای باز کردن تقریباً ۲۵–۳۰ ثانیه زمان میبرد، زیرا معکوس کردن تبدیل بوروز‑ویلر به صورت محاسباتی مشابه رمزگذاری آن است.
۴. چرا BZIP2 محبوبیت خود را از دست میدهد
در زیرساختهای مدرن، BZIP2 خود را در یک میانهٔ ناخوشایند مییابد:
- از نظر سرعت توسط GZIP شکست خورده: اگر تأخیر پردازش یا مصرف کم CPU مهم باشد، GZIP بهمراتب سریعتر است.
- از نظر چگالی توسط XZ شکست خورده: اگر حفظ پهنای باند و کارایی ذخیرهسازی مهم باشد، XZ آرشیوهای بسیار کوچکتری تولید میکند.
- از نظر سرعت استخراج توسط هر دو شکست خورده: در سیستمهای تحویل نرمافزار، مشتریان هنگام استخراج فایلهای
.tar.bz2نسبت به.tar.gzیا.tar.xzجریمهٔ قابلتوجهی از CPU میپردازند.
در نتیجه، توزیعهای اصلی لینوکس (از جمله Debian، Arch و Fedora) توزیع بستههای رسمی و آرشیوهای هستهٔ خود را از BZIP2 به سمت XZ (و اخیراً Zstandard برای عملیات زمان اجرا) منتقل کردهاند.
۵. استفاده عملی از خط فرمان
یکپارچهسازی Tar (روند کاری رایجترین)
پیادهسازیهای مدرن GNU tar بهصورت خودکار فرمت فشردهسازی را بر اساس پسوند فایل تشخیص میدهند، اما استفاده از پرچمهای صریح همچنان روش استاندارد است:
# GZIP: Fast archive creation
tar -czvf project-backup.tar.gz /var/www/project/
# BZIP2: Legacy high-ratio archive
tar -cjvf project-backup.tar.bz2 /var/www/project/
# XZ: Maximum space savings
tar -cJvf project-backup.tar.xz /var/www/project/
# Generic extraction (tar auto-detects the format)
tar -xvf archive-name.tar.*
فشردهسازی فایل بهصورت مستقل
برای فشردهسازی فایلهای منفرد بدون بستهبندی:
# Compress keeping the original file intact (-k)
gzip -k access.log # Output: access.log.gz
bzip2 -k access.log # Output: access.log.bz2
xz -k access.log # Output: access.log.xz
# Decompress individual files
gzip -d access.log.gz
bzip2 -d access.log.bz2
xz -d access.log.xz
استفاده از سیستمهای چند هستهای
بهطور پیشفرض، پیادهسازیهای تکنخی این ابزارها فقط از یک هسته CPU استفاده میکنند. اگر در حال فشردهسازی آرشیوهای چندگیگابایتی بر روی سرورهای مدرن چند هستهای باشید، پردازش تکنخی میتواند ساعتها طول بکشد.
- چندنخی XZ: پشتیبانی بومی از طریق
-Tیا--threads:xz -T0 -k database_dump.sql # Uses all available CPU cores - GZIP موازی (
pigz): جایگزینی آماده که برای عملیات GZIP از تمام هستههای CPU استفاده میکند:pigz -k database_dump.sql - BZIP2 موازی (
pbzip2): پیادهسازی چندنخی برای BZIP2:pbzip2 -k database_dump.sql
۶. چگونه انتخاب کنیم: چارچوب تصمیمگیری عملی
ابزار خود را بر اساس محدودیت اصلی جریان کاریتان انتخاب کنید:
از GZIP استفاده کنید اگر:
- شما در حال تنظیم فشردهسازی جریان زمان واقعی یا انتقال شبکه هستید که در آن توان عملیاتی عامل محدود کننده است.
- شما در حال مدیریت چرخش خودکار لاگها (
logrotate) بر روی سرورهای تولیدی هستید که در آن منابع CPU باید برای بارهای کاری برنامهها رزرو شوند. - حداکثر قابلیت حملپذیری در میان سیستمهای تعبیهشده قدیمی و تصاویر پایه استاندارد مورد نیاز است.
از XZ استفاده کنید اگر:
- شما در حال انتشار artefacts نسخه، ساختهای هسته، تصاویر پایهٔ کانتینر یا مخازن بستههای ایستا هستید که بهطور مکرر توسط طرفهای ثالث دانلود میشوند.
- شما در حال آمادهسازی آرشیوهای سرد بلندمدت (پشتیبانهای هفتگی/ماهیانه خارج از سایت) هستید که هزینههای ذخیرهسازی بیش از زمان فشردهسازی یکباره است.
- شما به فایلهای کوچک نیاز دارید، اما مصرفکنندگان شما همچنان سرعت دانلود و زمان استخراج سریع را میخواهند.
فقط در صورتی که BZIP2 را نگه دارید:
- شما در حال حفظ سازگاری عقبگرد با اسکریپتهای قدیمی، روتینهای بازیابی پشتیبان موجود، یا دستگاههای نرمافزاری که دیکامپرسور XZ ارائه نمیدهند، هستید.
7. سؤالات متداول (FAQ)
س.۱. کدام فرمت کوچکترین اندازهٔ آرشیو را فراهم میکند؟ XZ بهطور مداوم کوچکترین اندازهٔ آرشیو را در میان این سه به دلیل پنجرههای دیکشنری بزرگتر LZMA2 تولید میکند.
س.۲. آیا XZ هنگام استخراج فایلها نسبت به GZIP کندتر است؟ XZ فقط کمی نسبت به GZIP در استخراج کندتر است، اما بهطور قابل توجهی از BZIP2 سریعتر است.
سوال ۳. آیا GZIP و XZ میتوانند از چندین هسته CPU بهره ببرند؟ XZ از چندنخیسازی بومی با استفاده از پرچم -T0 پشتیبانی میکند، در حالی که GZIP میتواند با استفاده از ابزار جایگزین pigz بر روی هستهها موازیسازی شود.
سوال ۴. چرا توزیعهای لینوکس BZIP2 را حذف میکنند؟ توزیعها بهطور عمده BZIP2 را حذف کردهاند زیرا XZ فشردهسازی کوچکتری دارد و بازگشایی سریعتری انجام میدهد، در حالی که GZIP برای عملیات سریعتر همچنان سریعتر است.
سوال ۵. آیا سطح فشردهسازی بالاتر مانند -9 تفاوت قابلتوجهی ایجاد میکند؟ تنظیم سطح -9 بهطور متوسط تنها کاهش حجمی حدود ۱٪ تا ۳٪ را بهدست میدهد در حالی که مصرف چرخههای CPU و بار حافظه را بهطور چشمگیری افزایش میدهد.