--Checksum ve --ignore-times seçenekleri arasındaki Rsync farkı


95

Herkes arasındaki farkları açıklamak Can --checksumve --ignore-timesrsync seçenekleri?

Benim anlayışım aşağıdaki gibidir:

--checksum
Dosya boyutu ve süresi eşleşirse, dosyaların gerçekten aynı olup olmadığını görmek için her iki uçta da bir sağlama toplamı yapar.

--ignore-times
Dosya süresinin her iki uçta da aynı olmasına bakılmaksızın her dosyayı 'aktarın'. Hala delta-transfer algoritmasını kullanacağı için, eğer bir dosya aslında aynıysa hiçbir şey aktarılmaz.

Teknik fark bu, ancak söyleyebileceğim kadarıyla, bunlar anlamsal olarak aynı.

Yani merak ettiğim şey:

  • İki seçenek arasındaki pratik fark nedir?
  • Hangi durumlarda birini değil diğerini kullanırsın?
  • Aralarında herhangi bir performans farkı var mı?

Yanıtlar:


99

Normalde, rsyncdosyalar kaynak ve hedef taraflarında aynı boyutlarda ve zamanlarda olduğunda dosyaları atlar. Bu, rsynckaynak ve hedef tarafta büyük olasılıkla aynı olan dosyaların içeriğini incelemekten kaçınmasını engellediği için, genellikle iyi bir fikir olan bir sezgiseldir .

--ignore-timesrsyncdosya zamanları ve boyutları buluşsal yöntemini kapatmayı ve böylece TÜM dosyaları kaynaktan hedefe koşulsuz olarak aktarmayı bildirir . rsynckaynak tarafındaki her dosyayı okumaya devam edecektir, çünkü --whole-fileseçeneğin belirtilip belirtilmediğine bağlı olarak, delta-transfer algoritmasını kullanması veya her dosyayı tamamen göndermesi gerekecektir .

--checksumAyrıca, dosya zamanları ve boyutları sezgisel olarak değiştirir, ancak burada zamanları yok sayar ve yalnızca boyutları inceler. Kaynak ve hedef taraflarındaki boyut olarak farklı olan dosyalar, açıkça farklı olduklarından aktarılır. Aynı boydaki dosyalar kontrol toplamı ( rsync3.0.0+ sürümündeki MD5 veya önceki sürümlerdeki MD4 ile) ve farklı toplamlara sahip oldukları tespit edilir.

Kaynak ve hedef tarafların çoğunlukla aynı olduğu durumlarda --checksum, çoğu dosyanın her iki tarafta da kontrol edilmesiyle sonuçlanacaktır. Bu uzun zaman alabilir, ancak sonuçta ortaya çıkan en net veri, özellikle delta-transfer algoritması kullanılıyorsa, en azından verilerin kablo üzerinden aktarılacağıdır. Tabii ki, bu yalnızca çok yavaş ağlara ve / veya çok hızlı bir CPU'ya sahipseniz kazanır.

--ignore-timesÖte yandan, ağ üzerinden daha fazla veri gönderir ve tüm kaynak dosyalarının okunmasına neden olur, ancak en azından kaynak ve hedef CPU'lara şifreleme açısından güçlü birçok hastayı hesaplamanın ek yükünü getirmez. Bu seçeneğin --checksum, ağlarınızın hızlı olduğu ve / veya CPU'nuzun nispeten yavaş olduğu zamanlardan daha iyi performans göstermesini beklerdim .

Sanırım sadece kullanacağımı --checksumya da --ignore-timesbazı dosyaların içeriğinin bozulduğundan şüphelenildiği ancak değişiklik zamanları değiştirilmediğinden şüphelenilen bir yere dosya aktarıyor olsaydım. Her iki seçeneği de kullanmak için başka iyi bir neden düşünemiyorum, muhtemelen başka kullanım senaryoları da var.


12
Yedekleri doğrulamak için --checksumbirlikte faydalı buldum --itemize-changes. Her gün ve tekrar yedekleme komut dosyalarım geçerli günlük / haftalık güncellemeler tamamlandıktan sonra bu şekilde tam bir karşılaştırma yapar. --itemize-changesBeklenmedik bir şey çıktılarsa acil olarak işaretlenmiş bir e-postayı bıraktım, bu yüzden dikkat etmem gereken potansiyel bir sorun olduğunu biliyorum.
David Spillett

10
--checksum Git'te çalışırken ve değişen dosyalara sahip şubeler arasında geçiş yaparken kullanışlıdır, bu da belirli bir şubeden göndermeyi istemediğiniz dosyalardaki güncelleme zamanlarını değiştirmeye devam eder.
FriendlyDev

6
--ignore-timesve özellikle --checksum, "dosyalarınızdan" birinin bir Truecrypt dosya kabı olması durumunda gereklidir, çünkü varsayılan olarak dosyanın zaman damgası güncellenmez. Bkz productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs ve ask-leo.com/why_wont_my_truecrypt_volume_backup.html
Marcus Junius Brutus

Not: Hızlı bir deney yaptım ve ctime kıyaslanmadı, sadece mtime. Mac’te en azından. Bu bilmek yararlı olabilir. Bu yüzden Windows dosya sistemlerinde, aynı anda (ctime) atime, mtime ve ctime için rapor veren birçok sorunum var.
Edward Falk

--checksumSağlama toplamı yalnızca hedef makinedeki kaynak dosya adlarını mı yoksa hedef dizindeki tüm dosyaları mı gösterir?
Greg

16

sağlama toplamı, dosyaları senkronize etmek için zaman damgası korunmayan başka bir sistem kullanıyorsanız da kullanışlıdır. Checksum sadece farklı olan dosyaları düzenler VE alıcı ucundaki tüm zaman damgalarını günceller, böylece eşleşir


4

Bir ayrıntı: sağlama toplamı seçeneği, bir ucundaki bütün dosyayı, ardından diğer ucundaki dosyayı kontrol eder. Eğer dosyalarınız biraz büyükse, bu tür paralellik öldürür.

Ayrıca, çok büyük dosyalarınız varsa, sizin de --checksumyapmadığınız gibi zaman aşımına uğrayacaksınız -I.


2

Gönderen info rsyncaçısından --checksumseçenek - "bağlantının her iki tarafında tüm dosyaların bütün bu dosya checksumming bir dosyanın aktarımı sırasında meydana otomatik sağlama doğrulamaları ek olarak gerçekleştiğinden, bu seçenek oldukça yavaş olabilir."


1
Bu cümle benim sayfalarımda görünmüyor ... yani, sağlama toplamı seçeneğinin, dosyaların aynı olup olmadığını belirlemek için sağlama toplamlarını kullanacağını ve eğer aktarılmayacaksa aktarmayı yeniden yapacağını ve bu sayede tekrar sağlama toplamı oluşturduğunu gösterir. transferin bir parçası mı? --İgnore-times seçeneği sadece onaylamayı atlar ve değiştiğini varsayar mı? Bu nedenle performans açısından - genellikle zaman aynı şeyi elde etmek için daha iyi bir yoldur? 2 farklı seçeneğin neden olduğunu görmek için hala mücadele ediyorum (
Andy Madge

En son dokümantasyon düzenlemesine bakmalısınız
Aleksandr

2

Bu --ignore-timesseçenek muhtemelen tüm kodlanmış delta dosyalarına neden olur ve delta aktarım algoritması (delta kodlaması) en az sağlama toplamı kadar yavaş olur.

--ignore-timesDelta aktarımının hiçbir şeyin aktarılmamasına neden olacağı durumlarda sık sık "transfer sonrası otomatik doğrulama" işleminden kaçınmak için rsync'in yeterince akıllı olup olmadığını bilmiyorum .

İçin --ignore-times:

  • Rsync akıllı değilse (veya delta kodlamasına güvenmiyorsa), kontrol (sağlama toplamı ve kodlama) iki kez yapılır.
  • Ayrıca delta kodlamanın 128 bitlik MD4 sağlama toplamından çok daha yavaş olması durumunda olabilir.

Her ikisi de --checksumve --ignore-times"oldukça yavaş" olacak, ancak --ignore-timesmuhtemelen daha yavaş olacaktır (yukarıdaki 2 olasılık nedeniyle).

İyi bir soru - pratikte herhangi bir performans farkı bulursanız lütfen gönderin.


Ne demek istediğini anlıyorum. Bazı testler yapacağım ve geri göndereceğim.
Andy Madge,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.