43

Итак, вот что происходит.

Я запустил резервное копирование диска на моем сервере через Linux live USB. Я начал копировать первый диск с помощью команды dd vanilla; просто sudo dd if=/dev/sda of=/dev/sdc1 а потом я вспомнил, что это просто оставляет консоль пустой, пока она не завершится.

В любом случае мне нужно было запустить другую резервную копию на том же диске, поэтому я запустил ее также с помощью sudo dd if=/dev/sdb of=/dev/sdc3 status=progress а затем я получил строку текста, которая показывает текущий скорость передачи, а также прогресс в байтах.

Я надеялся на метод, который показывает процент резервного копирования вместо того, чтобы вычислять, сколько байтов резервируется из 1,8 ТБ. Есть ли более простой способ сделать это, чем статус = прогресс?

5 ответов5

67

Смотрите ответы на этот вопрос [ 1 ]

pv

Например, вы можете использовать pv перед началом

sudo apt-get install pv    # if you do not have it
pv < /dev/sda > /dev/sc3   # it is reported to be faster
pv /dev/sda > /dev/sc3     # it seems to have the same speed of the previous one
#or 
sudo dd if=/dev/sda | pv -s 1844G | dd of=/dev/sdc3  # Maybe slower 

Выход [ 2 ]:

440MB 0:00:38 [11.6MB/s] [======>                             ] 21% ETA 0:02:19

Заметки:
Особенно для больших файлов вы можете захотеть увидеть man dd и установить опции, необходимые для ускорения всего на вашем оборудовании, например, bs=100M для установки буфера, oflag=sync для подсчета эффективных записанных байтов, возможно, direct ...
Опция -s принимает только целочисленные параметры, поэтому 1.8T-->1844G .
Как вы можете заметить из первых строк, вам вообще не нужен dd .


kill -USR1 pid

Если вы уже запустили команду dd , после того, как вы индивидуализировали ее PID (Ctrl - Z +bg и прочитали ее, или pgrep ^dd ...), вы можете отправить сигнал USR1 (или SIGUSR1 , или SIGINFO см. Ниже) и прочитать выход.
Если PID программы 1234 с

kill -USR1 1234

dd ответит на терминале своего STDERR чем-то похожим на

4+1 records in
4+0 records out
41943040 bytes (42 MB) copied, 2.90588 s, 14.4 MB/s

Предупреждение: в OpenBSD вам, возможно, придется заранее проверить поведение kill [ 3 ]: используйте вместо
kill -SIGINFO 1234 .
Он существует sigaction с именем SIGINFO В этом случае SIGUSR1 должен завершить программу (dd)...
Под Ubuntu используйте -SIGUSR1 (10).

36

Моим инструментом для такого рода вещей является progress:

Этот инструмент может быть описан как команда Tiny, Dirty, Linux-and-OSX-Only C, которая ищет основные команды coreutils (cp, mv, dd, tar, gzip/gunzip, cat и т.д.), В настоящее время работающие в вашей системе, и отображает процент скопированных данных. Он также может показывать приблизительное время и пропускную способность и обеспечивает режим «сверху» (мониторинг).

Снимок экрана "<code> progress </code> in action"

Он просто просматривает /proc предмет интересных команд, а затем просматривает каталоги fd и fdinfo для поиска открытых файлов и поиска позиций, а также сообщает о состоянии самого большого файла.

Он очень легкий и совместим практически с любой командой.

Я нахожу это особенно полезным, потому что:

  • по сравнению с pv в pipe или dcfldd , мне не нужно помнить запускать другую команду, когда я запускаю операцию, я могу следить за вещами по факту;
  • по сравнению с kill -USR1 , он работает практически с любой командой, мне не нужно всегда перепроверять man-страницу, чтобы убедиться, что я не случайно убил копию; также приятно, что при вызове без параметров он показывает ход выполнения любой распространенной команды "передача данных", выполняемой в настоящее время, поэтому мне даже не нужно искать PID;
  • по сравнению с pv -d , опять же, мне не нужно искать PID.
24

Запустите dd , затем в отдельной оболочке вызовите следующую команду:

pv -d $(pidof dd) # root may be required

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

8

Есть альтернатива dd : dcfldd .

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

Вывод статуса - dcfldd может обновлять информацию о прогрессе пользователя с точки зрения количества передаваемых данных и продолжительности операции.

dcfldd if=/dev/zero of=out bs=2G count=1 # test file
dcfldd if=out of=out2 sizeprobe=if
[80% of 2047Mb] 52736 blocks (1648Mb) written. 00:00:01 remaining.

http://dcfldd.sourceforge.net/
https://linux.die.net/man/1/dcfldd

7

В процентном соотношении вам придется выполнять некоторые математические операции, но вы можете получить прогресс dd в удобочитаемой для человека форме, даже после его запуска, выполнив kill -USR1 $(pidof dd)

Текущий процесс дд будет отображаться как:

Скопировано 11117279 байт (11 МБ, 11 МБ), 13,715 с, 811 КБ / с

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .