Pertama-tama, mengenai bagian "resume" dari pertanyaan Anda, --partial
cukup beri tahu pihak penerima untuk menyimpan sebagian file yang ditransfer jika akhir pengiriman menghilang seolah-olah mereka benar-benar ditransfer.
Saat mentransfer file, mereka sementara disimpan sebagai file tersembunyi di folder target mereka (misalnya .TheFileYouAreSending.lRWzDC
), atau folder yang dipilih secara khusus jika Anda mengatur --partial-dir
sakelar. Ketika transfer gagal dan --partial
tidak disetel, file tersembunyi ini akan tetap berada di folder target di bawah nama samar ini, tetapi jika --partial
diatur, file akan diubah namanya menjadi nama file target yang sebenarnya (dalam kasus ini, TheFileYouAreSending
), meskipun file tersebut tidak lengkap. Intinya adalah Anda nantinya dapat menyelesaikan transfer dengan menjalankan rsync lagi dengan salah satu --append
atau --append-verify
.
Jadi, --partial
tidak dengan sendirinya melanjutkan transfer yang gagal atau dibatalkan. Untuk melanjutkannya, Anda harus menggunakan salah satu dari bendera yang disebutkan di atas pada proses selanjutnya. Jadi, jika Anda perlu memastikan bahwa target tidak akan pernah berisi file yang tampaknya baik-baik saja tetapi sebenarnya tidak lengkap, Anda tidak boleh menggunakan --partial
. Sebaliknya, jika Anda ingin memastikan bahwa Anda tidak pernah meninggalkan file gagal yang tersesat di direktori target, dan Anda tahu Anda akan dapat menyelesaikan transfer nanti, --partial
ada di sana untuk membantu Anda.
Sehubungan dengan --append
sakelar yang disebutkan di atas, ini adalah sakelar "resume" yang sebenarnya, dan Anda dapat menggunakannya baik yang Anda gunakan atau tidak --partial
. Sebenarnya, ketika Anda menggunakan --append
, tidak ada file sementara yang pernah dibuat. File ditulis langsung ke target mereka. Dalam hal ini, --append
memberikan hasil yang sama seperti --partial
pada transfer yang gagal, tetapi tanpa membuat file-file sementara yang tersembunyi.
Jadi, untuk meringkas, jika Anda memindahkan file besar dan Anda ingin opsi untuk melanjutkan operasi rsync yang dibatalkan atau gagal dari titik tepat yang rsync
berhenti, Anda perlu menggunakan --append
atau --append-verify
mengaktifkan upaya berikutnya.
Seperti @Alex tunjukkan di bawah, karena versi 3.0.0 rsync
sekarang memiliki opsi baru --append-verify
,, yang berperilaku seperti yang --append
dilakukan sebelum saklar itu ada. Anda mungkin selalu menginginkan perilaku --append-verify
, jadi periksalah versi Anda rsync --version
. Jika Anda menggunakan Mac dan tidak menggunakan rsync
dari homebrew
, Anda (setidaknya hingga dan termasuk El Capitan) akan memiliki versi yang lebih lama dan perlu menggunakan --append
daripada --append-verify
. Mengapa mereka tidak melanjutkan perilaku --append
dan malah menyebut pendatang baru --append-no-verify
agak membingungkan. Either way, --append
pada rsync
sebelum versi 3 sama dengan --append-verify
pada versi yang lebih baru.
--append-verify
tidak berbahaya: Itu akan selalu membaca dan membandingkan data di kedua ujungnya dan tidak hanya menganggap mereka sama. Ini melakukan ini menggunakan checksum, jadi itu mudah di jaringan, tetapi itu memerlukan membaca jumlah data bersama di kedua ujung kawat sebelum benar-benar dapat melanjutkan transfer dengan menambahkan ke target.
Kedua, Anda mengatakan bahwa Anda "mendengar bahwa rsync dapat menemukan perbedaan antara sumber dan tujuan, dan karenanya hanya menyalin perbedaannya."
Itu benar, dan itu disebut transfer delta, tetapi itu hal yang berbeda. Untuk mengaktifkan ini, Anda menambahkan -c
, atau --checksum
beralih. Setelah saklar ini digunakan, rsync akan memeriksa file yang ada di kedua ujung kabel. Itu melakukan ini dalam potongan, membandingkan checksum di kedua ujungnya, dan jika mereka berbeda, itu hanya mentransfer bagian file yang berbeda. Tetapi, seperti yang ditunjukkan @Jonathan di bawah, perbandingan hanya dilakukan ketika file memiliki ukuran yang sama di kedua ujungnya - ukuran yang berbeda akan menyebabkan rsync mengunggah seluruh file, menimpa target dengan nama yang sama.
Ini membutuhkan sedikit perhitungan pada kedua ujung awalnya, tetapi bisa sangat efisien dalam mengurangi beban jaringan jika misalnya Anda sering membuat cadangan file yang sangat besar file ukuran tetap yang sering berisi perubahan kecil. Contoh yang muncul dalam pikiran adalah file gambar hard drive virtual yang digunakan dalam mesin virtual atau target iSCSI.
Perlu dicatat bahwa jika Anda menggunakan --checksum
untuk mentransfer sejumlah file yang benar-benar baru ke sistem target, rsync masih akan menghitung checksum mereka pada sistem sumber sebelum mentransfernya. Kenapa saya tidak tahu :)
Jadi, singkatnya:
Jika Anda sering menggunakan rsync untuk hanya "memindahkan barang-barang dari A ke B" dan ingin pilihan untuk membatalkan operasi itu dan kemudian melanjutkannya, tidak menggunakan --checksum
, tapi jangan gunakan --append-verify
.
Jika Anda sering menggunakan rsync untuk mencadangkan barang, menggunakan --append-verify
mungkin tidak akan banyak membantu Anda, kecuali jika Anda terbiasa mengirim file besar yang terus bertambah ukurannya tetapi jarang dimodifikasi setelah ditulis. Sebagai tip bonus, jika Anda mencadangkan ke penyimpanan yang mendukung snapshotting seperti btrfs
atau zfs
, menambahkan --inplace
sakelar akan membantu Anda mengurangi ukuran snapshot karena file yang diubah tidak dibuat ulang melainkan blok yang diubah ditulis langsung di atas yang lama. Switch ini juga berguna jika Anda ingin menghindari rsync membuat salinan file pada target ketika hanya perubahan kecil yang terjadi.
Saat menggunakan --append-verify
, rsync akan berperilaku seperti biasanya pada semua file dengan ukuran yang sama. Jika mereka berbeda dalam modifikasi atau cap waktu lain, itu akan menimpa target dengan sumber tanpa meneliti file-file tersebut lebih lanjut. --checksum
akan membandingkan konten (checksum) dari setiap pasangan file dengan nama dan ukuran yang identik.
DIPERBARUI 2015-09-01 Berubah untuk mencerminkan poin yang dibuat oleh @Alex (terima kasih!)
DIPERBARUI 2017-07-14 Berubah untuk mencerminkan poin yang dibuat oleh @Jonathan (terima kasih!)