Как посмотреть прогресс dd linux

Обновлено: 07.07.2024

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

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

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

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

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

Монтаж

пример

Выход

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

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

Команда без pv будет:

Другое использование

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

Выход

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

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

пример

Выход

Обратите внимание , что параметры «дд» подходят в первой половине (входная часть трубы): 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 кажется , чтобы получить более высокую скорость ( источник ) К вашему сведению на скорости. Тесты на моем компьютере с твердотельным накопителем Samsung 840 PRO: 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 .

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

Чтобы увидеть ход dd выполнения, откройте другой терминал и введите:

Это будет отображать dd прогресс в dd окне терминала без остановки процесса. Если вы используете BSD или OS X, используйте INFO вместо USR1 . USR1 Сигнал прекращает дд.

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

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

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

Это сработало, но пара комментариев. Прежде всего, я не уверен, почему вы избежали своих кавычек (если это для редактора SO, вы сделали это неправильно). Во-вторых, я бы порекомендовал использовать ^ dd $, на случай, если что-то еще работает с префиксом dd. Наконец, вам не нужно sudo для отправки сигнала USR1. В противном случае хороший ответ +1. @Speakus Вы должны использовать 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 с буквами диска):

Скриншот

Также для архивации себя.

Вам нужно будет установить также dialog с помощью команды apt-get install dialog благодаря этому ответу обнаружил, что dialog это безумно поможет в написании сценариев оболочки: D brew install pv dialog для Mac. Также этот джентльмен вычисляет стиль. Браво.

Используйте Ctrl + Shift +, T пока dd работает, и он будет выводить прогресс (в байтах):

У меня не работает на Kubuntu Trusty. Возможно противоречивые привязки клавиш? Замечательный способ. Он работает под OSX, но не работает под ubuntu 14.04 Первая строка генерируется OS X, только последние 3 строки из dd . Вы должны быть в состоянии использовать kill -INFO на BSD, как OS X Это не работает в Ubuntu. Ctrl-T / Ctrl-Shift-T выводит только ^T на терминал (за исключением того, что многие терминальные приложения пересекают Ctrl-Shift-T и открывают новую вкладку). Многие поисковики по OSX / BSD могут оценить этот ответ, но следует уточнить, что это не для Ubuntu (или GNU / LInux в целом?)

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

Версия 8,24 из Coreutils GNU включает в себя патч для дд введения параметра для печати прогресса.

Коммит, представляющий это изменение, имеет комментарий:

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

Многие дистрибутивы, в том числе Ubuntu 16.04.2 LTS, используют эту версию.

просто хочу добавить, как я скомпилировал 8.24 coreutils: apt install build-essential и apt-get build-dep coreutils затем загрузить coreutils-8.25.tar.xz tar xvf coreutils-8.25.tar.xz configure --prefix=$HOME/usr/local и запустить make . Вновь скомпилированный dd будет в src директории. Вы можете скопировать его в / bin и заменить существующий или запустить его как src / dd Здорово! Мне нравится эта функция. И потребовалось всего около 30 лет, чтобы научить дд печатать результаты. :-) Какое облегчение! Я немедленно добавлю этот аргумент в псевдоним оболочки dd. Обратите внимание, что иногда состояние будет печататься с двумя числами, одно в единицах СИ и эквивалентное значение в двоичных единицах (например, 10 МБ, 9,5 МБ). спасибо за указатель на dcfldd, очень совместимый с dd, но с некоторыми хорошими новыми функциями. Мне особенно нравится стандартный прогресс. Почему dcfldd не очень известен, для меня полная загадка.

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

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

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

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

Запустите dd с правами root:

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

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

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

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

Полезно, хотя это не обязательно работает, если вы передаете вывод dd во что-то, кроме файла (например, gzip'ing перед записью на диск).

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, который я хочу контролировать, вот одна строка, которая позаботится обо всей энчиладе для вас; поместите все это в одну строку:

Если текст хранится как обычный текст внутри файла документа (независимо от того, состоит ли сам файл целиком из обычного текста), вы можете искать его из командной строки с рекурсивным grep. Это не требует индексации в первую очередь, но поиск по всем вашим файлам занимает очень много времени, поэтому, если вам понадобится сделать это более чем пару раз для всего вашего диска, вместо этого вы должны использовать утилиту поиска индексирования (как в этом answer). Откройте окно терминала (Ctrl + Alt + T). Измените каталог на вершину того, что вы хотите найти. Например, чтобы искать все в своем домашнем каталоге, сделайте cd

. Чтобы выполнить поиск всего на вашем компьютере, сделайте cd /. Для поиска всего на внешнем диске DocDrive do cd /media/DocDrive. Если каталог имеет пробелы в своем имени, заключите его в кавычки (например, cd '/media/Documents Drive'. Запустите рекурсивный grep следующим образом:

В качестве альтернативы вы можете пропустить шаг 2 и вместо cd в папку, в которую вы хотите заглянуть внутрь, замените . на шаге 3 именем папки, которую вы хотите просмотреть внутри.

Если вы хотите выполнить поиск по всем файлам, включая те, к которому вы обычно не имеете доступа, вы можете запустить grep в качестве обычного текста с помощью sudo:

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

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

Примечание: вы не можете использовать его, когда вы уже начали [ f14].

Обновление 2016

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

Установка

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

Выход

Команда без pv будет :

Другое использование [ ! d27]

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

Другие используют

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

dd в GNU Coreutils 8.24+ (Ubuntu 16.04 и новее) получил новую опцию status для отображения прогресса:

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

Однако команда dd, как известно, при копировании файла не отображает прогресс бар для пользователя, поэтому непонятно сколько процентов файлов уже скопировано.

В этой статье мы рассмотрим как посмотреть прогресс dd в linux, этот метод подходит не только для dd, но и для всех подобных ей утилит.

Прогресс команды Linux с помощью progress

Установка progress

Эта утилита не поставляется с системой по умолчанию. Но установить ее очень просто, программа есть в официальных репозиториях большинства дистрибутивов. Например, в Ubuntu:

sudo apt install progress

В других дистрибутивах она может быть более старой версии и назваться cv. Также вы можете собрать программу из исходников. Единственная зависимость - библиотека ncurces. В Ubuntu 16.04 ее можно установить такой командой:

sudo apt-get install libncurses-dev

В прежних версиях Ubuntu:

sudo apt-get install ncurses-dev

В Fedora и CentOS:

sudo yum install ncurses-devel

Когда удовлетворите зависимости утилиты, выполните следующую команду для загрузки исходников с GitHub:

Затем распакуйте полученный архив:

Измените текущий каталог с помощью cd:

Запустите сборку и установку:

sudo make install

Программа готова к работе.

Смотрим прогресс команды с помощью progress

После завершения установки запустите progress следующей командой:

В результате получится что-то вроде:

process

Теперь давайте запустим копирование видео из папки на рабочий стол и посмотрим что произойдет:

Команда progress покажет прогресс копирования cp:

process1

Выполним progress еще раз:

process2

Как видите, утилита показывает информацию о прогрессе копирования файла, процент скопированных данных, количество скопированных данных и общий размер файла. Это очень полезно при копировании больших файлов, например, при копировании фильмов или образов дисков. То же самое будет если запустить dd, mv, tar, zip или другую подобную утилиту.

В утилиты есть много полезных опций. Опция -w заставляет программу показывать время, оставшееся до окончания операции:

process3

process4

process5

Вы можете отслеживать состояние процесса пока он запущен:

process6

Если вы хотите постоянно наблюдать за прогрессом всех команд используйте опцию -М:

Или ее эквивалент:

Очень популярный вот такой вариант:

watch progress -w

Также можно посмотреть прогресс linux только нужной программы, например, прогресс загрузки файла в firefox:

watch progress -wc firefox

Или проверить активность web-сервера:

Способ второй - создание туннеля

То, что мы рассмотрели выше - не единственный способ посмотреть прогресс команды linux. Еще есть утилита pv. Она намного проще и выполняет только одну задачу - считает все данные проходящие через нее. Может читать поток из файла или стандартного ввода.

Поэтому ее можно использовать чтобы посмотреть прогресс выполнения команды в Linux. Например, создадим такой туннель для dd:

dd if=/dev/zero | pv | dd of=/file

Здесь мы выдаем содержимое нужного нам файла на стандартный вывод, передаем утилите pv, а затем она отдает его другой утилите, которая уже выполняет запись в файл. Для cp такое сделать не получиться, но мы можем поступить немного по-другому:

pv /ваш_файл | cat > новый_файл

Готово, здесь мы тоже получим прогресс команды копирования.

Выводы

Чтобы использовать всю мощь Linux пользователям часто приходится работать в командной строке. Чаще всего мы смотрим содержимое, копируем файлы, распаковываем архивы. В этой инструкции мы рассмотрели утилиту process, которую можно использовать для просмотра прогресса dd и других системных команд.

Мне всегда было интересно посмотреть прогресс копирования cp для больших файлов. Честно говоря, я часто имею дело с большими файлами при просмотре фильмов на своем ноутбуке.

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

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

Чтобы просмотреть ход dd после его запуска, откройте другой терминал и введите:

В окне dd будет отображаться прогресс dd , не останавливая процесс. Если вы используете BSD или OS X, используйте INFO вместо USR1 . Сигнал USR1 будет завершен dd.

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

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

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

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

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

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

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

Установка

Пример

Выход

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

Пример Предположим, что 2GB-диск скопирован из /dev /sdb

Команда без pv будет:

Другие использования

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

Выход

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

dd в GNU Coreutils 8.24+ (Ubuntu 16.04 и новее) получил новую опцию status для отображения прогресса:

Пример

Выход

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

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

Тогда некоторые примеры:

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

И мой любимый для клонирования диска:

screenshot

Также для архивирования.

Используйте Ctrl + Shift + T , пока выполняется dd , и он выведет прогресс (в байт):

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

коммит , представляющий это изменение имеет комментарий:

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

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

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

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

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

Откройте терминал и введите следующие команды:

Запустите dd как root:

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

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

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

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

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

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

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

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

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

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

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

Когда ддшником снимается образ, нет варианта видеть, сколько уже снято/сколько осталось? А то запускаешь снять, например, 80Гб диск и думаешь - 10 лет это займет или 20 минут.



// Грусть и пичаль обуревают меня. Новое поколение совсем обленилось.



man dd, там написано


pkill -x -USR1 dd


Бесполезно. У них в bashrc прописан

sudo killall -USR1 dd

Можешь ещё посмотреть в сторону pv.


killall -USR1 dd


как будет выглядеть команда?
pv|dd if=. of=. так?


Нет, как-то так: dd if=/dev/zero of=/dev/sda | pv



dd_rescue используй его



А смотреть размер результирующего файла не комильфо?


Можно ему kill'ом какой-то хитрый знак подать, он напечатает прогресс в stderr.
Но я пользуюсь pv. Пайпинг — отличная вещь, используешь pv вместо cat, а dd будет брать данные из stdin.


Я бы сделал так:

есть три решения:

1. использовать dcfldd - это более современная модификация утилиты dd, показывает прогресс операции поблочного копирования в реальном времени.

2. запустить в другом терминале команду watch -n 1 killall -USR1 dd , а затем снова переключиться на терминал с запущенным dd.

3. использование утилиты pv (пример: dd if=/dev/sda2 | pv > /home/z/sda2.img ).

* скорость копирования данных также зависит от параметра bs (размер блока данных) который вы передаете dd, задавайте bs равным кэшу диска (пример:dd if=/dev/sda of=/dev/sdb conv=noerror,sync bs=32M)

Читайте также: