Как вы отслеживаете прогресс dd?

dd это чудо. Это позволяет дублировать жесткий диск на другой, полностью обнулять жесткий диск и т.д. Но как только вы запускаете dd командование, мне нечего сообщить вам о его прогрессе. Он просто сидит там у курсора до тех пор, пока команда окончательно не завершится. Итак, как можно отслеживать прогресс dd?

Обновление 2016 года>: Если вы используете GNU coreutils = 8.24 (по умолчанию в Ubuntu от 16.04 и выше), смотрите метод 2 ниже для альтернативного способа отображения прогресса.


Способ 1: С помощью pv

Устанавливать pv и поместите его только между вводом / выводом dd команды.

Примечание: вы не можете использовать его, если вы уже начали dd.

От описание пакета:

pv - Pipe Viewer - это инструмент на базе терминала для мониторинга прохождения данных по конвейеру. Он может быть вставлен в любой обычный конвейер между двумя процессами, чтобы дать визуальное представление о том, как быстро проходят данные, сколько времени это заняло, насколько близко к завершению, и оценить, сколько времени потребуется до завершения.

Установка

sudo apt-get install pv

Пример

dd if=/dev/urandom | pv | dd of=/dev/null

Выход

1,74MB 0:00:09 [ 198kB/s] [      <=>                               ]

Вы могли бы указать приблизительный размер с помощью --size если вам нужна оценка времени.


Пример, предполагающий, что диск объемом 2 ГБ копируется из /dev/sdb

Команда без pv было бы:

sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096

Команда с pv:

sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096

Выход:

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

Другие виды применения

Вы, конечно, можете использовать pv непосредственно для передачи выходных данных в stdout:

pv /home/user/bigfile.iso | md5sum

Выход

50,2MB 0:00:06 [8,66MB/s] [=======>         ] 49% ETA 0:00:06

Обратите внимание, что в этом случае, pv распознает размер автоматически.


Способ 2: Новый status опция, добавленная в dd (GNU Coreutils 8.24+)

dd в GNU Coreutils 8.24+ (Ubuntu 16.04 и новее) появился новый status возможность отображения прогресса:

Пример

dd if=/dev/urandom of=/dev/null status=progress

Выход

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s

От Как это сделать: Следить за ходом выполнения dd

Вы можете следить за ходом выполнения dd как только он запустится, не останавливая его с помощью kill команда для отправки сигнала процессу.

После того, как вы начнете dd, откройте другой терминал и введите любой:

sudo kill -USR1 $(pgrep ^dd$)

Или, если вы используете BSD или OS X:

sudo kill -INFO $(pgrep ^dd$)

Это покажет прогресс в dd окно терминала без остановки процесса (путем печати в его поток stderr). Например:

# dd if=/dev/urandom of=rando bs=1024 count=1048576335822+0 records in335821+0 records out343880704 bytes (344 MB, 328 MiB) copied, 6.85661 s, 50.2 MB/s

Если вы хотите регулярно получать обновления о dd прогресс, затем введите:

watch -n5 'sudo kill -USR1 $(pgrep ^dd$)'

watch будет исследовать dd обрабатывайте каждые -n секунд (-n5 = 5 секунд) и сообщить, не останавливая его.

Обратите внимание на правильные одинарные кавычки в приведенных выше командах.

Несколько удобных примеров использования с pv и меньше печатать или больше прогресса, чем другие ответы:

Сначала вам нужно будет установить pv, с помощью команды:

sudo apt-get install pv

Тогда вот несколько примеров:

pv -n /dev/urandom | dd of=/dev/nullpv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror

Примечание: первый образец содержит на 5 символов меньше текста, чем dd if=/dev/urandom | pv | dd of=/dev/null.

И мой любимый для клонирования диска (замените X буквами диска):

(pv -n /dev/sdX | dd of=/dev/sdX bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

screenshot

источник: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress-while-coping/

Также для того, чтобы архивировать себя.

Для полноты картины:

Версия 8.24 из GNU coreutils включает исправление для dd, вводящее параметр для печати прогресса.

Фиксация введение этого изменения содержит комментарий:

dd: новый статус=прогресс уровень для периодической печати статистики

Множество дистрибутивов, включая Ubuntu 16.04.2 LTS используйте эту версию.

Воспользуйся Ctrl+Shift+T пока dd выполняется, и он выведет информацию о ходе выполнения (в байтах):

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s321121+0 records in321120+0 records out164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)

Самое лучшее - это использовать http://dcfldd.sourceforge.net/ его легко установить с помощью apt-get

Собственный статус прогресса был добавлен в dd!!!

Новая версия Coreutils (8.24) добавляет статус выполнения к dd инструмент:

Использование на Xubuntu 15.10:

Откройте терминал и введите эти команды:

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xztar -xf coreutils-8.24.tar.xzcd coreutils-8.24./configure && make -j $(nproc)

Бежать dd как корень:

sudo sucd src./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

Вы увидите: Байты, секунды и скорость (байты/секунда).

Чтобы проверить версии dd:

Родной:

dd --version

Новое:

cd coreutils-8.24/src./dd --version

Если вы уже запустили dd и записываете файл, например, при создании копии флешки на диск, вы можете использовать команду watch для постоянного наблюдения за размером выходного файла, чтобы увидеть изменения и оценить завершение.

watch ls -l /pathtofile/filename

Чтобы увидеть только размер файла (h-человеческий вид):

watch ls -sh /pathtofile/filename

То dd | pv | dd из-за triad моя копия виртуальной машины объемом 50 ГБ заняла 800 секунд, в отличие от 260 секунд при использовании только dd. С помощью этого конвейера, по крайней мере, pv понятия не имеет, насколько велик входной файл, поэтому он не сможет сказать вам, как далеко вы продвинулись, так что нет никаких недостатков в том, чтобы делать это следующим образом - и вы получаете хорошее преимущество в скорости:

Я бы избегал pv на чем-либо большом и (при использовании Bash):

Контроль-Z процесс dd

bg чтобы поместить его в фоновый режим. Обратите внимание, что bg даст вам результат, подобный [1] 6011 где последнее число является идентификатором процесса. Итак, делайте:

while true; do kill -USR1 process_id ; sleep 5; done

где process_id - это идентификатор процесса, который вы наблюдали. Нажмите Control-C, когда увидите что-то вроде:

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse-bash: kill: (60111) - No such process

С тобой покончено.

Редактировать: Глупый Системный Администратор! Автоматизируйте свою жизнь, не работайте! Если у меня есть длительный процесс dd, который я хочу отслеживать, вот однострочный, который позаботится обо всей энчиладе для вас; поместите все это в одну строку:

 dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done

Вы можете, конечно, написать сценарий, возможно, сделать $ 1 вашим входным файлом и $ 2 вашим выходным файлом. Это оставлено в качестве упражнения для читателя. Обратите внимание, что вам нужно немного поспать перед убийством, иначе убийство может умереть, пытаясь отправить сигнал в dd, когда он еще не готов. Отрегулируйте свой режим сна по желанию (возможно, даже полностью удалите второй режим сна).

Баш- ФТВ! :-)

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

В основном:

kill -USR1 < dd pid >