Perbedaan Rsync antara opsi --checksum dan --ignore-times

96

Adakah yang bisa menjelaskan perbedaan antara opsi --checksumdan --ignore-timesrsync?

Pemahaman saya adalah sebagai berikut:

--checksum
Jika ukuran dan waktu file sesuai, itu akan melakukan checksum di kedua ujung untuk melihat apakah file benar-benar identik.

--ignore-times
'Transfer' setiap file, terlepas dari apakah waktu file sama di kedua ujungnya. Karena masih akan menggunakan algoritma delta-transfer, jika file sebenarnya identik, tidak ada yang ditransfer.

Itulah perbedaan teknis, tetapi sejauh yang saya tahu, mereka secara semantik adalah hal yang sama.

Jadi, yang saya ingin tanyakan adalah:

  • Apa perbedaan praktis antara dua opsi?
  • Dalam kasus apa Anda akan menggunakan yang satu dan bukan yang lain?
  • Apakah ada perbedaan kinerja di antara mereka?
Andy Madge
sumber

Jawaban:

99

Biasanya, rsyncmelompati file ketika file memiliki ukuran dan waktu yang sama di sisi sumber dan tujuan. Ini adalah heuristik yang biasanya merupakan ide yang baik, karena mencegah rsyncdari harus memeriksa isi file yang sangat mungkin identik pada sisi sumber dan tujuan.

--ignore-timesmemberitahu rsyncuntuk mematikan heuristik waktu-dan-ukuran file, dan dengan demikian mentransfer SEMUA file tanpa syarat dari sumber ke tujuan. rsynckemudian akan melanjutkan untuk membaca setiap file di sisi sumber, karena itu akan perlu menggunakan algoritma delta-transfer, atau cukup mengirim setiap file secara keseluruhan, tergantung pada apakah --whole-fileopsi tersebut ditentukan.

--checksumjuga memodifikasi heuristik waktu-dan-ukuran file, tetapi di sini mengabaikan waktu dan hanya memeriksa ukuran. File pada sisi sumber dan tujuan yang berbeda dalam ukuran ditransfer, karena mereka jelas berbeda. File dengan ukuran yang sama adalah checksummed (dengan MD5 dalam rsyncversi 3.0.0+, atau dengan MD4 di versi sebelumnya), dan yang ditemukan memiliki jumlah yang berbeda juga ditransfer.

Dalam kasus di mana sisi sumber dan tujuan sebagian besar sama, --checksumakan menghasilkan sebagian besar file checksummed di kedua sisi. Ini bisa memakan waktu lama, tetapi hasilnya adalah bahwa data minimum yang paling sederhana sebenarnya akan ditransfer melalui kabel, terutama jika algoritma delta-transfer digunakan. Tentu saja, ini hanya kemenangan jika Anda memiliki jaringan yang sangat lambat, dan / atau CPU yang sangat cepat.

--ignore-times, di sisi lain, akan mengirim lebih banyak data melalui jaringan, dan itu akan menyebabkan semua file sumber dibaca, tetapi setidaknya itu tidak akan membebani beban tambahan komputasi banyak hashsum yang kuat secara kriptografis pada CPU sumber dan tujuan. Saya berharap opsi ini berkinerja lebih baik daripada --checksumketika jaringan Anda cepat, dan / atau CPU Anda relatif lambat.

Saya pikir saya hanya akan menggunakan --checksumatau --ignore-timesjika saya mentransfer file ke tujuan di mana diduga bahwa beberapa file rusak, tetapi waktu modifikasinya tidak berubah. Saya tidak bisa memikirkan alasan bagus lainnya untuk menggunakan kedua opsi ini, walaupun mungkin ada beberapa use case lainnya.

Steven Monday
sumber
12
Saya menemukan --checksumberguna bersama --itemize-changesuntuk memverifikasi cadangan. Sesekali skrip cadangan saya menjalankan perbandingan penuh dengan cara ini setelah pembaruan harian / mingguan saat ini selesai. Saya mendapatkan email yang ditandai mendesak jika --itemize-changesoutput sesuatu yang tidak terduga, jadi saya tahu ada potensi masalah yang harus saya perhatikan.
David Spillett
10
--checksum berguna ketika bekerja di Git dan beralih antar cabang dengan file yang diubah, yang terus mengubah waktu pembaruan pada file yang tidak ingin Anda kirim dari cabang tertentu.
FriendlyDev
6
--ignore-timesdan terutama --checksumdiperlukan jika salah satu "file" Anda adalah wadah file Truecrypt karena secara default cap waktu file tidak diperbarui. Lihat productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs dan ask-leo.com/why_wont_my_truecrypt_volume_backup.html
Marcus Junius Brutus
Catatan: Saya melakukan percobaan cepat, dan waktu tidak dibandingkan, hanya waktu. Setidaknya di Mac. Ini bisa bermanfaat untuk diketahui. Itu sebabnya saya memiliki begitu banyak masalah dengan sistem file Windows, yang melaporkan waktu yang sama (ctime) untuk atime, mtime, dan ctime.
Edward Falk
Apakah --checksumchecksum hanya nama file sumber pada mesin tujuan atau semua file di direktori tujuan?
Greg
17

checksum juga berguna jika Anda telah menggunakan sistem lain untuk menyinkronkan file, yang belum mempertahankan cap waktu. Checksum hanya akan mentransfer file yang berbeda DAN memperbarui semua cap waktu di sisi penerima sehingga mereka cocok

Paulus
sumber
4

Satu detail: opsi checksum memeriksa seluruh file di satu ujung, lalu seluruh file di ujung lainnya. Jika file Anda agak besar, ini membunuh paralelisme.

Juga, jika Anda memiliki file besar, Anda kemungkinan besar akan mengalami timeout dengan --checksum, karena Anda tidak melakukannya -I.

Francois
sumber
2

Dari info rsyncdalam hal --checksumopsi - "Karena seluruh file ini memeriksa semua file di kedua sisi koneksi terjadi di samping verifikasi checksum otomatis yang terjadi selama transfer file, opsi ini bisa sangat lambat."

LeoB
sumber
1
Kalimat itu sepertinya tidak ada di halaman manual saya ... jadi, apakah itu menyiratkan bahwa opsi checksum akan menggunakan checksum untuk mengidentifikasi apakah file tersebut identik, dan jika tidak maka akan ditransfer, sehingga menghasilkan checksum lagi sebagai bagian dari transfer? Opsi --ignore-times hanya melewatkan cek dan menganggap mereka telah berubah? Oleh karena itu kinerja-bijaksana --ore-kali adalah cara yang lebih baik untuk mencapai hal yang sama? Saya masih berjuang untuk melihat mengapa ada 2 opsi berbeda (terlepas dari kenyataan bahwa --checksum lebih transparan)
Andy Madge
Anda harus melihat suntingan dokumentasi terbaru: gitweb.samba.org/…
Aleksandr Levchuk
2

The --ignore-timespilihan mungkin akan menghasilkan semua file delta dikodekan dan algoritma delta transfer (delta encoding) setidaknya lambat seperti checksumming tersebut.

Saya tidak tahu apakah rsync --ignore-timescukup pintar untuk menghindari "verifikasi setelah transfer otomatis" dalam kasus yang sering terjadi ketika delta-transfer tidak menghasilkan apa-apa yang ditransfer.

Untuk --ignore-times:

  • Dalam hal rsync tidak pintar (atau tidak mempercayai delta encoding) maka pemeriksaan (checksumming dan encoding) akan dilakukan dua kali.
  • Bisa juga terjadi bahwa pengkodean delta jauh lebih lambat daripada 128-bit MD4 checksumming.

Keduanya --checksumdan --ignore-timesakan "sangat lambat" tetapi --ignore-timeskemungkinan bahkan lebih lambat (karena 2 kemungkinan di atas).

Pertanyaan bagus - silakan posting jika Anda menemukan perbedaan kinerja dalam praktik.

Aleksandr Levchuk
sumber
Saya mengerti apa yang kamu maksud. Saya akan menjalankan beberapa tes dan mengirim kembali.
Andy Madge