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-passpada 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.
forgettanpa--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/dockertidak 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.