SSH ile birçok dosya içeren klasörü kopyalamanın en hızlı yolu


13

Ssh ile sunucudaki dosyaları çoğaltmanın en iyi yolu nedir?

Benim durumumda: Magento mağazasını çoğaltmaktan bahsediyorum. (15000 dosya ~ 50MB)

cp -a source destination

Saat alıyor ... (benim durumumda sunucu 2.4 Xeon, 2GB RAM)

Yanıtlar:


19

Tek kelime: rsync.

Yavaş bir bağlantıdaysanız veya sunucu ağır yük altındaysa, kopyalama için kullanılan aracın darboğaz olmayacağını ve herhangi bir kopyalama yönteminin yine de yavaş olacağını unutmayın.

Bu, yerel bilgisayarınız ile uzak sunucu arasında kopyalama için temel kullanımı sağlamalıdır: http://oreilly.com/pub/h/38

Yerel bilgisayardan uzak bir sunucuya kopyalamak için (elbette yolları, kullanıcı adını ve ana bilgisayar adresini değiştirmeniz gerekir):

rsync -avz -e ssh /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server
  • -a Arşiv
  • -v gereksiz sözlerle dolu
  • -z kompres
  • -e ssh "SSH tüneli kullan"

(İlk yolları değiştirmek, diğer yönde kopyalamak için gelen ikinci olduğu için ):

rsync -avz -e ssh remoteuser@remotehost.somewhere.example.com:/path/on/server /path/on/local/computer

Ancak rsync, işleri aynı sunucuda kopyalamak için bile yararlıdır:

rsync -av /path-to/copy/from /path_to/copy/to

2
@Piskvor'un -zgereksiz ek yükü eklediğinden yerel kopyalama seçeneğini dışarıda bıraktığını unutmayın . IMHO, yalnızca -zyavaş bir ağ bağlantısı üzerinden rsync kullanırken kullanmalısınız. 100Base-T üzerinden büyük miktarda veri kopyalıyorsanız, olmadan da iyi olabilirsiniz -z. Hızlı bir ağ bağlantısı ile, sıkıştırma kullanarak CPU'nuzu sabitleyebilir ve diğer işlemleri aç bırakabilirsiniz.
tomlogic

@tomlogic: İyi bir nokta - başka bir deyişle, -zLAN kopyalama veya tek bir makinede kopyalama için kullanmayın ; -zİnternette kopya olup olmadığını test edin (birçok şeye bağlı olarak biri veya diğeri daha hızlı olabilir).
Piskvor

1
Ayrıca, dosyalarınızın sıkıştırılmış olduğunu biliyorsanız, JPEG ile dolu bir klasör ağacını senkronize etmek gibi bir şey olmadığından sıkıştırmayı da bırakırım.
satır sonu

Not: -e sshartık uzak ana bilgisayarlar için varsayılan olduğundan, seçeneği açıkça iletmek gerekli değildir.
Piskvor binadan

3

Başka bir kelime: scp

scp /path/on/local/computer remoteuser@remotehost.somewhere.example.com:/path/on/server

Tek seferlik fırsatlar için scp kullanışlıdır. Çok fazla dosya varsa, rsync iyi bir fikirdir. Bir bağlantı kesilirse, rsync kaldığı yerden devam edebilir.

Ben rsync sıkıştırma ( -z) olduğunu biliyordum ve sadece scp de ( -C) yaptığı öğrendim .


IIRC, her ikisi de en azından ağ ops için SSH'nin sıkıştırma algoritmalarını kullanıyor.
Piskvor

0

Kurulumunuzda, rsync muhtemelen yeterlidir ... ancak örnek olarak, çok sayıda küçük dosya varsa, dosyaları önce tar, sonra rsync ile tarlamaktan daha hızlı olabilir. Bunun nedeni, dosya küçükse, sahibinin, zaman damgalarının, izinlerin aktarılmasının dosyanın kendisinden daha ağır olmasıdır. Tar tüm bu bilgileri tek bir dosyada birleştirir ve rsync daha büyük blokları kopyalar.

Daha da iyisi, güvenlik gerekmiyorsa tar ve nc kullanın:

Hedefte, alıcı bir arka plan programı hazırlayın, açın ve açın:

nc -l -p 12345 | pigz -d | tar xvf - 

Kaynakta, her şeyi katlayın, paralel sıkıştırın ve hedefe gönderin:

tar cvf - ./ | pigz | nc host 12345
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.