Обновление 2016 : Если вы используете GNU coreutils> = 8.24 (по умолчанию в Ubuntu Xenial 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 if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw
.pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000
работает, проверено. @SopalajodeArrierez, параметры могут быть заданы во втором дд.pv < /dev/sda > /dev/sdb
кажется , чтобы получить более высокую скорость ( источник )dd if=/dev/urandom | pv | of=/dev/sdb
скорость записиdd if=/dev/zero | pv | of=/dev/sdb
~ 18 МБ / с, скорость ~ 80 МБ / с, а у старойdd if=/dev/zero of=/dev/sdb
версии ~ 550 МБ / с (близко к максимальной скорости записи SSD). Все сbs=4096000
.От HowTo: следить за прогрессом дд
Вы можете отслеживать прогресс dd, не останавливая его, используя
kill
команду.Чтобы увидеть ход
dd
выполнения, откройте другой терминал и введите:Это будет отображать
dd
прогресс вdd
окне терминала без остановки процесса. Если вы используете BSD или OS X, используйтеINFO
вместоUSR1
.USR1
Сигнал прекращает дд.Если вы хотите получать регулярные обновления
dd
прогресса, введите:watch
будет проверятьdd
процесс каждые -n секунд (-n5
= 5 секунд) и сообщать, не останавливая его.Обратите внимание на правильные одинарные кавычки в командах выше.
источник
kill -INFO $(pgrep ^dd$)
в системах BSD (например, OSX).sudo pkill -usr1 dd
легче запомнить, отлично работает (по крайней мере, в Ubuntu 14.04) и меньше печатать.pv
это замедлит передачу, как показал Тедд Хансен. Кроме того, я держу пари, что многие люди гуглят это, потому что они уже началиdd
операцию;)Несколько удобных примеров использования с
pv
меньшим набором текста или большим прогрессом, чем другие ответы:Сначала вам нужно будет установить
pv
команду:Тогда некоторые примеры:
Примечание: первый образец набирает на 5 символов меньше
dd if=/dev/urandom | pv | dd of=/dev/null
.И мой любимый для клонирования дисковода (заменить X с буквами диска):
источник: http://www.cyberciti.biz/faq/linux-unix-dd-command-show-progress- while-coping/
Также для архивации себя.
источник
dialog
с помощью командыapt-get install dialog
dialog
примеру. SERENITY СЕЙЧАС !dialog
это безумно поможет в написании сценариев оболочки: Dbrew install pv dialog
для Mac. Также этот джентльмен вычисляет стиль. Браво.Используйте Ctrl+ Shift+, Tпока
dd
работает, и он будет выводить прогресс (в байтах):источник
dd
.^T
на терминал (за исключением того, что многие терминальные приложения пересекают Ctrl-Shift-T и открывают новую вкладку). Многие поисковики по OSX / BSD могут оценить этот ответ, но следует уточнить, что это не для Ubuntu (или GNU / LInux в целом?)Для полноты картины:
Версия 8,24 из Coreutils GNU включает в себя патч для дд введения параметра для печати прогресса.
Коммит, представляющий это изменение, имеет комментарий:
Многие дистрибутивы, в том числе Ubuntu 16.04.2 LTS, используют эту версию.
источник
apt install build-essential
иapt-get build-dep coreutils
затем загрузить coreutils-8.25.tar.xztar xvf coreutils-8.25.tar.xz
configure --prefix=$HOME/usr/local
и запуститьmake
. Вновь скомпилированныйdd
будет вsrc
директории. Вы можете скопировать его в / bin и заменить существующий или запустить его как src / ddЛучше всего использовать http://dcfldd.sourceforge.net/, его легко установить через apt-get
источник
dd
и опциюstatus=on
по умолчанию для сообщений о ходе выполненияstatusinterval=N
(N в блоках) для частоты обновления сообщений иsizeprobe=[if|of]
для процентного показателя. Я буду псевдоним это кDD
:)Родной статус прогресса был добавлен в dd !!!
Новая версия Coreutils (8.24) добавляет статус прогресса в
dd
инструмент:Использование на Xubuntu 15.10:
Откройте терминал и введите эти команды:
Запустите
dd
с правами root:Вы увидите: байты, секунды и скорость (байт / секунда).
Чтобы проверить версии
dd
:Родные:
Новое:
источник
Если вы уже запустили dd и записываете файл, например, при создании копии pendrive на диск, вы можете использовать команду watch для постоянного наблюдения за размером выходного файла, чтобы увидеть изменения и оценить завершение.
Чтобы увидеть только размер файла (человеческое представление):
источник
dd | pv | dd
Триада сделала мой 50GB VM копия займет 800 секунд, в отличие от 260 секунд , используя только дд. С этим конвейером, по крайней мере, pv не знает, насколько велик входной файл, поэтому он не сможет сказать вам, как далеко вы продвинулись, поэтому нет недостатка в том, чтобы сделать это следующим образом - и вы получите хорошее преимущество в скорости:Я хотел бы избежать pv на что-нибудь большое, и (если использовать Bash):
Контрол-д процесс
bg
поставить его в фоновом режиме. Обратите внимание, чтоbg
это даст вам вывод, например,[1] 6011
где последний номер является идентификатором процесса. Ну действуй:while true; do kill -USR1 process_id ; sleep 5; done
где process_id - это идентификатор процесса, который вы наблюдали. Хит Control-C, когда вы видите что-то вроде:
Вы сделали.
Редактировать: Глупый системный администратор! Автоматизируй свою жизнь, не работай! Если у меня есть длинный процесс dd, который я хочу контролировать, вот одна строка, которая позаботится обо всей энчиладе для вас; поместите все это в одну строку:
Вы можете, конечно, написать его, возможно, сделав $ 1 вашим входным файлом и $ 2 вашим выходным файлом. Это оставлено в качестве упражнения для читателя. Обратите внимание, что вам нужно немного поспать, прежде чем убить или убить может попытаться отправить сигнал на dd, когда он еще не готов. Приспособьте свои сны по желанию (возможно, даже удалите второй сон вообще).
Баш- FTW! :-)
источник
while
петлю. Используйтеwatch
.sudo watch pkill dd
. Тогда смотритеdd
вывод статистики удобно.watch pkill -USR1 -x dd
. Так как я также используюwatch
для других подобных задач, это естественно.http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html
В основном:
источник
Самый простой это:
oflag=dsync
синхронизирует ваши записи, поэтому информация о нихstatus=progress
будет более точной. Однако это может быть немного медленнее.источник
conv=fsync
лучше использоватьНа Ubuntu 16.04
Ubuntu 16.04 поставляется с dd (coreutils) версии 8.25 . Таким образом, вариант
status=progress
будет Поддерживается :-)Чтобы использовать его, просто добавьте
status=progress
вместе с вашейdd
командой.Пример :
Дает статус как
источник
Используйте опцию,
status=progress
чтобы получить прогресс во время перевода.Кроме того,
conv=fsync
будут отображаться ошибки ввода-вывода.Пример:
источник
Мне очень нравится ddrescue, он работает как dd, но выдает результат и не дает ошибок при ошибках, напротив, у него очень продвинутый алгоритм, и он очень старается сделать успешную копию ... Для этого также есть много GUI
Проект: https://www.gnu.org/software/ddrescue
Википедия: https://en.wikipedia.org/wiki/Ddrescue
источник
Я создал оболочку bash,
dd
которая будет использоватьсяpv
для отображения прогресса. Положите его в свой.bashrc
и используйтеdd
как обычно:Источник:
источник
#!/bin/bash
. Внизу:tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@"
или вы можете хотеть жестко прописатьdd
местоположение. Тогда используйтеlocal dd=/usr/bin/dd
. Не забудьте добавить исполняемый бит:chmod +x /usr/local/dd
.Поэтому сегодня я немного расстроился попыткой запустить
kill
цикл во времяdd
работы и пришел к такому методу, который позволяет легко запускать их параллельно:Теперь используйте только
vdd
то, что вы обычно используетеdd
(он передает все аргументы напрямую), и вы будете получать отчет о ходе работы каждые 5 секунд.Единственным недостатком является то, что команда не возвращается сразу после завершения dd; поэтому возможно, что эта команда заставит вас ждать еще 5 секунд после того, как dd вернется, прежде чем он заметит и выйдет.
источник
Это заставляет dd предоставлять статистику каждые 2 секунды, что по умолчанию для часов:
Чтобы изменить каждые 2 секунды на каждые 5 секунд, добавьте параметр -n 5 следующим образом:
источник
На всякий случай, если кто-нибудь из CentOS Land найдет эту тему ...
Опция status = progress работает с CentOS 7.5 и 7.6
Ответ выше @davidDavidson подразумевает, что эта функция была недавно добавлена в Coreutils 8.24.
Это может иметь место, но CentOS может не следовать той же схеме управления версиями.
Версия Coreutils, которая поставляется с CentOS 7.6.1810:
И версия dd, которая установлена:
Это показывает версии 8.22 .
Тем не менее, я проверил «status = progress» с dd на CentOS 7.5 и CentOS 7.6 (оба с версией 8.22 Coreutils), и он работает правильно.
Я не знаю, почему RedHat выбирает такую старую версию Coreutils, но функциональность существует с 8.22.
источник
Как упоминалось выше, по крайней мере, с помощью 'dd' из GNU coreutils или busybox, он будет реагировать на сигнал USR1, печатая информацию о ходе выполнения в stderr.
Я написал небольшой скрипт-обертку для dd, который показывает хороший показатель завершения процента и пытается никак не повлиять на процесс или способ работы dd. Вы можете найти его на github:
http://github.com/delt01/dd_printpercent
К сожалению, этот прием SIGUSR1 работает только с GNU dd (из пакета coreutils) или с занятым режимом 'dd', когда эта особенность включена во время компиляции. Он не работает со стандартным dd, включенным в большинство систем BSD, включая FreeBSD и OS X ... :(
источник
Вы можете наблюдать за ходом использования любой программы coreutils
progress - Coreutils Progress Viewer
.Он может контролировать:
cp mv dd tar cat rsync grep fgrep egrep cut sort md5sum sha1sum sha224sum sha256sum sha384sum sha512sum adb gzip gunzip bzip2 bunzip2 xz unxz lzma unlzma 7z 7za zcat bzcat lzcat split gpg
Вы можете увидеть справочную страницу
Вы можете использовать его в отдельном окне терминала во время выполнения команды или запустить его с помощью команды dd:
Здесь
&
разветвляется первая команда и продолжается немедленно, вместо того, чтобы ждать, пока команда не закончится.Команда progress запускается с помощью:
-m
поэтому она ожидает окончания отслеживаемого процесса,-p
поэтому она отслеживает заданный pid и$!
является последним pid команды.Если вы запускаете dd с помощью sudo, вам тоже нужно продвигаться:
источник