Dua kata ini sering dicampur-adukkan padahal menjawab masalah yang berbeda: archiving menggabungkan banyak file menjadi satu berkas agar mudah dipindah, sedangkan compression mengecilkan berkas agar hemat tempat. Sebuah arsip bisa tidak dikompresi; sebuah file terkompresi bisa berisi satu file saja. Pada Chapter ini kita bedah kedua lapisan itu secara terpisah, menggabungkannya lewat kombinasi klasik tar + gzip, membandingkan rasio gzip, xz, dan zstd, lalu menutup dengan zip — format satu paket yang tetap jadi bahasa bersama lintas platform.
Arsip Dulu, Kompresi Kemudian #
Perintah tar (dari tape archive) menggabungkan pohon direktori menjadi satu file .tar dengan cara sederhana: menuliskan tiap file beserta path, ukuran, permission, dan kepemilikannya secara berurutan. Hasilnya utuh secara metadata — izin, pemilik, dan struktur folder ikut tersimpan — tetapi ukurannya sama besar dengan jumlah isinya, karena tar sama sekali tidak mengecilkan apa pun. Lapis kedua menyusul: gzip atau xz mengambil file .tar itu lalu menggantikannya dengan versi terkompresi bernama .tar.gz atau .tar.xz. Kombinasi dua lapis inilah yang dimaksud arsip.tar.gz — file tar terkompresi.
tar: Membuat, Melihat Isi, dan Membuka Arsip #
Kita bedah siklus penuhnya pada folder proyek berisi tiga file — dan membuktikan hasil ekstraksinya identik bit-per-bit dengan aslinya:
mkdir -p proyek/dokumen
printf 'laporan penjualan kuartal pertama\n' > proyek/dokumen/penjualan.txt
printf 'laporan pembelian kuartal pertama\n' > proyek/dokumen/pembelian.txt
yes 'ringkasan data penjualan bulanan untuk diarsipkan' | head -c 16384 > proyek/dokumen/ringkasan.txt
tar --sort=name -czf arsip.tar.gz -C proyek dokumen
tar -tzf arsip.tar.gz
mkdir -p hasil
tar -xzf arsip.tar.gz -C hasil
diff -r proyek/dokumen hasil/dokumen && echo "isi arsip identik dengan aslinya"Output yang Dihasilkan:
dokumen/
dokumen/pembelian.txt
dokumen/penjualan.txt
dokumen/ringkasan.txt
isi arsip identik dengan aslinyaMari kita telaah blok di atas:
- Baris 2–4 (pembuatan isi): tiga file dengan isi deterministik —
yes 'teks' | head -c 16384menghasilkan file teks berukuran tepat 16 KiB berisi baris yang berulang. - Baris 5 (
tar --sort=name -czf ... -C proyek dokumen): membuat arsip terkompresi;-C proyekmemindah titik awal ke folderproyekdulu sehingga nama di dalam arsip dimulai daridokumen/, bukanproyek/dokumen/— arsip yang rapi tidak menyandera nama folder sumbernya. - Baris 5 juga (
--sort=name): memaksa urutan entri berdasarkan nama. Tar default memakai urutan pembacaan filesystem yang bisa berbeda-beda; dengan opsi ini, dua arsip dari isi yang sama menghasilkan checksum yang sama — penting untuk backup yang bisa diverifikasi. - Baris 6 (
tar -tzf):t(list) mendaftar isi tanpa mengekstrak — pemeriksaan cepat sebelum membuka arsip dari orang lain. - Baris 7–9 (
mkdir -p hasil,tar -xzf ... -C hasil,diff -r): membuka arsip ke folderhasillalu membandingkan penuh kedua pohon —diff -rpulang tanpa keluhan danechokonfirmasi tercetak, bukti round-trip arsip tidak mengubah apa pun.
gzip, xz, zstd: Menukar Waktu dengan Rasio #
Ketiga kompresor ini berdiri di lapisan kedua, dan pilihannya selalu trade-off: rasio lebih tinggi berarti CPU bekerja lebih lama. zstd belum terpasang di lingkungan latihan ini, tetapi gzip dan xz bisa kita adu secara langsung pada file teks 64 KiB berisi baris berulang:
mkdir -p latihan
cd latihan
yes 'baris data laporan yang berulang cukup panjang agar rasio kompresi terlihat jelas' | head -c 65536 > data.txt
gzip -k data.txt
xz -k data.txt
stat -c '%n %s' data.txt data.txt.gz data.txt.xz
gzip -l data.txt.gzOutput yang Dihasilkan:
data.txt 65536
data.txt.gz 333
data.txt.xz 224
compressed uncompressed ratio uncompressed_name
333 65536 99.5% data.txtPerintah gzip -k dan xz -k sama-sama menambahkan opsi keep — tanpa -k, kedua kompresor menghapus file aslinya setelah menggantinya dengan versi terkompresi. Laporan stat -c '%n %s' mencetak nama lalu ukuran byte; dari hasilnya terlihat xz mengalahkan gzip dengan margin besar, dan gzip -l merangkum rasionya dalam satu baris — 99.5% berarti ukuran berhasil dipangkas dari 65536 byte menjadi 333 byte. Ketiganya dipetakan berikut:
| Format | Perintah | Rasio | Kecepatan | Kasus khas |
|---|---|---|---|---|
| gzip | gzip / gunzip | sedang | cepat | standar de facto: log, paket .deb |
| xz | xz -z / xz -d | tinggi | lambat | rilis source code, arsip jangka panjang |
| zstd | zstd / unzstd | sedang–tinggi | sangat cepat | kernel, paket Fedora, basis data modern |
zip dan unzip: Format Lintas Platform #
zip berbeda arsitektur dari tar: kompresi dilakukan per file di dalam satu wadah, sehingga format ini menggabungkan archive dan compression dalam satu langkah. Windows dan macOS membacanya tanpa alat tambahan — itulah alasan zip tetap jadi format berbagi paling aman. Siklusnya bisa kita buktikan dengan round-trip yang sama:
mkdir -p dokumen
printf 'laporan penjualan\n' > dokumen/penjualan.txt
printf 'laporan pembelian\n' > dokumen/pembelian.txt
yes 'isi berulang untuk uji kompresi zip yang stabil' | head -c 8192 > dokumen/ringkasan.txt
zip -q -r arsip.zip dokumen
mkdir -p ekstrak
unzip -q arsip.zip -d ekstrak
diff -r dokumen ekstrak/dokumen && echo "isi zip identik dengan aslinya"
stat -c '%n %s' arsip.zipOutput yang Dihasilkan:
isi zip identik dengan aslinya
arsip.zip 795Opsi -q pada keduanya meredam daftar file yang diproses, -r memerintahkan zip masuk rekursif ke folder dokumen, dan -d ekstrak menjadi tujuan ekstraksi. Perbedaan praktis terpenting dibanding tar+gzip: zip tidak menyimpan permission Unix secara penuh, sehingga arsipnya tidak cocok untuk backup sistem — wilayah itu tetap milik tar. Pemakaian tar dan kompresi dalam strategi backup sungguhan, termasuk backup inkremental, dibahas tuntas di Chapter tar dan Compression
.
Image Mentah dengan dd #
Ada bentuk ketiga yang bukan arsip terstruktur: image bit-per-bit buatan dd. Perintah sudo dd if=/dev/sdb of=usb.img bs=4M status=progress menyalin seluruh isi perangkat mentah-mentah — sektor demi sektor, termasuk ruang kosongnya — sehingga hasilnya bisa ditulis kembali ke perangkat identik dan boot seperti aslinya. Ukurannya dengan demikian selalu penuh sebesar perangkatnya, walau isinya cuma satu file kecil. Kegunaannya spesifik: forensik, kloning partisi bermasalah, dan penyelamatan data sebelum perbaikan — bukan berbagi file sehari-hari.
File besar yang teridentifikasi di Chapter Disk Usage kini punya jalan keluar yang jelas: diarsipkan, dikompresi, atau dipindahkan. Tapi materi penyimpanan tidak berhenti di ukuran — struktur filesystem itu sendiri bisa sakit. Kita tutup Section ini dengan diagnosis penyakitnya di Chapter Filesystem Troubleshooting .
Referensi lanjut: tar(1) , gzip(1) , dan xz(1) untuk daftar lengkap opsi ketiganya.