В следующий раз вы можете просто использовать pv
с самого начала (если это доступный через ваш менеджер пакетов, установите его). Это утилита с единственной целью - связывать входные данные с выходными, а также отслеживать прогресс и скорость.
Затем, для записи образа на диск, скажем, с размером блока 4 МБ:
pv -ptearb /path/to/image.bin | dd iflag=fullblock of=/dev/whatever bs=4M
Помимо начальной буферизации (смещение последней синхронизацией, которую можно выполнить с помощью dd
, если хотите), это покажет вам индикатор выполнения, среднюю скорость, текущую скорость и расчетное время прибытия.
Параметр iflag = fullblock
заставляет dd захватывать полные блоки ввода через pv
, в противном случае вы зависите от конвейера для размеров блоков.
Чтобы пойти другим путем, используйте dd для чтения и pv для записи, хотя вы должны явно указать размер, если источник является блочным устройством. Для устройства 4 ГБ:
dd if=/dev/whatever bs=4M | pv -ptearb -s 4096m > /path/to/image.bin
Вы также можете определить размер автоматически, например:
dd if=/dev/whatever bs=4M | pv -ptearb -s `blockdev --getsize64 /dev/whatever` > /path/to/image.bin
На самом деле не имеет значения, в каком порядке вы выполняете dd
и pv
, это полностью зависит от производительности - если устройство, на которое вы читаете или с которого вы выполняете чтение, имеет оптимальную производительность для определенных размеров блоков, вы хотите использовать dd
вместо pv
для доступа к этому устройству. Вы даже можете прикрепить dd
на обоих концах, если хотите, или вообще не использовать, если вам все равно:
pv -ptearb /path/to/image.bin > /dev/whatever
sync
USERNAME
является специальной в оболочке Z. Это всегда имя учетной записи ID пользователя процесса оболочки.
Вы не увидите поведение, которое вы наблюдали в оболочках Almquist, Watanabe, Korn или Bourne Again. Эта переменная — обычная переменная оболочки, которая поначалу не установлена. Вот, например, снаряд 93 Korn:
$ echo $USERNAME $ USERNAME=wibble $ echo $USERNAME wibble $
В оболочке Z оно начинается как имя учетной записи UID процесса оболочки. Попытка установить его будет пытаться изменить этот UID. Это, конечно, терпит неудачу, если вы не являетесь суперпользователем и оставляете переменную такой, какой она была раньше.
Однако, если бы вы запустили оболочку Z от имени суперпользователя, вы бы увидели изменение как переменной оболочки USERNAME
, так и идентификатора пользователя вашего процесса оболочки.
root # echo $USERNAME root root # USERNAME=JdeBP JdeBP %