Как вы отслеживаете прогресс dd?

Если текст хранится как обычный текст внутри файла документа (независимо от того, состоит ли сам файл целиком из обычного текста), вы можете искать его из командной строки с рекурсивным grep. Это не требует индексации в первую очередь, но поиск по всем вашим файлам занимает очень много времени, поэтому, если вам понадобится сделать это более чем пару раз для всего вашего диска, вместо этого вы должны использовать утилиту поиска индексирования (как в этом answer). Откройте окно терминала (Ctrl + Alt + T). Измените каталог на вершину того, что вы хотите найти. Например, чтобы искать все в своем домашнем каталоге, сделайте cd ~. Чтобы выполнить поиск всего на вашем компьютере, сделайте cd /. Для поиска всего на внешнем диске DocDrive do cd /media/DocDrive. Если каталог имеет пробелы в своем имени, заключите его в кавычки (например, cd '/media/Documents Drive'. Запустите рекурсивный grep следующим образом:

grep -Rs 'word or phrase you are looking for' .

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

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

sudo grep -Rs 'word or phrase you are looking for' .

1
задан 2 October 2016 в 05:00

16 ответов

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

Метод 1: Используя pv

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

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

Обновление 2016

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

Установка

sudo apt-get install pv

Установка

dd if=/dev/urandom | pv | dd of=/dev/null

Выход

1,74MB 0:00:09 [ 198kB/s] [      <=>                               ]

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

Выход

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

sudo dd if=/dev/sdb of=DriveCopy1.dd bs=4096

Команда с pv:

sudo dd if=/dev/sdb | pv -s 2G | dd of=DriveCopy1.dd bs=4096

Выход:

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

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

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

pv /home/user/bigfile.iso | md5sum

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

50,2MB 0:00:06 [8,66MB/s] [=======>         ] 49% ETA 0:00:06
[d32 ] Обратите внимание, что в этом случае pv автоматически распознает размер.

Способ 2: Добавлена ​​опция status в dd (GNU Coreutils 8.24 +)

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

Пример

dd if=/dev/urandom of=/dev/null status=progress

Выход

462858752 bytes (463 MB, 441 MiB) copied, 38 s, 12,2 MB/s
566
ответ дан 25 May 2018 в 04:31
  • 1
    pv bigfile.iso | dd = / dev / yourdevice – Ion Br. 18 December 2013 в 03:02
  • 2
    Следует отметить, что параметры для "dd" являются подходящими в первой половине (входная часть трубы): dd if=/dev/zero bs=1M count=35000 | pv | dd of=VirtualDisk.raw. – Sopalajo de Arrierez 28 March 2014 в 06:05
  • 3
    pv bigfile.iso | dd of=VirtualDisk.raw bs=1M count=35000 работает, проверен. @SopalajodeArrierez, параметры могут быть заданы во втором dd. – SiddharthaRT 20 October 2014 в 17:17
  • 4
    используя pv < /dev/sda > /dev/sdb, кажется, получает более высокую скорость ( source ) – Nicola Feltrin 20 February 2015 в 17:30
  • 5
    FYI по скорости. Тесты на моем компьютере с Samsung 840 PRO SSD: dd if=/dev/urandom | pv | of=/dev/sdb дает ~ 18 Мбайт / с, dd if=/dev/zero | pv | of=/dev/sdb дает ~ 80 МБ / с, а обычный старый dd if=/dev/zero of=/dev/sdb дает ~ 550 МБ / с (приближается к максимальной скорости записи SSD). Все с bs=4096000. – Tedd Hansen 8 May 2016 в 00:18

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

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

sudo apt-get install pv

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

pv -n /dev/urandom | dd of=/dev/null
pv -tpreb source.iso | dd of=/dev/BLABLA bs=4096 conv=notrunc,noerror

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

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

(pv -n /dev/sda | dd of=/dev/sdb bs=128M conv=notrunc,noerror) 2>&1 | dialog --gauge "Running dd command (cloning), please wait..." 10 70 0

источник: http://www.cyberciti.biz/faq/linux-unix -dd-command-show-progress-while-coping /

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

87
ответ дан 25 May 2018 в 04:31
  • 1
    вам также нужно будет установить dialog с помощью команды apt-get install dialog – k7k0 29 April 2015 в 22:06
  • 2
    LOVE пример dialog. SERENITY NOW ! – alex gray 23 November 2015 в 00:47
  • 3
    Вы можете вызвать этот диалог только с помощью python? – mikeymop 29 April 2016 в 22:50
  • 4
    благодаря этому ответу, обнаруженному dialog, это будет безумно помогать в написании сценариев оболочки: D – holms 20 August 2016 в 01:35
  • 5
    brew install pv dialog для Mac. Также этот джентльмен вычисляет со стилем. Браво. – evilSnobu 5 April 2018 в 16:18

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

load: 1.51  cmd: dd 31215 uninterruptible 0.28u 3.67s
321121+0 records in
321120+0 records out
164413440 bytes transferred in 112.708791 secs (1458745 bytes/sec)
54
ответ дан 25 May 2018 в 04:31
  • 1
    Не работает для меня на Kubuntu Trusty. Возможно, конфликтующие привязки клавиш? – jamadagni 15 November 2014 в 08:33
  • 2
    Великий путь. Он работает под OSX, но не работает под Ubuntu 14.04 – Speakus 17 November 2014 в 10:39
  • 3
    Первая строка генерируется OS X, только последние 3 строки относятся к dd. – Itay Grudev 1 April 2015 в 07:49
  • 4
    Это простое решение для OSX. Его действительно раздражает то, что dd останавливается, когда вы отправляете kill -USR1 на Mac. – Lightbulb1 14 April 2015 в 14:05
  • 5
    Вы должны иметь возможность использовать kill -INFO на BSD, таком как OS X – macshome 19 September 2015 в 16:07

Для полноты:

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

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

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

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

41
ответ дан 25 May 2018 в 04:31
  • 1
    просто хочу добавить, как я скомпилировал 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 и заменить существующий один или jus запустите как src / dd – holms 20 August 2016 в 01:37
  • 2
    Круто! Мне нравится эта функция. И потребовалось около 30 лет, чтобы научить dd печатать результаты прогресса. :-) – Johannes Overmann 17 April 2017 в 12:34
  • 3
    Какое облегчение! Я немедленно добавлю этот аргумент в псевдоним оболочки dd. – Stephan Henningsen 31 May 2017 в 23:14
  • 4
    Обратите внимание, что статус будет иногда печатать с двумя номерами, один в единицах СИ и эквивалентным значением в двоичных единицах (например, 10 МБ, 9,5 Мбайт). – palswim 29 September 2017 в 22:29

Лучше всего использовать http://dcfldd.sourceforge.net/, его легко установить через apt-get

31
ответ дан 25 May 2018 в 04:31
  • 1
    спасибо за указатель на dcfldd, очень совместимый с dd, но некоторые хорошие новые функции. Мне особенно нравится стандартный прогресс. – Floyd 20 December 2013 в 15:46
  • 2
    Почему dcfldd не более известен, для меня это полная тайна. – Freedom_Ben 3 March 2014 в 20:00
  • 3
    вероятно, для его имени. – Giovanni Toraldo 28 December 2014 в 13:31
  • 4
    Он имеет опции dd и опции status=on по умолчанию, для сообщений о ходе выполнения, statusinterval=N (N в блоках) для частоты обновления сообщений и sizeprobe=[if|of] для процентного индикатора. Я буду использовать его для DD :) – kavadias 8 May 2018 в 20:09

Пользовательский статус статуса был добавлен в dd !!!

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

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

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

wget ftp://ftp.gnu.org/pub/gnu/coreutils/coreutils-8.24.tar.xz
tar -xf coreutils-8.24.tar.xz
cd coreutils-8.24
./configure && make -j $(nproc)

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

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

Вы увидите: Bytes, seconds

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

Родной:

dd --version

Новое:

[ f4]
21
ответ дан 25 May 2018 в 04:31

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

watch ls -l /pathtofile/filename

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

watch ls -sh /pathtofile/filename
16
ответ дан 25 May 2018 в 04:31
  • 1
    Также жизнеспособный метод ... – hexafraction 8 December 2012 в 03:59
  • 2
    Полезно, хотя это не обязательно работает, если вы отправляете вывод dd на что-то другое, кроме файла (например, gzip'ing перед записью на диск). – Ponkadoodle 3 July 2014 в 08:32
  • 3
    Не работает в специальных файлах. – Johannes Overmann 4 February 2018 в 02:10

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

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

Control-Z процесс dd

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

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

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

[1]+  Done dd if=/path/file.qcow2 of=/dev/kvm/pxetest bs=4194304 conv=sparse
-bash: kill: (60111) - No such process

Вы закончили.

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

 dd if=/path/to/bigimage of=/path/to/newimage conv=sparse bs=262144 & bgid=$!; while true; do sleep 1; kill -USR1 $bgid || break; sleep 4; done

Вы можете, конечно, записать сценарий, возможно, заработаете $ 1 ваш входной файл и $ 2 ваш выходной файл. Это остается как упражнение для читателя. Обратите внимание, что вам нужен этот маленький сон перед убийством или смерть может умереть, чтобы отправить сигнал на dd, когда он еще не готов. Отрегулируйте свои спящие по желанию (возможно, вообще удалите второй сон).

Bash- FTW! : -

)
11
ответ дан 25 May 2018 в 04:31
  • 1
    Сжатие петли while. Используйте watch. – muru 7 May 2015 в 18:00
  • 2
    @muru это зависит. Я не знаю о вашей системе, но на CentOS7 * выход немного искажен; он читается, но не выглядит упорядоченным. Также он топает над вашим предыдущим выходом, поэтому вы теряете историю скорости вашего dd; шахта варьируется от 20 МБ / с до 300 МБ / с. Интересно наблюдать, как цифры меняются и поучительны. Я думаю, что некоторые из больших различий связаны с тонким пулом LVM, увеличивающим распределение для LV, о котором я пишу. * да, это форум ubuntu, но я получил здесь «dd monitor progress». Это первый результат в Google. – Mike S 7 May 2015 в 20:51
  • 3
    О, я имел в виду в другом терминале или окне экрана, запустите sudo watch pkill dd. Затем наблюдайте, как dd выводит статистику комфортно. – muru 7 May 2015 в 21:02
  • 4
    Не пошлет ли pKill SIGTERM по умолчанию? Я даже не хочу экспериментировать, поскольку pgrep dd создает 3 pid при запуске одного dd: kthreadd, oddjob и dd. Я боюсь того, что сделает pkill. Вы можете отправить сигнал -USR1 с помощью pkill, но опять же я не знаю, безопасно ли отправлять его в поток ядра или obbjob. Команда watch выглядит более чистым, но, похоже, это много дополнительных шагов, чтобы избежать цикла while. Обычно, если я делаю dd в одном окне, я собираюсь сделать что-то сразу в той же оболочке. Цикл while безопасен: вы знаете ТОЧНО, какой pid получает сигнал. – Mike S 8 May 2015 в 17:01
  • 5
    в основном мне все равно, какие сигналы получают сигнал, так как я использую watch pkill -USR1 -x dd. Поскольку я также использую watch для других подобных задач, это естественно. – muru 8 May 2015 в 17:07

http://linuxcommando.blogspot.com/2008/06/show-progress-during-dd-copy.html

В принципе:

kill -USR1 < dd pid >
10
ответ дан 25 May 2018 в 04:31
  • 1
    "pkill -USR1dd" это самая простая версия, о которой я знаю (пока вы просто запускаете один экземпляр dd, так или иначе). В моей системе мне нужно sudo: «sudo pkill -USR1 dd». Работает после того, как вы набрали команду dd, и вам не нужно устанавливать что-либо новое. – Fred Hamilton 18 May 2015 в 21:49

В Ubuntu 16.04

Ubuntu 16.04 поставляется с версией dd (coreutils) версии 8.25. Следовательно, опция status=progress поддерживается: -)

Чтобы использовать ее, просто добавьте status=progress вместе с вашей командой dd.

Пример:

dd bs=4M if=/media/severus/tools-soft/OperatingSystems/ubuntu-16.04-desktop-amd64.iso of=/dev/null status=progress && sync

Дает статус как

1282846183 bytes (1.2 GiB, 1.1 GiB) copied, 14.03 s, 101.9 MB/s

6
ответ дан 25 May 2018 в 04:31

Самый простой способ:

 dd if=... of=... bs=4M status=progress oflag=dsync

oflag=dsync будет синхронизировать вашу запись, поэтому информация из status=progress более точна. Однако это может быть немного медленнее.

6
ответ дан 25 May 2018 в 04:31

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

# dd if=/dev/vvg0/root of=/dev/vvg1/root bs=4M
    2GB 0:00:17 [ 120MB/s] [===========================================================>] 100%            
0+16384 records in
0+16384 records out
2147483648 bytes (2.1 GB) copied, 18.3353 s, 117 MB/s

Источник:

dd()
{
    local dd=$(which dd); [ "$dd" ] || {
        echo "'dd' is not installed!" >&2
        return 1
    }

    local pv=$(which pv); [ "$pv" ] || {
        echo "'pv' is not installed!" >&2
        "$dd" "$@"
        return $?
    }

    local arg arg2 infile
    local -a args
    for arg in "$@"
    do
        arg2=${arg#if=}
        if [ "$arg2" != "$arg" ]
        then
            infile=$arg2
        else
            args[${#args[@]}]=$arg
        fi
    done

    "$pv" -tpreb "$infile" | "$dd" "${args[@]}"
}
3
ответ дан 25 May 2018 в 04:31
  • 1
    Хороший способ, но он не работает с командами вроде sudo или time. – Speakus 17 November 2014 в 11:28
  • 2
    Поместите его в / usr / local / bin / dd с этим сверху: #!/bin/bash. В нижней части: tmp=":${PATH}:"; tmp=${tmp/:/usr/local/bin:/:}; tmp=${tmp%:}; PATH=${tmp#:}; dd "$@" Или вы можете захотеть установить жесткий диск dd. Затем используйте local dd=/usr/bin/dd. Не забудьте добавить исполняемый бит: chmod +x /usr/local/dd. – midenok 19 November 2014 в 11:06

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

Проект: https://www.gnu.org/software/ddrescue

Википедия: https://www.gnu.org/software/ddrescue

3
ответ дан 25 May 2018 в 04:31

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

function vdd {
    sudo dd "$@" &
    sudo sh -c "while pkill -10 ^dd$; do sleep 5; done"
}
[d1 ] Теперь просто используйте vdd в любом месте, где вы обычно используете dd (он передает все аргументы напрямую), и вы получите отчет о проделанной работе каждые 5 секунд.

Единственным недостатком является то, что команда не возвращается сразу после завершения dd; поэтому возможно, что эта команда заставит вас ждать дополнительных 5 секунд после возвращения dd, прежде чем он заметит и выйдет.

2
ответ дан 25 May 2018 в 04:31

Как упоминалось выше, по крайней мере с «dd» от GNU coreutils или busybox, он будет реагировать на сигнал USR1, распечатывая информацию о ходе до stderr.

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

http://github.com/delt01/dd_printpcent

К сожалению, этот трюк SIGUSR1 работает только с GNU dd (из пакета coreutils) или режим «dd» busybox с указанной функцией включен во время компиляции. Он не работает с запасом «dd», включенным в большинство систем BSD, включая FreeBSD и OS X ...: (

1
ответ дан 25 May 2018 в 04:31

Этот параметр заставляет dd указывать статистику каждые 2 секунды, которая по умолчанию используется для просмотра:

watch killall -USR1 dd

Чтобы менять каждые 2 секунды каждые 5 секунд, добавьте параметр -n 5 следующим образом:

watch -n 5 killall -USR1 dd
0
ответ дан 25 May 2018 в 04:31

Другие вопросы по тегам:

Похожие вопросы: