Команда dd — это мощный инструмент командной строки в Linux для копирования и преобразования данных между файлами и устройствами, например при создании резервных копий, записи ISO‑образов на USB‑накопители или клонировании дисков. Однако по умолчанию эта команда не показывает прогресс выполнения, что затрудняет отслеживание длительных операций копирования. Это может привести к тому, что терминал долгое время выглядит «зависшим» без какой‑либо индикации процесса.
В этом материале мы подробно разберем, как сделать прогресс копирования видимым, какие существуют методы мониторинга и когда их применять.
Что происходит при запуске dd без прогресса
По умолчанию команда dd запускается и молча выполняет свою работу до завершения. Он не отображает процент выполнения, текущий объем скопированных данных или скорость передачи. Только по окончании выполнения вы увидите детализацию вроде скопированных блоков, общего объема и времени, затраченного на операцию.
Такой подход удобен для автоматизации и скриптов, но неинформативен для интерактивной работы, особенно при копировании больших файлов или устройств.
Способы увидеть прогресс команды dd
1. Использование параметра status=progress
Самый простой и быстрый способ — добавить опцию status=progress к команде dd. Эта возможность доступна начиная с версии coreutils 8.24 и выше, которая есть в актуальных Ubuntu, Debian, Fedora и многих других дистрибутивах.
Пример команды:
sudo dd if=/path/to/input of=/path/to/output bs=4M status=progress
При этом dd будет периодически выводить в терминал количество байт, которые уже скопированы, сколько времени прошло и скорость записи. Это позволяет оценивать прогресс вживую во время выполнения.
2. Установка и использование утилиты progress
Если вы забыли указать флаг status=progress или процесс уже запущен, можно воспользоваться специальной программой progress. Эта утилита анализирует выполняющиеся процессы и показывает прогресс для dd, а также для других команд вроде cp, mv, rsync и др.
Как установить progress
В зависимости от дистрибутива Linux:
- Debian, Ubuntu, Linux Mint:
sudo apt install progress
- Fedora, RHEL, CentOS:
sudo dnf install progress
- Arch / Manjaro:
sudo pacman -S progress
После установки просто откройте новый терминал и запустите:
progress
Эта команда покажет список активных задач и индикаторы прогресса. Это удобно, если вы забыли добавить флаг к уже запущенному процессу.
Альтернативы и дополнительные инструменты
Использование pv для визуального прогресса
Команда pv (pipe viewer) позволяет отслеживать прохождение данных через пайп, показывая скорость, процент и оставшееся время. Её можно использовать вместе с dd, если требуется более подробный прогресс‑бар.
Пример:
pv input.iso | dd of=/dev/sdb bs=4M
Этот способ показывает прогресс более визуально, чем стандартный вывод dd.
Практическое применение: создание загрузочного USB
Часто dd применяют для записи образов ISO на USB‑накопители. Без прогресса это может выглядеть так:
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M
Терминал будет молчать, пока процесс не закончится. Добавив:
sudo dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress
вы будете видеть, сколько мегабайт уже записано и сколько осталось, что значительно удобнее при работе с большими файлами.
Советы по использованию dd
- Используйте размер блока (
bs) в несколько мегабайт для ускорения записи больших образов. - Команда
syncможет помочь убедиться, что все данные действительно записаны на диск после завершенияdd. - Если прогресс не отображается, возможно, вы используете старую версию
dd.
Заключение
Понимание того, как отобразить прогресс выполнения команды dd, важно для продуктивной работы в Linux, особенно при копировании больших объемов данных. Основные методы:
- Добавление параметра status=progress к команде
dd— самый простой способ. - Использование утилиты progress для мониторинга уже запущенных процессов.
- Применение pv для визуального прогресса через пайп.
Эти решения позволяют эффективно отслеживать выполнение операций и избегать неопределенности при длительных задачах копирования.
Часто задаваемые вопросы
Что делает опция status=progress в команде dd?
Параметр status=progress заставляет dd периодически выводить на экран информацию о количестве данных, скорости и времени, прошедшем с начала операции копирования.
Можно ли показать прогресс уже запущенного процесса dd?
Да. Если вы не добавили status=progress, можно установить утилиту progress и выполнить её в новом терминале. Она покажет прогресс активных процессов, включая dd.
Нужна ли установка сторонних инструментов?
Для использования status=progress установка не требуется. Но для расширенного мониторинга уже запущенных задач полезно установить утилиту progress.
Что такое pv и как он помогает?
pv — это инструмент для визуального отображения прогресса передачи данных через пайп. Он показывает скорость, процент и ETA при копировании данных, в том числе с помощью dd.
Работает ли вывод прогресса в любых версиях dd?
Опция status=progress доступна начиная с версии coreutils 8.24. В более старых версиях dd такой функциональности по умолчанию нет.