Linux sunucuları arasında hızlı dosya aktarımı yapmanın en kolay yolu?


16

Bir CentOS sunucusundan diğerine dosya aktarmam gerekiyor. Her 10 dakikada bir 5MB dosya aktarır. Şifrelemeye gerek yok.

Dosyaların hızlı aktarımı için kolay olan neydi?

Ftp'den daha basit bir şey var mı?

Teşekkürler!


1
Netcat üzerindeki katranın zafer kazanacağına inanıyorum ... heh heh ...: serverfault.com/questions/18125/…
Evan Anderson

Şifrelemeye ve hıza ihtiyacım olduğu için rsync'i tercih ederim.
Alex L

Ben sadece http transferleri çok fazla yükü olmadığını öğrendim bu yüzden belki sadece kullanabilirsiniz.
Alex L

Bir cevabı sorunuzda düzenlemeyin, cevap olarak gönderin. Geri alındı.
HopelessN00b

Yanıtlar:


25

rsync

Ftp veya tftp kullanmadan önce rsync kullanırdım.

Daha fazla seçenek ve (benim tecrübelerime göre) daha güvenilir transfer.


1
Ben de rsync genellikle başka bir şey daha yüksek verim alır bulduk (scp, cifs, nfs)
Ophidian

http transferleri ne olacak?
Alex L

@Ophidian Yani rsync'i daemon olarak mı kullanıyorsunuz? Aksi takdirde, scp'den daha hızlı olabilir, çünkü her ikisi de ssh kullanır ve şifreleme vardır.
balki

@balki Evet, rsync arka plan programı. Özellikle konuşkan değil, diskten veriyi hatta beslemek için iyi bir iş çıkarıyor ve isteği tamamlamak için gerektiği kadar az iş yapıyor (örneğin metin dosyaları için farklılıklar uygular).
Ophidian

21

ssh üzerinden katran iyidir, ancak netcat üzerinden TCP üzerinden katran alabileceğiniz kadar düşük ek yüktür! Bu bir defalık bir şeyse, bunu deneyin:

Alıcıda:

nc -l -p 8989 | tar x

Gönderende:

tar cf - /source-path | nc (receiving host ip address) 8989

Bu düzenli olarak yapacağınız bir şeyse, muhtemelen rsync kullanırdım.



Evan okumadığın için seninle aynı. Ha ha ha! Aslında tek seferlik bir şey değil. Her 10 dakikada bir 5MB dosya aktaracağını söyledi. Belki Morse kodu ile göndermek iyi bir alternatif olabilir? ;-) (not: Evan ve ben arasındaki özel şaka)
KPWINC

8

İki kişi ssh üzerine katrandan bahsetti, ancak nasıl yapılacağını söylemedi. Kayıt için temel prosedür:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Veya, transferleri alıcı uçtan başlatmak istiyorsanız:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

Bunu Evan'ın netcat çözümüne göre yapmanın avantajı, her şeyin bir bilgisayardan başlatılabilmesidir; iki netcat çağrısını koordine etmek zorunda değilsiniz. Otomatik olarak çalışması için buna ihtiyacınız varsa, parola olmadan bağlantı kurmanızı sağlayan bir ssh anahtarı ayarlayabilir ve bu bağlantıları bu bağlantılar için kullanabilirsiniz.

ssh, veri akışını sıkıştırmak için -C seçeneğine sahiptir veya GNU tar'ın yerleşik sıkıştırma yeteneğini kullanabilirsiniz:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync başka bir seçenektir, ancak güçlü kıyafeti, alıcı uçta zaten mevcut olan dosyaları güncellemektir. Ben zaten diğer ucunda mevcut olmayan dosyaları aktarmak için kullanırken scp veya tar / ssh daha yavaş buldum.


1
+1 Ne yani, herkes ssh üzerinde tar nasıl yapılacağını sezgisel olarak bilmiyor mu? Tuhaf. :)
kaos

tar, kendi başına güvenilir değildir - SSH (TLS) ile bütünlük kontrolü yoktur, ancak TLS'nin verilerdeki uçuş değişikliklerini tespit etme kabiliyeti nedeniyle bütünlük elde edersiniz. Rsync daha iyi bir seçimdir ve şifreleme olmadan daha iyi bütünlük kontrolü yapacağı için Rsync; OP, şifrelemenin gerekli olmadığını belirtti.
Kilo

Katran hangi bütünlük kontrolüne ihtiyaç duyar? TCP ve ssh katmanları güvenilir veri aktarımı sağlar. Katranın kendisinde hatalar olabileceğini iddia ediyorsanız, rsync'e aynı şekilde davranmanız gerekir. Aslında rsync transferleri protokol sorunları nedeniyle üzerimde donma oldu. Bunu yaptığım bir katran / untar boru hattını hatırlamıyorum.
Kenster

6

Dürüst olmak gerekirse, scpya da daha tarfazla kullanırdım ssh. Şifreleme işleri yavaşlatır, ancak kurulum ve kullanım kolaylığı, güvenilirlik ve (elbette öznel olarak) aşinalık, bu hıza gerçekten ihtiyacım olmadıkça beni vurmaya istekli hale getirir .

Ssh aktarımını varsayılandan daha hızlı bir şifre kullanmasını söyleyerek hızlandırabilirsiniz. Varsayılan genellikle 3desve genellikle yapabilirsiniz -c des, bu açıkça daha hızlı olacak ve -c blowfishtam olarak test etmedim de, aynı zamanda hızlı temsil edilir.

(SSHv1 günlerinde sık sık yapabilirdiniz -c none, ama sanırım biri kötü juju olduğuna karar verdi.)


4

Scp / ssh'den geçmeniz gerekiyorsa, deneylerim bu günlerde varsayılan olarak etkinleştirilen en hızlı şifrenin RC4 olduğunu gösteriyor. Şifreyi ssh / scp komutunuzda ' -c arcfour ' ile belirtirsiniz :

ilk kopya için:

  • scp -c arcfour -r foo/ desthost:/destdir

güncellemeler için:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir

3

Rsync gitmek için iyi bir yoldur çünkü aynı dosyaları bir kereden fazla aktarırken bulursanız, man sayfasında bu alıntı ile gösterildiği gibi kopyayı hızlandıracaktır.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.

2

FTP oldukça basittir, ancak bir makinede NFS paylaşımı oluşturmak ve diğerine takmak daha da basit bir yol olabilir. Sonra dosyaları kopyalamak bir dizinden diğerine bir cp yapmaktan oluşacaktır.


gereksinimlerine bağlı olarak. Mesela internette NFS kullanmam.
Kyle Hodgson

1
İyi bir nokta. Bu durumda rsync'i kesilirse kaldığı yerden devam edebileceği için tavsiye ederim. Ayrıca deltayı sadece kaynak ve hedef arasında aktardığı için.
Swoogan

soru çok geneldi, Swoogan tarafından yayınlanan ruhu sevdim, özellikle yazarın en basit çözüme ihtiyaç duyduğunu ve şifreleme gerektirmediğini söyledi
integratorIT

2

Hız istiyorsanız netcat ve katran kullanabilirsiniz. Şifrelemenin bir endişe olmadığı yerel bir ağda ssh, rsync veya scp'den daha hızlı olacaktır. Google "netcat tar".

DestinationServer

nc -l -p 7878 | tar -C /target/dir -xzf -

SourceServer

tar -cz /source/dir | nc DestinationServer 7878

Bu açıkça netcat'in kurulu olmasını gerektirir. Daha fazla bilgi için Google "netcat tar".


1

Sorununuzu zaten çözdüğünüze inanıyorum, ancak ssh'nizin başka bir bağlantı noktasında (standart bağlantı noktası 22'de değil) çalışması durumunda bunu kullanabilirsiniz

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / root@192.168.1.2: / remote / dir

Not: - XXXXX ürününü bağlantı noktası numaranızla değiştirin - 192.16.1.2'yi doğru uzak sunucu IP'si ile değiştirin


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.