Bisakah rsync memperbarui file besar yang hanya berubah sebagian tanpa transmisi ulang penuh?

15

Saya membuat perubahan kecil ke file gambar file yang sangat besar (hanya selisih beberapa piksel) yang membutuhkan waktu lama untuk ditransfer melalui jaringan.

Apakah ada cara bagi rsync untuk mengidentifikasi perbedaan dalam file dan hanya mengirim perbedaan kecil melalui jaringan?

David Parks
sumber
3
Saat menyalin melalui jaringan, rsyncberperilaku seperti ini secara default. Selama perubahan minor adalah perubahan kecil pada file, dan file tersebut sudah ada di kedua sisi tautan dalam versi yang hampir identik, data yang ditransfer harus jauh lebih kecil daripada ukuran total file. Dari paragraf pertama di halaman manual: "Ia terkenal dengan algoritma delta-transfer-nya, yang mengurangi jumlah data yang dikirim melalui jaringan dengan hanya mengirim perbedaan antara file sumber dan file yang ada di tujuan."
user4556274
Ah, oke, Anda harus memposting itu sebagai jawaban daripada komentar. Tidak jelas bahwa rsync berperilaku seperti ini, tetapi dengan harapan itu, saya akan menganggap bahwa file saya berubah lebih dari yang saya harapkan dan mencari tahu mengapa. Proses kompresi gambar mungkin mengubah nilai byte mentah di seluruh file.
David Parks

Jawaban:

11

rsyncAlgoritma delta-transfer melakukan ini secara default. Mengutip halaman manual rsync :

DESKRIPSI

Rsync adalah alat penyalinan file yang cepat dan luar biasa fleksibel. Itu dapat menyalin secara lokal, ke / dari host lain melalui shell remote, atau ke / dari daemon rsync jarak jauh. Ini menawarkan sejumlah besar opsi yang mengontrol setiap aspek dari perilakunya dan memungkinkan spesifikasi yang sangat fleksibel dari set file yang akan disalin. Ia terkenal dengan algoritma delta-transfer-nya, yang mengurangi jumlah data yang dikirim melalui jaringan dengan hanya mengirim perbedaan antara file sumber dan file yang ada di tujuan . Rsync banyak digunakan untuk backup dan mirroring dan sebagai perintah penyalinan yang ditingkatkan untuk penggunaan sehari-hari.

Jika Anda ingin menonaktifkannya, Anda harus menggunakan opsi -Watau --whole-file.

-W, --whole-file

Opsi ini menonaktifkan algoritma delta-transfer rsync, yang menyebabkan semua file yang ditransfer dikirim seluruhnya. Transfer mungkin lebih cepat jika opsi ini digunakan ketika bandwidth antara mesin sumber dan tujuan lebih tinggi daripada bandwidth ke disk (terutama ketika "disk" sebenarnya adalah sistem file jaringan). Ini adalah default ketika sumber dan tujuan ditetapkan sebagai jalur lokal, tetapi hanya jika tidak ada opsi penulisan batch yang berlaku.

Jika Anda benar-benar tahu berapa banyak file Anda telah berubah, Anda bahkan dapat mengoptimalkan perilaku transfer delta ini dengan menyetel ukuran blok delta Anda:

-B, --block-size = BLOCKSIZE

Ini memaksa ukuran blok yang digunakan dalam algoritma delta-transfer rsync ke nilai tetap. Biasanya dipilih berdasarkan ukuran setiap file yang diperbarui. Lihat laporan teknis untuk perinciannya.

Dan jika Anda ingin informasi lebih lanjut tentang algoritma itu sendiri, Anda dapat menemukannya di sini: Algoritma Rsync


sumber
Agar adil, bentuk jamak dari "file" di halaman manual adalah ambigu: "dengan hanya mengirim perbedaan antara file sumber dan file yang ada ..." Saya mengambil "file" berarti kumpulan file individual, dan itu rsync akan mengirim (keseluruhan) file yang berbeda. Ini harus diklarifikasi.
Russ