Nasıl? Veya TL; DR
Bulduğum en hızlı yöntem bir kombinasyonudur tar
, mbuffer
ve 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ı mbuffer
ya buffer
. Büyük ölçüde benzerdirler, ancak mbuffer
bazı avantajları vardır. Varsayılan arabellek boyutu için 2 MB mbuffer
ve 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}?buffer
Artı 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, tar
bunları tek bir veri akışında "topaklamak" için kullanın . Tek bir dosyaysa cat
veya G / Ç yönlendirmesi kullanabilirsiniz. Bir havai tar
vs. cat
hep kullanmak bu yüzden istatistiksel olarak anlamsız olduğu tar
(ya da zfs -send
nerede can) zaten bir sürece tarball . Bunların hiçbirinin size meta veri vereceği garanti cat
edilmez (ve özellikle vermez). Meta veri istiyorsanız, bunu sizin için bir egzersiz olarak bırakacağım.
Son olarak, ssh
bir taşıma mekanizması için kullanmak hem güvenlidir hem de çok az ek yük taşır. Yine, bir havai ssh
vs. nc
istatistiksel önemsizdir.