Lewati ke isi

Server & Infrastruktur

Cara Backup Seluruh Server Linux dengan Restic

Panduan restic untuk backup seluruh server Linux: repositori terenkripsi, pengecualian folder, backup database, jadwal otomatis, dan restore.

Terbit 6 menit baca

Jawaban singkat

Restic membackup server Linux ke repositori terenkripsi dengan deduplikasi. Alurnya: buat repositori di server atau storage lain, backup / dengan --one-file-system dan daftar pengecualian, dump database terpisah, jadwalkan lewat systemd timer, lalu rapikan dengan forget --prune dan uji restore.

Daftar isi
  1. Sebelum mulai, apa yang perlu disiapkan?
  2. Langkah memasang dan menjalankan restic
  3. 1. Pasang restic
  4. 2. Simpan kata sandi dan alamat repositori di file
  5. 3. Buat repositori
  6. 4. Tentukan folder yang dikecualikan
  7. 5. Jalankan backup pertama
  8. 6. Backup database dengan benar
  9. 7. Atur masa simpan snapshot
  10. 8. Jadwalkan dengan systemd timer
  11. 9. Coba restore
  12. Ringkasan perintah penting
  13. Pertanyaan yang sering diajukan
  14. Checklist singkat

Mau backup seluruh isi server Linux dengan satu alat yang gratis, terenkripsi, dan hemat ruang? Restic adalah salah satu pilihan paling praktis. Ia berupa satu program, menyimpan data dalam repositori yang dienkripsi sejak di sisi server, dan hanya mengirim bagian file yang berubah, sehingga backup harian berikutnya jauh lebih cepat dari yang pertama.

Panduan ini memakai Ubuntu atau Debian, tetapi perintah restic-nya sama di AlmaLinux dan Rocky Linux. Per 6 November 2026, rilis terbaru restic di halaman GitHub resminya adalah versi 0.19.1.

Sebelum mulai, apa yang perlu disiapkan?

  • Server yang akan dibackup dengan akses root atau sudo.
  • Tempat menyimpan repositori di luar server itu. Bisa server lain lewat SFTP, atau object storage yang kompatibel S3. Backup di disk yang sama tidak menolong saat disk rusak atau server diretas.
  • Kata sandi repositori yang panjang. Tanpa kata sandi ini, data tidak bisa dibuka sama sekali, termasuk olehmu.

Langkah memasang dan menjalankan restic

1. Pasang restic

sudo apt update
sudo apt install restic
restic version

Di AlmaLinux atau Rocky Linux, paket restic tersedia lewat repositori EPEL. Paket distro kadang tertinggal beberapa versi. Kalau butuh versi terbaru, unduh binary resmi dari halaman rilis restic di GitHub.

2. Simpan kata sandi dan alamat repositori di file

Supaya bisa dijadwalkan tanpa mengetik, simpan pengaturan di folder yang hanya bisa dibaca root:

sudo mkdir -p /etc/restic
sudo sh -c 'openssl rand -base64 32 > /etc/restic/password'
sudo chmod 600 /etc/restic/password

Lalu buat /etc/restic/env:

RESTIC_REPOSITORY=sftp:backup@10.0.0.20:/srv/restic/web01
RESTIC_PASSWORD_FILE=/etc/restic/password

Contoh di atas memakai server backup lewat SFTP, dengan login kunci SSH untuk user backup. Untuk S3, formatnya berbeda dan dibahas di cara simpan backup server ke object storage S3.

3. Buat repositori

sudo -i
set -a; . /etc/restic/env; set +a
restic init

Perintah set -a membuat variabel dari file env otomatis diekspor ke perintah restic. Repositori yang baru dibuat sudah terenkripsi. Kenapa ini penting dijelaskan di enkripsi backup.

4. Tentukan folder yang dikecualikan

Buat /etc/restic/excludes:

/tmp/*
/var/tmp/*
/var/cache/*
/var/lib/docker/overlay2
/swapfile
/home/*/.cache

Folder virtual seperti /proc, /sys, /dev, dan /run tidak perlu ditulis bila kamu memakai --one-file-system, karena opsi itu membuat restic tidak masuk ke filesystem lain, termasuk filesystem virtual dan disk yang di-mount ke /mnt atau /media. Kalau ada disk data terpisah, misalnya /data, sebutkan sebagai sumber tambahan.

5. Jalankan backup pertama

restic backup / --one-file-system \
  --exclude-file=/etc/restic/excludes \
  --exclude-caches --tag full

Backup pertama paling lama karena semua data dikirim. Setelah itu, restic hanya mengirim potongan data yang baru. Lihat hasilnya dengan restic snapshots.

6. Backup database dengan benar

Menyalin file mentah database yang sedang berjalan bisa menghasilkan backup tidak konsisten. Lebih aman, dump database langsung ke restic:

restic backup --stdin-filename semua-db.sql \
  --stdin-from-command -- mysqldump --single-transaction --all-databases

Kalau mysqldump gagal (kode keluar bukan nol), restic membatalkan backup dan tidak membuat snapshot, jadi kamu tidak tertipu oleh dump yang setengah jadi. Untuk PostgreSQL, ganti perintahnya dengan pg_dumpall yang dijalankan sebagai user postgres. Bila user root belum bisa login ke MySQL tanpa kata sandi, simpan kredensialnya di /root/.my.cnf dengan izin 600.

7. Atur masa simpan snapshot

restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune

Perintah ini menyimpan 7 snapshot harian, 4 mingguan, dan 6 bulanan terakhir, lalu menghapus data yang tidak dipakai lagi. Sesuaikan angkanya dengan kebutuhan dan ruang yang tersedia.

8. Jadwalkan dengan systemd timer

Buat skrip /usr/local/bin/restic-backup.sh:

#!/bin/bash
set -euo pipefail
set -a; . /etc/restic/env; set +a
restic backup / --one-file-system --exclude-file=/etc/restic/excludes --exclude-caches --tag full
restic backup --stdin-filename semua-db.sql --stdin-from-command -- mysqldump --single-transaction --all-databases
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic check

Beri izin eksekusi dengan chmod 700. Lalu buat /etc/systemd/system/restic-backup.service:

[Unit]
Description=Backup restic
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/restic-backup.sh

Dan /etc/systemd/system/restic-backup.timer:

[Unit]
Description=Jadwal backup restic harian

[Timer]
OnCalendar=*-*-* 02:00:00
RandomizedDelaySec=15m
Persistent=true

[Install]
WantedBy=timers.target

Aktifkan dengan systemctl daemon-reload lalu systemctl enable --now restic-backup.timer. Hasil setiap jalannya bisa dibaca dengan journalctl -u restic-backup.service. Kalau lebih nyaman memakai cron, caranya ada di cara membuat cron job di Linux.

9. Coba restore

Ambil satu folder dari snapshot terbaru ke lokasi sementara:

restic restore latest --target /root/uji-restore --include /etc/nginx

Untuk membuka-buka isi snapshot seperti folder biasa, jalankan restic mount /mnt/restic (butuh FUSE). Ingat, restic membackup file, bukan image disk. Untuk memulihkan server sepenuhnya, pasang sistem operasi baru yang sama versinya, pasang restic, lalu pulihkan folder yang diperlukan dan database dari dump. Latih prosesnya secara berkala seperti dijelaskan di uji restore backup berkala.

Ringkasan perintah penting

PerintahFungsi
restic initMembuat repositori terenkripsi baru
restic backup / --one-file-systemMembackup sistem tanpa masuk ke filesystem lain
restic snapshotsMenampilkan daftar snapshot
restic forget ... --pruneMenerapkan masa simpan dan membuang data lama
restic checkMemeriksa keutuhan repositori
restic restore latest --target DIRMemulihkan snapshot terbaru ke folder

Pertanyaan yang sering diajukan

Apakah restic bisa membuat image disk untuk bare-metal restore?

Tidak. Restic membackup file dan folder. Untuk pemulihan penuh, pasang sistem operasi baru lalu pulihkan file dan database dari repositori.

Berapa besar ruang yang dibutuhkan repositori?

Tergantung data dan seberapa sering berubah. Berkat deduplikasi dan kompresi, snapshot berikutnya biasanya hanya menambah ukuran sebesar data yang berubah. Pantau dengan restic stats.

Apakah restic check perlu dijalankan setiap hari?

restic check biasa cukup ringan untuk rutin. Untuk memeriksa isi data sesungguhnya, jalankan sesekali dengan --read-data-subset, misalnya --read-data-subset=5%, karena membaca semua data memakan waktu dan bandwidth.

Bolehkah dua server memakai satu repositori yang sama?

Boleh, dan deduplikasinya ikut berlaku antar server. Namun server yang diretas bisa menghapus snapshot server lain, jadi untuk keamanan lebih baik satu repositori per server.

Checklist singkat

  • Repositori ada di luar server yang dibackup.
  • Kata sandi repositori tersimpan juga di luar server.
  • Backup / memakai --one-file-system dan daftar pengecualian.
  • Database dibackup lewat dump, bukan file mentah.
  • Timer systemd aktif dan log-nya diperiksa.
  • forget --prune dan check berjalan rutin, restore diuji berkala.

Sumber & referensi

Baca juga