Я не так dd
уж много использовал, но пока это не подвело меня. Прямо сейчас у меня было dd
более 12 часов работы - я записываю образ обратно на диск, с которого он пришел - и я немного волнуюсь, так как я смог dd
с диска на образ примерно 7 часов.
Я использую OSX 10.6.6 на MacBook с Core 2 Duo с частотой 2,1 ГГц / ядро и 4 ГБ ОЗУ. Я читаю из .dmg на жестком диске со скоростью 7200 об / мин (загрузочный диск) и пишу на диск со скоростью 7200 об / мин, подключенный через разъем SATA-to-USB. Я оставил размер блока по умолчанию, и изображение составляет около 160 ГБ.
РЕДАКТИРОВАТЬ: И после 14 часов чистого стресса, в dd
конце концов , работал отлично. В следующий раз, однако, я собираюсь прогнать его pv
и отследить strace
. Спасибо всем за вашу помощь.
источник
dd ... bs=16M
мое предложение, учитывая вашу оперативную память, размер диска и скорость.dd
в Mac OS X наблюдается тенденция зависать до такой степени, что я даже не могу убить процесс, но вынужден перезагружать систему. Тогда я прибегаю к работе на виртуальной машине Linux.Ответы:
Вы можете отправить
dd
определенный сигнал с помощьюkill
команды, чтобы он вывел свой текущий статус. Сигнал естьINFO
в системах BSD (включая OSX) иUSR1
в Linux. В твоем случае:Вы можете найти идентификатор процесса (
$PID
выше) с помощьюps
команды; или посмотрите альтернативы pgrep и pkill на Mac OS X для более удобных методов.Проще говоря, как указывает AntoineG в своем ответе , вы можете набрать
ctrl-T
в оболочке, запущенной dd, чтобы отправить емуINFO
сигнал.Например, в Linux вы можете сделать
dd
вывод всех активных процессов следующим образом:После вывода его статуса,
dd
продолжим копирование.источник
pkill -USR1 -x dd
INFO
сигнал. Linux не имеет SIGINFO и используетUSR1
вместо этого.dd if=/dev/zero of=/dev/null
. :)Под OS X (не пробовал в Linux) вы можете просто набрать Ctrl+ Tв работающем терминале
dd
. Он выведет тот же вывод, чтоkill -INFO $PID
и плюс загрузка процессора:Я узнал об этом, читая эту ветку и пытаясь открыть новую вкладку в моем терминале, но смешивая ⌘+ Tс Ctrl+ T.
источник
load
что использование процессора?^T
с терминалом.Для
dd
, вы можете послать сигнал . Для других команд, которые читают или записывают в файл, вы можете наблюдать за их положением в файле с помощьюlsof
.Если вы планируете заранее, передайте данные через
pv
.источник
pv
похоже просто билет.Более общий способ заключается в
iotop
том, чтобы отображать текущее количество операций чтения / записи на диск для каждой программы.РЕДАКТИРОВАТЬ:
iotop -o
показывать только программы, которые выполняют текущие операции ввода / вывода (спасибо Джейсону C за этот комментарий).источник
iotop -o
скроет процессы, которые не выполняют IO, и облегчит с первого взгляда, что происходит.Я обычно присоединяюсь
strace
к такому запущенному процессу (с-p $PID
возможностью), чтобы видеть, остается ли он заблокированным в системном вызове или он все еще активен.Или, если вы нервничаете по поводу отправки сигнала работающему дд, запустите другой дд, чтобы проверить, работает ли это.
источник
strace
? Кроме того, я запустил еще одинdd
и отправил ему один из предложенных сигналов, и ... он убил его.В следующий раз вы можете просто использовать
pv
с самого начала (если это доступно через менеджер пакетов, установите его). Это утилита, единственная цель которой состоит в том, чтобы направлять входные данные на выход и контролировать ход и скорость.Затем для записи образа на диск, скажем, с размером блока 4 МБ:
Помимо начальной буферизации (смещение окончательной синхронизацией, которую можно выполнить,
dd
если хотите), она покажет вам индикатор выполнения, среднюю скорость, текущую скорость и ETA.В
iflag=fullblock
опции силы д.д. , чтобы захватить полные блоки ввода черезpv
, в противном случае вы на милость трубы для размеров блоков.Чтобы пойти другим путем, используйте dd для чтения и pv для записи, хотя вы должны явно указать размер, если источником является блочное устройство. Для устройства 4 ГБ:
Вы также можете определить размер автоматически, например:
На самом деле не имеет значения, в каком порядке вы находитесь
dd
иpv
в каком порядке , это полностью связано с производительностью - если устройство, на которое вы читаете или с которого выполняете чтение, имеет оптимальную производительность для определенных размеров блоков, которые вы хотите использоватьdd
вместоpv
доступа к этому устройству. Вы можете даже прикрепитьdd
на обоих концах, если хотите, или нет, если вам все равно:источник
Начиная с
coreutils
версии 8.24,dd
имеется встроенная поддержка для отображения прогресса. Просто добавьте опциюstatus=progress
.Пример:
Источник
источник
ddrescue
даст вам статистику, как он работает.демо: http://www.youtube.com/watch?v=vqq9A01geeA#t=144s
источник
Иногда вы не сможете использовать сигнал INFO или USR1, потому что поток stderr
dd
процесса недоступен (например, потому что терминал, в котором он был выполнен, уже был закрыт). В этом случае, обходной путь должен сделать следующее (проверено на FreeBSD, может немного отличаться на Linux):Используйте
iostat
для оценки средней скорости записи (МБ / с) на целевое устройство, например:iostat -d -w30 ada0
Введите
ada0
здесь имя вашего целевого устройства и подождите минуту, чтобы оно дало пару результатов. Параметр "w" определяет, сколько секунд между выборками. Увеличение его даст лучшую среднюю оценку с меньшей дисперсией, но вам придется ждать дольше.Используйте,
ps
чтобы определить, как долгоdd
работает:ps -xo etime,command | grep dd
Преобразуйте это в секунды, чтобы получить общее количество секунд времени выполнения.
Получите размер устройства в МБ с помощью:
grep ada0 /var/run/dmesg.boot
Замените имя целевого устройства на
ada0
. Разделите результат на среднюю скорость записи, чтобы получить общее время передачи в секундах. Вычтите время, которое уходит до сих пор, чтобы получить оставшееся время.Эта стратегия работает только в том случае, если
dd
с момента ее начала непрерывная запись с текущей средней скоростью записи. Если другие процессы конкурируют за ресурсы ЦП или В / В (включая шину В / В), это может снизить скорость передачи.источник
Я начал использовать dcfldd (1), который лучше показывает операции dd.
источник
Пока
dd
выполняется, я запускаю это в другом терминале от имени пользователя root:Он печатает
dd
состояние каждую 1 секунду в исходном окне терминала, гдеdd
выполняется, и завершает работу, когда команда выполнена.источник
Вы можете использовать,
progress
который, в частности, показывает ход выполненияdd
. Он использует/proc/$pid/fd
и/proc/$pid/fdinfo
который вы также можете контролировать вручную.источник
wchar
(Письменных знаков) в строке/proc/$pid/io
может дать точную информацию оdd
процессе. Пока он меняется, вашdd
все еще работает!Вот небольшой аккуратный скрипт php, который вы можете сохранить, а затем выполнить
php filename.php
во времяdd
отображения отображаемых байтов. Хорошая польза от просмотра/proc/$pid/io
болееkill -USR1 $(pidof dd)
, что вам не придется переключаться между терминалами, что не всегда вариант.источник