В Linux команда dd
в основном используется для копирования и преобразования данных, поэтому она означает дубликатор данных.
Содержание
Возможности
Используя эту утилиту, мы можем:
- выполнять резервное копирование и восстановление всего жёсткого диска или раздела;
- создавать виртуальную файловую систему и резервные образы компакт-дисков или DVD-дисков, называемых файлами ISO;
- копировать регионы необработанных файлов устройства, например, создавать резервную копию MBR (основной загрузочной записи);
- преобразовывать форматы данных, таких как ASCII, в EBCDIC;
- преобразовывать нижний регистр в верхний и наоборот.
Команду dd
может выполнять только суперпользователь.
Синтаксис
$ dd [ОПЕРАНД]…
или
$ dd ПАРАМЕТР
Операнды
- bs=ЧИСЛО
- Читать и писать до ЧИСЛА байт за раз (по умолчанию 512)
- cbs=ЧИСЛО
- Преобразовывать заданное ЧИСЛО байт за раз
- conv=СПИСОК
- Преобразовывать файл в соответствии со СПИСКОМ символов, элементы перечисляются через запятую
- count=ЧИСЛО
- Копировать только заданное ЧИСЛО входных блоков
- ibs=ЧИСЛО
- Считывать до ЧИСЛА байт за раз (по умолчанию 512)
- if=ФАЙЛ
- Читать ФАЙЛ, а не стандартный ввод
- iflag=ФЛАГИ
- Читать в соответствии со списком символов, элементы перечисляются через запятую
- obs=ЧИСЛО
- Записывать заданное ЧИСЛО байт за раз (по умолчанию 512)
- of=ФАЙЛ
- Записывать в ФАЙЛ, а не на стандартный вывод
- oflag=ФЛАГИ
- Записывать в соответствии со списком символов, элементы перечисляются через запятую
- seek=ЧИСЛО (или oseek=ЧИСЛО)
- Пропустить перед началом вывода заданное ЧИСЛО блоков размером
obs
- skip=ЧИСЛО (или iseek=ЧИСЛО)
- Пропустить перед началом ввода заданное ЧИСЛО блоков размером
ibs
- status=ИНФО
- Заданную ИНФОрмацию не выводить в
stderr
;
noxfer
— не выводить статистику передачи
none
— не выводить ничего
progress
— показывать индикатор передачи
N and BYTES may be followed by the following multiplicative suffixes: c=1, w=2, b=512, kB=1000, K=1024, MB=1000*1000, M=1024*1024, xM=M, GB=1000*1000*1000, G=1024*1024*1024, and so on for T, P, E, Z, Y, R, Q.
Binary prefixes can be used, too: KiB=K, MiB=M, and so on.
If N ends in 'B', it counts bytes not blocks.
Параметры
- --help
- Показать эту справку и выйти
- --version
- Показать информацию о версии и выйти
Использование в Linux команды dd
Базовое использование утилиты является довольно простым, так как она принимает всего два аргумента: if = входной файл
и of = выходной файл
.
Утилита весьма функциональна для клонирования жёсткого диска.
Нецелесообразно использовать этот инструмент для копирования файлов, ибо команда cp
делает это намного проще.
Резервное копирование одного диска в другой
Утилита ничего не знает о файловой системе и разделах, она просто копирует все данные с одного диска на другой.
Второй диск должен быть того же размера или больше первого, иначе получим на нём обрезанные и бесполезные разделы.
Опции bs
следует указывать размер копируемого блока (количество байтов записываемых за один раз), в противном случае утилита установит его по умолчанию в 512 байт.
Для примера копируем все данные с диска /dev/sda
на диск /dev/sdb
:
$ sudo dd if=/dev/sda of=/dev/sdb bs=4096 conv=noerror,sync
Результатом явилось клонирование диска с теми же данными и в том же разделе.
Создание образа диска или файла
Резервное копирование диска или файла в образ будет быстрее, чем копирование точных данных. Помимо этого образ диска значительно упрощает восстановление.
Пример:
$ sudo dd if=/dev/sda of=/tmp/sdadisk.img
Для сохранения выходного файла необходимо, конечно, указать его имя, оканчивающееся на суффикс .img
.
Создание сжатого образа диска
Для уменьшения размера образ диска можно сжать:
$ sudo dd if=/dev/vda | gzip -c >/tmp/vdadisk.img.gz
Оператор |
превратил выходные данные левой команды во входные данные правой команды. Опция -c
выполнила запись в стандартный вывод, а исходные файлы сохранились без изменений.
Резервное копирование раздела диска
Можно, помимо копирования всего диска, клонировать и раздел. Для этого просто нужно указать имя раздела во входном файле:
Следует обязательно убедиться, что размер копируемого раздела меньше резервного.
$ sudo dd if=/dev/sda1 of=/dev/sdb1 bs=4096 conv=noerror,sync
Можно, конечно, создать и образ раздела:
$ sudo dd if=/dev/sda1 of=/tmp/sda1.img
Восстановление диска или раздела
При возникновении каких-либо проблем с исходным диском или разделом его всегда можно будет восстановить из резервной копии.
Для восстановления необходимо инвертировать входной файл с выходным, указанным во время операции резервного копирования:
$ sudo dd if=/tmp/sdadisk.img of=/dev/sda
Исходные данные восстановлены.
Восстановление сжатого изображения
Сначала указывается сжатый файл:
$ sudo gzip -dc /tmp/vdadisk.img.gz | dd of=/dev/vda
Опция -d
здесь использовалась для распаковки.
Создание загрузочного USB
В этом случае всё выполняется предельно просто:
$ sudo dd if=~/store/distros/kali/kali-linux-2022.2-live-amd64.iso of=/dev/sdb bs=1M
Здесь указан путь к образу, записанному мной на USD-накопитель по пути /dev/sdb
.
Резервное копирование MBR в образ
В связи с тем, что MBR (основная загрузочная запись) составляет первые 512 байт диска, нужно просто скопировать этот размер блока:
$ sudo dd if=/dev/sda of=/tmp/sdambr.img bs=512 count=1
При использовании count=1
и bs=512
будет скопировано только 512 байт, что соответствует размеру MBR.
Восстановление MBR из образа
Пример восстановления MBR:
$ sudo dd if=/tmp/sdambr.img of=/dev/sda
Заключение
В этой статье показаны лишь основные возможности команды Linux dd
. Изучив эту удивительную и мощную как «лом» утилиту вы значительно повысите производительность и функциональность своей работы.