如何让 xz 在 Linux 中压缩块设备时显示百分比进度?

如何让 xz 在 Linux 中压缩块设备时显示百分比进度?

当我使用 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详细信息。你需要做的是将每个的输出重定向到单独的tty或 文件和tail它们。

答案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

相关内容