Ada dua tugas yang berbeda tetapi terkait. Mengemas pohon file (termasuk nama file, struktur direktori, izin sistem file, kepemilikan dan metadata lainnya) ke dalam aliran byte disebut
pengarsipan . Menghapus redundansi dalam aliran byte untuk menghasilkan aliran byte yang lebih kecil disebut kompresi .
Di Unix, kedua operasi dipisahkan, dengan alat yang berbeda untuk masing-masing. Pada sebagian besar platform lain (saat ini dan historis), alat gabungan melakukan pengarsipan dan kompresi.
(gzip dan program lain yang meniru antarmuka gzip sering memiliki opsi untuk menyimpan nama file asli dalam output terkompresi, tetapi ini, bersama dengan CRC atau cek lain untuk mendeteksi korupsi, adalah satu-satunya metadata yang dapat mereka simpan.)
Ada keuntungan untuk memisahkan kompresi dari pengarsipan. Pengarsipan adalah platform-spesifik (metadata filesystem yang perlu diawetkan sangat bervariasi), tetapi implementasinya mudah, sebagian besar terikat I / O, dan sedikit berubah seiring waktu. Kompresi adalah platform-independen, tetapi implementasi terikat oleh CPU dan algoritma terus meningkat untuk mengambil keuntungan dari peningkatan sumber daya yang dapat dibawa oleh perangkat keras modern untuk mengatasi masalah tersebut.
Pengarsip Unix paling populer adalah tar
, meskipun ada yang lain seperti cpio
dan ar
. (Paket Debian adalah ar
arsip, sementara
cpio
sering digunakan untuk ramital inital.) tar
Adalah atau telah sering dikombinasikan dengan alat kompresi seperti compress
(.Z), gzip
(.gz),
bzip2
(.bz2) dan xz
(.xz), dari yang tertua hingga yang termuda , dan bukan kebetulan dari kompresi terburuk hingga terbaik.
Membuat tar
arsip dan mengompresnya adalah langkah-langkah yang berbeda: kompresor tidak tahu apa-apa tentang tar
format file. Ini berarti bahwa mengekstraksi satu file dari tar
arsip terkompresi membutuhkan dekompresi semua file sebelumnya. Ini sering disebut arsip "padat".
Sama halnya, karena tar adalah format "streaming" - yang diperlukan untuk berguna dalam saluran pipa - tidak ada indeks global dalam arsip tar, dan daftar isi arsip tar sama mahalnya dengan mengekstraknya.
Sebaliknya, Zip dan RAR dan 7-zip (pengarsip paling populer pada platform Windows modern) biasanya mengkompres setiap file secara terpisah, dan mengompres metadata dengan ringan jika sama sekali. Hal ini memungkinkan daftar file yang murah dalam arsip dan ekstraksi file individual, tetapi berarti redundansi antara banyak file dalam arsip yang sama tidak dapat dieksploitasi untuk meningkatkan kompresi. Sementara secara umum mengompresi file yang sudah dikompresi tidak mengurangi ukuran file lebih jauh, kadang-kadang Anda mungkin melihat file zip dalam file zip: zip pertama mengubah banyak file kecil menjadi satu file besar (mungkin dengan kompresi dinonaktifkan), yang kedua zip kemudian dikompresi sebagai satu kesatuan.
Ada penyerbukan silang antara platform dan filosofi yang berbeda: gzip
pada dasarnya adalah zip
kompresor tanpa pengaruhnya, dan xz
pada dasarnya adalah 7-zip
kompresor tanpa pengarsipannya.
Ada kompresor khusus lainnya. Varian PPM dan penggantinya ZPAQ
dioptimalkan untuk kompresi maksimum tanpa memperhatikan konsumsi sumber daya. Mereka dapat dengan mudah mengolah CPU dan RAM sebanyak yang Anda bisa gunakan, dan dekompresi sama beratnya dengan kompresi (untuk kontras, alat kompresi yang paling banyak digunakan adalah
asimetris : dekompresi lebih murah daripada mengompresi).
Di ujung lain dari spektrum, lzo
, snappy
dan LZ4
adalah "cahaya" kompresor dirancang untuk kecepatan maksimum dan konsumsi sumber daya minimum, pada biaya kompresi. Mereka banyak digunakan di dalam sistem file dan penyimpanan objek lain, tetapi kurang sebagai alat mandiri.
Jadi mana yang harus Anda pilih?
Pengarsipan:
Karena Anda menggunakan Ubuntu, tidak ada alasan nyata untuk menggunakan selain tar
pengarsipan, kecuali Anda mencoba membuat file yang mudah dibaca di tempat lain.
zip
sulit dikalahkan di mana-mana, tetapi ini bukan Unix-centric dan tidak akan menjaga izin sistem berkas dan informasi kepemilikan Anda, dan kompresi baked-in-nya sudah kuno. 7-zip dan RAR (dan ZPAQ) memiliki kompresi lebih modern tetapi sama-sama tidak cocok untuk pengarsipan sistem file Unix (walaupun tidak ada yang menghentikan Anda menggunakannya hanya sebagai kompresor); RAR juga merupakan hak milik.
Kompresi:
Untuk kompresi maksimum, Anda dapat melihat benchmark, seperti benchmark besar di http://mattmahoney.net/dc/text.html . Ini akan memberi Anda ide yang lebih baik dari pengorbanan yang terlibat.
Anda mungkin tidak ingin kompresi maksimum. Itu terlalu mahal.
xz
adalah alat kompresi tujuan umum yang paling populer pada sistem Unix modern. Saya percaya 7-zip dapat membaca file xz juga, karena mereka terkait erat.
Terakhir: jika Anda mengarsipkan data untuk hal lain selain penyimpanan jangka pendek, Anda harus memilih sesuatu yang bersifat open-source dan sebaiknya tersebar luas, untuk meminimalkan sakit kepala di kemudian hari.