Skip to content
VDS · Backup dan disk

Restic: backup dengan enkripsi dan riwayat

Cara mengatur backup dengan enkripsi end-to-end, deduplikasi, dan snapshot berbasis tanggal, mengotomatiskannya, dan memverifikasi integritasnya.

Diperbarui 23 Agustus 2026

Restic mengatasi apa yang tidak bisa dilakukan rsync: ia mengenkripsi data sebelum dikirim, menyimpan riwayat snapshot, tidak menyalin potongan data yang sama dua kali, dan dapat menyimpan cadangan di penyimpanan yang kompatibel dengan S3. Satu program tanpa dependensi.

Instalasi dan repositori pertama Anda

sudo apt install -y restic
restic version

Repositori adalah tempat cadangan Anda disimpan. Bisa berupa direktori, mesin melalui SFTP, atau object storage:

export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

head -c 32 /dev/urandom | base64 > /root/.restic-pass
chmod 600 /root/.restic-pass
restic init

Kata sandi repositori tidak dapat dipulihkan. Jika Anda melupakannya, data Anda hilang — tidak ada dukungan di sini secara desain. Simpan secara terpisah dari mesin: di pengelola kata sandi, di kertas, di mana saja — tetapi jangan hanya di file /root/.restic-pass pada mesin yang sedang Anda cadangkan.

Membuat cadangan

restic backup /var/www /etc/nginx /opt/myapp \
  --exclude-file=/root/restic-exclude.txt \
  --tag daily
restic snapshots
restic ls latest
restic stats

Proses kedua dan selanjutnya berjalan cepat: hanya potongan data baru yang ditransfer.

Memulihkan

restic restore latest --target /restore
restic restore <snapshot-id> --target /restore --include /var/www/uploads

Bahkan lebih praktis adalah melihat isinya tanpa mengekstrak semuanya:

mkdir /mnt/snapshots
restic mount /mnt/snapshots

Direktori tersebut menampilkan semua snapshot berdasarkan tanggal sebagai folder biasa. Ini cara terbaik untuk mengambil satu file yang tidak sengaja terhapus.

Penjadwalan dan pembersihan

Skrip /usr/local/bin/backup.sh:

#!/bin/bash
set -euo pipefail
export RESTIC_REPOSITORY="sftp:backup@backup.example.com:/srv/restic"
export RESTIC_PASSWORD_FILE=/root/.restic-pass

docker compose -f /opt/myapp/compose.yaml exec -T db \
  pg_dump -U postgres app | gzip > /var/backups/db.sql.gz

restic backup /var/www /etc/nginx /opt/myapp /var/backups --tag daily
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
chmod 700 /usr/local/bin/backup.sh

Selanjutnya adalah timer systemd, lihat tugas terjadwal. forget --prune menghapus snapshot berlebih dan membebaskan ruang; tanpa --prune, snapshot hilang dari daftar tetapi datanya tetap ada.

Pemeriksaan integritas

restic check
restic check --read-data-subset=5%

Perintah pertama memeriksa struktur, perintah kedua membaca sebagian data dan memverifikasi checksum. Jalankan perintah kedua sebulan sekali: ini membebani disk dan bandwidth, tetapi inilah yang menangkap korupsi senyap.

Pemeriksaan struktur tidak menggantikan pemulihan sungguhan — lihat uji pemulihan.

Sumber daya

Restic menyimpan indeks di memori: pada dataset besar itu mencapai ratusan megabyte. Pada VDS-1 dengan RAM 2 GB, mencadangkan puluhan gigabyte mungkin akan kekurangan — batasi paralelisme atau pindahkan cadangan berat satu tier ke atas. Beban disk cukup terasa, jadi jadwalkan pada malam hari: lihat kecepatan disk.

Kesalahan umum

  • Kata sandi hanya disimpan di mesin yang sedang dicadangkan. Klasik: mesin hilang bersama kunci cadangannya.
  • forget tanpa --prune. Ruang tidak dibebaskan dan repositori terus bertambah besar.
  • Cadangan di direktori yang sama pada disk yang sama. Anda tidak akan punya tempat untuk memulihkan — lihat cadangan di lokasi lain.
  • Cache dan /var/lib/docker tidak dikecualikan. Cadangan membengkak empat kali lipat tanpa manfaat; daftar apa yang perlu disertakan ada di artikel apa yang perlu dicadangkan.
  • Proses paralel. Proses kedua akan menabrak lock repositori. Bungkus pemanggilannya dalam flock.