Öncelikle, sorunuzun "özgeçmiş" kısmıyla ilgili olarak --partial
, alıcı uca, gönderim sonu tamamen aktarılmış gibi kaybolursa kısmen aktarılan dosyaları tutmasını söyler.
Dosyaları aktarırken, geçici olarak hedef klasörlerine (örn. .TheFileYouAreSending.lRWzDC
) Ya da --partial-dir
anahtarı ayarlarsanız özel olarak seçilmiş bir klasöre gizli dosyalar olarak kaydedilirler . Bir aktarım başarısız olduğunda ve --partial
ayarlanmadığında, bu gizli dosya bu şifreli adın altındaki hedef klasörde kalır, ancak --partial
ayarlanmışsa, dosya TheFileYouAreSending
olsa bile , asıl hedef dosya adıyla yeniden adlandırılır (bu durumda ) tamamlanmadı. Mesele, daha sonra --append
veya ile yeniden rsync çalıştırarak transferi tamamlayabilmenizdir --append-verify
.
Yani, --partial
gelmez kendisini başarısız veya iptal transferi devam ettirin. Devam etmek için, bir dahaki sefere yukarıda belirtilen bayraklardan birini kullanmanız gerekecek. Bu nedenle, hedefin iyi görünen ancak gerçekte eksik olan dosyaları içermediğinden emin olmanız gerekiyorsa, kullanmamalısınız --partial
. Tersine, hedef dizinde gizli olan başıboş hatalı dosyaları asla geride bırakmayacağınızdan emin olmak istiyorsanız ve aktarımı daha sonra tamamlayabileceğinizi biliyorsanız, size --partial
yardımcı olmak için var.
--append
Yukarıda belirtilen anahtar ile ilgili olarak , bu gerçek "devam" anahtarıdır ve siz de kullanmasanız da kullanmasanız da kullanabilirsiniz --partial
. Aslında, kullanırken --append
, hiçbir geçici dosya oluşturulmaz. Dosyalar doğrudan hedeflerine yazılır. Bu bakımdan, başarısız bir transferle --append
aynı sonucu verir --partial
, ancak bu gizli geçici dosyaları oluşturmadan.
Bu nedenle, özetlemek gerekirse, büyük dosyaları taşıyorsanız ve iptal edilen veya başarısız olan bir rsync işlemini rsync
durdurulan noktadan devam ettirmek istiyorsanız, bir sonraki denemeyi kullanmanız --append
veya açmanız gerekir --append-verify
.
@Alex'in altını işaret ettiği gibi, 3.0.0 sürümü rsync
şimdi, bu anahtarın varlığından önce olduğu --append-verify
gibi davranan yeni bir seçeneğe sahip --append
. Muhtemelen her zaman davranışını istiyorsun --append-verify
, bu yüzden sürümünüzü kontrol edin rsync --version
. Eğer Mac kullanıyorsanız ve kullanılmıyorsa rsync
dan homebrew
, (en az El Capitan kadar ve dahil) eski bir sürümünü ve kullanmanız gerekir --append
ziyade --append-verify
. Davranışı neden sürdürmediler --append
ve bunun yerine yeni gelenler --append-no-verify
biraz kafa karıştırıcı. Her iki şekilde de, --append
üzerinde rsync
sürüm 3 ile aynıdır önce --append-verify
yeni sürümlerinde.
--append-verify
tehlikeli değil: Her iki uçtaki verileri her zaman okuyacak ve karşılaştıracak, sadece eşit olduklarını varsaymayacak. Bunu sağlama toplamı kullanarak yapar, bu nedenle ağda kolaydır, ancak aslında hedefe ekleyerek aktarımı sürdürmeye başlamadan önce kablonun her iki ucundaki paylaşılan veri miktarının okunmasını gerektirir.
İkincisi, "rsync'in kaynak ve hedef arasındaki farkları bulabildiğini ve bu nedenle sadece farkları kopyalayabildiğini" söylediniz.
Bu doğru ve buna delta transferi deniyor, ancak farklı bir şey. Bunu etkinleştirmek için -c
, veya ekleyin --checksum
. Bu anahtar kullanıldığında, rsync telin her iki ucunda bulunan dosyaları inceler. Bunu parçalarda yapar, her iki uçtaki sağlama toplamlarını karşılaştırır ve eğer farklılarsa, dosyanın sadece farklı kısımlarını aktarır. Ancak, @Jonathan'ın işaret ettiği gibi, karşılaştırma yalnızca dosyalar her iki uçta da aynı boyutta olduğunda yapılır - farklı boyutlar rsync'in tüm dosyayı yüklemesine ve hedefin aynı adın üzerine yazmasına neden olur.
Bu, başlangıçta her iki uçta da bir miktar hesaplama gerektirir, ancak örneğin sık sık küçük değişiklikler içeren çok büyük dosyaları sabit boyutlu dosyaları yedekliyorsanız, ağ yükünü azaltmada son derece verimli olabilir. Akla gelen örnekler, sanal makinelerde veya iSCSI hedeflerinde kullanılan sanal sabit disk görüntü dosyalarıdır.
--checksum
Hedef sistem için tamamen yeni olan bir toplu iş dosyası aktarmayı kullanırsanız , rsync'nin aktarma işleminden önce kaynak sistemdeki sağlama toplamlarını hesaplaması yine de dikkate değerdir . Neden bilmiyorum :)
Yani, kısacası:
Sık sık sadece bu işlemi iptal edip daha sonra bunu devam ettirmek için seçenek ve istiyoruz "A noktasından B noktasına malzeme taşımak" rsync kullanıyorsanız yok kullanmak --checksum
, ama yok kullanın --append-verify
.
Sık sık yedeklemek için rsync kullanıyorsanız --append-verify
, sürekli boyutta büyüyen ancak nadiren değiştirilen büyük dosyaları gönderme alışkanlığınız olmadığı sürece, muhtemelen sizin için fazla bir şey yapmazsınız. Bonus ipucu olarak, btrfs
ya da gibi anlık görüntüyü destekleyen depolamaya yedekleme yapıyorsanız zfs
, --inplace
anahtarın eklenmesi, değiştirilen dosyalar yeniden oluşturulamadığından ancak değiştirilen blokların doğrudan eskilerin üzerine yazılmasından dolayı anlık görüntü boyutlarını azaltmanıza yardımcı olacaktır. Bu anahtar, yalnızca küçük değişiklikler olduğunda hedefte dosyaların kopyalarını oluşturmaktan kaçınmak istiyorsanız da yararlıdır.
Kullanırken --append-verify
, rsync her zaman aynı boyuttaki tüm dosyalarda olduğu gibi davranır. Değişiklik veya diğer zaman damgalarında farklılık gösterirlerse, bu dosyaları daha fazla incelemeden hedefin kaynakla üzerine yazacaktır. --checksum
Aynı isim ve ebattaki her dosya çiftinin içeriğini (sağlama toplamı) karşılaştıracaktır.
GÜNCELLEME 2015-09-01 @Alex tarafından yapılan puanları yansıtacak şekilde değiştirildi (teşekkürler!)
GÜNCELLEME 2017-07-14 @Jonathan tarafından yapılan puanları yansıtacak şekilde değiştirildi (teşekkürler!)