Очень старая команда, которая есть во всех unix системах. Предназначена она для того, чтобы что-то куда-то копировать побайтово. Может как и копировать, так и конвертировать файлы.
Синтакс dd
Обычно синтаксис состоит из трех частей:
if
- Путь к файлу откуда будут взяты данные. Может быть как обычным файлом, так и блочным устройством.of
- Указывает куда будут копироваться данные.- Другие параметры.
bs
– указывает сколько байт читать и записывать за один раз(размер буфера)cbs
– сколько байт нужно записывать за один разcount
– скопировать указанное количество блоков, размер одного блока указывается в параметре bsconv
– применить фильтры к потоку данныхibs
– читать указанное количество байт за разobs
– записывать указанное количество байт за разseek
– пропустить указанное количество байт в начале устройства для чтенияskip
– пропустить указанное количество байт в начале устройства выводаstatus
– указывает насколько подробным нужно сделать выводiflag, oflag
– позволяет задать дополнительные флаги работы для устройства ввода и вывода, основные из них: nocache, nofollow.
Примеры использования
Перед тем как подставить свой диск в команду убедитесь что это точно то устройство с которого или на которое будет производится запись. Для этого можно воспользоваться командой lsblk.
-
Запись образа диска на флешку
dd if=archlinux-2021.11.01-x86_64.iso of=/dev/sdb bs=4M status=progress oflag=sync
-
Заполнить диск нулями(уничтожение информации)
dd if=/dev/zero of=/dev/sda bs=4k
-
Заполнить диск случайными данными(более надёжный способ уничтожения данных чем заполнение нулями)
dd if=/dev/urandom of=/dev/sda bs=4k
-
Клонирование одного диска на другой диск
dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress
-
Клонирование одного раздела на другой раздел
dd if=/dev/sda1 of=/dev/sdb1 bs=64K conv=noerror,sync status=progress
-
Создание образа всего диска
dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c > /path/to/backup.img.gz
Если локально недостаточно места под образ раздела или диска, то можем отправить образ по ssh:
dd if=/dev/sda conv=sync,noerror bs=64K | gzip -c | ssh user@local dd of=backup.img.gz
-
Восстановление из образа
gunzip -c /path/to/backup.img.gz | dd of=/dev/sda
-
Бэкапирование и восстановление MBR
MBR хранится в первых 512 байтах диска. Состоит из 4 частей:
Первые 440 байт содержат код начальной загрузки (загрузчик).
Следующие 6 байтов содержат подпись диска.
Следующие 64 байта содержат таблицу разделов (4 записи по 16 байтов каждая, по одной записи для каждого основного раздела).
Последние 2 байта содержат подпись загрузки.Чтобы сохранить MBR как mbr_file.img:
dd if=/dev/sdX of=/path/to/mbr_file.img bs=512 count=1
-
Извлечь MBR из уже сделаного образа диска
dd if=/path/to/disk.img of=/path/to/mbr_file.img bs=512 count=1
-
Восстановить MBR
будьте осторожны, это уничтожит существующую таблицу разделов и вместе с ней доступ ко всем данным на диске
dd if=/path/to/mbr_file.img of=/dev/sdX bs=512 count=1
Если вы хотите восстановить только загрузчик, но не записи в таблице основных разделов, просто восстановите первые 440 байтов MBR:
dd if=/path/to/mbr_file.img of=/dev/sdX bs=440 count=1
-
Восстановить только таблицу разделов
dd if=/path/to/mbr_file.img of=/dev/sdX bs=1 skip=446 count=64
-
Удалить загрузчик
Обнуляем первые 440 байт
dd if=/dev/zero of=/dev/sdX bs=440 count=1