Как разрешить xz показывать процентный прогресс при сжатии блочного устройства в Linux?

Как разрешить xz показывать процентный прогресс при сжатии блочного устройства в Linux?

Когда я использую xz для сжатия блочного устройства (например, /dev/sda1), --verboseпоказывает текущий размер, прочитанный из входного файла (128 МБ ниже). Однако он не показывает процент прочитанного входного файла ( --- %слева). Можно ли дать 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

Связанный контент