Linux でブロック デバイスを圧縮するときに xz に進行状況をパーセンテージで表示させるにはどうすればよいでしょうか?

Linux でブロック デバイスを圧縮するときに xz に進行状況をパーセンテージで表示させるにはどうすればよいでしょうか?

xz を使用してブロック デバイス (例/dev/sda1) を圧縮すると、--verbose入力ファイルから読み取られた現在のサイズ (以下、128 MiB) が表示されます。ただし、読み取られた入力ファイルのパーセンテージ (--- %左側) は表示されません。このデバイスのサイズについて xz にヒントを与えて、パーセンテージを表示できるようにすることは可能ですか? たとえば、通常のファイルを圧縮する場合、xz は0.7 %以下を表示します。

$ sudo xz -1ck --verbose /dev/sda1 > /dev/null
/dev/sda1 (1/1)
  --- %        12.2 MiB / 128.0 MiB = 0.095    21 MiB/s       0:06             
^C
$ sudo xz -1ck --verbose a_normal_file > /dev/null
a_normal_file (1/1)
  0.7 %         11.6 MiB / 12.7 MiB = 0.916   2.3 MiB/s       0:05             
^C
$ 

答え1

xzパーティションは通常のファイルではないため、パーティションのサイズを確認することはできず、したがってレポートも行われません。

ただし、 で処理することはできますdd if=/dev/sda1 status=progress | xz -1k --verbose > /dev/null。ただし、詳細は取得できません。 それぞれの出力を別々のまたはファイルxzにリダイレクトする必要があります。ttytail

答え2

パーティション サイズ (キビバイト) は から取得でき/proc/partitions、そのdd出力は次のように に渡すことができますpv

$ kb=$(grep $(basename /dev/sdb1) /proc/partitions | awk '{print $3}')
$ sudo dd if=/dev/sdb1 | pv -s ${kb}K | xz -1k >/dev/null
72,2MiO 0:00:20 [2,58MiB/s] [========>                         ] 28% ETA 0:00:49

関連情報