大きなファイルをリモート サーバーにコピーするシナリオについて質問しています。
最も単純なケースは次のとおりです。
tar c myfile | ssh myserver tar x
ネットワーク接続が高速であれば、すべて問題ありません。
遅いネットワークでは
tar c myfile | bzip2 -1 | ssh myserver tar xj
-- CPU 時間を犠牲にして転送を高速化します。
もちろん、圧縮率をいろいろ試して、CPU が忙しくなりすぎてネットワークが飽和状態にならないように、適切な圧縮率を推測することもできます。
bzip2
出力バッファがビジー状態のときに、 / xz
/... に可能な限り圧縮するように指示する圧縮ユーティリティまたは圧縮フラグはありますか?
答え1
zstd --adapt
のzstd
圧縮ユーティリティ適応型圧縮をオンにするオプションがあります (このオプションはzstd
v1.3.6 で追加されました)。これにより、圧縮が「現在認識されている I/O 条件」に合わせて調整されます。
zstd
詳細についてはマニュアルを参照してください。
完全なパイプラインは次のようになります。
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'cd /someplace && { zstd -d | tar -x -f -;}'
または
tar -c -f - source_directory |
zstd --adapt |
ssh user@server 'zstd -d | tar -x -C /someplace -f -'
-v
パイプラインの最初に追加するとzstd
、次のような進行状況インジケーターが表示されます。
(L7) Buffered : 32 MB - Consumed : 192 MB - Compressed : 72 MB => 37.50%
ここで、 は(L7)
圧縮レベルを示します。中程度の大きさのデータの場合、時間の経過とともに変動することが予想されます。これは、zstd
が実際に I/O 条件 (およびおそらくデータ自体) に適応していることを示しています。