
Jika Anda mengelola server Linux atau sekadar memiliki komputer dengan data yang tidak boleh hilang, mempelajari cara menggunakan rsync untuk mengotomatiskan pencadangan Ini praktis wajib. Tidak perlu menyiapkan perangkat lunak mahal atau bergantung pada alat-alat eksklusif: dengan beberapa perintah yang dipikirkan dengan matang, Anda dapat memiliki sistem pencadangan yang solid, efisien, dan mudah dipelihara.
Sepanjang panduan ini Anda akan melihat Mulai dari dasar-dasar rsync hingga pengeditan tingkat lanjut.Pencadangan lokal, pencadangan jarak jauh melalui SSH, pencadangan ala Time Machine dengan snapshot, skrip siap produksi, cron, timer systemd, pengecualian, rotasi, dan verifikasi. Lihat panduan kami. Perbandingan metode pencadangan untuk menentukan strategi. Idenya adalah Anda menyelesaikan artikel dengan rencana yang jelas dan perintah yang dapat Anda tiru dan adaptasikan secara praktis ke lingkungan Anda.
Apa itu rsync dan mengapa banyak digunakan untuk pencadangan?
Rsync adalah alat baris perintah yang dirancang untuk Sinkronkan file dan direktori antara dua lokasi., baik pada komputer yang sama atau antar mesin yang berbeda, biasanya melalui SSH atau dengan daemon rsyncd-nya sendiri.
Keunggulan rsync dibandingkan cp atau scp sederhana adalah bahwa rsync menerapkan algoritma cerdas. transfer blok diferensialSistem ini membandingkan sumber dan tujuan dan hanya mengirimkan perubahan, bukan seluruh file setiap kali. Jika Anda memiliki banyak data dan hanya memodifikasi bagian-bagian kecil, penghematan waktu dan bandwidth akan sangat besar.
Selain itu, rsync dapat mempertahankan hampir semua metadataIzin, pemilik, grup, stempel waktu, tautan simbolik, perangkat… Itulah mengapa ini sangat berguna untuk pencadangan "serius", di mana bukan hanya konten yang penting, tetapi juga bagaimana sistem file diatur.
Keunggulan penting lainnya adalah rsync berfungsi. baik secara lokal maupun jarak jauhAnda dapat menggunakannya untuk menyinkronkan dua folder di server yang sama, untuk menarik data dari server jarak jauh ke mesin cadangan Anda, atau untuk mengirim data ke NAS atau VPS jarak jauh menggunakan SSH.

Instal dan uji rsync pada berbagai distribusi.
Meskipun banyak distribusi Linux sudah dilengkapi dengan rsync, ada baiknya untuk tetap menginstalnya. Verifikasi instalasi dan perbarui ke versi terbaru. baik pada mesin sumber maupun tujuan sebelum memasang cadangan otomatis Anda.
Pada sistem berbasis Debian atau Ubuntu, Anda dapat melakukan hal sesederhana ini:
rsync --version
sudo apt update
sudo apt install rsync
Pada distribusi seperti RHEL, CentOS, Rocky Linux, atau turunannya, prosedurnya akan sangat mirip, yaitu mengganti pengelola paket tetapi dengan ide yang sama yaitu Pastikan rsync tersedia dan selalu diperbarui. di kedua ekstrem.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Opsi rsync dasar yang akan Anda gunakan sepanjang waktu
Meskipun rsync memiliki beragam parameter yang bagus, dalam praktiknya untuk pencadangan, Anda akan menghabiskan 90% waktu Anda menggunakan... sejumlah kecil pilihan Itu harus dihafal.
Struktur keseluruhan perintah ini cukup sederhana, tetapi ada satu detail yang menambahkan banyak kemungkinan: garis miring di akhir jalur mengubah perilakunya.
Sintaks umum:
rsync ORIGEN DESTINO
Perbedaan utamanya terletak pada cara Anda memperlakukan direktori sumber:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# Salin HANYA isi direktori ke tujuan
rsync -av /sumber/dir/ /cadangan/
Beberapa opsi pencadangan yang paling umum digunakan sangat praktis karena... Mereka menggabungkan banyak hal dalam teks yang singkat.:
- -a: mode file. Setara dengan -rlptgoD (rekursif, mempertahankan tautan simbolik, izin, stempel waktu, grup, pemilik, dan file khusus).
- -vMode "Verbose". Menunjukkan apa yang sedang dilakukan dan file mana yang sedang diakses.
- -z: mengompres data selama transfer, ideal untuk salinan jarak jauh melalui Internet.
- -h: membuat ukuran terlihat "bagus" (MB, GB…), sempurna untuk manusia.
- -PMenggabungkan kemajuan dan file parsial, untuk melihat bagaimana perkembangannya dan dapat melanjutkannya.
- -MenghapusMenghapus file yang sudah tidak ada lagi di sumber pada saat pengambilan, sehingga hanya menyisakan replika yang persis sama.
- -n / –uji coba: mensimulasikan eksekusi tanpa menyentuh apa pun, fantastis untuk menghindari kekacauan.
- –kecualikan / –kecualikan-dari: memungkinkan Anda untuk mengecualikan pola atau daftar lengkap rute yang tidak ingin Anda salin.
- –link-tujuan: membuat tautan keras dengan salinan sebelumnya, yang merupakan dasar dari pencadangan inkremental tipe Time Machine.
Salinan lokal manual dan contoh pertama
Langkah pertama sebelum mengotomatiskan apa pun adalah memiliki perintah penyalinan manual yang jelas dan terbuktiMari kita tinjau kasus-kasus umum yang nantinya akan kita gunakan dalam skrip.
Jika Anda ingin mengkloning direktori home Anda ke disk cadangan lokalPerintah minimalnya akan terlihat seperti ini:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
rsync ini memindai Halaman beranda lengkap dengan tetap mempertahankan izin, tanggal, dan struktur.dan hanya menyalin apa yang hilang atau telah berubah sejak terakhir kali, yang sudah merupakan salinan inkremental yang sangat rapi tanpa memperumit masalah.
Contoh klasik lainnya adalah sinkronisasi. data proyek, foto, atau dokumen antara dua folder di server yang sama atau bahkan disk yang berbeda, agar game lokal kedua selalu dalam kondisi terbaru.
rsync -av /media/fotos/ /backup/fotos/
Ketika menyangkut data sistem yang sensitif, seperti /etc atau /var/wwwWajar jika kita menginginkan salinan yang persis sama, dengan menghapus dari cadangan apa yang hilang dari aslinya. Di situlah opsi penghapusan yang terkenal itu berperan.
rsync -av --delete /var/www/ /backup/www/
Amankan pencadangan jarak jauh dengan SSH
Keunggulan rsync sebenarnya terletak pada saat Anda menggabungkannya dengan Gunakan SSH untuk mengirim salinan dari server.Dengan cara ini, Anda dapat menyimpan data Anda di node lain dalam jaringan Anda, NAS, atau VPS di internet. Dengan demikian, Anda tidak bergantung pada satu perangkat saja dan Anda mematuhi sebagian dari aturan 3-2-1 yang terkenal (setidaknya satu salinan di luar lokasi).
Idealnya, Anda harus mengkonfigurasi otentikasi kunci publik daripada memasukkan kata sandi secara manual setiap saat. Setelah kunci disalin ke server cadangan, perintah-perintahnya menjadi sangat intuitif.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Memindahkan data dari server jarak jauh ke mesin cadangan Anda
rsync -avz backup@remote-server:/var/www/ /backups/www/
Dalam skenario yang sedikit lebih rumit, Anda dapat menyesuaikan Enkripsi SSH, port, atau kompresi dari rsync itu sendiri dengan -e, misalnya jika server Anda mendengarkan pada port yang berbeda atau Anda ingin mengoptimalkan tautan yang lambat.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Salah satu trik yang berguna ketika koneksi lemah atau jaringan digunakan bersama adalah dengan menggunakan... –bwlimit untuk menghindari kelebihan beban pada tautan. dan jangan sampai ada yang kehilangan akses internet saat Anda meluncurkan pencadangan data besar-besaran.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Pencadangan penuh, diferensial, dan inkremental dengan rsync
Meskipun rsync sudah melakukan transfer diferensial pada tingkat blok, dari perspektif strategi pencadangan, ada baiknya untuk mempertimbangkannya. tiga jenis salinan: salinan lengkap, salinan diferensial, dan salinan inkremental.yang dapat Anda implementasikan langsung dengan opsi rsync.
Salinan lengkap itu mudah: ia membuat ulang semua konten sumber di tujuan, ideal karena pencadangan awal atau untuk memiliki referensi yang bersih..
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
Penyalinan diferensial dibangun di atas fondasi tersebut dan berfokus pada menjaga agar tujuan tetap selaras dengan sumber, menyalin perubahan dan menghapus apa yang sudah tidak ada lagi. Inilah yang biasanya Anda maksud ketika Anda berbicara tentang... memiliki cermin dari sistem tersebut.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
Bagian yang paling menarik adalah pencadangan inkremental "sesungguhnya", di mana selain sinkronisasi, Anda menyimpan riwayat berdasarkan tanggal tanpa menduplikasi data.Di sinilah opsi –link-dest berperan, yang membuat tautan keras terhadap salinan sebelumnya untuk file yang belum berubah.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Dengan pendekatan ini, setiap folder cadangan tampak sebagai salinan lengkap, tetapi secara internal File identik berbagi blok pada disk.Hal ini sangat mengurangi ruang yang digunakan dan memungkinkan navigasi yang mudah melalui cuplikan historis.
Pencadangan bergaya Time Machine dengan snapshot dan hard link.
Banyak orang ingin meniru kenyamanan yang ada di Linux. macOS Time Machine dengan snapshot berdasarkan tanggal.Dengan rsync, hal itu sangat mungkin dilakukan dengan menggabungkan --link-dest, sedikit perintah shell, dan beberapa pengaturan.
Idenya adalah untuk mempertahankan direktori saat ini yang mengarah ke cadangan terakhir yang berfungsi dengan baik, dan pada saat yang sama membuat folder dengan stempel waktu (tanggal-waktu) yang mewakili setiap snapshot. File yang tidak berubah dihubungkan dengan hard link ke snapshot sebelumnya, dan blok baru hanya ditulis ketika ada perbedaan yang sebenarnya.
Perintah tipikal dalam skema tersebut mungkin seperti ini:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Kemudian sebuah skrip akan menangani pembaruan tautan simbolik. saat ini sehingga selalu menunjuk ke snapshot terbaru.dan untuk menyimpan catatan singkat yang diorganisir berdasarkan tanggal. Dengan begitu, Anda dapat menelusuri salinan lama hanya dengan memasuki folder yang Anda minati.
Otomatisasi terjadi secara alami: Anda menyimpan skrip dalam sesuatu seperti /usr/local/bin/rsync-time-machine dan jadwalkan agar berjalan setiap hari dengan cron pada waktu yang paling sesuai untuk Anda.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Otomatiskan pencadangan dengan cron setiap hari
Akan tiba saatnya membuat salinan secara manual tidak lagi masuk akal; hal yang lazim dilakukan adalah... Jadwalkan pencadangan dengan cron. sehingga program tersebut berjalan secara otomatis selama jam-jam di luar jam sibuk (misalnya, pagi hari) dan Anda dapat melupakannya kecuali untuk memeriksa log dari waktu ke waktu.
Prosesnya selalu sama: Anda menyiapkan skrip yang membuat salinan lengkap dengan semua opsi (pengecualian, log, dll.), Anda memberikan izin eksekusi, dan Anda memasukkannya ke dalam crontab pengguna yang sesuai atau ke root jika melibatkan perubahan pada seluruh sistem.
Contoh skrip sederhana untuk penyalinan lokal adalah:
#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")
mkdir -p «$BACKUP_DIR» «$(dirname «$LOG_FILE»)»
echo "Pencadangan lokal dimulai" >> "$LOG_FILE"
rsync -av –delete
–exclude='*.tmp' \
–exclude='.cache' \
–exclude='Downloads/*' \
«$SOURCE_DIR/» «$BACKUP_DIR/» >> «$LOG_FILE» 2>&1
jika ; maka
echo » Pencadangan berhasil diselesaikan» >> «$LOG_FILE»
lain
echo » Backup dengan kesalahan» >> «$LOG_FILE»
fi
Setelah Anda memasukkan skripnya, misalnya, /usr/local/bin/rsync-local-backup.sh Dan setelah ditandai sebagai file yang dapat dieksekusi, Anda menambahkannya ke cron agar berjalan pada waktu tertentu.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
Di dalam crontab, Anda bisa memasukkan sesuatu seperti ini:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
timer systemd: alternatif modern untuk cron
Dalam sistem modern, hal ini seringkali bermanfaat. Gunakan timer systemd sebagai pengganti cron.khususnya jika Anda ingin mengintegrasikan layanan dengan lebih baik, mengelola ketergantungan jaringan, atau memiliki log terpusat di journalctl.
Idenya adalah untuk mendefinisikan sebuah layanan yang menjalankan skrip pencadangan Anda dan sebuah pengatur waktu yang menunjukkan kapan harus menjalankannya. Layanan tersebut bisa berupa:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Tipe=satu kali pakai
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Pengguna=root
Output Standar = jurnal
StandardError=jurnal
TimeoutSec=7200
WantedBy = multi-user.target
Dan timer terkait akan didefinisikan sebagai berikut, untuk sebuah pencadangan harian pukul 2 pagi dengan sedikit unsur acak agar tidak membuat semuanya kewalahan sekaligus:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
OnCalendar=*-*-* 02:00:00
Persisten = benar
RandomizedDelaySec=10 menit
DiinginkanOleh=timers.target
Dengan demikian, yang tersisa hanyalah memuat ulang systemd, mengaktifkan timer, dan memverifikasi bahwa program berjalan dengan benar dan bahwa Log layanan menunjukkan bahwa salinan diluncurkan ketika waktunya tiba..
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Atur pencadangan bergilir: harian, mingguan, dan bulanan.
Jika Anda menginginkan sesuatu yang sedikit lebih rumit daripada salinan statis tunggal, Anda dapat mengatur struktur sebagai berikut: Pencadangan bergilir: harian, mingguan, dan bulananmenggunakan hard link untuk menghemat ruang dan menemukan serta membersihkan file lama.
Pola klasik melibatkan memiliki direktori saat ini yang diperbarui setiap kali dengan rsync, lalu mengkloning pohon tersebut dengan tautan keras ke folder harian, mingguan, dan bulanan tergantung pada harinya.
#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)
mkdir -p «$CURRENT» «$DAILY» «$WEEKLY» «$MONTHLY»
rsync -av –hapus –link-dest=»$CURRENT» \
«$DIR_SUMBER/» «$SAAT INI/»
&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$CURRENT» «$MONTHLY/$DATE»
find «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
find «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
find «$MONTHLY» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Dengan sistem ini Anda memiliki jendela sejarah yang cukup masuk akal tanpa memenuhi disk dengan salinan lengkap, dan setiap snapshot tetap dapat dinavigasi seperti folder biasa.
Jika data Anda berubah dengan cepat atau berukuran sangat besar, Anda dapat menyesuaikan periode retensi, frekuensi, atau bahkan menggabungkannya dengan snapshot LVM atau ZFS untuk memastikan konsistensi basis data atau mesin virtual.
Pantau, verifikasi, dan cari tahu apakah cadangan Anda bermanfaat.
Menjalankan tugas pencadangan setiap hari memang bagus, tetapi jika tidak ada yang memeriksa hasilnya Itu tidak akan banyak membantu Anda. Penting untuk menyiapkan pemantauan dasar untuk mengetahui apakah dan kapan pencadangan terakhir dilakukan.
Taktik sederhana adalah dengan meninggalkan penanda kecil di folder tujuan setiap kali pencadangan berhasil diselesaikan, misalnya, file .last-backup-success dengan tanggal. Kemudian, skrip eksternal, atau bahkan pemeriksaan Nagios/Icinga, dapat memberi tahu Anda jika file tersebut sudah terlalu lama.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Kebiasaan sehat lainnya adalah memeriksa Periksa log rsync untuk kesalahan atau kecepatan transfer yang tidak biasa.Skrip yang mengekstrak statistik seperti "Jumlah file", "Ukuran total", "Percepatan", dan sejenisnya memberi Anda gambaran cepat tentang bagaimana proses berjalan.
Dan, tentu saja, yang benar-benar membuat perbedaan adalah membiasakan diri dengan hal itu sesekali. untuk melakukan restorasi yang sebenarnyaAmbil file tertentu, pulihkan versi dari kemarin atau minggu lalu, dan periksa apakah file tersebut terbuka dengan benar. Ini satu-satunya cara untuk memastikan bahwa, jika suatu hari nanti terjadi kesalahan, cadangan Anda akan siap menghadapi masalah tersebut.
Jika Anda menggabungkan semua bagian ini—rsync yang dikonfigurasi dengan baik, otomatisasi dengan cron atau systemd, rotasi yang tepat, pemantauan, dan pengujian pemulihan—Anda akan mendapatkan hasil akhir berikut: Sistem pencadangan Linux yang andal, fleksibel, dan murah.yang memanfaatkan sepenuhnya keuntungan perangkat lunak gratis tanpa memaksa Anda untuk mengorbankan kenyamanan atau keandalan.
