Skip to main content

Cara Backup Data Menggunakan Restic

·5 mins

Restic adalah program backup open-source yang modern, cepat, dan aman, ditulis menggunakan bahasa pemrograman Go. Restic menjadi solusi backup yang fleksibel karena mendukung berbagai layanan cloud maupun penyimpanan lokal tanpa konfigurasi yang rumit.

Fitur Utama Restic:

  1. Keamanan dan Enkripsi Restic mengenkripsi seluruh data secara lokal menggunakan AES-256 dalam mode counter serta autentikasi Poly1305-AES sebelum data dikirim ke media penyimpanan. Dengan pendekatan ini, data tetap aman dan tidak dapat dibaca oleh pihak lain, termasuk administrator server penyimpanan, apabila terjadi kebocoran data atau akses tidak sah ke backend penyimpanan.

  2. Deduplikasi dan Backup Incremental Restic menggunakan metode content-defined chunking untuk memecah file menjadi bagian-bagian kecil (blob).

    • Deduplikasi: Jika file atau bagian file yang sama sudah pernah dibackup sebelumnya, Restic tidak akan menyimpannya kembali sehingga penggunaan ruang penyimpanan menjadi lebih efisien.
    • Incremental Backup: Hanya data baru atau data yang berubah yang akan ditransfer pada proses backup berikutnya. Hal ini membuat proses backup jauh lebih cepat dibandingkan full backup.
  3. Dukungan Backend Penyimpanan yang Luas Restic mendukung berbagai jenis backend penyimpanan sebagai repository backup, seperti:

    • Penyimpanan lokal
    • SFTP
    • Amazon S3 / MinIO
    • Berbagai backend lain menggunakan rclone
  4. Manajemen Snapshot Setiap proses backup akan menghasilkan sebuah snapshot yang dapat dilacak, diberi tag, dan dipulihkan secara individual.

  5. Verifikasi dan Retensi Backup Restic menyediakan perintah restic check untuk memverifikasi integritas repository dan memastikan data dapat dipulihkan dengan baik. Selain itu, pengguna dapat mengatur kebijakan retensi backup menggunakan perintah restic forget dan restic prune.

Instalasi
#

Restic dapat diinstal melalui package manager sistem operasi atau dengan mengunduh binary resmi dari GitHub.

Debian/Ubuntu
#

sudo apt install restic

RHEL/Rocky/AlmaLinux
#

sudo dnf install restic

Binary Resmi
#

Unduh binary terbaru melalui GitHub:

Restic GitHub Releases

Setelah diunduh, ekstrak file dan pindahkan binary ke direktori /usr/local/bin.

Backup dan Restore Data
#

Inisialisasi Repository
#

Buat direktori untuk menyimpan backup, misalnya backup-repo, kemudian inisialisasi repository Restic.

mkdir -p /path/to/backup-repo
restic init -r /path/to/backup-repo

Restic akan meminta password untuk enkripsi repository. Simpan password tersebut dengan aman karena repository tidak dapat diakses kembali apabila password hilang.

enter password for new repository:
enter password again:
created restic repository 356f054845 at backup_sql/

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

Backup Data
#

Misalnya ingin membackup seluruh data pada direktori /home/user/public_html/file_upload, gunakan perintah berikut:

restic -r /path/to/backup-repo backup /home/user/public_html/file_upload
Gunakan opsi --exclude untuk mengabaikan file atau direktori tertentu, misalnya: --exclude node_modules

Setiap kali backup dijalankan, Restic akan membuat snapshot baru dengan ID unik. Karena Restic menggunakan mekanisme incremental backup, proses backup berikutnya akan berjalan lebih cepat dan lebih hemat ruang penyimpanan.

Menampilkan Snapshot
#

Gunakan perintah berikut untuk melihat daftar snapshot yang tersedia:

restic -r /path/to/backup-repo snapshots

Anda juga dapat menggunakan perintah diff untuk membandingkan dua snapshot dan melihat perubahan file yang ditambahkan, dihapus, atau dimodifikasi.

restic -r /path/to/backup-repo diff 7457d80e 963d4de3

Restore Data
#

Untuk mengembalikan data dari snapshot tertentu, gunakan perintah berikut:

restic -r /path/to/backup-repo restore latest --target /path/to/restore/location
Ganti latest dengan ID snapshot tertentu apabila ingin memulihkan versi backup yang spesifik.

Anda juga dapat mengembalikan file tertentu dari sebuah snapshot:

restic -r /path/to/backup-repo restore 7457d80e --target ~/mydata --include file.json

Mount Repository
#

Restic memungkinkan repository dimount sebagai filesystem biasa sehingga Anda dapat menelusuri isi backup tanpa melakukan proses restore penuh.

mkdir -p /mnt/restic-mount
restic -r /path/to/backup-repo mount /mnt/restic-mount

Setelah proses mount berhasil, isi backup dapat diakses melalui direktori:

/mnt/restic-mount/snapshots

Dengan metode ini, Anda dapat menyalin file tertentu secara manual langsung dari repository backup.

Menghapus Snapshot
#

Gunakan perintah restic forget untuk menghapus snapshot tertentu:

restic -r /path/to/backup-repo forget 963d4de3

Setelah itu, jalankan restic prune untuk membersihkan data yang sudah tidak lagi direferensikan oleh snapshot mana pun.

restic -r /path/to/backup-repo prune

Including Files
#

Restic menyediakan beberapa metode untuk menentukan file atau direktori yang akan dibackup.

1. --files-from
#

Opsi ini digunakan untuk membaca daftar pola (glob pattern) dari sebuah file.

restic -r /path/to/backup-repo backup --files-from /tmp/glob-pattern

Fungsi: Memerintahkan Restic untuk membaca daftar pola dari file /tmp/glob-pattern dan memasukkan file atau direktori yang cocok ke dalam backup.

Contoh isi /tmp/glob-pattern:

/home/user/*.pdf
/var/log/**/*.log
/etc/**/config*

2. --files-from-raw
#

Opsi ini digunakan untuk membaca daftar path absolut secara langsung tanpa interpretasi pola glob.

restic -r /path/to/backup-repo backup --files-from-raw /tmp/generated-list

Fungsi: Sangat berguna untuk path yang mengandung karakter spesial, spasi, atau karakter lain yang berpotensi disalahartikan sebagai pola glob.

Contoh isi /tmp/generated-list:

/home/user/dokumen penting.pdf
/tmp/file dengan [spasi].txt
/opt/aplikasi/data.db

Tag pada Backup
#

Memberikan tag pada snapshot sangat disarankan untuk mempermudah pengelolaan, filtering, dan penerapan kebijakan retensi backup.

Contoh Penggunaan Tag
#

# Backup harian
restic -r /path/to/backup-repo backup \
  --tag daily \
  /home/user/public_html/file_upload

# Backup mingguan (misalnya setiap Senin)
restic -r /path/to/backup-repo backup \
  --tag weekly \
  /home/user/public_html/file_upload

# Backup bulanan (misalnya setiap tanggal 1)
restic -r /path/to/backup-repo backup \
  --tag monthly \
  /home/user/public_html/file_upload

Menampilkan Snapshot Berdasarkan Tag
#

Gunakan perintah berikut untuk melihat snapshot dengan tag tertentu:

restic -r /path/to/backup-repo snapshots --tag daily

Menghapus Snapshot Lama Berdasarkan Kebijakan Retensi
#

Contoh berikut akan:

  • menyimpan 7 backup harian,
  • 4 backup mingguan,
  • 3 backup bulanan,
  • dan 2 backup tahunan.

Snapshot di luar kebijakan tersebut akan dihapus.

restic -r /path/to/backup-repo forget \
  --tag daily \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 3 \
  --keep-yearly 2 \
  --prune

Penggunaan opsi --prune akan langsung membersihkan data yang sudah tidak lagi direferensikan setelah proses forget selesai.

Skrip Otomatisasi
#

Berikut contoh skrip sederhana untuk menjalankan backup harian beserta rotasi snapshot otomatis menggunakan Restic.

#!/usr/bin/env bash

set -euo pipefail

# Konfigurasi repository
RESTIC_REPOSITORY="/path/to/backup-repo"

# Jalankan backup dengan tag daily
restic -r "${RESTIC_REPOSITORY}" backup \
  --tag daily \
  --files-from /tmp/glob-pattern \
  --files-from-raw /tmp/generated-list \
  /tmp/some_additional_file

echo "Backup harian berhasil."

# Terapkan kebijakan retensi snapshot
restic -r "${RESTIC_REPOSITORY}" forget \
  --tag daily \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 3 \
  --prune

echo "Retensi snapshot berhasil diterapkan."

Related