Hızlandırma / rsync dosya listelerinin hesaplanmasını önleme


12

Biri ağda bulunan ve samba paylaşımı olarak monte edilen iki diski senkronize etmek için rsync 3.1.1 kullanıyorum /mnt/ROUTER_WD_2TB/. Bu, ağ sınırlamaları nedeniyle maksimum 30-40MB / s hıza sahip kaynaktır. Diğeri, hedef, yerel olarak monte edilir (en fazla 110MB / s) ve /mnt/BACKUP_HITACHI_2TB/.

Aşağıdaki rsync komutunu kullanıyorum:

rsync  -haAXi --quiet --append-verify --delete /mnt/ROUTER_WD_2TB/* /mnt/BACKUP_HITACHI_2TB/.

Diskler , çoğu küçük olan birçok dosya içerir .

Sorun rsync herhangi bir dosyayı taşımak için başlamadan önce oldukça uzun zaman (10-20m) alır , sanırım çünkü çok sayıda küçük dosya için dosya listeleri hesaplamak zorunda. Bu süre zarfında, yeni ağ kullanımı düşük 200-500KB / s'de bulunurken, dosyaları aktarırken hız yaklaşık 40MB / s'dir.

Genellikle rsync'in kopyalaması gereken bir şeyi bulması yaklaşık 15m sürer, sonra kopyalaması 5 saniye sürer, sonra 5 dakika daha kopyalamak için başka dosyaları kontrol etmeye devam eder. Sonuçta, 5 saniyelik bir dosya kopyası 20 dakika sürüyor!

Dosyaları kopyalamadan önce klasörleri hariç tutmak için bu uzun süreyi önlemek için alabileceğim herhangi bir önlem var mı? Herhangi bir tür "önbellek" rsync sıfırdan tüm dosya listesini yeniden oluşturmak zorunda kalmadan uygulayabilirsiniz?


1
Bu konudan bir çözüm denediniz mi? unix.stackexchange.com/questions/189878/…
UVV

@UVV Bunu ben yapmadım. i bunu yapabilir, ancak 1) rsync zaten benim durumumda tam bir çekirdek kullanmak gibi görünmüyor, bazı nedenlerle (= CPU sınırlı veya sınırlama başka bir yerde yatıyorsa emin değilim) ve 2) Bu sadece çift ​​çekirdekli bir CPU'da, bu yüzden iyileştirme 2X olsa bile, iyileştirme için hala büyük bir marj olacaktır.
AF7

Evet bu bana deli gibi geliyor, rsync neden bu kadar yavaş? "--Size-only" ile bile rsync, artımlı dosya listesini oluşturmak için sonsuza dek sürecek gibi görünüyor. Neden? Dosya boyutlarını manuel olarak kontrol edebilir ve hangilerinin daha hızlı değiştiğini belirleyebilirim! Ne kadar zaman harcıyor ve bu süslü özellikleri nasıl kapatabilirim? EDIT: Ah, boş ver, ben yanlışlıkla 'c' bayrağı ayarlamıştı. Sağlama toplamları olmadan bu konuda çok hızlı.
Ben Farmer

Yanıtlar:


5

rsyncİlgili olarak , iki yerel dosya ağacı arasında kopyalama yapıyorsunuz, bu nedenle optimizasyonlarının çoğunu devre dışı bırakıyor (ünlü olduğu delta algoritması dahil). rsyncUzak sunucunuzda bir çalıştırabilirseniz (böylece ağınız boyunca gerçek bir istemci-sunucu senaryosu elde edersiniz) önemli miktarda çekiş elde edersiniz.

Yine de dikkate alınması gereken diğer seçenekler

  1. Eski dosyaları silmek konusunda endişelenmeden kopyalama. Bu, daha hızlı bir aktarım gerçekleştirmenize ve daha yavaş temizlemeyi günde sadece bir kez söyleyebilmenize izin verebilir:

    cp -au /mnt/ROUTER_WD_2TB/. /mnt/BACKUP_HITACHI_2TB/
    
  2. rsyncAktarımdan önce dosyaların tam bir listesini oluşturmaktan kaçınmak için 'varsayılan silme algoritması varyasyonunu kullanın :

    rsync -haAXi --quiet --delete --delete-during /mnt/ROUTER_WD_2TB/ /mnt/BACKUP_HITACHI_2TB/
    
  3. Üst düzey dizinleri ayrı görevlere ayırın ve paralel olarak çalıştırın. Eğer disk IO-bağlı iseniz, o zaman bu gerçekten yardımcı olmaz ve tabakları döndürmek için neredeyse kesinlikle işleri daha da kötüleştireceğini görebilirsiniz.

    for d in /mnt/ROUTER_WD_2TB/*
    do
        rsync -haAXi --quiet --delete --delete-during "$d" /mnt/BACKUP_HITACHI_2TB/ >"/tmp/rsync.${d/*\/}.log" 2>&1 &
    done
    wait
    cat /tmp/rsync.*.log
    rm -f /tmp/rsync.*.log
    

Bu önerilerin hiçbiri o zaman yardımcı olursa başka ekleyerek değerinde olacaktır --verboseiçin rsyncne yaptığını görmek için. Değişmeyen dosyalar arasında tıkırdadığından şüpheleniyorum ve yeterli dosyaya sahipseniz, bu sadece uzun zaman alıyor.


--delete --delete-duringbenim için yapmadı - bu hala artımlı bir dosya listesi gönderdi - ama --delete --delete-beforedoğrudan gitti: building file listBu büyük bir ilerleme gibi görünüyor. Bence.
mlissner

Hayır, bu geriye doğru, korkarım. Eğer kullanırsanız --delete-before, o zaman rsyncsilme diğeri kopyalama sonraki: Dosya ağacının karşısında iki geçiş yapar.
roaima

Teşekkürler. Bu durumda ... artımlı dosya listesi oluşturmaktan kaçınmanın herhangi bir yolu var mı?
mlissner

@ mlissner birkaç farklı faktöre bağlıdır. En büyüğü yerel-yerel veya yerel-uzak kopyalama yapıyor olmanızdır.
roaima

Yerlilerden biri bir USB disk olsa da, hepsi yerelden benim için yerel mi?
mlissner

-2

-vvtüm günlüğünü görmek için kullanabilirsiniz rsync.


2
Bu soruyu nasıl cevaplardı, yani bu işleri nasıl hızlandırabilirdi?
Kusalananda

Sadece rsync'i başlatmanın neden bu kadar zaman aldığını gösteren günlükleri görebiliyorsunuz, belki de zamanı azaltmak için rsync'ten atlayabileceğiniz dosyalar var.
namaiiee
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.