Rsync neden yerel dosyalar için delta-transfer'i kullanmıyor?


25

Şu anda alan-rezervasyon açıkken torrent istemcisi tarafından indirilen büyük bir iso görüntüsüm var: bu, (4 Mib) içerisindeki bazı parçalar indirme nedeniyle sürekli değişirken dosya boyutu değişmiyor demektir.

% 90 indirmede sonradan tasarruf etmek için ilk rsync'i yapıyorum:

$ rsync -Ph DVD.iso / medya / başka bir-hdd /
artımlı dosya listesi gönderme

DVD.iso
       2.60G 100% 40.23MB / s 0:01:01 (xfer # 1, kontrol edilecek = 0/1)

2,60 G bayt gönderildi 73 bayt 34,59M bayt / sn aldı
toplam boyut 2.60G hızlanma 1.00

Sonra, dosya tamamen indirildiğinde, tekrar rsync:

total size is 2.60G   speedup is 1.00

Speedup = 1, delta transferin kullanılmadığını, dosyanın% 90'ının değişmemesine rağmen, hedef dir'in başka bir FS'de olduğunu ve kopyalamanın birkaç dakika sürdüğünü söylüyor. Neden transferi hızlandırmaya çalışmıyor? rsyncDelta transfer kullanmaya nasıl zorlayabilirim ?


6
Yaptıkların hiç mantıklı değil. Rsync'in amacı, yerel olarak değil, ağ üzerinden dosya aktarımını hızlandırmaktır. Farklılıkları bulmak için hem kaynağı hem de varış yerini okumalıdır. Farklılıkları bulmak için varış yerini yerel olarak okumak için gereken sürede, normal bir kopya da yapabilirsiniz. Dosyayı kopyalamak yerine ilk etapta hedefe indirin.
psusi

1
Bu yüzden sadece delta-xfer kullanmaz, çünkü yerel olarak çalışırken, kopyalamak karma hesaplamaktan daha mı hızlıdır? Eğer evet ise - cevabı gönderin plz :)
kolypto

9
Okuma, belirli durumlarda yerel bir diske yazmaktan daha hızlı olabilir. Ayrıca bir SSD'deki aşınmayı da azaltabilir. Bu kesinlikle geçerli bir soru ve cevap benim için oldukça değerli.
HRJ

2
@ psusi, HRJ'nin yukarıdaki yorumundan ayrı olarak, hedef dosyanın yansıtıldığı durumu da göz önünde bulundurur (örneğin, btrfs veya ocfs2'de). Senkronizasyon sırasında yazmaların en aza indirilmesi, genel alan kullanımında büyük bir fark yaratabilir.
Jack Douglas

Yanıtlar:


20

Göre man , psusi haklı:

-W, --whole-file : Kaynak ve hedef makineler arasındaki bant genişliği (özellikle "disk" aslında ağa bağlı bir dosya sistemi olduğunda) diskin bant genişliğinden yüksek olduğunda bu seçenek kullanılırsa, aktarım daha hızlı olabilir. Hem kaynak hem de hedef yerel yollar olarak belirtildiğinde, ancak yalnızca toplu yazma seçeneği etkin değilse, varsayılan değer budur.


10
Teşekkür ederim! Bu çizgiyi yükselttim :) Delta-trasfer'ı açmak için,-no-W
kolypto

1
Sistemimde -no-Wsadece uzun seçenek çalışmıyor -no-whole-file. Bu anahtara ihtiyaç duymamın nedeni, bir yedekleme hazırladığım ve aynı değişiklik zamanına sahip olmayan büyük dosyalara (örn. Görüntüler) sahip olduğum zamandır. Yerel dosya sistemimde delta-transfer kullanarak bu dosyaları senkronize etmek çok hızlı, hız ise 163.26.
Wanderer Jesse,

6
@JessetheWindWanderer, uzun seçenek --no-whole-file(lütfen, --başında iki katı olanlara dikkat edin ).
Eddie C.

Teşekkürler Eddie C. Nasıl olduğumuzu
Rüzgarın Avcısı Jesse

18

Bu soruya açık cevap:

--no-WYerel veya uzaktan farketmeden delta sıkıştırmayı zorlamak için bayrağı kullanın .

Güncelleme: Hikaye daha var gibi görünüyor. delta compressionSadece rsync'in almak ve iletmek süreci arasında etkin olması gibi görünüyor. Dosyayı dosya sistemine gönderirken, rsyncdelta sıkıştırması açık olsa bile tüm dosyaları hala yazabilir.

Burada "Wakan Tanka'nın" soruşturmasına bakınız .


2
--no-Wher zaman davamda tüm dosyayı aktarın. Lütfen unix.stackexchange.com/questions/291156/…
Wakan Tanka

@WakanTanka Bu ilginç! Cevabımı güncelledim.
HRJ

3

Varsayılan olarak, rsync ilk önce hedef dosyanın yeni bir kopyasını oluşturur ve ardından çeşitli güvenlik nedenleriyle değiştirir. İle --inplacebirlikte belirleyerek bunu geçersiz kılabilirsiniz --no-whole-file. Bu, rsync'e hedef sayfada yerinde bir düzenleme yapmasını ve çeşitli durumlarda (genellikle bu durum için küçük) man sayfasında belgelendiği şekilde kabul etmesini söyler.


0

Varsayılan rsyncolarak, dosyanın hedefin bir kopyasını oluşturur ve ardından atomik olarak orijinali yeni kopya ile değiştirir. Bu güvenlik nedeniyle yapılır. Aradığın --inplaceseçenek, rsyncyalnızca kaynağa göre değişen hedef dosyanın bölümlerini değiştirmeye neden olacak olan seçenektir .

OP’nin kullanım durumu için, ön tahsisi de kapatmayı öneriyorum, böylece çok daha hızlı olacak olan seyrek bir kopya senkronize edilebilir. İndirmeler için, VFAT gibi çok eski bir dosya sistemi kullanmıyorsanız, parçalanma konusunda endişelenmeyin. Özellikle medya dosyaları, depolama medyasının maksimum performansında okunmaz, bu yüzden onları birleştirmek boşa harcanır.

İndirilenler dizini seyrek olarak hedef birime kopyalamak için, bu bayrak ve işlemleri aşağıdaki sırayla öneririm:

rsync --ignore-existing -vxaHAXS /source /destination
rsync --inplace -vxaHAX /source /destination

İlk geçiş, hedefin seyrek olarak yeni dosyaları kopyalayacak İkinci geçiş, mevcut dosyaları yerinde güncelleyecek ve yalnızca değişiklikleri kopyalayacak

Seyrek ve yerinde delta kopyalar çıkardığından, fazladan IO gerektirmeden bunu art arda çalıştırabilirsiniz. Aynı anda çalışan 20 torrentiniz olsa bile, hedefteki yazıları yükseltmez veya kaynak / hedef hacimlerini düşürmez.


Burada "seyrek" derken ne demek istiyorsun Wil? Gerçekten söyleyebileceğim kadarıyla kelimenin gerçek anlamını yansıtmıyor.
Julius
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.