çok sayıda dosyayı aktarmanın en hızlı ve en güvenilir yolu nedir?


10

90gb toplam 100k dosya aktarmaya çalışıyorum. Şu anda rsync daemon kullanıyorum ama yavaş 3.4mb / s ve bunu birkaç kez yapmam gerekiyor. İnternet üzerinden 100mbit bağlantıyı en üst düzeye çıkaracak ve çok güvenilir olacak hangi seçeneklere sahip olduğumu merak ediyorum.


2
Bağlantınızın yaklaşık üçte birini alıyorsunuz - bu saygın, ancak harika değil. Dosyalar ne kadar uzağa aktarılır?
Shane Madden

İki sunucu arasında 50 ms gecikme.
incognito2

5
Bir keresinde bir sürü dosya gördüm hyperboleandahalf.blogspot.com/2010/04/…
Smudge

Eğer rsync arka plan programı kullanıyorsanız, ssh söz konusu değil, değil mi? O zaman açıklama muhtemelen ana bilgisayarlar arasındaki altyapıdır. Ana bilgisayarlar arasındaki hızı test etmek için netperf veya iperf veya flowgrind'i deneyebilirsiniz. Bu test size daha yüksek bir aktarım hızı sağlıyorsa, rsync'in işleri nasıl yavaşlattığına bakmalısınız: sunucudaki i / o'yu yavaşça okuyun, istemciye i / o yazın, birçok küçük dosya, dosya sistemi vb.
AndreasM

Yanıtlar:


11

Sneakernet'i düşündünüz mü ? Büyük veri setlerinde bir gecede gönderim genellikle İnternet üzerinden aktarımdan daha hızlı ve daha ucuz olacaktır.


10
Diyerek şöyle devam etti: "Asla karayoluna zarar veren bantlarla dolu bir istasyon vagonunun bant genişliğini küçümsemeyin." - AST
voretaq7

1
gigabit LAN donanımının satın alınabilirliği göz önüne alındığında, bir LAN aktarımı ise, eSATA aracılığıyla tek bir iş miline yazmak için harcanan zaman o kadar çekici değildir.
memnoch_proxy

10

Nasıl? Veya TL; DR

Bulduğum en hızlı yöntem bir kombinasyonudur tar, mbufferve ssh.

Örneğin:

tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"

Bunu kullanarak 1Gb bağlantılarda 950 Mb / s üzerinde sürekli yerel ağ aktarımları gerçekleştirdim. Aktardığınız öğeye uygun olması için her tar komutundaki yolları değiştirin.

Neden? mbuffer!

Büyük dosyaları ağ üzerinden aktarmada en büyük darboğaz, disk I / O'dur. Bunun cevabı mbufferya buffer. Büyük ölçüde benzerdirler, ancak mbufferbazı avantajları vardır. Varsayılan arabellek boyutu için 2 MB mbufferve için 1 MB'dir buffer. Daha büyük arabelleklerin asla boş kalmaması daha olasıdır. Hem hedef hem de hedef dosya sisteminde yerel blok boyutunun en küçük ortak katı olan bir blok boyutu seçmek en iyi performansı verecektir.

Tamponlama tüm farkı yaratan şeydir ! Eğer varsa onu kullanın! Eğer sahip değilseniz, alın! (m}?bufferArtı bir şey kullanmak tek başına her şeyden daha iyidir. neredeyse tam anlamıyla yavaş ağ dosya aktarımları için her derde devadır.

Birden fazla dosya aktarıyorsanız, tarbunları tek bir veri akışında "topaklamak" için kullanın . Tek bir dosyaysa catveya G / Ç yönlendirmesi kullanabilirsiniz. Bir havai tarvs. cathep kullanmak bu yüzden istatistiksel olarak anlamsız olduğu tar(ya da zfs -sendnerede can) zaten bir sürece tarball . Bunların hiçbirinin size meta veri vereceği garanti catedilmez (ve özellikle vermez). Meta veri istiyorsanız, bunu sizin için bir egzersiz olarak bırakacağım.

Son olarak, sshbir taşıma mekanizması için kullanmak hem güvenlidir hem de çok az ek yük taşır. Yine, bir havai sshvs. ncistatistiksel önemsizdir.


SSH'yi bazen taşıma olarak kullanmanın şifreleme yükü vardır. Bkz: Şifrelemesiz güçlü kimlik doğrulaması ile linux makineleri arasında dosya kopyalama
ewwhite

2
Gerekirse daha hızlı şifreleme mekanizmaları kullanabilirsiniz. Ama bunu ssh ile borulandırmanız gerekmez. Her iki tarafta mbuffer'da -O ve -I portlarını ayarlamayı tercih ederim. Bu şimdi iki komut olsa bile, her iki ucu arabelleğe alarak şifrelemeyi atlar ve ağ bant genişliğini en üst düzeye çıkarırsınız. Yerel tar -cf - .|mbuffer -m128k -s 256M -I 9090 & mbuffer -m128k -s 256M -O host:9090 | tar -xf -
LAN'ımda

2
@memnoch_proxy: Bu iyi bir öneri (oy verdiğim) ancak NSA'nın şifreleme, IMO kullanarak veri merkezleri (örneğin Google ve Yahoo) arasında özel veri hatlarına bile dokunduğu bu gün ve yaşta yapmak her zaman iyi bir alışkanlıktır. . Kullanımı sshbunu kolaylaştırır. Kullanılması stunnel, socatya opensslda çalışır, ancak bunlar basit transferler için kurmak daha karmaşık konum.
Bahama

1
@bahamat soruya tekrar bakmamı sağladığınız için teşekkür ederim. Önerim yalnızca aktarım bir VPN üzerinden gerçekleşebiliyorsa uygun görünüyor. İnternet transferi için kesinlikle ssh kullanırım.
memnoch_proxy

8

"Rsync" den bahsediyorsunuz, bu yüzden Linux kullandığınızı varsayıyorum:

Neden tar veya tar.gz dosyası oluşturmuyorsunuz? Bir büyük dosyanın ağ aktarım süresi birçok küçük dosyadan daha hızlıdır. İsterseniz bile sıkıştırabilirsiniz ...

Sıkıştırmasız katran:

Kaynak sunucuda:

tar -cf file.tar /path/to/files/

Sonra alıcı uçta:

cd /path/to/files/
tar -xf /path/to/file.tar

Sıkıştırmalı katran:

Kaynak sunucuda:

tar -czf file.tar.gz /path/to/files/

Sonra alıcı uçta:

cd /path/to/files/
tar -xzf /path/to/file.tar.gz

(Tar | tar.gz) dosyalarının gerçek aktarımını yapmak için rsync'i kullanmanız yeterlidir.


sadece arşiv depolamak için uygun bir yer olsaydı ..
Tebe

5

Burada açıklanan tarve sshhile deneyebilirsiniz :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "dd of=/backup/wwwdata.tar.gz"

bu aşağıdakiler için yeniden yazılabilir olmalıdır :

tar cvzf - /wwwdata | ssh root@192.168.1.201 "tar xvf -"

Bununla birlikte, sürecin --partialözelliklerini kaybedersiniz rsync. Dosyalar çok sık değişmezse, yavaş bir baş rsyncharfle yaşamak , gelecekte çok daha hızlı gideceği için oldukça değerli olabilir .


2

Rsync'in çeşitli sıkıştırma seçeneklerini kullanabilirsiniz.

-z, --compress              compress file data during the transfer
     --compress-level=NUM    explicitly set compression level
     --skip-compress=LIST    skip compressing files with suffix in LIST

ikili dosyalar için sıkıştırma oranı çok düşüktür, bu nedenle --skip-sıkıştır örneğin iso, arşivlenmiş ve sıkıştırılmış tarballlar vb. kullanarak bu dosyaları atlayabilirsiniz.


-6

Ben büyük bir SFTP hayranıyım. Medyayı ana bilgisayarımdan sunucuma aktarmak için SFTP kullanıyorum. LAN üzerinden iyi hızlar elde ediyorum.

SFTP güvenilirdir, kurulumu kolay olduğu için bunu denerim ve bazı durumlarda daha hızlı olabilir.


5
FTP'nin ölmesi gerekiyor. Şifresiz, kesintiyi iyi idare etmiyor ve tamamen emmeyen en az yarım düzine uygulanabilir alternatif var.
MDMarra

1
Hiç SFTP duydunuz mu?
Tillman32

8
Evet, var mı? FTP protokolü ile hiçbir şekilde isim ve dosyaları hareket ettirmesi dışında hiçbir şeyle ilgili değildir.
MDMarra

5
FTP, güvenlik duvarlarından geçerken de güvenilir değildir (istemcinizin geri bağlantıları kabul etmek için rasgele bir bağlantı noktası açması güvenlik duvarlarından önceki bir zamandan beri geçerlidir ve Pasif ve Genişletilmiş Pasif FTP'nin bu sınırlamaya geçici bir çözüm bulmak için: Hackery)
voretaq7
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.