Chapter sebelumnya memberi kita radar gejala; chapter ini menyiapkan jaring pengaman. RAID menjaga ketersediaan dan SMART memberi peringatan dini, tetapi tidak satu pun menyimpan riwayat data — dan tanpa riwayat, satu rm -rf yang salah target atau satu ransomware cukup untuk melupakan semuanya. Backup adalah salinan yang dipisahkan dari sumbernya, baik secara ruang maupun waktu, dan merancangnya adalah keputusan arsitektur sebelum keputusan alat. Chapter ini menyusun strateginya — aturan 3-2-1, pilihan full versus incremental versus differential, angka RPO/RTO, rotasi retensi, dan enkripsi — lalu membuktikannya dengan latihan rsync, tar, dan openssl yang benar-benar bisa dijalankan hari ini.

Aturan 3-2-1 #

Strategi backup paling terkenal sekaligus paling awet dirangkum tiga angka: 3-2-1. Angka 3 berarti tiga salinan data — satu salinan kerja ditambah dua backup; salinan tunggal berarti kita punya data, bukan backup. Angka 2 berarti salinan tersebar di dua media berbeda — disk internal dan harddisk eksternal, misalnya — supaya kegagalan satu media tidak memakan semuanya. Angka 1 berarti satu salinan disimpan di luar lokasi (offsite): rumah yang kebakaran membakar disk beserta backup-nya sekaligus, dan ransomware tidak menjangkau arsip di lokasi lain. Offsite bisa berarti kantor cabang, rumah kedua, atau penyimpanan cloud — dan yang terakhir sebaiknya berisi arsip terenkripsi, sesuai latihan di penghujung chapter.

Full, Incremental, Differential #

Tiga cara menyusun salinan menentukan dua hal: seberapa cepat backup berjalan, dan seberapa ribet restore-nya.

MetodeApa yang disalinUkuran transferKebutuhan restoreRuang
Fullseluruh set datapaling besarsatu arsip, paling sederhanapaling boros
Incrementalperubahan sejak backup terakhir apa pun jenisnyapaling kecilfull plus seluruh rantai incrementalpaling hemat
Differentialperubahan sejak full terakhirmenengah, makin hari makin besarfull plus differential terbaru sajamenengah

Skema klasiknya adalah full mingguan plus incremental harian: backup tiap malam ringan, dan restore tinggal merangkai rantainya. Kelemahan rantai incremental adalah kerapuhannya — satu arsip korup di tengah rantai merusak semua incremental setelahnya. Differential lebih tahan gangguan karena hanya bergantung pada full terakhir, tetapi ukurannya membesar seiring berjalannya minggu. Pilihan mengikuti dua pertanyaan: seberapa cepat restore harus selesai, dan seberapa besar jendela waktu backup tiap malam.

RPO dan RTO: Dua Angka Penentu Jadwal #

Dua singkatan mengubah diskusi backup dari selera menjadi rekayasa. RPO (Recovery Point Objective) menjawab: berapa banyak data yang boleh hilang? Jarak antar backup menentukan angka itu — backup harian berarti bersiap kehilangan pekerjaan hingga 24 jam. RTO (Recovery Time Objective) menjawab: berapa lama layanan boleh mati? RTO juga menentukan media restore — arsip tar di rumah karyawan tidak akan memenuhi RTO satu jam.

Beban kerjaRPO wajarRTO wajarKonsekuensi desain
Dokumen pribadi24 jambeberapa haribackup harian manual cukup
File server kantor1 jambeberapa jambackup otomatis terjadwal
Database transaksimenitmenitreplikasi dan failover, di luar cakupan chapter ini

Angka ini juga menentukan apa yang tidak perlu dibackup: mengarsipkan /proc atau cache browser untuk RPO 24 jam hanya membakar ruang. Definisikan RPO dan RTO dulu, baru pilih alatnya.

Demo Mini: Backup Harian dengan rsync #

Teori cukup — sekarang kita buktikan bahwa backup yang hanya memindahkan delta itu nyata. Perintah rsync membandingkan sumber dan tujuan, lalu hanya menyalin bedanya; opsi --itemize-changes memperlihatkan keputusan itu baris per baris:

bash
mkdir -p dokumen/laporan dokumen/foto
printf 'laporan penjualan kuartal pertama\n' > dokumen/laporan/penjualan.txt
printf 'catatan rapat mingguan\n' > dokumen/catatan.txt
echo "== sinkronisasi pertama =="
rsync -a --itemize-changes dokumen/ backup-dokumen/
echo "== ubah satu file, lalu sinkron ulang =="
printf 'catatan rapat mingguan (revisi)\n' > dokumen/catatan.txt
rsync -a --itemize-changes dokumen/ backup-dokumen/

Output yang Dihasilkan:

text
== sinkronisasi pertama ==
created directory backup-dokumen
cd+++++++++ ./
>f+++++++++ catatan.txt
cd+++++++++ foto/
cd+++++++++ laporan/
>f+++++++++ laporan/penjualan.txt
== ubah satu file, lalu sinkron ulang ==
>f.s....... catatan.txt

Bedah baris per barisnya:

  1. Baris 1-3 (mkdir dan printf): menyiapkan folder dokumen sebagai data sumber — dua subfolder berisi satu file laporan dan satu catatan.
  2. Baris 5 (rsync -a ...): mode -a (archive) menyalin secara rekursif sambil mempertahankan izin, waktu modifikasi, dan symlink. Garis miring di ujung dokumen/ berarti “salin isinya” — tanpa garis miring, rsync menyalin foldernya sendiri ke dalam backup-dokumen/.
  3. Baris 7-8: satu file diubah isinya (revisi catatan), lalu rsync dijalankan ulang.

Pada sinkronisasi pertama, semua item ditandai cd+++++++++ (direktori baru) dan >f+++++++++ (file baru). Pada sinkronisasi kedua, satu-satunya baris adalah >f.s....... catatan.txt: s berarti ukuran berubah dan t berarti waktu modifikasi berubah — hanya file itu yang ditransfer ulang, sedangkan foto/ dan laporan/ tidak tersentuh. Perilaku “hanya bedanya” inilah mesin di balik backup harian yang ringan: menjalankan rsync tiap malam hanya memindahkan perubahan sejak kemarin. Daftar lengkap kode itemize dan mode penyalinannya terdokumentasi di rsync(1) .

Arsip, Verifikasi, dan Uji Restore #

rsync bersifat sinkronisasi — isi salinan mengikuti sumber terkini. Untuk menyimpan keadaan pada satu titik waktu, arsip tar adalah format klasiknya, dan backup yang baik selalu ditutup dengan uji restore:

bash
mkdir -p dokumen/laporan dokumen/foto
printf 'laporan penjualan kuartal pertama\n' > dokumen/laporan/penjualan.txt
printf 'catatan rapat mingguan (revisi)\n' > dokumen/catatan.txt
tar --sort=name -czf backup-dokumen-2026-01-15.tgz dokumen
tar -tzf backup-dokumen-2026-01-15.tgz
mkdir -p uji-restore
tar -xzf backup-dokumen-2026-01-15.tgz -C uji-restore
sha256sum dokumen/catatan.txt uji-restore/dokumen/catatan.txt
diff -r dokumen uji-restore/dokumen && echo "restore identik dengan sumber"

Output yang Dihasilkan:

text
dokumen/
dokumen/catatan.txt
dokumen/foto/
dokumen/laporan/
dokumen/laporan/penjualan.txt
3c28568c7547515c870556b8cb297105d9c36ddeab283be2688ceccc78fca5a0  dokumen/catatan.txt
3c28568c7547515c870556b8cb297105d9c36ddeab283be2688ceccc78fca5a0  uji-restore/dokumen/catatan.txt
restore identik dengan sumber

Bedah baris per barisnya:

  1. Baris 4 (tar --sort=name -czf ...): membungkus folder dokumen ke arsip terkompresi gzip; --sort=name mengurutkan isi arsip menurut nama sehingga arsip dari data sama bersifat dapat diperbandingkan antar pembuatan.
  2. Baris 5 (tar -tzf ...): mendaftar isi arsip tanpa mengekstraknya — pemeriksaan pertama bahwa arsip terbaca dan lengkap.
  3. Baris 6-7 (tar -xzf ... -C uji-restore): mengekstrak arsip ke folder karantina, bukan menimpa sumbernya.
  4. Baris 8-9 (sha256sum dan diff -r): membandingkan sidik jari satu file dan seluruh pohon direktori; diff -r yang diam plus pesan sukses berarti restore identik dengan sumber.

Dua baris sha256sum berhash sama dan pesan restore identik dengan sumber adalah bukti yang kita cari: salinan bisa dipulihkan dan isinya teruji. Pada arsip sungguhan, simpan juga daftar sha256sum di samping arsipnya agar integritas bisa diperiksa bertahun-tahun kemudian; opsi-opsi pengemasan arsipnya dirinci di tar(1) .

Rotasi dan Retensi #

Ruang penyimpanan terbatas, jadi salinan lama harus pensiun menurut jadwal. Skema populer grandfather-father-son membagi tiga generasi: harian disimpan tujuh hari, mingguan empat-lima minggu, bulanan dua belas bulan. Retensinya sederhana: temukan arsip yang lebih tua dari ambang, lalu hapus. Berikut simulasi pencariannya pada folder arsip harian:

bash
mkdir -p backup-harian
for tgl in 2025-05-28 2025-05-29 2025-05-30 2025-06-02 2025-06-03; do
  printf 'arsip' > backup-harian/backup-$tgl.tgz
  touch -d $tgl backup-harian/backup-$tgl.tgz
done
find backup-harian -name '*.tgz' ! -newermt 2025-06-01 | sort

Output yang Dihasilkan:

text
backup-harian/backup-2025-05-28.tgz
backup-harian/backup-2025-05-29.tgz
backup-harian/backup-2025-05-30.tgz

Bedah baris per barisnya:

  1. Baris 1-5 (for tgl in ...): membuat lima “arsip” harian; touch -d $tgl mengunci waktu modifikasinya ke tanggal masing-masing, meniru arsip yang dibuat pada hari itu.
  2. Baris 6 (find ... ! -newermt 2025-06-01): mencari arsip yang tidak lebih baru dari 1 Juni 2025 — kandidat untuk dipensiunkan.

Hasilnya tiga arsip tertua — persis yang akan dihapus oleh kebijakan retensi tujuh hari. Di produksi, find yang sama ditambah opsi -delete akan membuangnya otomatis; jalankan dulu tanpa -delete untuk memastikan daftarnya benar, karena arsip yang terhapus keliru tidak bisa di-restore.

Enkripsi untuk Salinan Offsite #

Salinan offsite meninggalkan kendali fisik kita, jadi isinya sebaiknya tak terbaca tanpa kunci. openssl sudah ada di hampir semua sistem Linux dan mampu mengenkripsi file dengan AES:

bash
printf 'data rahasia: daftar gaji karyawan\n' > rahasia.txt
openssl enc -aes-256-cbc -pbkdf2 -in rahasia.txt -out rahasia.txt.enc -pass pass:CONTOH_PASSWORD_KUAT
stat -c '%n %s byte' rahasia.txt rahasia.txt.enc
openssl enc -d -aes-256-cbc -pbkdf2 -in rahasia.txt.enc -out pulih.txt -pass pass:CONTOH_PASSWORD_KUAT
cmp rahasia.txt pulih.txt && echo "dekripsi menghasilkan data identik"
head -c 8 rahasia.txt.enc; echo

Output yang Dihasilkan:

text
rahasia.txt 35 byte
rahasia.txt.enc 64 byte
dekripsi menghasilkan data identik
Salted__

Bedah baris per barisnya:

  1. Baris 2 (openssl enc -aes-256-cbc -pbkdf2 ...): mengenkripsi file dengan cipher AES-256-CBC; -pbkdf2 menurunkan password menjadi kunci lewat fungsi derivasi yang lambat — perlindungan dari percobaan password massal.
  2. Baris 3 (stat -c ...): membandingkan ukuran — 35 byte data menjadi 64 byte arsip, karena enkripsi menambah header.
  3. Baris 4-5: mendekripsi kembali lalu membandingkan cmp; hasil identik membuktikan siklus utuh.
  4. Baris 6 (head -c 8): membaca delapan byte pertama arsip — teks Salted__ menandakan arsip memakai salt acak.

Salt acak berarti data dan password yang sama tetap menghasilkan ciphertext berbeda di setiap eksekusi — penyerang tidak bisa mencocokkan arsip kita dengan tabel ciphertext yang sudah dipecahkan sebelumnya. Untuk arsip dalam jumlah besar, alat seperti borg dan restic menggabungkan enkripsi, deduplikasi, dan verifikasi dalam satu paket; perbandingannya ada di daftar alat sinkronisasi dan backup wiki Arch.

Kedua alat utama hari ini — rsync sebagai mesin delta dan tar sebagai pembungkus arsip — masih menyimpan banyak trik: dry-run, filter, hard-link, hingga deduplikasi level blok. Chapter berikutnya membedah rsync sampai ke opsi-opsinya.