時間適応型圧縮ツール

時間適応型圧縮ツール

大きなファイルをリモート サーバーにコピーするシナリオについて質問しています。

最も単純なケースは次のとおりです。

tar c myfile | ssh myserver tar x

ネットワーク接続が高速であれば、すべて問題ありません。

遅いネットワークでは

tar c myfile | bzip2 -1 | ssh myserver tar xj

-- CPU 時間を犠牲にして転送を高速化します。

もちろん、圧縮率をいろいろ試して、CPU が忙しくなりすぎてネットワークが飽和状態にならないように、適切な圧縮率を推測することもできます。

bzip2出力バッファがビジー状態のときに、 / xz/... に可能な限り圧縮するように指示する圧縮ユーティリティまたは圧縮フラグはありますか?

答え1

zstd --adapt

zstd圧縮ユーティリティ適応型圧縮をオンにするオプションがあります (このオプションはzstdv1.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 条件 (およびおそらくデータ自体) に適応していることを示しています。

関連情報