Linux에서 블록 장치를 압축할 때 xz가 진행률을 표시하도록 하는 방법은 무엇입니까?

Linux에서 블록 장치를 압축할 때 xz가 진행률을 표시하도록 하는 방법은 무엇입니까?

xz를 사용하여 블록 장치(예: /dev/sda1) 를 압축하면 --verbose입력 파일에서 읽은 현재 크기(아래 128MiB)가 표시됩니다. 그러나 입력 파일을 읽은 비율은 표시되지 않습니다( --- %왼쪽). 이 장치의 크기에 대한 힌트를 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

관련 정보