Mengotomatiskan pola snapshot dari episode 8 menjadi sistem rotasi daily/weekly/monthly dengan --link-dest, menulis skrip rotasi dan pembersihan snapshot lama, serta menerapkan best practice --delete dan --delete-excluded yang konsisten antar snapshot.

Episode 8 memberi kalian pola satu snapshot. Episode 9 menuntaskan sistemnya: bagaimana snapshot-snapshot itu disusun menjadi rotasi yang teratur — daily, weekly, monthly — lalu dibersihkan secara otomatis tanpa merusak yang lain. Inilah bentuk backup yang kalian inginkan di server produksi: berjalan sendiri, tidak membebani tim, dan punya riwayat yang bisa dijelaskan.
Kunci kepercayaan pada sistem ini: karena setiap snapshot memakai --link-dest, menghapus snapshot lama tidak pernah merusak yang baru — file bersama tetap utuh selama masih direferensikan oleh setidaknya satu snapshot.
Strategi rotasi klasik bernama grandfather-father-son:
Hasilnya: kalian bisa kembali ke hari kemarin, minggu lalu, atau bulan lalu — dengan total snapshot sekitar 23 direktori, bukan 365.
Skrip backup harian dengan --link-dest merujuk ke snapshot sebelumnya:
#!/bin/bash
SOURCE=/home/data
BACKUP=/backup
LAST=$(ls -1d $BACKUP/backup-* 2>/dev/null | tail -1)
rsync -a --delete \
${LAST:+--link-dest="$LAST"} \
"$SOURCE/" "$BACKUP/backup-$(date +%Y-%m-%d)/"${LAST:+--link-dest="$LAST"} menambahkan --link-dest hanya jika snapshot sebelumnya ada — hari pertama menjadi full backup alami. Hasil tiap hari: backup-2026-08-12, backup-2026-08-13, dan seterusnya.
Tip
Alternatif yang lebih sederhana dan banyak dipakai: snapshot terbaru adalah current, dan setiap hari current di-roll dulu menjadi snapshot ber-tanggal. Ini menghindari pemecahan nama dan membuat "snapshot hari ini" selalu mudah diakses.
Menghapus snapshot lama aman karena hardlink: file yang direferensikan snapshot lain tetap hidup, hanya nama yang hilang. Skrip pembersihan:
find /backup -maxdepth 1 -type d -name 'backup-*' -mtime +7 -exec rm -rf {} +Penting: gunakan rm -rf biasa, bukan tool penghapus lain, agar hardlink dipecah dengan benar — hanya snapshot yang benar-benar tidak merujuk file itu lagi yang ruangnya dibebaskan. Inilah alasan mengapa rotasi dengan hardlink sangat aman dibanding sistem incremental berantai.
Satu detail yang sering dilupakan: untuk menjaga konsistensi antar snapshot, setiap snapshot harus dibangun dari state yang sama. Aturannya:
--delete konsisten — jika sumber menghapus file, snapshot berikutnya juga harus menandai penghapusan itu; tanpa --delete, snapshot menumpuk "hantu" file yang sudah tidak ada.--delete-excluded konsisten — jika file dikecualikan (episode 6), tentukan sekali: apakah file yang dikecualikan di snapshot lama ikut dihapus (--delete-excluded) atau dibiarkan. Jangan ubah-ubah antar snapshot.Karena setiap snapshot di-build dengan --link-dest ke yang sebelumnya, ketidakkonsistenan rule membuat chain hardlink tidak optimal — file yang mestinya tidak berubah malah dianggap berubah karena perbedaan aturan filter.
rsync -a --delete --delete-excluded \
--exclude-from=/etc/rsync-backup.excludes \
${LAST:+--link-dest="$LAST"} \
"$SOURCE/" "$BACKUP/backup-$(date +%Y-%m-%d)/"Important
Pilih satu set aturan (delete + exclude) dan kunci di skrip yang sama setiap hari. Mengubah aturan di tengah-tengah history snapshot membuat satu snapshot berisi "perbedaan" yang sebenarnya bukan perubahan data — dan memakan ruang ekstra yang tidak perlu.
--link-dest path salah — ingat, relatif terhadap direktori tujuan, bukan tempat kalian menjalankan rsync. --link-dest=../backup-1/ dari /backup/backup-2/ merujuk /backup/backup-1/.ls -1d atau sortir tanggal, bukan ls yang mengurutkan leksikal (backup-2026-08-09 sebelum backup-2026-08-10).find -exec salah — selalu -exec rm -rf {} + (atau \; yang lebih aman untuk path dengan spasi).stat (episode 8).Skrip di atas siap dijadwalkan — dan itulah jembatan menuju episode 10:
30 2 * * * /usr/local/bin/snapshot-daily.sh >> /var/log/rsync.log 2>&1Kita bedah total otomasi cron, exit code, dan notifikasi di episode 10. Yang penting sekarang: skrip rotasi ini berjalan sendiri, snapshot bersih dan konsisten, dan ruang disk tetap terkendali.
Pada episode 9 ini, kalian telah membangun sistem rotasi snapshot yang mandiri.
Inti yang harus dibawa pulang:
--link-dest ke snapshot sebelumnya; hari pertama jadi full otomatis.rm -rf — hardlink memastikan yang lain tidak rusak.--delete/--delete-excluded agar konsisten antar snapshot.--link-dest relatif ke tujuan, sortir nama tanggal, filesystem tanpa hardlink.Di episode 10 selanjutnya, kita otomasi penuh: otomasi dengan cron — menjadwalkan rsync via crontab, mengarahkan log ke file (>> /var/log/rsync.log 2>&1), memahami exit code rsync (0 sukses, 23 partial), notifikasi email, dan lock file untuk mencegah tumpang tindih. Sampai jumpa di episode 10!