Odpowiedź @ pdo jest dobra, ale można zwiększyć prędkość za pomocą bufora i dobrej kompresji oraz dodać pasek postępu.
Często sieć stanowi wąskie gardło, a prędkość zmienia się w czasie. Dlatego pomaga buforować dane przed wysłaniem ich przez sieć. Można to zrobić za pomocą pv
.
Ponadto zwykle można zwiększyć prędkość za pomocą odpowiedniego algorytmu kompresji. Gzip (jak używany powyżej) jest algorytmem szybkiej kompresji, ale generalnie zstandard ( zstd
) (i dla wysokich współczynników kompresji LZMA / LZMA2 ( xz
) będzie kompresował się lepiej i był szybszy w tym samym czasie. Nowe Xz i Zstd mają już wbudowaną obsługę wielu rdzeni Aby użyć gzip z wieloma rdzeniami, można użyć Pigza.
Oto przykład wysyłania danych z paskiem postępu, buforowaniem i standardową kompresją przez sieć:
tar cf - . | pv -perabs $(du -sk . | cut -f 1)K | zstd -14 --long=31 -T0 | pv -qCB 512M | ssh user@host "cd /wherever && pv -qCB 512M | zstd -cd -T0 --long=31 | tar xf -"
Pierwszym pv
jest pokazanie postępu ( p ), szacowanego czasu ( e ), szybkości transferu ( r ), średniej prędkości ( a ), całkowitej liczby przesłanych bajtów ( b ). Całkowita wielkość szacuje się du
i dodaje do wyboru (rozmiar s ). Postęp jest mierzony przed kompresją i buforowaniem, dlatego nie jest zbyt dokładny, ale nadal jest pomocny.
zstd
jest używany z ustawieniem kompresji 14 . Liczba ta może zostać zmniejszona lub zwiększona w zależności od prędkości sieci i procesora, więc zstd jest nieco szybszy niż prędkość sieci. Z czterema rdzeniami procesora Haswell 3.2 GHz 14 daje prędkość około 120 MB / s. W tym przykładzie użyto trybu długiego 31 (używa okna 2 GB, wymaga dużo pamięci RAM, ale bardzo dobrze np. Do kompresji zrzutów bazy danych). W T0 Opcje ustawia ilość wątków z liczbą rdzeni. Należy pamiętać, że wraz z długim trybem ustawienia te zajmują dużo pamięci.
Problem z ZSTD polega na tym, że większość systemów operacyjnych nie jest dostarczana z wersją> = 1.3.4. Ta wersja jest niezbędna do prawidłowego obsługi wielu rdzeni i długiego wsparcia. Jeśli nie jest dostępny, można go skompilować i zainstalować z https://github.com/facebook/zstd za pomocą just make -j4 && sudo make install
. Zamiast ZSTD można również użyć XZ lub Pigz. xz jest wolny, ale bardzo dobrze kompresuje (dobry przy wolnych połączeniach), pigz / gzip jest szybki, ale nie tak dobrze.
pv
jest następnie używane ponownie, ale do buforowania ( q
dla cichej, C
dla trybu bez łączenia [zawsze potrzebne do buforowania] i B
do ustawienia wielkości bufora).
W tym przykładzie bufor jest również używany po stronie odbiornika. Jest to często niepotrzebne (ponieważ szybkość dekompresji i zapisu na dysku twardym jest w większości przypadków wyższa niż prędkość sieci), ale zwykle też nie szkodzi.