Pengarsipan

Membuat arsip dengan tar dan kompresi gzip.

Daftar isi

Pengarsipan menggabungkan banyak berkas menjadi satu berkas arsip sehingga mudah dipindahkan, dikirim, atau disimpan sebagai cadangan. Topik ini menggunakan tar untuk penggabungan, gzip untuk kompresi, dan sha256sum untuk memeriksa integritas hasilnya. Seluruh langkah dijalankan pada data contoh kecil di /tmp/kerja-pengarsipan, sehingga setiap keluaran dapat direproduksi ulang dengan mudah.

Konsep arsip dan kompresi#

tar (tape archive) menggabungkan banyak berkas dan direktori menjadi satu berkas arsip tanpa mengubah isinya. gzip memampatkan satu aliran data agar ukurannya jauh lebih kecil. Karena tugasnya berbeda, keduanya lazim dirangkai, yaitu arsip tar dipampatkan gzip menjadi berkas berekstensi .tar.gz. Ekstensi singkat .tgz menyatakan format yang sama, dan kedua bentuk itu diperlakukan identik oleh tar.

Nama tar berasal dari tape archive, yaitu kebiasaan lama menyimpan cadangan data ke pita magnetik. Semula, tar hanya menggabungkan berkas tanpa mengecilkan ukurannya, sehingga kompresi menjadi tugas alat terpisah seperti gzip. Perintah tar modern menyediakan huruf opsi z untuk menyambungkan keduanya dalam satu langkah, dan huruf yang sama dipakai kembali ketika arsipnya dibaca.

Menyiapkan data contoh#

Data contohnya terdiri atas dua berkas teks di dalam satu direktori, yaitu daftar belanja yang pendek dan catatan pengukuran sepanjang 2000 baris yang dibuat dengan awk. Waktu ubah direktori beserta kedua berkasnya dipatok dengan touch -d. Arsip menyimpan metadata berkas, termasuk waktu ubah, sehingga waktu yang dipatok tadi ikut terbawa ke dalam arsip dan kembali menempel pada berkas hasil pemulihan.

bash
# menyiapkan direktori data contoh
rm -rf /tmp/kerja-pengarsipan
mkdir -p /tmp/kerja-pengarsipan/catatan
cd /tmp/kerja-pengarsipan
printf "Daftar belanja minggu ini.\nBeras 5 kg.\nMinyak goreng 2 liter.\nGula 1 kg.\n" > catatan/belanja.txt
awk 'BEGIN { for (i = 1; i <= 2000; i++) printf "pengukuran %d suhu %d.%d derajat\n", i, 20 + i % 5, i % 10 }' > catatan/pengukuran.txt
# mematok waktu ubah direktori dan berkasnya agar arsip konsisten
touch -d "2026-01-05 09:00" catatan catatan/*
ls -l catatan/
text Keluaran
total 72
-rw-rw-r-- 1 z z    73 Jan  5  2026 belanja.txt
-rw-rw-r-- 1 z z 66893 Jan  5  2026 pengukuran.txt

Berkas belanja.txt hanya 73 byte, sedangkan pengukuran.txt mencapai 66893 byte karena berisi 2000 baris yang polanya berulang. Perbedaan ukuran itu berguna untuk mengamati efek kompresi nanti, sebab teks berulang adalah jenis data yang paling mudah dipampatkan.

Direktori kerjanya sengaja diletakkan di /tmp, yaitu area berkas sementara yang aman untuk latihan karena isinya tidak dianggap penting. Baris pertama pada blok di atas menghapus sisa latihan sebelumnya dengan rm -rf, sehingga setiap percobaan selalu dimulai dari keadaan yang sama. Apabila latihan selesai, seluruh direktori itu dapat dihapus tanpa risiko.

Membuat dan membaca arsip#

Pembuatan arsip menggunakan huruf opsi c (create), z untuk penyaringan gzip, dan f (file) yang diikuti nama berkas arsipnya. Perintah berikut membuat catatan.tar.gz dari direktori catatan, lalu membaca isinya kembali dengan huruf t (list) tanpa mengekstrak apa pun.

bash
# membuat arsip terkompresi, lalu membaca daftar isinya
cd /tmp/kerja-pengarsipan
tar czf catatan.tar.gz catatan
tar tzf catatan.tar.gz
text Keluaran
catatan/
catatan/pengukuran.txt
catatan/belanja.txt

Daftar isi arsip menyimpan jalur relatif, dimulai dari nama direktorinya. Bentuk inilah yang nantinya dipulihkan saat ekstraksi, sehingga struktur direktori aslinya ikut terbentuk kembali. Huruf opsi yang sama digunakan berulang di seluruh topik ini.

HurufArti
ccreate, membuat arsip baru
tlist, menampilkan isi arsip tanpa mengekstrak
xextract, memulihkan isi arsip
zmenyaring arsip melalui gzip, untuk berkas .tar.gz
ffile, nama berkas arsip ditulis tepat setelah huruf ini

Ukuran sebelum dan sesudah kompresi#

Efek lapisan gzip paling mudah diamati dengan membandingkan arsip tanpa kompresi dan arsip terkompresi dari data yang sama. Arsip polos dibuat dengan huruf c dan f saja, lalu ukuran keduanya dibaca dengan stat.

bash
# membandingkan arsip polos dengan arsip terkompresi
cd /tmp/kerja-pengarsipan
tar cf catatan.tar catatan
stat -c '%n: %s byte' catatan.tar catatan.tar.gz
text Keluaran
catatan.tar: 71680 byte
catatan.tar.gz: 5106 byte

Ukurannya menyusut lebih dari 90 persen, dari 71680 byte menjadi 5106 byte. Penyusutan sebesar itu terjadi karena isi arsipnya berupa teks dengan pola berulang, yang sangat efisien bagi algoritma kompresi gzip. Berkas yang sudah terkompresi sejak awal, seperti gambar dan video, menyusut jauh lebih sedikit karena polanya sudah tidak tersisa.

Angka 71680 pada arsip polos juga menunjukkan tambahan muatan dari tar, karena setiap anggota arsip dibungkus header berukuran 512 byte beserta waktunya. Muatan itu tetap ada setelah kompresi, tetapi kecil dibandingkan penghematan pada isi teksnya. Perbandingan dua arsip seperti ini berguna untuk menaksir apakah kompresi layak dilakukan pada jenis data tertentu.

Memeriksa integritas dengan sha256sum#

Integritas arsip diuji dengan sidik jari kriptografis (hash) yang dihitung per berkas. Perintah sha256sum menghasilkan 64 karakter heksadesimal, dan dua berkas dengan nilai yang sama dipastikan berisi byte yang identik. Perhitungannya bekerja satu arah, sehingga nilai tersebut tidak dapat dipakai untuk menyusun kembali isinya. Sidik jari kedua berkas aslinya dicatat lebih dahulu.

bash
# sidik jari berkas asli sebelum pengiriman
cd /tmp/kerja-pengarsipan
sha256sum catatan/belanja.txt catatan/pengukuran.txt
text Keluaran
12c3ffd43a7714f2c591d5cbabdbbbf7c9f7de86b4339864f71d802bea35b81a  catatan/belanja.txt
132822fdaa47f38b41932c143ac45b280d3b2884065f439cc28c23fb74f0121d  catatan/pengukuran.txt

Arsipnya kemudian diekstrak ke direktori lain dengan opsi -C, lalu sidik jarinya dihitung ulang. Nilai yang identik menunjukkan seluruh proses pengarsipan dan pemulihan tidak mengubah satu byte pun.

bash
# mengekstrak arsip ke direktori lain, lalu memeriksa ulang
cd /tmp/kerja-pengarsipan
mkdir -p pulih
tar xzf catatan.tar.gz -C pulih
sha256sum pulih/catatan/belanja.txt pulih/catatan/pengukuran.txt
text Keluaran
12c3ffd43a7714f2c591d5cbabdbbbf7c9f7de86b4339864f71d802bea35b81a  pulih/catatan/belanja.txt
132822fdaa47f38b41932c143ac45b280d3b2884065f439cc28c23fb74f0121d  pulih/catatan/pengukuran.txt

Nilai pada kedua pasangan itu identik karakter demi karakter, sehingga arsip dinyatakan utuh. Praktik yang sama digunakan saat mengunduh berkas besar, yaitu membandingkan sidik jari hasil unduhan dengan yang diterbitkan penyedianya, atau saat memindahkan cadangan antarmesin. Perbedaan satu karakter saja menandakan berkas rusak atau berubah selama proses pemindahan, sehingga pemindahan perlu diulang.

gzip untuk satu berkas#

Untuk berkas tunggal tanpa penggabungan, gzip bekerja sendiri tanpa tar. Opsi -k (keep) menjaga berkas aslinya tetap ada, sehingga hasilnya berupa dua berkas, yaitu asli dan .gz.

bash
# memampatkan satu berkas salinan dengan gzip
cd /tmp/kerja-pengarsipan
cp catatan/pengukuran.txt pengukuran-salin.txt
gzip -k pengukuran-salin.txt
stat -c '%n: %s byte' pengukuran-salin.txt pengukuran-salin.txt.gz
text Keluaran
pengukuran-salin.txt: 66893 byte
pengukuran-salin.txt.gz: 4818 byte

Nama hasilnya mengikuti kebiasaan gzip, yaitu .gz ditempelkan di belakang nama aslinya. Ukurannya menyusut dari 66893 menjadi 4818 byte, dengan rasio yang mirip arsip .tar.gz karena isi berkasnya sama. Untuk berkas tunggal yang tidak perlu digabung, langkah ini lebih ringkas daripada membuat arsip tar lebih dahulu.

Isi berkas .gz tetap dapat dibaca melalui zcat, yang menyalurkan hasil pemulihan ke keluaran standar tanpa menulis berkas apa pun.

bash
# membaca tiga baris pertama berkas terkompresi
cd /tmp/kerja-pengarsipan
zcat pengukuran-salin.txt.gz | head -n 3
text Keluaran
pengukuran 1 suhu 21.1 derajat
pengukuran 2 suhu 22.2 derajat
pengukuran 3 suhu 23.3 derajat

Pemulihan ke bentuk aslinya dilakukan oleh gunzip, yang menukar berkas .gz dengan berkas aslinya. Salinan pengukuran-salin.txt dihapus lebih dahulu karena hasil pemulihan gunzip akan memakai nama yang sama.

bash
# memulihkan berkas asli dari arsip .gz
cd /tmp/kerja-pengarsipan
rm pengukuran-salin.txt
gunzip pengukuran-salin.txt.gz
sha256sum catatan/pengukuran.txt pengukuran-salin.txt
text Keluaran
132822fdaa47f38b41932c143ac45b280d3b2884065f439cc28c23fb74f0121d  catatan/pengukuran.txt
132822fdaa47f38b41932c143ac45b280d3b2884065f439cc28c23fb74f0121d  pengukuran-salin.txt

Nilai hash yang identik menegaskan bahwa kompresi dan pemulihan tidak mengubah isi, sebagaimana pada arsip tar sebelumnya. Rangkaian penggabungan, kompresi, dan pemeriksaan inilah yang lazim dirangkai ketika cadangan data dipindahkan.

Kesalahan umum#

Tiga kesalahan berikut menyasar perbedaan halus pada opsi tar dan gzip.

  • Menukar huruf c dengan x. Perintah tar czf pada nama arsip yang sudah ada menimpa arsip lama tanpa konfirmasi, sedangkan maksud awalnya hanya membaca isi. Periksa huruf opsinya sebelum perintah dijalankan.
  • Memampatkan tanpa -k. gzip tanpa opsi itu menghapus berkas asal dan menyisakan .gz. Pemulihannya mudah dengan gunzip, tetapi kebiasaan -k lebih aman ketika berkas asli masih diperlukan.
  • Mengekstrak di direktori yang salah. Arsip menyimpan jalur relatif, sehingga ekstraksi menulis berkas di bawah direktori kerja saat itu. Gunakan opsi -C untuk menunjuk direktori tujuan secara eksplisit.

Ringkasan#

  • tar menggabungkan banyak berkas menjadi satu arsip, sedangkan gzip memampatkannya, dan huruf z merangkai keduanya menjadi .tar.gz.
  • Huruf opsi inti tar adalah c untuk membuat, t untuk membaca daftar isi, dan x untuk memulihkan, dengan f yang selalu diikuti nama arsip.
  • Integritas arsip diuji dengan sha256sum, yaitu membandingkan sidik jari berkas asli dengan hasil ekstraksinya.

Referensi#