rsync selalu menggunakan checksum untuk memverifikasi bahwa file telah ditransfer dengan benar. Jika file tujuan sudah ada, rsync dapat melewati pembaruan file jika waktu dan ukuran modifikasi sesuai dengan file sumber, tetapi jika rsync memutuskan bahwa data perlu ditransfer, checksum selalu digunakan pada data yang ditransfer antara proses pengiriman dan penerimaan rsync . Ini memverifikasi bahwa data yang diterima sama dengan data yang dikirim dengan probabilitas tinggi, tanpa overhead yang berat dari perbandingan tingkat byte melalui jaringan.
Setelah data file diterima, rsync menulis data ke file dan percaya bahwa jika kernel mengindikasikan penulisan berhasil, data ditulis tanpa korupsi ke disk. rsync tidak membaca ulang data dan membandingkannya dengan checksum yang dikenal sebagai cek tambahan.
Adapun verifikasi itu sendiri, untuk protokol 30 dan seterusnya (pertama kali didukung pada 3.0.0), rsync menggunakan MD5 . Untuk protokol yang lebih lama, checksum yang digunakan adalah MD4 .
Sementara lama dianggap usang untuk hash kriptografi yang aman, MD5 dan MD4 tetap memadai untuk memeriksa korupsi file.
Sumber: halaman manual dan melihat kode sumber rsync untuk memverifikasi.
-c
bendera halaman manual : "Perhatikan bahwa rsync selalu memverifikasi bahwa setiap file yang ditransfer direkonstruksi dengan benar di sisi penerima dengan memeriksa checksum seluruh file yang dihasilkan saat file ditransfer, tetapi otomatis setelah transfer. verifikasi tidak ada hubungannya dengan opsi ini sebelum transfer "Apakah file ini perlu diperbarui?" centang. "rsync
tidak tidak melakukan verifikasi pasca-copy untuk salinan file lokal. Anda dapat memverifikasi bahwa itu tidak dengan menggunakanrsync
untuk menyalin file besar ke drive lambat (yaitu USB), dan kemudian menyalin file yang sama dengancp
, yaitu:Kedua perintah membutuhkan waktu yang sama, oleh karena itu
rsync
tidak mungkin melakukan checksum — karena itu akan melibatkan membaca kembali file tujuan dari disk lambat.The
man
Halaman sayangnya menyesatkan tentang hal ini. Saya juga memverifikasi ini dengan —strace
setelah salinannya selesai,rsync
tidak adaread()
panggilan pada file tujuan, sehingga tidak dapat diperiksa lagi. Satu lagi yang dapat Anda verifikasi adalah dengan sesuatu sepertiiotop
: Anda melihatrsync
membaca dan menulis secara bersamaan (menyalin dari sumber ke tujuan), lalu keluar. Jika memverifikasi integritas, akan ada fase hanya baca.sumber
rsync -c
lagi jika Anda ingin memaksanya untuk memeriksa.rsync
membuat perbandingan checksum sebelum menyalin (dalam beberapa kasus), untuk menghindari menyalin apa yang sudah ada. Maksud perbandingan checksum adalah untuk tidak memverifikasi bahwa salinan berhasil. Itulah tugas dari infrastruktur yang mendasarinya: driver sistem file, driver disk, driver jaringan, dll. Aplikasi individual sepertirsync
tidak perlu repot dengan kegilaan ini. Yangrsync
perlu Anda lakukan (dan lakukan!) Adalah memeriksa nilai pengembalian panggilan sistem untuk memastikan tidak ada kesalahan.sumber
Jawaban cepat dan kotor, langsung ke pertanyaan.
T: Apakah akan
rsync
membuat perbandingan saat menyalin file antara dua drive lokal? A: Ini akan melakukan perbandingan untuk mengetahui apa yang akan disalin.T: Jika memang melakukan verifikasi - apakah ini taruhan yang aman? Atau lebih baik melakukan perbandingan byte demi byte? A: seaman matematika di balik MD5 checksum file. Anda dapat mencoba melakukan percobaan sederhana untuk mempelajari dan mempercayai alat tersebut.
Jawaban panjang: Saya kira, Anda ingin
rsync
melakukan perbandingan file (sedikit demi sedikit atau dengan checksum) setelah menyalin file. Jika Anda salah satu dari sedikit yang menghargai integritas data, Anda mungkin menemukan hal-hal berikut berguna:rsync
folder file kode di atas pada saat dijalankan pertama dan jika selesai tanpa masalah, akanrsync
segera berjalan lagi saat melakukan perbandingan nama file yang sama dengan menggunakan hash seluruh file.sumber
Menggunakan rsync untuk memverifikasi integritas duplikat
Untuk menjamin bahwa tes ini secara fisik membaca kembali file dari media drive, saya sarankan mematikan kedua drive dan me-restart mereka sebelum menjalankan tes ini. Ini akan menghapus cache volatile internal mereka.
Jika tidak juga me-restart Linux, Anda setidaknya harus meletakkan cache ( * ) dengan:
Kemudian untuk membaca kembali kedua pohon dan membandingkan checksum mereka:
Checksum rsync modern menggunakan MD5, yaitu 128 bit. Kemungkinan kegagalan untuk mendeteksi kesalahan dalam file individual ini sangat rendah (beberapa diskusi di sini ), tetapi bukan tidak mungkin.
sumber
--checksum
sampai tes berlalu tanpa itu.