@pdoの答えは良いですが、バッファーと適切な圧縮により速度を上げ、プログレスバーを追加できます。
多くの場合、ネットワークがボトルネックであり、速度は時間とともに変化します。したがって、データをネットワーク経由で送信する前にバッファリングするのに役立ちます。これはで実行できますpv
。
さらに、通常は適切な圧縮アルゴリズムを使用して速度を上げることができます。Gzip(上記で使用したような)は高速圧縮アルゴリズムですが、一般にzstandard(zstd
)(および高圧縮率の場合、LZMA / LZMA2(xz
)は同時に圧縮し、より高速になります。新しいxzおよびzstdにはマルチコアサポートが既に組み込まれています。複数のコアでgzipを使用するには、pizzを使用できます。
ネットワーク経由でプログレスバー、バッファリング、zstandard圧縮を使用してデータを送信する例を次に示します。
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 -"
1つ目pv
は、進行状況(p)、推定時間(e)、転送速度(r)、平均速度(a)、転送された合計バイト数(b)を表示することです。合計サイズが推定du
され、サイズオプション(s)に追加されます。進行状況は圧縮およびバッファリングの前に測定されるため、あまり正確ではありませんが、依然として役立ちます。
zstd
圧縮設定14で使用されます。この数は、ネットワークとCPUの速度に応じて増減できるため、zstdはネットワークの速度よりも少し速くなります。Haswell 3.2 GHz CPU 14に 4つのコアを搭載すると、速度は約120 MB / sになります。この例では、ロングモード31(2 GBのウィンドウを使用し、大量のRAMを必要としますが、データベースダンプの圧縮などに非常に適しています)が使用されます。T0のオプションは、コア数にスレッドの量を設定します。これらの設定は長いモードと一緒に多くのメモリを使用することに注意してください。
zstdの問題は、ほとんどのオペレーティングシステムがバージョン1.3.4以上で出荷されていないことです。このバージョンは、適切なマルチコアと長いサポートに必要です。利用できない場合、それはからコンパイルしてインストールすることができますhttps://github.com/facebook/zstdだけでmake -j4 && sudo make install
。zstdの代わりに、xzまたはpigzも使用できます。xzは低速ですが、非常に良好に圧縮します(低速接続で良好)、pizz / gzipは高速ですが、あまり圧縮しません。
pv
その後、再び使用されますが、バッファリングに使用します(q
静かにするC
ため、非スプライスモード(常にバッファリングに必要B
)、およびバッファサイズを設定するため)。
この例では、受信側でもバッファが使用されます。多くの場合、これは不要です(解凍とハードディスクの書き込み速度はほとんどの場合ネットワーク速度より速いため)が、通常は害もありません。