Образ партиции с помощью dd
Для создания образа дисковой партиции необходимо в однопользовательском режиме выполнить команду:
#dd if=/dev/HDD of=/dir/file-name
Здесь:
- HDD - название дисковой партиции которую требуется скопировать (например da0s2d) узнать ее можно выполнив команду df или посмотрев в файле /etc/fstab
- /dir/file-name - название файла в который будет помещен образ
Клонирование всего диска
Копирование физического диска например /dev/sda в диск /dev/sdb:
# dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync status=progress
Эта команда скопирует диск целиком, в том числе таблицу разделов, загрузчик, разделы, UUID и данные.
bs= устанавливает размер блока. По умолчанию 512 байт, что является «классическим» размером блока для жёстких дисков с начала 1980-х годов, но не самым удобным. Используйте большее значение, 64K или 128K. Также прочитайте предупреждение ниже, потому что это не просто «размер блока» — это также влияет на обработку ошибок чтения.
noerror указывает dd продолжить работу, игнорируя все ошибки чтения. По умолчанию dd прекращает работу при любой ошибке.
sync заполняет входные блоки нулями, если были ошибки чтения, чтобы смещения данных оставались правильными.
status=progress показывает статистику передачи данных, которая позволяет оценить время завершения.
Примечание: Размер блока, который вы указываете, влияет на то, как обрабатываются ошибки чтения (смотрите ниже). Для восстановления данных используйте ddrescue.
Утилита dd технически имеет «размер входного блока» (IBS) и «размер выходного блока» (OBS). Когда вы устанавливаете bs, вы фактически устанавливаете и IBS, и OBS. Обычно, если размер блока, скажем, 1 МиБ, dd считывает 1024×1024 байт и записывает столько же байт. Но если произойдет ошибка чтения, всё пойдет не так. Многие думают, что dd «заполнит ошибки чтения нулями», если вы используете опции noerror,sync, но это не так. dd, согласно документации, дополнит размер OBS до размера IBS после завершения чтения, что означает добавление нулей в конце блока. То есть, весь 1 МиБ будет испорчен из-за одной ошибки чтения в 512 байт в начале чтения: 12ERROR89 станет 128900000 вместо 120000089.
Если вы уверены, что ваш диск не содержит ошибок, вы можете использовать больший размер блока, что увеличит скорость копирования в несколько раз. Например, изменение bs с 512 до 64K изменило скорость копирования с 35 МБ/с до 120 МБ/с на простой системе Celeron 2,7 ГГц. Но имейте в виду, что ошибки чтения на исходном диске будут в конечном итоге выглядеть как ошибки блоков на целевом диске, то есть одна ошибка чтения 512 байт испортит весь выходной блок размером 64 КиБ.
Примечание: Чтобы сделать UUID файловых систем ext2/3/4 снова уникальными после копирования, используйте tune2fs /dev/sdXY -U random для каждого раздела. Для разделов подкачки используйте mkswap /dev/sdXY. Если вы копируете GPT-диск, вы можете использовать sgdisk для рандомизации GUID диска и разделов и восстановления их уникальности. Изменения таблицы разделов, которые внёс dd на целевом диске, не регистрируются ядром. Чтобы попросить ядро перечитать таблицы разделов без перезагрузки, можно использовать утилиту partprobe (часть GNU Parted).