W jaki sposób? Lub TL; DR
Najszybszy sposób znalazłem to połączenie tar
, mbuffer
a ssh
.
Na przykład:
tar zcf - bigfile.m4p | mbuffer -s 1K -m 512 | ssh otherhost "tar zxf -"
Dzięki temu osiągnąłem trwały transfer sieci lokalnej ponad 950 Mb / s na łączach 1 Gb. Zamień ścieżki w każdym poleceniu tar, aby były odpowiednie do tego, co przenosisz.
Dlaczego? mbuffer!
Największym wąskim gardłem w przesyłaniu dużych plików przez sieć jest zdecydowanie dyskowe operacje we / wy. Odpowiedź brzmi: mbuffer
lub buffer
. Są w dużej mierze podobne, ale mbuffer
mają pewne zalety. Domyślny rozmiar bufora to 2 MB dla mbuffer
i 1 MB dla buffer
. Większe bufory prawdopodobnie nigdy nie będą puste. Wybór rozmiaru bloku, który jest najniższą wspólną wielokrotnością rodzimego rozmiaru bloku zarówno w docelowym, jak i docelowym systemie plików, zapewni najlepszą wydajność.
Buforowanie jest rzeczą, która sprawia, że wszystkie różnica! Użyj go, jeśli go masz! Jeśli go nie masz, weź go! Używanie (m}?buffer
plus cokolwiek jest lepsze niż cokolwiek innego. jest to niemal dosłownie panaceum na powolne przesyłanie plików w sieci.
Jeśli przenosisz wiele plików, użyj ich, tar
aby „połączyć” je w jeden strumień danych. Jeśli jest to pojedynczy plik, którego można użyć cat
lub przekierowanie we / wy. Obciążenie tar
vs. cat
jest statystycznie nieistotne, więc zawsze używam tar
(lub zfs -send
gdzie mogę), chyba że jest to już tarball . Żadne z nich nie gwarantuje otrzymania metadanych (w szczególności cat
nie będzie). Jeśli chcesz metadanych, zostawię to jako ćwiczenie dla ciebie.
Wreszcie użycie ssh
mechanizmu transportowego jest zarówno bezpieczne, jak i niesie za sobą bardzo niewiele kosztów. Ponownie, narzut ssh
kontra vs. nc
jest statystycznie nieistotny.