RSync nasıl hızlandırılır?


44

Bir dizini harici USB HDD'mde senkronize etmek için rsync kullanıyorum. Yaklaşık 150 gig veri var. 50000+ dosya sanırım.

Şu anda ilk senkronizasyon çalışıyor ancak dosya kopyalama yalnızca 1-5 MB / sn. Bir USB 2.0 muhafazası için inanılmaz derecede yavaş görünüyor. Sürücüde başka hiçbir transfer yok.

İşte kullandığım seçenekler:

rsync -avz --progress /mysourcefolder /mytargetfolder

Ubuntu Server 9.10 kullanıyorum.


2
USB2 bağlantısı kurduğunuzdan emin misiniz? (rsync olmayan) bir kopya veya başka bir yazma işlemi normal hızda çalışıyor mu? değilse, başka bir USB bağlantı noktası / kablosuyla bir kopya / başka yazma işlemlerini denediniz mi?
quack quixote

Ayrıca bkz. Serverfault.com/questions/43014/… - orada iki kişi de iki kanallı tarkomut kullanmayı önerir cpio.
Blaisorblade

Yanıtlar:


38

İlk senkronizasyon için sadece kullanın

cp -a  /mysourcefolder /mytargetfolder

rsync, yalnızca hedef boş olduğunda ek yükü ekler.

ayrıca .. -z seçeneği performansınızı düşürüyor, yavaş bir link üzerinden veri aktarımı yapmıyorsanız kullanmamalısınız.


3
rsync denir çünkü uzaktan senkronizasyon içindir ve bu nedenle yerel olarak bağlı bir birim için gerçekten uygun değildir.
msanford

6
Yerel transferler için de kullanılabilir olması gerekiyordu ve çok daha esnek. İlk senkronizasyon için sadece muhtemelen fazla eksik.
Blaisorblade

1
rsync de tek yönlü bir senkronizasyondur. Bir sunucuya veya bir sunucuya yedekleme yapmak için çok iyi. Bununla birlikte, yerel TWO-Way senkronize edilebilir bir sürücü ile senkronize etmek istiyorsanız, tamamen farklı bir proje olan csync2 ile karıştırılmaması için csync csync.org/get-it adresini kontrol etmek isteyebilirsiniz .
Jesse Wanderer

3
rsync -avz --progress /mysourcefolder/ /mytargetfolderya da içeriğini yansıtmak yerine mysourcefolderiçeriden bir kopyasını alacaksınızmytargetfolder
editör

2
Bu cevap soruyu cevaplamıyor. Soru, rsync'in nasıl optimize edileceği ile ilgiliydi - bunun yerine cp komutu gelmedi
oemb1905

38

Aynı makinede diske hızlı bir ağ veya disk ile rsync kullanıyorsanız,

olmayan sıkıştırma -z kullanılarak

ve --inplace kullanımı

Sabit sürücülerin veya ağın performansını hızlandırır

Sıkıştırma çok fazla CPU kullanıyor.

değil INPLACE sabitdisk çok thrash yapar kullanarak (nihai oluşturmadan önce geçici dosya kullanır)

Sıkıştırma ve yerinde kullanılmaması internet üzerinden yapmak için daha iyidir (yavaş ağ)

YENİ: Hedefe dikkat edin ... etkin NTFS "sıkıştırma" varsa ... bu büyük dosyaları yavaşlatır (200 MB + derim) rsync neredeyse durmuş gibi görünüyor, bunun nedeni bu.


NTFS sıkıştırması büyük dosyalarda yavaş çalışıyor
Scott Kramer

Ben man 'sayfasında' - inline 'hakkında bir şey görmüyorum
Anthony

1
Bu '--inplace'
Scott Kramer

26

-WSeçeneğini kullanın . Bu, delta / diff karşılaştırmalarını devre dışı bırakır. Dosya süresi / boyutları farklılık gösterdiğinde, rsync tüm dosyayı kopyalar.

Ayrıca -zseçeneği de kaldırın . Bu yalnızca ağ trafiğini sıkıştırmak için kullanışlıdır.

Şimdi rsyncolduğu kadar hızlı olmalı cp.


6
Küçük not: -zsadece düşük hızlı ağ trafiği için kullanışlıdır . Ağınız yeterince hızlıysa, CPU tarafından sınırlandırılacağınız için işleri yavaşlatır.
WhyNotHugo

3
Bu ipuçları, dosyalarımın iki NAS cihazı arasında aktarılmasını büyük ölçüde hızlandırdı, teşekkürler!
djhworld

2
Ancak, man sayfasına göre şunları söylüyor -W: "Bu, hem kaynak hem de hedef yerel yollar olarak belirtildiğinde varsayılandır, ancak yalnızca toplu yazma seçeneği kullanılmadığında."
GuoLiang Oon

13

İlk olarak - bu durumda dosya sayısı önemli bir faktör olacak. Her biri ortalama 3 MB büyüklüğündedir. OP'nin durumunda hızı etkileyen bir darboğaz var. Daha fazlası - bu oldukça kuru bir okuma, ancak kapak resmi buna değer.

Yani, boş bir dizine kopyalamak için rsync kullanarak? Hızlandırmanın bazı yolları:

  1. Hayır -z - kesinlikle -z'i OP'deki gibi kullanmayın.
  2. -no-sıkıştırmak sizi hızlandırabilir. Bu en büyük etkiye sahip olabilir ... testim 13.000 dosya, toplam boyut 200 MB ve rsync 3.1.3 kullanıyordu. Aynı dahili SSD sürücüsünde farklı bir bölümle eşitledim. --No-compress ile 18 MBps, onsuz 15 MBps alıyorum. cp, bu arada, 16 MBps alır. Bu, çok daha küçük bir ortalama dosya boyutu. Ayrıca - --no-sıkıştırma ile ilgili herhangi bir belge bulamıyorum. Bu konuda stackexchange.com adresinden öğrendim.
  3. -W dosyaları tamamen kopyalamak için - farklılıkları karşılaştırmak istemiyorsanız her zaman bunu kullanın; rsync'in amacının farklılıkları karşılaştırmak ve sadece değişiklikleri güncellemek olduğunu unutmayın.
  4. Seyrek dosyaları iyi işlemek için -S - seyrek dosyalarınız yoksa zarar veremezsiniz.
  5. --exclude-from veya gerekmeyebilecek dosyaları hariç tutmaya benzer bir şey zamanı kısaltacaktır ancak aktarım hızınızı artırmaz.
  6. Bu var mümkün Böyle bir dosyaya çıktı gönderirseniz rsync -a /source /destination >/somewhere/rsync.out 2>/somewhere/rsync.errhata iletileri belirtir> ilk> temelde normalde görürdünüz tüm malzeme içeren bir dosyayı yazdırır ve 2 -.
  7. Son olarak, transferinizin farklı bölümleri için birden fazla rsync örneği çalıştırmak büyük bir yardımcı olabilir.

Emrim:

rsync -avAXEWSlHh /source /destination --no-compress --info=progress2 --dry-run

Her şey yolunda giderse, "--dry-run" ı siler ve giderdim. A, X ve E, -a ile kaplanmayan genişletilmiş öznitelikleri ve izinleri kapsar, l yumuşak bağlantılar içindir, H sert bağlantılar içindir ve h insan tarafından okunabilir.

Zaten senkronize edilmiş bir dizini bir USB sürücüde veya aynı sürücüde veya bir ağ üzerinden güncellemek, aktarım hızını en üst düzeye çıkarmak için farklı rsync komutları gerektirecektir.

Bonus - işte rsync man sayfası ve eğer sabit diskinizin hızını test etmek istiyorsanız, bonnie ++ iyi bir seçenek ve ağ hızınız için iperf'i deneyin .


* Gönderi neredeyse on yaşında, ancak arama motorları bundan çok emin ve ben de görmeye devam ediyorum. Bu iyi bir soru ve "rsync'i nasıl hızlandıracağımıza" en iyi cevabın "yerine cp kullanması" gerektiğini düşünüyorum.


1
Madde 7) "blockdev --setra 8192 / dev / sdX" kullanarak önden okuma tamponunu genişleterek, kaynak olarak geleneksel bir HDD kullanarak performansı daha da artırabilirim. Bu yüzden baş arayışı azaltmak niyetindeyim.
user2480144

2

Dosyalarınızın hangi boyut dağılımına sahip olduğunu söylemezsiniz. Çok sayıda küçük dosya varsa, bu araç hem yeni dosya açarken hem de işletim sistemi dizin girişlerini ve diğer meta verileri (örneğin kullanıyorsanız, dosya sisteminin günlüğü gibi) tutarken, hem kaynak hem de hedef sürücülerdeki kafa hareketi gecikmesini artırarak genel aktarım hızını düşürür. ext3 / ext4 ve NTFS gibi meta-veri günlüğü, varsayılan olarak transfer sırasında günceldir. Bir dosya kopyalama işlemi, basit bir toplu aktarım gerçekleştiğinde, daha büyük nesneler için yalnızca “adımına geçecektir”.


0

Kesinlikle rclone'u denemek istiyorsun . Bu şey hızlı delilik:

$ tree / usr [...] 26105 dizin, 293208 dosya

$ sudo rclone senk / usr / ana sayfa / fred / temp -P -L - aktarımlar 64

Transfer: 17.929G / 17.929 GBytes, 100%, 165.692 MBytes / s, ETA 0s Hatalar: 75 (yeniden deneme yardımcı olabilir) Çekler: 691078/691078, 100% Transfer edildi: 345539/345539,% 100 Geçen süre: 1m50.8s

Bu, LITEONIT LCS-256 (256GB) SSD'den yerel bir kopyadır.

İlk çalıştırmada --ignore-checksum komutunu daha da hızlı hale getirmek için ekleyebilirsiniz.


0

Önlemek

  • -z/ --compress: sıkıştırma, CPU'yu yalnızca aktarım bir ağ üzerinden değil RAM üzerinden olduğundan yükleyecektir.
  • --append-verify: kesintiye uğramış bir aktarmaya devam et. Bu iyi bir fikir gibi görünüyor, ancak tehlikeli bir başarısızlık vakası var: Kaynakla aynı boyutta (veya daha büyük) herhangi bir hedef dosya IGNORED olacaktır. Ayrıca, sonunda tüm dosyayı kontrol eder, bu --no-whole-fileda tehlikeli bir arıza davası eklerken önemli bir hızlanma anlamına gelmez .

kullanım

  • -S/ --sparse: boş dizileri seyrek bloklara çevir
  • --partialveya -Phangisi --partial --progress: Gelecekte devam etmek için kısmen aktarılmış dosyaları kaydedin. Not: dosyaların geçici bir adı olmaz, bu nedenle tüm kopya tamamlanana kadar hedefi başka bir şey beklemeyin.
  • --no-whole-fileBöylece tekrar gönderilmesi gereken her şey delta transferini kullanır. Kısmen aktarılmış bir dosyanın yarısını okumak genellikle onu tekrar yazmaktan çok daha hızlıdır.
  • --inplace dosya kopyasından kaçınmak için (ancak yalnızca aktarım tamamlanıncaya kadar hedefi hiçbir şey okumuyorsa)
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.