Помогите! dd
это страшно!
Ты не одинок. Из советов по Linux:
Команда 'dd' является одной из оригинальных утилит Unix и должна быть у каждого в наборе инструментов ... Некоторые люди считают, что dd означает "уничтожить диск" или "удалить данные", потому что, если он используется не по назначению, раздел или выходной файл могут быть удалены очень быстро. Поскольку dd - это инструмент, используемый для записи заголовков дисков, загрузочных записей и аналогичных областей системных данных, неправильное использование dd, вероятно, разрушило многие жесткие диски и файловые системы.
Но не беспокойтесь. Как только вы узнаете о его сложностях, вы будете вызывать dd
со спокойной грацией ковбоя родео.
Это сломается? Что это за count
bs
?
Давайте сначала разберемся с первым вопросом.
Как теперь мы можем тонко сломать вещи, выбрав плохую комбинацию bs
и count
? Как бы мы узнали?
Если вы имеете в виду «непреднамеренные последствия» под «разрывом», то просто указав их теоретически. Что я имею в виду под этим? Ну, скажем, вы хотите скопировать image.img
на SD-карту, расположенную в /dev/sdc
. Итак, вы соответствуете параметрам в вашем примере:
# dd if=/home/someone/image.img of=/dev/sdc bs=64M count=16
Должно быть хорошо, чтобы использовать эти настройки правильно? Давайте просто подождать, пока dd
закончит ... что же это говорит?
16+0 records in
16+0 records out
1073741824 bytes (1.1 GB) copied, 34.1303 s, 31.5 MB/s
Только 1,1 ГБ скопировано! Но image.img
- 2 ГБ или около того, я хочу, чтобы все это скопировалось! Сказав dd
скопировать 16 лотов по 64M (где M = 1024 * 1024, кстати), вы указали размер. Вы бы знали по статусу вывода. Если вы хотите скопировать весь файл, либо сравните размер с bs
и count
; или просто опустить их полностью:
# dd if=/home/someone/image.img of=/dev/sdc
4364864+0 records in
4364864+0 records out
2234810368 bytes (2.2 GB) copied, 45.9502 s, 48.6 MB/s
Что произойдет, если мы начнем шалить и скажем dd
скопировать больше данных, чем доступно?
# dd if=/home/someone/image.img of=/dev/sdc bs=1M count=4096
2131+1 records in
2131+1 records out
2234810368 bytes (2.2 GB) copied, 77.9768 s, 28.7 MB/s
Ах, dd
копирует столько байтов, сколько получает. Это удобно
Мониторинг dd
Говоря о выходе состояния, dd
(вариант GNU) уважает и отвечает на сигнал INFO SIGUSR1
:
# echo "In another terminal or TTY"
# pkill -USR1 -n -x dd
# echo "Printed to stdout on the terminal/tty running dd:"
534+0 records in
534+0 records out
559939584 bytes (560 MB) copied, 1.68414 s, 332 MB/s
Удобно для того, чтобы следить за передачей, которая идет медленно или вы ожидаете зависания по какой-либо причине. Пары прекрасно с watch
, но не забудьте дать watch
достаточно большой промежуток времени.
Есть ли у dd
какие-то другие варианты, о которых я должен знать?
dd
действительно есть другие варианты, но в большинстве случаев, если вам нужно их использовать, вы будете знать, что они делают. Тем не менее, несколько примеров могут дать вам представление:
conv=CONVS
: преобразовать ввод в соответствии с одним или несколькими вариантами преобразования
seek=N
и skip=N
: пропускать блоки размером N [obs | ibs] в начале [output | input]
status=X
: (подавить вывод) либо noxfer
либо его none
Я чувствую себя намного лучше о dd
сейчас
Большой! Вскоре вы будете отправлять загрузочный образ через Интернет для прямой записи на карту microSD с использованием комбинации dd
и ssh
.
Но что на самом деле означает аббревиатура dd
?
Хороший последний вопрос. На этот вопрос и любые другие, подобные ему, я отошлю вас к записи файла жаргона для dd
.
Не стесняйтесь просить разъяснений, если что-то непрозрачнее, чем должно быть!