Mendalami dua mekanisme untuk skenario sulit: batch mode dengan --write-batch/--read-batch untuk transfer delta yang sama ke banyak host, serta partial transfer dengan --partial/--partial-dir dan --timeout untuk menyelamatkan transfer di jaringan yang tidak stabil.

Beberapa skenario menuntut rsync lebih dari sekadar "salin file". Dua di antaranya kita tangani di episode 7: mengirim perubahan yang sama ke banyak mesin sekaligus (batch mode), dan bertahan hidup di jaringan yang sering terputus (partial transfer). Kedua mekanisme ini sering diremehkan padahal menjadi penyelamat di deployment berskala dan koneksi tidak stabil.
Bayangkan kalian mengelola 50 server yang harus menerima pembaruan identik. Menjalankan rsync 50 kali dari sumber berarti menghitung delta 50 kali. Batch mode menghitung delta sekali, menyimpannya ke file, lalu "memutar" file itu di setiap host.
1. rsync --write-batch=batchfile src/ dest/ # hitung delta, simpan
2. salin batchfile ke host lain
3. rsync --read-batch=batchfile dest/ # replay delta di tiap hostKeuntungannya: perhitungan checksum yang mahal dilakukan sekali, dan transfer ke host tambahan hanya memindahkan file batch yang kecil relatif terhadap data penuh.
Perintah pertama menghasilkan file batch berisi delta:
rsync -av --write-batch=myupdate src/ dest/Hasilnya beberapa file: myupdate (file batch berformat rsync), myupdate.sh (skrip wrapper untuk --read-batch), dan myupdate.cmd (untuk Windows). File myupdate.sh isinya kira-kira:
#!/bin/sh
rsync --read-batch=myupdate /srv/destNote
Batch file berisi delta yang saling tergantung dengan state tujuan saat dibuat. Jika host tujuan sudah diubah oleh sumber lain sebelum replay, hasilnya tidak dijamin konsisten. Gunakan batch untuk mesin yang identik dan dikelola terpusat — misalnya node cluster yang diprovisioning dari template yang sama.
Di setiap host tujuan, cukup jalankan wrapper atau langsung --read-batch:
rsync --read-batch=myupdate /srv/destKarena semua host identik (biasanya hasil provisioning yang sama), delta yang sama berlaku di semuanya. Ini pola klasik image/fleet update sebelum era tool konfigurasi modern seperti Ansible — dan masih berguna untuk kasus offline atau bandwidth sangat terbatas.
| Skenario | Cocok? |
|---|---|
| Update image/state ke banyak node identik | Ya |
| Jaringan sangat lambat, delta dihitung sekali | Ya |
| Environment offline (air-gapped) | Ya — transfer file batch sekali |
| Host dengan state berbeda-beda | Tidak — pakai rsync biasa |
| Update sekali-sekali, sedikit host | Tidak — overhead tidak sepadan |
Ketika transfer terputus, perilaku default rsync adalah membuang file parsial — file yang sudah setengah ditransfer dihapus, sehingga percobaan berikutnya mulai dari nol. --partial mengubah itu:
rsync -avhP src/big-file.iso dest/-P (yang kalian kenal di episode 5) mengandung --partial + --progress. Dengan --partial, file 10 GB yang putus di 6 GB menyisakan file parsial 6 GB di tujuan. Percobaan berikutnya, rsync memakai sisa itu sebagai basis delta — melanjutkan dari 6 GB, bukan dari nol.
Warning
File parsial terlihat seperti file lengkap di direktori tujuan (nama sama, ukuran kurang). Script yang memproses tujuan bisa salah mengira file parsial sebagai file utuh. Solusinya: --partial-dir di bawah, yang mengisolasi file parsial ke direktori terpisah.
Alih-alih file parsial bercampur dengan file lengkap, arahkan ke direktori tersembunyi:
rsync -avh --partial-dir=.rsync-partial src/ dest/File yang putus kini disimpan di dest/.rsync-partial/ — tidak tertukar dengan file resmi. Pada percobaan berikutnya, rsync menemukan dan memakai file parsial tersebut secara otomatis. Ini pola yang jauh lebih aman untuk direktori yang diakses aplikasi lain.
Jaringan buruk sering membuat transfer menggantung diam tanpa kabar. --timeout menetapkan batas detik tanpa I/O sebelum koneksi dinyatakan gagal:
rsync -avh --timeout=60 --partial-dir=.rsync-partial src/ user@host:/dest/Artinya: jika tidak ada data selama 60 detik, rsync memutus koneksi dengan exit code yang jelas alih-alih menggantung selamanya. Kombinasikan dengan cron (episode 10) yang menjalankan ulang otomatis: putus → timeout → restart → lanjut dari partial. Siklus ini membuat transfer file besar di koneksi tidak stabil akhirnya selesai.
Resep lengkap untuk mentransfer data besar di koneksi yang tidak menentu:
rsync -avhz --partial-dir=.rsync-partial --timeout=60 --bwlimit=500 \
src/ user@host:/dest/--partial-dir menyelamatkan progres.--timeout mencegah menggantung.--bwlimit menjaga koneksi tetap hidup dengan aliran stabil (episode 12).while ! rsync ...; do sleep 30; done di cron membuatnya mandiri.Pada episode 7 ini, kalian telah menguasai batch mode dan partial transfer.
Inti yang harus dibawa pulang:
--write-batch menghitung delta sekali; --read-batch memutarnya di banyak host.--partial menyimpan file setengah jadi; --partial-dir mengisolasinya ke direktori terpisah.--timeout mencegah transfer menggantung di jaringan buruk.Di episode 8 selanjutnya, kita masuk fase backup sungguhan: backup strategy incremental & full — konsep full vs incremental, mengapa tar saja tidak cukup, dan pola hardlink snapshot ala time-machine dengan rsync -a --link-dest=../backup-1/ src/ backup-2/. Sampai jumpa di episode 8!