Küçük dosyalar için rsync nasıl hızlandırılır


15

Aşağıdaki komutu kullanarak bir sunucudan diğerine binlerce küçük dosyayı aktarmaya çalışıyorum:

rsync -zr --delete /home/user/ user@10.1.1.1::backup

Şu anda transfer uzun sürüyor (zamanlamadım). Bunu daha hızlı yapmanın bir yolu var mı? Başka bir araç mı kullanmalıyım? Rsync protokolünü kullanmak yerine ssh üzerinde rsync kullanmalı mıyım?


Gerçekten sadece yüzlerce mi? Birkaç binden az gibi?
Zoredache

Bundan biraz daha fazlası ... 475.576 toplam 9.3GB
Erişte

Bu, dosya sistemi düzeyinde çalışan hemen hemen her aracı kullanarak berbat olacak. Biraz profilleme yaptıysanız, önemli miktarda zaman harcanacağını göreceksiniz stat().
Zoredache

Neden olmasın -aama -r?
kamae

Yanıtlar:


13

Darboğazı belirlemelisin. Rsync değil. Muhtemelen ağ bant genişliğiniz değil. As @Zoredache büyük olasılıkla herkes tarafından oluşturulan IOPS büyük bir sayıdır önerdi stat()aramalar. Herhangi bir senkronizasyon aracının dosyaları stat etmesi gerekir. Senkronize ederken iostatdoğrulamak için çalıştırın .

Böylece soru; stat nasıl optimize edilir? İki kolay cevap:

  1. daha hızlı bir disk alt sistemi edinin (gerekirse her iki ana bilgisayarda) ve
  2. dosya sisteminizi ayarlayın (ör. ext3 montajı için noatimeve a ekleyin dir_index).

Bir şans eseri bu sınırınız olan disk iops'unuz değilse, dir ağacını birden çok farklı ağaçlara bölmeyi deneyebilir ve birden fazla rsync çalıştırabilirsiniz.


1
Teşekkürler, dir_index'e bakacağım ve nasıl çalıştığımı göreceğim (zaten noatime kullanıyoruz). Disk io darboğaz gibi görünüyor, ancak RAID 5'de zaten 15k SAS sürücü çalıştırıyoruz. Bir sonraki adım SSD olacaktır, ancak hosting şirketimiz henüz bu seçeneği sunmuyor.
Erişte

5

Sıkıştırma küçük dosyalar için çok kullanışlı değildir (örneğin, 100 bayttan az). Küçük dosyalar için, bazen sıkıştırılmış sürüm orijinalinden bile büyük olabilir. Bayrağı rsyncolmayan komutu deneyin -z.

sshgüvenlik açısından iyidir, ancak aktarımı daha hızlı yapmaz. Aslında, şifreleme / şifre çözme ihtiyacı nedeniyle aktarımı yavaşlatacaktır.

rsyncilk kez çalıştırıldığında hızlı görünmeyebilir, çünkü aktarılacak çok fazla veri var. Ancak, bu komutu düzenli aralıklarla çalıştırmayı planlıyorsanız, rsyncdeğişmeyen dosyaları aktarmama konusunda akıllı olduğu için sonraki çalıştırmalar çok daha hızlı olabilir .


Sadece rsyncistemciyi kullanırsanız, sahne arkasında SSH kullanır. Rsync kullanırken şifrelemeyi devre dışı bırakmak için kendi yolunuzdan çıkmanız gerekir. Bakınız: stackoverflow.com/a/1821574/64911
mlissner

1

Hangi rsync sürümünü kullanıyorsunuz? 3.0.0'dan (her iki uçta) daha eski herhangi bir şey, büyük aktarımları hızlandıran artımlı filelist özelliğine sahip değildir.


Her iki sunucuda rsync 3.0.5 kullanma.
Erişte

1

-v --progressRsync komut satırınıza ekleyin

rsync 2 adımda yapılır:

  1. boyutlarını ve mdate değerini karşılaştırmak için her iki platformdaki tüm dosyalara derinlemesine göz atın
  2. gerçek transferi yap

İç içe dizinlerde binlerce küçük dosya rsync iseniz, rsync bu zamanın çoğunu alt dizinlere gidip tüm dosyaları bulmak için harcayabilir

Tarama için zaman harcanmazsa, zaman sadece her yeni dosya aktarımını başlatan tüm gecikmelerin eklenmesinden kaynaklanabilir.


1

Ext3 veya ext4 dosya sistemleri söz konusu olduğunda, her ikisinde de dir_index özelliğinin etkin olup olmadığını kontrol edin ! Benim durumumda bu üç kez rsync-aktarım.

Cevabımdaki ayrıntıları görmek için: /server//a/759421/80414

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.