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
источник: 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 >