Jika:
- Waktu modifikasi file Anda benar
- File tidak terlalu besar
- Tidak ada dorongan yang dapat dilewatkan (atau ada semacam pemrosesan backlog)
Anda dapat menggunakan find -ctime
atau file -cnewer
untuk membuat daftar file yang diubah sejak eksekusi terakhir, dan menyalin hanya file yang dimodifikasi (Hanya dorongan diferensial yang dimuliakan).
Ini menerjemahkan sendiri dengan cukup baik untuk beberapa host: cukup lakukan tar diferensial pada sumbernya, dan untar pada semua host.
Ini memberi Anda sesuatu seperti itu:
find -type f -cnewer /tmp/files_to_send.tar.gz > /tmp/files_to_send.txt
tar zcf /tmp/files_to_send.tar.gz --files-from /tmp/files_to_send.txt
for HOST in host1 host2 host3 ...
do
cat /tmp/files_to_send.tar.gz | ssh $HOST "tar xpf -"
done
Script telah disempurnakan, tetapi Anda mendapatkan idenya.
Menganggap bahwa data yang Anda rsyncing belum dikompres, mengaktifkan kompresi (-z) kemungkinan akan membantu kecepatan transfer, dengan biaya beberapa CPU di kedua ujungnya.
sumber
Jika Anda mentransfer file yang sangat besar dengan banyak perubahan, gunakan opsi --inplace dan --whole-file, saya menggunakan ini untuk gambar VM 2Gb saya dan itu sangat membantu (terutama karena protokol rsync tidak melakukan banyak hal dengan melewatkan data tambahan dengan file-file ini). saya tidak merekomendasikan opsi ini untuk sebagian besar kasus.
gunakan --stats untuk melihat seberapa baik file Anda ditransfer menggunakan protokol rsync incremental.
sumber
Strategi lain adalah membuat ssh dan rsync lebih cepat. Jika Anda menggunakan jaringan tepercaya (baca: pribadi), maka mengenkripsi muatan sebenarnya tidak diperlukan. Anda dapat menggunakan HPN ssh . Versi ssh ini hanya mengenkripsi otentikasi. Juga, rsync versi 3 mulai mentransfer file sambil membangun daftar file. Ini tentu saja merupakan penghematan waktu yang sangat besar dibandingkan rsync versi 2. Saya tidak tahu apakah itu yang Anda cari, tapi saya harap ini membantu. Juga, rsync mendukung multicasting dalam beberapa cara, meskipun saya tidak akan berpura-pura mengerti caranya.
sumber
Ketika Anda melakukan sinkronisasi sebagai metode cadangan, masalah terbesar yang akan Anda hadapi adalah jika Anda memiliki banyak file yang Anda buat cadangannya. Rsync dapat menangani file besar tanpa masalah tetapi jika jumlah file yang Anda buat cadangannya terlalu besar maka Anda akan melihat bahwa rsync tidak akan selesai dalam jumlah waktu yang wajar. Jika ini terjadi, Anda perlu memecah cadangan menjadi beberapa bagian yang lebih kecil dan kemudian mengulangi bagian-bagian tersebut misalnya
atau tarring file ke bawah untuk mengurangi jumlah file.
Adapun lusinan mesin mendapatkan cermin dari perubahan itu, itu tergantung pada seberapa segar cadangan perlu. Salah satu pendekatan akan mencerminkan perubahan dari server utama ke server cadangan dan kemudian memiliki server lain menarik perubahan mereka dari server cadangan baik dengan daemon rsync pada server cadangan awal dan kemudian menjadwalkan server lain untuk menarik sedikit waktu yang berbeda atau dengan memiliki skrip menggunakan ssh tanpa kata sandi untuk terhubung ke masing-masing server dan meminta mereka untuk menarik salinan cadangan baru yang akan membantu mencegah membanjiri server cadangan awal Anda - tetapi apakah Anda pergi ke banyak masalah akan tergantung pada berapa banyak mesin lain Anda telah menarik salinan cadangan.
sumber
find /Backup/ -name '*.bak' -print0 | xargs -0 -n 1 rsync -e ssh
?rsync memiliki cara melakukan salinan yang terputus . Dengan kata lain, rsync dapat (secara konseptual) melakukan diff pohon direktori dan menghasilkan file tambalan yang kemudian Anda dapat terapkan pada sejumlah file yang identik dengan sumber aslinya.
Ini mengharuskan Anda memanggil rsync dengan master dan mirror with
--write-batch
; menghasilkan file. Anda kemudian mentransfer file ini ke sejumlah target lain, dan Anda kemudian menerapkan batch untuk masing-masing target menggunakan--read-batch
.Jika Anda menyimpan salinan lokal dari kondisi rsynced terakhir (yaitu salinan dari apa yang tampak seperti cermin sekarang) pada mesin yang sama dengan master, Anda dapat membuat "tambalan" ini pada master tanpa bahkan menghubungi mirror apa pun:
Pada tuan:
Tambahkan opsi apa pun yang Anda inginkan. Ini akan melakukan dua hal:
/current/mirror
perubahan untuk mencerminkan/master/data
my-batch.rsync
untuk digunakan nanti.Transfer
my-batch.rsync
file dari master ke semua mirror Anda, dan kemudian di mirror, terapkan tambalan untuk berbicara:Manfaat dari pendekatan ini:
--read-batch
hanya cpu / io intensif pada mirror itu sendiri)sumber