Kemas Kini Terakhir: 20 Ogos, 2026

GZIP vs BZIP2 vs XZ: Format Pemampatan Linux Mana yang Terbaik?
Sama ada anda sedang mengepak dump pangkalan data harian, memutar log pelayan web berbilion gigabait, atau mengedarkan binari terkompilasi kepada ribuan nod, pemampatan adalah realiti harian dalam pentadbiran Linux.
Apabila memanggil tar atau memproses data streaming melalui input standard, anda biasanya akan menemui tiga utiliti standard: GZIP (.gz), BZIP2 (.bz2), dan XZ (.xz).
Walaupun ketiga‑tiga alat ini bertujuan untuk memampatkan bait mentah ke dalam arkib yang padat, mereka membuat pertukaran kejuruteraan yang secara asas berbeza antara nisbah mampatan, masa jalankan CPU, dan beban memori. Memilih format yang salah boleh secara senyap menjadi bottleneck bagi penyebaran automatik anda, menunda tetingkap sandaran terjadual, atau membazirkan ruang storan yang berharga dari masa ke masa.
Panduan ini memecahkan cara setiap format berfungsi di sebalik tabir, bagaimana ia berprestasi dalam beban kerja yang realistik, dan cara memilih yang tepat untuk infrastruktur anda.
1. Profil Teknik Ringkas: Tiga Pesaing
GZIP (GNU Zip)
- Algoritma Asas: DEFLATE (combination of LZ77 and Huffman coding)
- Sambungan Lalai:
.tar.gz,.tgz,.gz - Era Pelepasan: 1992 (created by Jean-loup Gailly and Mark Adler as a patent-free alternative to
compress) - Kelebihan Teras: Unbeatable execution speed and near-universal ecosystem support.
- Kekurangan Teras: Lower compression ratio compared to modern statistical and dictionary-based encoders.
GZIP telah berfungsi sebagai kuda kerja lalai dalam persekitaran Unix selama lebih tiga dekad. Oleh kerana algoritma DEFLATE-nya beroperasi dengan tetingkap gelongsor kecil (32 KB), GZIP memerlukan beban memori yang sangat kecil semasa pemampatan dan penyahmampatan.
BZIP2
- Algoritma Asas: Transformasi Burrows-Wheeler (BWT) digabungkan dengan transformasi Move-to-Front (MTF) dan pengekodan Huffman
- Sambungan Lalai:
.tar.bz2,.tbz2,.bz2 - Era Pelepasan: 1996 (dicipta oleh Julian Seward)
- Kelebihan Teras: Nisbah mampatan yang lebih baik pada fail ASCII berulang dan fail log berstruktur berbanding GZIP.
- Kekurangan Teras: Lebih perlahan secara keseluruhan, terutama semasa penyahmampatan, dan kebanyakannya menjadi usang oleh algoritma yang lebih baru.
BZIP2 memproses data dalam blok berasingan (biasanya 900 KB) menggunakan permutasi terbalik yang mengumpulkan aksara serupa bersama sebelum pengekodan. Walaupun ia sangat dipuji pada akhir 1990-an dan 2000-an kerana mengatasi saiz fail GZIP, kos pengiraannya agak tinggi.
XZ (LZMA2)
- Algoritma Asas: LZMA2 (Algoritma Rantaian Lempel-Ziv-Markov, dipertingkatkan)
- Sambungan Lalai:
.tar.xz,.txz,.xz - Era Pelepasan: 2009 (diperkenalkan untuk menggantikan format
lzmayang lebih lama) - Kelebihan Teras: Nisbah mampatan yang sangat tinggi dan penyahmampatan yang cepat serta ringan.
- Kekurangan Teras: Penggunaan RAM yang tinggi dan masa proses CPU yang lama semasa mampatan awal.
XZ memanfaatkan saiz kamus yang berubah-ubah (selalunya sehingga 32 MB atau 64 MB secara lalai) untuk mencari corak bait berulang di seluruh tetingkap data yang jauh lebih luas berbanding GZIP. Ini menjadikannya sangat berkesan dalam mengecilkan fail besar yang berulang seperti media pemasangan OS, pokok sumber kernel, dan imej perisian tegar.
2. Matriks Perbandingan Prestasi
Jadual di bawah merangkum dinamik prestasi praktikal setiap utiliti apabila dijalankan dengan konfigurasi lalai pada perkakasan pelayan standard:
| Metrik / Dimensi | GZIP (-6) | BZIP2 (-9) | XZ (-6) |
|---|---|---|---|
| Nisbah Pemampatan | Sederhana (~65-75% reduction) | Baik (~75-80% reduction) | Cemerlang (~80-88% reduction) |
| Kelajuan Pemampatan | Sangat Pantas | Lambat | Sangat Lambat |
| Kelajuan Penyahmampatan | Sangat Cepat | Lambat hingga sederhana | Pantas |
| Penggunaan RAM Pemampatan | Sangat kecil (~1–2 MB) | Rendah (~8–10 MB) | Tinggi (~100–700 MB+) |
| Penggunaan RAM Penyahmampatan | Sangat kecil (< 1 MB) | Rendah (~4 MB) | Sederhana (~10–65 MB) |
| Titik Manis Utama | Log, saluran CI/CD, aliran masa nyata | Keserasian arkib warisan | Repositori pakej, ISO OS, penyimpanan sejuk |
3. Wawasan Penanda Aras Dunia Sebenar
Untuk memahami bagaimana alat ini berkelakuan di bawah beban realistik, pertimbangkan log akses pelayan mentah 1 GB yang representatif dan direktori kod sumber perisian tidak dimampatkan 500 MB.
Senario A: Memampatkan Fail Log Besar (Teks 1 GB)
- GZIP: Selesai dalam kurang daripada 12 saat, menghasilkan arkib kira-kira 180 MB.
- BZIP2: Selesai dalam kira-kira 45–50 saat, mengurangkan fail kepada kira-kira 130 MB.
- XZ: Mengambil 80–90 saat pada tetapan lalai, menghasilkan arkib kira-kira 95 MB.
Senario B: Beban Kerja Penyahmampatan
Metrik kritikal yang sering diabaikan ialah asimetri.
- GZIP menyahmampat dalam 2–3 saat dengan penggunaan memori yang mikroskopik.
- XZ menyahmampat dalam 4–6 saat. Walaupun mampatan awal perlahan, mengekstrak
.xzhampir sama cepatnya dengan mengekstrak.gz. - BZIP2 memerlukan kira-kira 25–30 saat hanya untuk menyahpak, kerana membalikkan Transformasi Burrows-Wheeler adalah secara komputasi simetri dengan proses pengekodan.
4. Mengapa BZIP2 Sedang Kehilangan Populariti
Dalam infrastruktur moden, BZIP2 mendapati dirinya terperangkap dalam keadaan pertengahan yang janggal:
- Kalah dalam kelajuan berbanding GZIP: Jika kependaman pemprosesan atau penggunaan CPU yang rendah penting, GZIP jauh lebih pantas.
- Kalah dalam ketumpatan berbanding XZ: Jika penjimatan jalur lebar dan kecekapan penyimpanan penting, XZ menghasilkan arkib yang jauh lebih kecil.
- Kalah dalam kelajuan penyahmampatan oleh kedua-duanya: Dalam sistem penghantaran perisian, pelanggan membayar penalti CPU yang dapat diukur apabila mengekstrak fail
.tar.bz2berbanding.tar.gzatau.tar.xz.
Oleh itu, pengedaran Linux utama (termasuk Debian, Arch, dan Fedora) telah mengalihkan pengedaran pakej rasmi dan tarball kernel mereka daripada BZIP2 ke arah XZ (dan baru-baru ini, Zstandard untuk operasi masa jalan).
5. Penggunaan Baris Perintah Praktikal
Integrasi Tar (Aliran Kerja Paling Umum)
Pelaksanaan moden GNU tar secara automatik mengenali format pemampatan berdasarkan sambungan fail, tetapi penggunaan bendera eksplisit masih merupakan amalan standard:
# 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.*
Pemampatan Fail Berdiri Sendiri
Untuk memampatkan fail individu tanpa menggabungkan:
# 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
Menggunakan Sistem Berbilang Teras
Secara lalai, pelaksanaan satu-benang bagi alat-alat ini hanya menggunakan satu teras CPU. Jika anda memampatkan arkib berbilion gigabait pada pelayan berbilang teras moden, pemprosesan satu-benang boleh mengambil masa berjam-jam.
- Multi-threading XZ: Sokongan asli melalui
-Tatau--threads:xz -T0 -k database_dump.sql # Uses all available CPU cores - GZIP Selari (
pigz): Pengganti siap pakai yang menggunakan semua teras CPU untuk operasi GZIP:pigz -k database_dump.sql - BZIP2 Selari (
pbzip2): Pelaksanaan berbilang benang untuk BZIP2:pbzip2 -k database_dump.sql
6. Cara Memilih: Kerangka Keputusan Praktikal
Pilih alat anda berdasarkan sekatan utama aliran kerja anda:
Gunakan GZIP jika:
- Anda sedang menyediakan pemampatan aliran masa nyata atau penghantaran rangkaian di mana kadar aliran adalah faktor yang mengehadkan.
- Anda menguruskan putaran log automatik (
logrotate) pada pelayan produksi di mana sumber CPU mesti diperuntukkan untuk beban kerja aplikasi. - Keportabilitas maksimum merentasi sistem terbenam warisan dan imej asas standard diperlukan.
Gunakan XZ jika:
- Anda menerbitkan artifak pelepasan, bina kernel, imej asas kontena, atau repositori pakej statik yang dimuat turun secara kerap oleh pihak ketiga.
- Anda sedang menyediakan arkib sejuk jangka panjang (sandaran mingguan/bulanan di luar tapak) di mana kos penyimpanan melebihi masa pemampatan sekali.
- Anda memerlukan saiz fail kecil, tetapi pengguna anda masih menuntut muat turun pantas dan masa pengekstrakan yang cepat.
Simpan BZIP2 hanya jika:
- Anda mengekalkan keserasian ke belakang dengan skrip warisan, rutin pemulihan sandaran sedia ada, atau peranti perisian yang tidak menyediakan dekompresor XZ.
7. Soalan Lazim (FAQ)
Q1. Format mana yang memberikan saiz arkib terkecil? XZ secara konsisten menghasilkan saiz arkib terkecil di antara ketiga‑nya kerana tetingkap kamus LZMA2 yang lebih besar.
Q2. Adakah XZ lebih perlahan daripada GZIP semasa menyahmampat fail? XZ hanya sedikit lebih perlahan daripada GZIP untuk menyahmampat, tetapi ia jauh lebih cepat daripada BZIP2.
Q3. Bolehkah GZIP dan XZ memanfaatkan berbilang teras CPU? XZ menyokong multi‑threading asli menggunakan bendera -T0, manakala GZIP boleh diparalelkan merentasi teras menggunakan utiliti pigz yang boleh menggantikan.
Q4. Mengapa distribusi Linux menghapuskan BZIP2? Distribusi kebanyakannya telah mengurangkan penggunaan BZIP2 kerana XZ memampatkan lebih kecil dan menyahmampat lebih cepat, manakala GZIP tetap lebih cepat untuk operasi pantas.
Q5. Adakah tahap mampatan yang lebih tinggi seperti -9 memberikan perbezaan yang ketara? Menetapkan tahap -9 hanya menghasilkan pengurangan saiz marginal 1% hingga 3% secara purata sambil meningkatkan penggunaan kitaran CPU dan beban memori secara dramatik.