Bagian 1: Kinerja
Berikut ini adalah perbandingan dua alur kerja terpisah dan apa yang mereka lakukan.
Anda memiliki file di disk blah.tar.gz
yang, katakanlah, 1 GB data yang dikompresi gzip yang, ketika tidak dikompresi, menempati 2 GB (jadi rasio kompresi 50%).
Cara Anda membuat ini, jika Anda melakukan pengarsipan dan kompresi secara terpisah, akan menjadi:
tar cf blah.tar files ...
Ini akan menghasilkan di blah.tar
mana hanya kumpulan dari files ...
dalam bentuk yang tidak terkompresi.
Maka Anda akan melakukannya
gzip blah.tar
Ini akan membaca isi blah.tar
dari disk, kompres mereka melalui algoritma kompresi gzip, tulis kontennya blah.tar.gz
, lalu batalkan tautan (hapus) file tersebut blah.tar
.
Sekarang, mari kita dekompresi!
Cara 1
Anda punya blah.tar.gz
, dengan satu atau lain cara.
Anda memutuskan untuk menjalankan:
gunzip blah.tar.gz
Ini akan
- BACA isi data terkompresi 1 GB dari
blah.tar.gz
.
- PROSES data yang dikompresi melalui
gzip
dekompresor dalam memori.
- Saat buffer memori terisi dengan data "satu blok", TULIS data yang tidak terkompresi ke dalam file
blah.tar
pada disk dan ulangi sampai semua data terkompresi dibaca.
- Putuskan tautan (hapus) file tersebut
blah.tar.gz
.
Sekarang, Anda memiliki blah.tar
pada disk, yang tidak terkompresi tetapi berisi satu atau lebih file di dalamnya, dengan overhead struktur data yang sangat rendah. Ukuran file mungkin beberapa byte lebih besar dari jumlah semua data file.
Kamu lari:
tar xvf blah.tar
Ini akan
- BACA konten data terkompresi 2 GB
blah.tar
dan tar
struktur data format file, termasuk informasi tentang izin file, nama file, direktori, dll.
- MENULIS 2 GB data ditambah metadata ke disk. Ini melibatkan: menerjemahkan struktur data / informasi metadata ke dalam membuat file dan direktori baru pada disk yang sesuai, atau menulis ulang file dan direktori yang ada dengan konten data baru.
Total data yang kami BACA dari disk dalam proses ini adalah 1 GB (untuk gunzip) + 2 GB (untuk tar) = 3 GB.
Total data yang kami WROTE ke disk dalam proses ini adalah 2 GB (untuk gunzip) + 2 GB (untuk tar) + beberapa byte untuk metadata = sekitar 4 GB.
Cara 2
Anda punya blah.tar.gz
, dengan satu atau lain cara.
Anda memutuskan untuk menjalankan:
tar xvzf blah.tar.gz
Ini akan
- BACA isi data terkompresi 1 GB
blah.tar.gz
, satu blok pada satu waktu, ke dalam memori.
- PROSES data yang dikompresi melalui
gzip
dekompresor dalam memori.
- Sebagai buffer memori penuh, itu akan pipa data, dalam memori, hingga
tar
parser format file, yang akan membaca informasi tentang metadata, dll dan file data terkompresi.
- Ketika buffer memori terisi dalam
tar
file parser, itu akan MENULIS data yang tidak terkompresi ke disk, dengan membuat file dan direktori dan mengisinya dengan konten yang tidak terkompresi.
Total data yang kami BACA dari disk dalam proses ini adalah 1 GB data terkompresi, titik.
Total data yang kami MENULIS ke disk dalam proses ini adalah 2 GB data yang tidak terkompresi + beberapa byte untuk metadata = sekitar 2 GB.
Jika Anda perhatikan, jumlah disk I / O di Way 2 adalah identik dengan disk I / O yang dilakukan oleh, katakanlah, Zip
atau 7-Zip program, menyesuaikan untuk setiap perbedaan rasio kompresi.
Dan jika rasio kompresi menjadi perhatian Anda, gunakan Xz
kompresor untuk merangkum tar
, dan Anda memiliki arsip TAR LZMA2 , yang sama efisiennya dengan algoritma paling canggih yang tersedia untuk 7-Zip :-)
Bagian 2: Fitur
tar
menyimpan izin Unix dalam metadata file-nya, dan sangat terkenal dan diuji untuk berhasil mengemas direktori dengan semua jenis izin yang berbeda, tautan simbolik, dll. Ada lebih dari beberapa contoh di mana seseorang mungkin perlu menggumpal banyak file ke dalam satu file atau aliran, tetapi tidak perlu memampatkannya (meskipun kompresi berguna dan sering digunakan).
Bagian 3: Kompatibilitas
Banyak alat didistribusikan dalam bentuk sumber atau biner sebagai .tar.gz atau .tar.bz2, karena itu adalah format file "common common denominator": seperti kebanyakan pengguna Windows memiliki akses ke dekompresor .zip atau .rar, kebanyakan instalasi Linux , bahkan yang paling dasar, akan memiliki akses ke setidaknya tar dan gunzip, tidak peduli berapa usia atau dikupas. Bahkan firmware Android memiliki akses ke alat-alat ini.
Proyek-proyek baru yang menargetkan pemirsa yang menjalankan distribusi modern mungkin sangat baik mendistribusikan dalam format yang lebih modern, seperti .tar.xz (menggunakan format kompresi Xz (LZMA), yang kompres lebih baik daripada gzip atau bzip2), atau .7z, yang mirip dengan format file ZIP atau RAR yang dikompres dan menentukan tata letak untuk mengenkapsulasi beberapa file ke dalam satu file.
Anda tidak melihat .7z lebih sering digunakan karena alasan yang sama bahwa musik tidak dijual dari toko unduhan daring dalam format baru seperti Opus , atau video di WebM . Kompatibilitas dengan orang yang menjalankan sistem kuno atau yang sangat mendasar.
tar xvzf
ini lebih sulit daripada7z -x
...