آخر تحديث: 20 Aug, 2026

GZIP vs BZIP2 vs XZ: Which Linux Compression Format Is Best?

GZIP vs BZIP2 vs XZ: أي صيغة ضغط لينكس هي الأفضل؟

سواء كنت تقوم بضغط نسخ قواعد البيانات اليومية، أو تدوير سجلات خوادم الويب متعددة الجيجابايت، أو توزيع الثنائيات المجمعة على آلاف العقد، فإن الضغط هو واقع يومي في إدارة لينكس.

عند استدعاء tar أو معالجة البيانات المتدفقة عبر الإدخال القياسي، عادةً ما تواجه ثلاث أدوات قياسية: GZIP (.gz)، BZIP2 (.bz2)، و XZ (.xz).

بينما تهدف الأدوات الثلاث جميعًا إلى ضغط البايتات الخام إلى أرشيفات مدمجة، فإنها تتخذ مفاضلات هندسية مختلفة جوهريًا بين نسبة الضغط، واستهلاك وحدة المعالجة المركزية، واستخدام الذاكرة. اختيار الصيغة الخاطئة يمكن أن يخلق عنق زجاجة صامت في عمليات النشر الآلية، أو يعرقل نوافذ النسخ الاحتياطي المجدولة، أو يضيع مساحة تخزين قيمة مع مرور الوقت.

يوضح هذا الدليل كيفية عمل كل صيغة من الداخل، وكيفية أدائها عبر أحمال عمل واقعية، وكيفية اختيار الأنسب للبنية التحتية الخاصة بك.

1. ملفات تقنية سريعة: المتنافسون الثلاثة

GZIP (GNU Zip)

  • الخوارزمية الأساسية: DEFLATE (مزيج من LZ77 وترميز هوفمان)
  • الامتداد الافتراضي: .tar.gz, .tgz, .gz
  • عصر الإصدار: 1992 (تم إنشاؤه بواسطة جان-لوب غايلي ومارك أدلر كبديل خالٍ من البراءات لـ compress)
  • الميزة الأساسية: سرعة تنفيذ لا تقهر ودعم بيئي شبه عالمي.
  • العيب الأساسي: نسبة ضغط أقل مقارنةً بالمشفّرات الإحصائية الحديثة والمعتمدة على القواميس.

لقد خدم GZIP كالعنصر الأساسي الافتراضي في بيئات يونكس لأكثر من ثلاثة عقود. نظرًا لأن خوارزمية DEFLATE الخاصة به تعمل بنوافذ انزلاقية صغيرة (32 كيلوبايت)، فإن GZIP يتطلب استهلاكًا ضئيلًا للذاكرة أثناء كل من الضغط وفك الضغط.

BZIP2

  • الخوارزمية الأساسية: Burrows-Wheeler Transform (BWT) مع تحويل Move-to-Front (MTF) وترميز هوفمان
  • الامتداد الافتراضي: .tar.bz2, .tbz2, .bz2
  • عصر الإصدار: 1996 (تم إنشاؤه بواسطة جوليان سوارد)
  • الميزة الأساسية: نسب ضغط أفضل على ملفات ASCII المتكررة وملفات السجلات المهيكلة مقارنةً بـ GZIP.
  • العيب الأساسي: أبطأ بشكل عام، خاصةً أثناء فك الضغط، وقد أصبح إلى حد كبير غير صالح بسبب الخوارزميات الأحدث.

يعالج BZIP2 البيانات في كتل منفصلة (عادةً 900 كيلوبايت) باستخدام تبديلات قابلة للعكس تُجَمّع الأحرف المتشابهة معًا قبل الترميز. بينما كان يُحتفل به على نطاق واسع في أواخر التسعينيات وأوائل الألفية الثانية لتفوقه على أحجام ملفات GZIP، فإن تكلفة حسابه مرتفعة نسبيًا.

XZ (LZMA2)

  • الخوارزمية الأساسية: LZMA2 (خوارزمية Lempel-Ziv-Markov chain، محسّنة)
  • الامتداد الافتراضي: .tar.xz, .txz, .xz
  • عصر الإصدار: 2009 (تم تقديمه لاستبدال تنسيق lzma الأقدم)
  • الميزة الأساسية: نسب ضغط عالية استثنائياً وفك ضغط سريع وخفيف الوزن.
  • العيب الأساسي: استهلاك كبير للذاكرة العشوائية ووقت تشغيل CPU ممتد أثناء الضغط الأولي.

يستفيد XZ من أحجام القاموس المتغيرة (غالبًا حتى 32 ميغابايت أو 64 ميغابايت بشكل افتراضي) للعثور على أنماط البايت المتكررة عبر نوافذ بيانات أوسع بكثير من GZIP. وهذا يجعله فعالًا بشكل مدمر في تقليل حجم الملفات الكبيرة والمتكررة مثل وسائط تثبيت نظام التشغيل، وأشجار مصدر النواة، وصور البرامج الثابتة.

2. مصفوفة مقارنة الأداء

الجدول أدناه يلخص ديناميكيات الأداء العملية لكل أداة عند تشغيل الإعدادات الافتراضية على عتاد خادم قياسي:

المقياس / البُعدGZIP (-6)BZIP2 (-9)XZ (-6)
نسبة الضغطمتوسط (~65-75% تقليل)جيد (~75-80% تقليل)متفوق (~80-88% تقليل)
سرعة الضغطسريع جدًابطيءبطيء جدًا
سرعة فك الضغطسريع جدًابطيء إلى متوسطسريع
استخدام الذاكرة العشوائية للضغطضئيل (~1–2 ميغابايت)منخفض (~8–10 ميغابايت)مرتفع (~100–700 ميغابايت+)
استخدام RAM لفك الضغطضئيل (< 1 ميغابايت)منخفض (~4 ميغابايت)متوسط (~10–65 ميغابايت)
النقطة المثالية الأساسيةالسجلات، خطوط أنابيب CI/CD، التدفقات في الوقت الحقيقيتوافق الأرشيفات القديمةمستودعات الحزم، ملفات OS ISO، التخزين البارد

3. رؤى قياس الأداء في العالم الحقيقي

لفهم كيفية تصرف هذه الأدوات تحت حمل واقعي، ضع في اعتبارك سجل وصول خادم خام بحجم 1 جيجابايت تمثيلي ودليل مصدر برنامج غير مضغوط بحجم 500 ميجابايت.

السيناريو أ: ضغط ملفات السجلات الكبيرة (نص 1 جيجابايت)

  • GZIP: ينتهي في أقل من 12 ثانية، مُنتجًا أرشيفًا بحجم حوالي 180 ميجابايت.
  • BZIP2: ينتهي في حوالي 45–50 ثانية، مُقللًا الملف إلى حوالي 130 ميجابايت.
  • XZ: يستغرق 80–90 ثانية بالإعدادات الافتراضية، مُنتجًا أرشيفًا يقارب 95 ميجابايت.

السيناريو ب: أحمال فك الضغط

مقياس حاسم غالبًا ما يُغفل هو اللاتناظر.

  • GZIP يفك الضغط في 2–3 ثوانٍ باستخدام ذاكرة دقيقة للغاية.
  • XZ يفك الضغط في 4–6 ثوانٍ. بينما كان الضغط الأولي بطيئًا، استخراج .xz يكاد يكون سريعًا مثل استخراج .gz.
  • BZIP2 يتطلب تقريبًا 25–30 ثانية فقط لفك الحزمة، لأن عكس تحويل بوروز-ويلر يساوي حسابيًا عملية الترميز.

4. لماذا يتراجع BZIP2 عن الشعبية

في البنية التحتية الحديثة، يجد BZIP2 نفسه عالقًا في وسط محرج:

  1. أبطأ من GZIP في السرعة: إذا كانت مدة معالجة الطلب أو انخفاض استهلاك المعالج مهمة، فإن GZIP أسرع بشكل ملحوظ.
  2. أبطأ من XZ في الكثافة: إذا كانت حفظ النطاق الترددي وكفاءة التخزين مهمة، فإن XZ ينتج أرشيفات أصغر بكثير.
  3. أبطأ من كليهما في سرعة فك الضغط: في أنظمة توصيل البرمجيات، يتحمل العملاء عقوبة ملحوظة على المعالج عند استخراج ملفات .tar.bz2 مقارنةً بـ .tar.gz أو .tar.xz.

وبالتالي، قامت توزيعات لينكس الرئيسية (بما في ذلك Debian و Arch و Fedora) بنقل توزيع الحزم الرسمي وملفات نواة tar بعيدًا عن BZIP2 نحو XZ (ومؤخرًا، Zstandard للعمليات في وقت التشغيل).

5. الاستخدام العملي لسطر الأوامر

دمج 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

استخدام الأنظمة متعددة النوى

بشكل افتراضي، تستخدم تنفيذات هذه الأدوات ذات الخيط الواحد نواة وحدة معالجة مركزية واحدة فقط. إذا كنت تضغط أرشيفات متعددة الجيجابايت على خوادم حديثة متعددة النوى، قد تستغرق المعالجة ذات الخيط الواحد ساعات.

  • تعدد الخيوط في XZ: دعم أصلي عبر -T أو --threads:
    xz -T0 -k database_dump.sql   # Uses all available CPU cores
    
  • GZIP المتوازي (pigz): بديل جاهز يستخدم جميع نوى وحدة المعالجة المركزية لعمليات GZIP:
    pigz -k database_dump.sql
    
  • BZIP2 المتوازي (pbzip2): تنفيذ متعدد الخيوط لـ BZIP2:
    pbzip2 -k database_dump.sql
    

6. كيفية الاختيار: إطار قرار عملي

اختر أداتك بناءً على القيد الأساسي في سير عملك:

استخدم GZIP إذا:

  • أنت تقوم بإعداد ضغط تدفق في الوقت الحقيقي أو نقل شبكي حيث يكون معدل النقل هو العامل المحدد.
  • أنت تدير تدوير السجلات الآلي (logrotate) على خوادم الإنتاج حيث يجب حجز موارد وحدة المعالجة المركزية لأعباء عمل التطبيقات.
  • يتطلب أقصى قدر من القابلية للنقل عبر الأنظمة المدمجة القديمة وصور القاعدة القياسية.

استخدم XZ إذا:

  • أنت تنشر قطع الإصدار، وبنات النواة، وصور الحاويات الأساسية، أو مستودعات الحزم الثابتة التي يتم تنزيلها بشكل متكرر من قبل أطراف ثالثة.
  • أنت تُعد أرشيفات باردة طويلة الأمد (نسخ احتياطية أسبوعية/شهرية خارج الموقع) حيث تتجاوز تكاليف التخزين وقت الضغط مرة واحدة.
  • تحتاج إلى أحجام ملفات صغيرة، لكن مستهلكيك لا يزالون يطلبون تنزيلًا سريعًا وأوقات استخراج سريعة.

احتفظ بـ BZIP2 فقط إذا:

  • أنت تحافظ على التوافقية الخلفية مع السكريبتات القديمة، وروتينات استعادة النسخ الاحتياطية الحالية، أو الأجهزة البرمجية التي لا توفر فك ضغط XZ.

7. الأسئلة المتكررة (FAQ)

س1. أي تنسيق يوفر أصغر حجم أرشيف؟ XZ ينتج باستمرار أصغر حجم أرشيف بين الثلاثة بسبب نوافذ القاموس LZMA2 الأكبر.

س2. هل XZ أبطأ من GZIP عند فك ضغط الملفات؟ XZ أبطأ قليلاً فقط من GZIP عند فك الضغط، لكنه أسرع بكثير من BZIP2.

س3. هل يمكن لـ GZIP و XZ الاستفادة من عدة نوى CPU؟ يدعم XZ تعدد الخيوط الأصلي باستخدام العلامة -T0، بينما يمكن تنفيذ GZIP بشكل متوازي عبر النوى باستخدام أداة pigz البديلة.

س4. لماذا تتخلى توزيعات لينكس عن BZIP2؟ لقد قامت التوزيعات بإلغاء BZIP2 إلى حد كبير لأن XZ يضغط إلى حجم أصغر ويفك الضغط أسرع، بينما يظل GZIP أسرع للعمليات السريعة.

س5. هل يحدث فرق ملحوظ عند استخدام مستوى ضغط أعلى مثل -9؟ ضبط المستوى -9 ينتج فقط تقليلًا طفيفًا في الحجم يتراوح بين 1% إلى 3% في المتوسط، بينما يزيد بشكل كبير من استهلاك دورات CPU والذاكرة.

انظر أيضًا