Dd linux команда progress

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)

Источник

Linux dd Command Show Progress Copy Bar With Status

I am using dd command for block level copy and just found out that there’s no built in way to check the progress. How do I use the Linux or Unix dd command while coping /dev/sda to /deb/sdb and display a progress bar when data goes through a pipe? How do I monitor the progress of dd on Linux?

Tutorial details
Difficulty level Intermediate
Root privileges Yes
Requirements dd and pv
Est. reading time 2m

The dd is a free and open source command-line tool for Linux, and Unix-like operating systems. It is mainly used to convert and copy files. Being a program mainly designed as a filter dd usually does not provide any progress indication. This page shows how to show progress copy bar on Linux operating system using GNU version of the dd command.

Linux dd Command Show Progress Copy Bar With Status

You need to use gnu dd command from coreutils version 8.24 or above to use the following option. The syntax is as follows to show progress copy bar with dd command:
dd if=/path/to/input of=/path/to/output status=progress
Let us pass the progress option to see periodic transfer statistics using GNU dd command:
# dd if=/dev/sda of=/dev/sdb bs=1024k status=progress

Gif.01: Linux monitor the progress of dd command

No need to use sudo. I used sudo because I was trying to read and clone a USB stick.

How do you monitor the progress of dd?

Here is another example. First, find out your USB device name using the grep command and hwinfo command:
grep -Ff
Output:

Next, unmount the device under Linux:
sudo umount /dev/sdc
Finally, write an iso image to USB device named /dev/sdc and monitor the progress of dd:
sudo dd if=openSUSE-Leap-15.1-DVD-x86_64.iso of=/dev/sdc bs=4M status=progress
Sample outputs:

Use pv command monitor the progress of dd command and see status

Another option is to use pv command which allows you to see the progress of data through a pipeline. You need to install pv command as described here. Once installed, type the following commands to see the status bar. Please note that if standard input is not a file and no size was given with the -s option, the progress bar cannot indicate how close to completion the transfer is, so it will just move left and right to indicate that data is moving. It will also show average MB/s rate:

Copy /dev/sda to to /dev/sdb:
pv -tpreb /dev/sda | dd of=/dev/sdb bs=64M
OR
pv -tpreb /dev/sda | dd of=/dev/sdb bs=4096 conv=notrunc,noerror

Fig.01: pv and dd in action

Fig.02: Show the Status of dd Command in progress using pv and dialog command

Examples: Use gnu dd command from coreutils version 8.24 or above only

Here is another example from my Mac OS X/MacOS:
$ sudo gdd if=ZeroShell-3.6.0-USB.img of=/dev/disk5 bs=1024k status=progress

Fig.03: GNU dd displaying progress

  • No ads and tracking
  • In-depth guides for developers and sysadmins at Opensourceflare✨
  • Join my Patreon to support independent content creators and start reading latest guides:
    • How to set up Redis sentinel cluster on Ubuntu or Debian Linux
    • How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
    • How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
    • A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
    • How to protect Linux against rogue USB devices using USBGuard

Join Patreon

How do you monitor the progress of dd on Linux?

If you are using an older version of dd or cannot install the pv command, try the following simple one-liner bash shell while loop/command:

Conclusion

The dd command is wonderful, and there are various ways to display a progress indicator with dd. You learned how to monitor the progress of dd using the inbuilt status=progress option to the dd command. Another option is to use the pv tool. Finally, you learned that how to show dd progress in Linux without using pv or status= progress option. See GNU dd man page documentation for more info.

🐧 Get the latest tutorials on Linux, Open Source & DevOps via

Category List of Unix and Linux commands
Documentation help • mandb • man • pinfo
Disk space analyzers df • duf • ncdu • pydf
File Management cat • cp • less • mkdir • more • tree
Firewall Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04
Linux Desktop Apps Skype • Spotify • VLC 3
Modern utilities bat • exa
Network Utilities NetHogs • dig • host • ip • nmap
OpenVPN CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04
Package Manager apk • apt
Processes Management bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop
Searching ag • grep • whereis • which
Shell builtins compgen • echo • printf
Text processing cut • rev
User Information groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w
WireGuard VPN Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04

Comments on this entry are closed.

For Unix users without GNU dd version:
$ tmux
$ dd if=/dev/urandom of=/dev/null bs=16k count=100000
Keep running dd and switch to a new tmux window/pane by hitting ctrl-b-c. Show pid
$ ps aux | grep dd
Type that pid as follows to see progress:
$ kill -SIGUSR1 (pid)
$ tmux attach
We see

OR you could use dcfldd, if your distro/OS has it (Debian does). The awkward acronym stems from it being the Department of Defense Computer Forensics Lab’s version of dd.

or try dcfldd, the Department of Defense Computer Forensics Lab’s dd.

Much better for folks without GNU/dd:
killall -USR1 dd

And to make it beautiful, instead of running dialog, you can run zenity —progress —title «Working. «.

how about?
watch -n 10 ‘killall -USR1 dd’

I use this command to create my Raspberry Pi compressed images
(pv -n /dev/sda | gzip -c | dd of=GentooV2.gz bs=128M conv=notrunc,noerror) 2>&1 | dialog —gauge «Dump running» 10 70 0

It’s better looking than kill -USR1

It may look nicer than kill -USR1 but it’s more complicated to set up. And just hitting up then enter in a second terminal after doing it once is much easier.

*not much easier. Just simple. Typo. The point is you can just check up on it rather than having another process always polling the dd process (dd actually does stop to report the progress).

You wrote:
Copy /dev/sda to to /deb/sdb:

Surely you meant Copy /dev/sda to to /dev/sdb:

That’s dev, not deb. Please correct this, and try to heed your own warning about executing with care.

New version of coreutils (8.24) adding a status progress to dd tool:

Usage on Xubuntu 15.10:

Open terminal shell and type these commands:

sudo ./dd if=/dev/sdc of=/dev/sda conv=noerror status=progress

You will see: Bytes, Seconds and Velocity (Bytes/seconds)

To check versions of dd:

New (cd coreutils-8.24/src):

It be nice to have something that says what the numbers mean wile copying. I am copying a 6TB to a 6TB and it’s been over a day and I guess it only about 4th way because it shows like this:
$ dd if=/dev/sdc1 of=/dev/sdh1 bs=64k conv=noerror,sync status=progress
2211815555072 bytes (2.2 TB, 2.0 TiB) copied, 93833 s, 23.6 MB/s

So I guess the 2.2TB means it copy that much so fair and maybe the 2.0 TiB is how much it has to go? Not sure. Been looking to find this answer and have not found it yet.

2.2TB ‘Tera’bytes = 2.0 TiB, ‘Tebi’bytes.
The difference is bits are by definition binary. Since computers came to be everything was measured in effectively multiples of powers of 2.

Then marketing came in and said ‘well, metric is multiples of powers of 10, and we’ve been using these metric names forever to roughly approximate the order of magnitude for a given power-of-2 binary size. let’s keep using the metric names but instead properly count with 10s and make the drives sound the same size but in effect be physically able to to contain less 1s and 0s than the equivalent binary size’

So the geeks said ‘this is wrong, we’ll make new terms that indicate the binary powers and not the metric terms.

Thus became why we now have both the metric, 10^x sizes of ‘kilo’, ‘mega’, ‘giga’, ‘tera’, etc, along with the new binary 2^x sizes of ‘kibi’, ‘mebi’, ‘tebi’, ‘gibi’, etc ..
The ‘bi’ means a binary size.
1 ‘kilo’ byte is 1000 bytes. 1 ‘kibi’ byte is 1024.

Источник

Читайте также:  Windows 10 как включить пароль при входе
Оцените статью