Repository, snapshot, dan content-defined chunking adalah tiga pilar arsitektur restic. Episode ini membedah struktur direktori repository, peran tiap komponen (binary, backend, key repository, dan command), serta alur data dari file sumber hingga blob terenkripsi di storage.

Di episode 1 kalian memahami mengapa restic ada. Sekarang saatnya membedah bagaimana ia bekerja. Episode ini adalah fondasi untuk seluruh series: begitu memahami repository, snapshot, dan chunking, semua perintah di episode 3–22 hanyalah variasi dari tiga konsep ini.
Repository adalah kumpulan data terenkripsi yang menyimpan semua snapshot. Ia bisa berada di direktori lokal, server SFTP, bucket S3, atau rest-server. Di dalamnya, data dipecah menjadi blob-blob kecil yang terenkripsi — tidak ada yang bisa dibaca tanpa kunci.
Snapshot adalah state direktori (atau kumpulan direktori) pada titik waktu tertentu. Analogikan seperti foto ber-resolusi penuh: ia mencatat isi file, metadata, dan relasi antar file pada saat diambil. Snapshot tidak menyimpan salinan fisik file — ia menyimpan referensi ke blob-blob yang membentuk isi file tersebut. Inilah yang membuat snapshot restic efisien dan immutable.
Agar dedup bekerja, file dipecah menjadi chunk menggunakan algoritma content-defined chunking: batas antar-chunk ditentukan oleh isi data (rolling hash), bukan posisi byte. Akibatnya:
Chunk kemudian di-compress, dienkripsi, dan disimpan sebagai blob di repository.
Mari intip isi repository yang sudah di-init:
/backup/restic/
├── config
├── data/
├── index/
├── keys/
└── snapshots/config — versi repository dan parameter kriptografi (contoh: version: 2).data/ — blob terenkripsi, dipecah ke banyak sub-direktori.index/ — katalog blob: file mana berisi blob apa.keys/ — kunci terenkripsi (satu per password repository).snapshots/ — metadata snapshot dalam bentuk file kecil.resticProgram tunggal (single binary) tanpa runtime dependency — salah satu alasan restic mudah diinstall, disalin antar server, dan di-container-kan.
Lapisan penyimpanan abstrak: local, SFTP, S3-compatible, B2, Azure, GCS, dan REST server. Perintah yang sama bekerja di semua backend — hanya URL repository (-r) yang berubah. Episode 7 mengupas tuntas.
Password repository dipakai untuk mendekripsi kunci yang menyimpan master key. Tanpa password ini, repository mustahil diakses — karena itu penyimpanannya harus aman (episode 3 dan 13).
restic init # buat repository baru
restic backup # simpan snapshot baru
restic restore # kembalikan file dari snapshot
restic check # verifikasi integritas repository
restic forget # hapus snapshot sesuai policy
restic prune # hapus blob yang tak terpakaiKetika restic backup /data dijalankan:
Perhatikan poin 3: inilah mengapa backup kedua dan seterusnya terasa jauh lebih cepat — hanya delta yang diunggah.
Note
Backup restic bukan mirror — ia menyimpan versi. Konsekuensinya, ruang storage bertumbuh seiring riwayat snapshot, dan pengelolaannya butuh policy retention (restic forget --prune) yang dibahas di episode 8.
config, data/, index/, keys/, snapshots/.Di episode 3 selanjutnya kita mengeksekusi hal pertama di repository sungguhan: inisialisasi repository — restic init untuk backend lokal dan S3, pengelolaan password dengan aman, serta kesalahan-kesalahan yang harus kalian hindari sejak awal.