Skip to content
VDS · Backup dan disk

Backup dengan rsync

Cara mengatur penyalinan file ke server lain melalui SSH, membuat riwayat versi menggunakan hard link, dan menghindari penghapusan berlebihan dengan opsi --delete yang berbahaya.

Diperbarui 23 Agustus 2026

rsync adalah cara paling sederhana yang berfungsi untuk membuat salinan: tersedia di mana-mana, hanya mentransfer bagian file yang berubah, dan bekerja melalui SSH. Untuk dataset kecil, itu sudah cukup.

Perintah dasar

rsync -avz --delete \
  -e "ssh -i /root/.ssh/backup_key -p 22" \
  /var/www/ backup@backup.example.com:/srv/backup/vds/www/

Penjelasan flag:

  • -a — mempertahankan permission, owner, waktu, dan link;
  • -v — menampilkan apa yang sedang terjadi;
  • -z — kompresi selama transfer (berguna pada bandwidth hingga 500 Mbps jika datanya banyak);
  • --delete — menghapus di penerima apa yang sudah tidak ada di sumber.

Garis miring di akhir path sumber berarti "isi direktori"; tanpa itu, direktorinya sendiri yang disalin. /var/www/ dan /var/www menghasilkan hasil berbeda, dan jika dipasangkan dengan --delete, perbedaan itu menghapus hal yang salah. Selalu jalankan dengan --dry-run terlebih dahulu.

rsync -avzn --delete /var/www/ backup@backup.example.com:/srv/backup/vds/www/

Flag -n adalah dry run.

Kunci akses tanpa kata sandi

Penyalinan terjadwal memerlukan login tanpa memasukkan kata sandi:

ssh-keygen -t ed25519 -f /root/.ssh/backup_key -N ""
ssh-copy-id -i /root/.ssh/backup_key.pub backup@backup.example.com

Di penerima, batasi kunci ini ke satu perintah saja — dengan begitu kunci yang dicuri tidak akan memberikan shell. Di ~/.ssh/authorized_keys milik penerima:

command="rrsync -wo /srv/backup",restrict ssh-ed25519 AAAA... backup

rsync biasa hanya menyimpan keadaan saat ini: jika Anda menghapus file kemarin dan baru menyadarinya hari ini, tidak ada tempat untuk memulihkannya. --link-dest memberi Anda riwayat: file yang tidak berubah tidak disalin ulang melainkan di-link, sehingga tiga puluh salinan hanya memakan sedikit lebih dari satu.

#!/bin/bash
set -euo pipefail
DEST=/srv/backup/vds
TODAY=$(date +%F)
rsync -a --delete \
  --link-dest="$DEST/latest" \
  /var/www/ "$DEST/$TODAY/"
ln -sfn "$DEST/$TODAY" "$DEST/latest"
find "$DEST" -maxdepth 1 -type d -mtime +30 -name "20*" -exec rm -rf {} +

Jalankan skrip sesuai jadwal pada malam hari, dan selalu dengan logging.

Pengecualian

rsync -avz --exclude-from=/root/backup-exclude.txt / backup@host:/srv/backup/vds/root/
/proc/
/sys/
/dev/
/run/
/tmp/
/var/lib/docker/
/var/cache/
*.log

Menyalin seluruh root jarang diperlukan: lebih berguna menyusun daftar yang tepat dari artikel apa saja yang perlu di-backup.

Kapan rsync tidak cocok

  • Jika Anda memerlukan enkripsi penyimpanan dan deduplikasi, gunakan Restic.
  • Jika data berubah terus-menerus dan integritas penting, dump database terlebih dahulu, lalu rsync file hasilnya.
  • Penerima adalah penyimpanan milik orang lain yang tidak Anda percayai: rsync menulis file apa adanya, tanpa enkripsi di sisi klien.

Kesalahan umum

  • --delete dengan path sumber yang salah. Direktori sumber yang kosong menghapus isi penerima. Dry run wajib dilakukan.
  • Salinan di disk yang sama. Itu bukan backup, melainkan target kedua untuk kegagalan yang sama. Lihat salinan offsite.
  • Kompresi untuk data yang sudah terkompresi. -z hanya memperlambat arsip dan gambar.
  • Proses malam hari menabrak bottleneck disk. Batas throughput tulis bergantung pada tier: lihat kecepatan disk. --bwlimit=20000 dan menjalankannya di luar jam sibuk membantu.
  • Tidak ada yang memeriksa hasilnya. Catat return code dan pantau: rsync ... || echo "backup failed" | mail -s alert you@example.com.