
一部のコンプレッサーは、操作中に情報(圧縮率、合計時間、サイズなど)を表示できますxz -v
。たとえば、次のようになります。
---% 2,580.2KiB / 6,552.0KiB =0.394 1.2MiB/秒0:05
大容量ファイルを圧縮するときに圧縮率が低いときにプロセスを停止し、圧縮されていない状態に保つことができるように、タスクの圧縮率を知りたいです。
この機能を持つ他のプログラムはありますか? (xz
圧縮率は高いが速度が遅い)
答え1
これを行う一般的な方法は、pv
コンプレッサの入出力サイズを監視するなどの方法を使用することです。たとえば、
$ pv -cpterba -N in /dev/urandom | gzip | pv -cpterba -N out > /dev/null
out: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
in: 956MiB 0:00:42 [23.1MiB/s] [22.8MiB/s] [ <=> ]
ランダムデータを圧縮しようとすると、予想どおりに出力サイズが入力サイズと同じであることを上記から簡単に確認できます。
圧縮率が非常に良いファイルを使用しようとすると、次のようになります。
$ pv -cpterba -N in /dev/zero | gzip | pv -cpterba -N out > /dev/null
out: 2.62MiB 0:00:25 [ 109KiB/s] [ 107KiB/s] [ <=> ]
in: 2.65GiB 0:00:25 [ 110MiB/s] [ 108MiB/s] [ <=> ]
出力サイズは2.62MiB、入力サイズは2.65GiBで3倍ほど大きいです。
副作用として通常のファイルに使用すると、pv
ETAが提供されます。
$ pv -cpterba -N in debian-8.2.0-amd64-DVD-1.iso | gzip | pv -cpterba -N out > /dev/null
out: 578MiB 0:00:27 [22.1MiB/s] [21.4MiB/s] [ <=> ]
in: 595MiB 0:00:27 [22.1MiB/s] [ 22MiB/s] [==> ] 15% ETA 0:02:25
提示DVDイメージはほとんど圧縮されたファイルなので圧縮率が腐りにくいが、それでも完成するのに2分30秒かかる。
これを使用して、すでに実行されているプロセスを監視することもできますpv -d
。実行中のコンプレッサーに適用すると、入力ファイルと出力ファイルの場所がわかりますので、割合をすばやく確認できます。
$ pv -pterba -d "$(pidof gzip)"
3:/var/tmp/mp3s.tar: 911MiB 0:00:44 [ 20MiB/s] [19.9MiB/s] [> ] 9% ETA 0:07:35
4:/var/tmp/mp3s.tar.gz: 906MiB 0:00:44 [ 20MiB/s] [19.8MiB/s] [ <=> ]
MP3 Tarファイルもうまく圧縮されません。
メモ:多くのコンプレッサーはブロック単位で動作します。これが、転送速度が急増してからゼロに移動してプロセスを繰り返すなどの現象が発生する理由です。実際に予想される割合のアイデアを得るには、コンプレッサーをしばらく操作する必要があります。スパイク後はブロックから読み取ることができますが、圧縮バージョンはまだ作成されていません。しかし、10ブロックを待っていた場合、最大10%が間違っていました。
(私が使用しているpvオプション:プログレスバーのオン、-p
経過時間のオン-t
、-e
ETAのオン、ボーレートの表示-r
、-b
バイトカウンタのオン、パイプライン操作で複数のs-c
を作成する、ラベルを設定)。pv
-N