Dd

Программа dd предназначена для копирования и конвертирования файлов.

dd [параметры] 

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

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

Если программу запустить без каких либо параметров, она читает данные со стандартного ввода и передает их на стандартный вывод.

Параметр if определяет имя входного файла. Параметр of — выходного. Например, что бы скопировать данные из файла file1 в file2, необходимо выполнить следующую команду:

dd if=file1 of=file2

Обратите внимание на то, что в программе dd (по историческим причинам) перед параметром не ставится символ тире.

Изначально программа dd предназначалась для непосредственной работы с накопителями (Я
предполагаю, что она расшифровывается как disk duplicate. К сожалению у
меня не было времени на то, чтобы поискать в Интернет соответствующего
подтверждения.
). И это наложило отпечаток на работу программы — она
копирует данные блоками. Размер блока по умолчанию равен 512 байтам. При
помощи параметра bs можно установить размер блока. При помощи
параметра count — определить количество копируемых блоков. Например,
если необходимо скопировать 100 блоков размером в 1024 байта, можно
воспользоваться следующей командой:

dd if=/dev/zero of=swap bs=1024 count=100

Если создать файл при помощи программы touch у файла будет нулевой размер.

В приведенном примере есть один интересный момент — в качестве
источника данных используется файл /dev/zero. Судя по тому, что он
находится в директории /dev можно предположить, что это файл устройства.
И это действительно так. Устройство /dev/zero предназначено для чтения
бесконечного количества абсолютных нулей (в шестнадцатеричном виде —
0x00). Если при выполнении этой команды забыть указать параметр count,
то, теоретически, можно получить файл swap бесконечного размера,
содержащий только нули. Но в реальной жизни размер файла будет ограничен
размером файловой системы. Или, если администратор действительно следит
за своей системой, квотами, наложенными на файловую систему.

Если выполнить следующую команду:

dd if=/dev/fd0 of=floppy.img

информация будет читаться из файла устройства /dev/fd0. В Linux этот
файл соответствует дисководу гибких дисков. Когда программа будет читать
из этого файла, драйвер дисковода будет выдавать содержимое гибкого
диска по секторам, то есть не в виде отдельных файлов, а именно по
секторная копия диска. Соответственно, файл floppy.img — это образ
гибкого диска.

Если при вызове программы поменять эти файлы местами:

dd if=floppy.img of=/dev/fd0

то происходит запись данных в файл устройства /dev/fd0. В этом случае
драйвер дисковода всю входящую информации посекторно записывает на
гибкий диск. То есть происходит посекторное копирование дисков.

Аналогичным образом можно поступить, когда необходимо сделать
копию жесткого диска или раздела на жестком диске. В этом случае
указываются файлы соответствующих устройств. Например, что бы посекторно
скопировать раздел /dev/hda1 в /dev/hdb1 (Файл устройства /dev/hda1
соответствует первому разделу на мастер IDE жестком диске, подключенном к
первому IDE контроллеру. А файл /dev/hdb1 — первому разделу slave
жесткого диска, подключенному к первому IDE контроллеру. Подробно о
файлах устройств накопителей будет рассказано отдельно.
), необходимо выполнить следующую команду:

dd if=/dev/hda1 of=/dev/hdb1

Следующая команда позволит получить ISO образ CD-ROM:

dd if=/dev/cdrom of=cdrom.iso

Как вы видите, совсем необязательно иметь специальное программное
обеспечение для получения такого образа. К сожалению, поменять местами
файлы /dev/cdrom и cdrom.iso нельзя. Для записи CD-R/RW необходимо
пользоваться специальной программой, например cdrecord.

Если на устройстве, откуда читаются данные предполагается наличие сбойных блоков, программе dd обязательно указывают параметр conv=noerror,sync. Noerror заставляет программу продолжать читать данные после обнаружения ошибки чтения. Sync дополняет каждый входной блок до размера по умолчанию или определенного параметром bs.