Утилита dd: копирование с комфортом

Для того, чтобы скопировать файл, мы чаще всего используем команду cp, несправедливо забывая о таком «старожиле» в *nix системах как утилита dd (dataset definition). Ее основное преимущество заключается в том, что она позволяет копировать данные побайтово. Кажется, все очень просто. Однако на самом деле, с помощью команды dd можно сделать столько всего, что примитивным этот инструмент точно не назовешь. В статье рассмотрим часто используемые примеры этой команды.
Синтаксис
# dd if=источник копирования of=файл назначения параметрыВводим команду
# dd if=/dev/urandom of=/dev/null bs=100M count=5Получаем отчет об операции
dd: warning: partial read (33554431 bytes); suggest iflag=fullblock 0+5 records 0+5 records out 167772155 bytes (168 MB) copied, 17.117 s, 9.8 MB/sПараметры, указанные в команде
if – источник копирования;
of – файл назначения, куда копируем;
bs – количество байтов, записанных за один раз. Этот аргумент можно представить как площадку, на которую записывается определенное количество данных.
count – число, которое указывает на то, какое количество площадок мы хотим скопировать за один сеанс.
В результате у нас в null устройство скопируется 500 мегабайт информации.
Как источник копирования, так и файл назначения могут быть и обычными файлами, и устройствами.
Примеры
Создание образа диска
# dd if=/dev/cdrom of=image.iso conv=noerrorЭта команда запустит процесс копирования данных с образа диска в указанный нами файл. Мы указали параметр noerror, который предотвращает остановку программы в случае, если возникнет ошибка чтения.
Манипуляции с жестким диском
Копируем жесткий диск побайтово с размером буфера 4 Кб
# dd if=/dev/sda of=/dev/sdb bs=4096Чтобы скопировать один раздел жесткого диска, пропуская ошибки чтения, вводим команду
# dd if=/dev/sda1 of=/dev/sdb2 bs=4096 conv=noerror,syncВсе свободное место на диске заполняем нулями
# dd if=/dev/zero of=zerofillУдалить содержимое жесткого диска, предварительно заполнив его нулями, можно командой
# dd if=/dev/zero of=/dev/sdgСмотрим статус выполнения операции
# killall –USR1 ddИли
# dd if=image.iso of=/dev/sdb status=progressРезервное копирование MBR
Главная загрузочная запись (master boot record) занимает первых 512 байт жесткого диска. Включает в себя таблицу разделов, загрузчик и небольшой фрагмент исполняемого кода. Чтобы создать резервную копию MBR, пишем
# dd if=/dev/sda of=mbr.img bs=512 count=1В качестве вывода получаем подтверждение о том, что у нас скопировалось 512 байт со скоростью 627 кБ/с.
1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000816343 s, 627 kB/sВосстанавливаем данные с помощью команды
# dd if=mbr.img of=/dev/sdaУчимся выполнять различные трюки с файлами при помощи целого набора команд, включая утилиту dd, на нашем авторском курсе «Администрирование Linux. Базовый уровень». Присоединяйтесь!