- Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
- Как узнать о ходе процесса копирования командой dd?
- Как посмотреть прогресс копирования в Linux
- Прогресс команды Linux с помощью progress
- Установка progress
- Смотрим прогресс команды с помощью progress
- Способ второй — создание туннеля
- Выводы
- dd, прогресс
- Как вы отслеживаете прогресс dd?
- 19 ответов
- Способ 1. Используя pv
- Способ 2: Добавлена опция status в dd (GNU Coreutils 8.24 +)
- Пример
- Выход
Peter Leung, «Командная строка: маленькие хитрости от Linux Commando»
Как узнать о ходе процесса копирования командой dd?
Популярная, многофункциональная команда dd часто служит для копирования файлов с одного места в другое. Применяется для копирования целых разделов и даже дисков.
Как и многие другие команды, она молча работает, если не случится ничего непредвиденного. Отсутствие видимого отклика очень удобно для использования команды в скриптах. Однако, когда копируются большие файлы, хочется иметь представление о ходе процесса.
Для примера: можно заставить dd копировать случайно генерируемые числа в «черную дыру» ≈ действие абсолютно бесполезное, зато наглядное.
Выполнение этой команды займет несколько минут, пока команда скопирует (и немедленно сбросит) 100 блоков по 1Кб каждый.
Чтобы получить от работающей программы отчет о ходе процесса, нужно открыть второй терминал и послать специальный USR1 сигнал процессу dd.
Для начала нужно узнать ID этого процесса. Во втором терминале набираем:
- Примечание переводчика: Данное в одинарных кавычках регулярное выражение означает «выражение начинается с dd и заканчивается dd», другими словами, искать только dd безо всяких других букв спереди или сзади. Почему это так, вы поймете, запустив альтернативную команду:
Вот сколько процессов имеют в своем названии «dd»!
Осталось послать процессу 8789 сигнал USR1:
Как только вы пошлете сигнал, команда dd, продолжающая копирование в первом терминале, отреагирует, выдав текущую статистику на STDERR (Стандартный поток сообщений об ошибках).
Выдав это сообщение, программа dd возобновит копирование. Можете повторять команду kill столько раз, сколько вам нужно. А можете применить команду watch, которая будет запускать команду kill с указанными вами интервалами:
Источник
Как посмотреть прогресс копирования в Linux
Однако команда dd, как известно, при копировании файла не отображает прогресс бар для пользователя, поэтому непонятно сколько процентов файлов уже скопировано.
В этой статье мы рассмотрим как посмотреть прогресс dd в linux, этот метод подходит не только для dd, но и для всех подобных ей утилит.
Но есть очень простое решение, и даже два. Первое, это утилита Coreutils Viewer или progress (раньше известная как cv). Программа написана на С и ищет выполняемые в данный момент в системе программы такие как: mv, cp, dd, tar, unzip и т д и отображает процент скопированных данных. Второе, более интересное. Мы можем направить данные через туннель pv, который будет считать с какой скоростью они передаются и сколько еще осталось. Рассмотрим сначала первый способ.
Содержание статьи:
Прогресс команды Linux с помощью progress
Установка progress
Эта утилита не поставляется с системой по умолчанию. Но установить ее очень просто, программа есть в официальных репозиториях большинства дистрибутивов. Например, в Ubuntu:
В других дистрибутивах она может быть более старой версии и назваться cv. Также вы можете собрать программу из исходников. Единственная зависимость — библиотека ncurces. В Ubuntu 16.04 ее можно установить такой командой:
В прежних версиях Ubuntu:
В Fedora и CentOS:
Когда удовлетворите зависимости утилиты, выполните следующую команду для загрузки исходников с GitHub:
Затем распакуйте полученный архив:
Измените текущий каталог с помощью cd:
Запустите сборку и установку:
Программа готова к работе.
Смотрим прогресс команды с помощью progress
После завершения установки запустите progress следующей командой:
В результате получится что-то вроде:
Теперь давайте запустим копирование видео из папки на рабочий стол и посмотрим что произойдет:
Команда progress покажет прогресс копирования cp:
Выполним progress еще раз:
Как видите, утилита показывает информацию о прогрессе копирования файла, процент скопированных данных, количество скопированных данных и общий размер файла. Это очень полезно при копировании больших файлов, например, при копировании фильмов или образов дисков. То же самое будет если запустить dd, mv, tar, zip или другую подобную утилиту.
В утилиты есть много полезных опций. Опция -w заставляет программу показывать время, оставшееся до окончания операции:
Если вы хотите видеть упрощенный вывод без дополнительных сообщений используйте опцию -q. И наоборот для показа всех предупреждений и ошибок воспользуйтесь -d. Например, лучше использовать cv со следующими опциями:
Вы можете отслеживать состояние процесса пока он запущен:
Если вы хотите постоянно наблюдать за прогрессом всех команд используйте опцию -М:
Или ее эквивалент:
Очень популярный вот такой вариант:
Также можно посмотреть прогресс linux только нужной программы, например, прогресс загрузки файла в firefox:
Или проверить активность web-сервера:
Способ второй — создание туннеля
То, что мы рассмотрели выше — не единственный способ посмотреть прогресс команды linux. Еще есть утилита pv. Она намного проще и выполняет только одну задачу — считает все данные проходящие через нее. Может читать поток из файла или стандартного ввода.
Поэтому ее можно использовать чтобы посмотреть прогресс выполнения команды в Linux. Например, создадим такой туннель для dd:
Здесь мы выдаем содержимое нужного нам файла на стандартный вывод, передаем утилите pv, а затем она отдает его другой утилите, которая уже выполняет запись в файл. Для cp такое сделать не получиться, но мы можем поступить немного по-другому:
Готово, здесь мы тоже получим прогресс команды копирования.
Выводы
Чтобы использовать всю мощь Linux пользователям часто приходится работать в командной строке. Чаще всего мы смотрим содержимое, копируем файлы, распаковываем архивы. В этой инструкции мы рассмотрели утилиту process, которую можно использовать для просмотра прогресса dd и других системных команд.
Мне всегда было интересно посмотреть прогресс копирования cp для больших файлов. Честно говоря, я часто имею дело с большими файлами при просмотре фильмов на своем ноутбуке.
Источник
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)
Источник
Как вы отслеживаете прогресс dd?
dd — это чудо. Он позволяет дублировать жесткий диск на другом, полностью обнулить жесткий диск и т. Д. Но как только вы запустите команду dd , вам нечего сказать о ее прогрессе. Он просто сидит там под курсором, пока команда окончательно не завершится. Итак, как можно отслеживать прогресс dd?
19 ответов
Вы можете отслеживать ход 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 ниже для альтернативного способа отображения прогресса .
Способ 1. Используя pv
Установите pv и поместите его между командами ввода /вывода dd .
Примечание : вы не можете использовать его, когда вы уже начали dd .
pv — Pipe Viewer — это основанный на терминале инструмент для мониторинга прогресс данных по трубопроводу. Его можно вставить в любой нормальный трубопровод между двумя процессами, чтобы дать визуальную индикацию как быстро проходят данные, сколько времени прошло, как близко до его завершения, и оценить, как долго это будет завершение.
Установка
Пример
Выход
Вы можете указать приблизительный размер с помощью —size , если вы хотите оценить время.
Пример Предположим, что 2GB-диск скопирован из /dev /sdb
Команда без pv будет:
Другие использования
Вы можете, конечно, использовать pv напрямую, чтобы вывести вывод в stdout:
Выход
Обратите внимание, что в этом случае pv автоматически распознает размер.
Способ 2: Добавлена опция status в dd (GNU Coreutils 8.24 +)
dd в GNU Coreutils 8.24+ (Ubuntu 16.04 и новее) получил новую опцию status для отображения прогресса:
Пример
Выход
Несколько удобных примеров использования с pv и меньше набрав или больше прогресса, чем другие ответы:
Сначала вам нужно установить pv с помощью команды:
Тогда некоторые примеры:
Примечание: первый образец не содержит 5 символов, затем dd if=/dev/urandom | pv | dd of=/dev/null .
И мой любимый для клонирования диска:
Также для архивирования.
Используйте Ctrl + Shift + T , пока выполняется dd , и он выведет прогресс (в байт):
Версия 8.24 из GNU coreutils содержит патч для dd, вводящий параметр для печати прогресса.
коммит , представляющий это изменение имеет комментарий:
dd: новый уровень статус = прогресс для периодической печати статистики
Многие дистрибутивы, включая Ubuntu 16.04.2 LTS , используют эту версию.
Лучше всего использовать http://dcfldd.sourceforge.net/ его легко установить через apt-get
В 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-процесс, который я хочу контролировать, вот один лайнер, который позаботится обо всем энчилада для вас; поместите это все в одну строку:
Вы можете, конечно, сценарий, возможно, сделать $ 1 ваш входной файл и $ 2 ваш выходной файл. Это остается как упражнение для читателя. Обратите внимание, что вам нужен этот маленький сон перед убийством или смерть может умереть, чтобы отправить сигнал на dd, когда он еще не готов. Отрегулируйте свои спящие по желанию (возможно, вообще удалите второй сон).
Источник