Snapshot yang menumpuk tanpa batas akan menghabiskan storage. Episode ini mengajarkan retention policy: `restic forget` dengan policy keep-daily, keep-weekly, keep-monthly, serta `--keep-within` dan `--keep-tag`, lalu `restic prune` untuk menghapus blob yang tidak terpakai — semua berlandaskan target RPO dan RTO kalian.

Di episode 4 kalian mulai membuat snapshot — dan mulai episode ini, snapshot akan terus bertambah. Backup tiap hari menghasilkan 365 snapshot setahun; tanpa kebijakan, repository membengkak dan biaya storage melonjak. Retention policy adalah jawabannya: memutuskan snapshot mana yang pantas hidup dan mana yang harus pensiun.
Kuncinya bukan teknis, tapi bisnis: berapa lama kalian bisa kehilangan data (RPO) dan berapa cepat harus kembali beroperasi (RTO).
restic forget menghapus metadata snapshot sesuai policy. Contoh paling umum — 7 harian, 4 mingguan, 6 bulanan, 1 tahunan:
restic forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 1Restic menyimpan snapshot terakhir dari tiap periode, sehingga total tersimpan maksimal 7 + 4 + 6 + 1 = 18 snapshot per tag/path — bukan semua 365.
restic forget \
--keep-last 10 \
--keep-hourly 24 \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 6 \
--keep-yearly 1Policy berlaku per kombinasi host + tag + path. Artinya snapshot yang ber-tag daily dihitung terpisah dari prod. Selalu beri tag konsisten (episode 4) agar policy bekerja sesuai niat.
Untuk kebutuhan berbasis waktu:
restic forget --keep-within 30d--keep-within 30d menyimpan semua snapshot dalam 30 hari terakhir (atau 1y, 6m, 52w) — tanpa repot menghitung jumlah. Sementara --keep-tag melindungi snapshot tertentu dari kebijakan hapus, misalnya snapshot pra-deploy:
restic forget --keep-tag gold --keep-daily 7Contoh penerapan: aplikasi e-commerce butuh RPO 15 menit → snapshot tiap 15 menit via cron + --keep-within 24h, lalu agresif --keep-daily 7 --keep-monthly 6 untuk riwayat. Data arsip dengan RPO 24 jam cukup --keep-daily saja.
Forget hanya menghapus referensi snapshot. Blob lama masih tersimpan sampai kalian jalankan prune:
restic forget --keep-daily 7 --keep-monthly 6 --pruneAtau terpisah:
restic prunerestic prune memindai seluruh repo, menghitung blob yang tidak direferensikan snapshot mana pun, lalu menghapusnya. Ini operasi berat (membaca semua index) — jalankan di jam sepi, dan jangan terlalu sering; cukup sekali seminggu atau setelah forget besar.
Warning
prune mengunci repository (exclusive lock) dan bisa berlangsung lama untuk repo besar. Jangan jalankan prune bersamaan dengan backup. Jika proses terputus di tengah jalan, jalankan restic prune lagi — prosesnya idempotent dan aman diulang.
Sebelum mengeksekusi forget yang menghancurkan, lihat dulu apa yang akan dihapus:
restic forget --keep-daily 7 --keep-monthly 6 --dry-run--dry-run menampilkan daftar snapshot yang akan dihapus tanpa menghapus apa pun. Jadikan ini kebiasaan — apalagi saat pertama kali menyusun policy.
restic forget menghapus metadata snapshot sesuai policy keep.--keep-last/hourly/daily/weekly/monthly/yearly.--keep-within 30d untuk policy berbasis waktu; --keep-tag untuk melindungi snapshot penting.--prune menghapus blob tak terpakai; lakukan berkala, hindari bentrok dengan backup.--dry-run dulu sebelum forget pertama.Di episode 9 selanjutnya kita menyatukan semuanya: otomasi backup dengan cron/systemd — script backup+forget+prune yang aman (set -euo pipefail, lock file, log), penjadwalan via cron dan systemd timer, serta verifikasi hasil backup di akhir tiap proses.