Серверная (www.it-simple.ru)

Disk dump, он же dd или как создать образ CD одной командой


Собственно, команда:

dd if=/dev/cdrom of=cdimage.iso bs=2048

/dev/cdrom - файл-устройство компакт-дисковода
cdimage.iso - имя файла образа. Если указан не полный (или относительный) путь, то будет создан в текущем каталоге
2048 - размер кластера на компакт-диске. При указании bs=2048 считывание данных с диска и запись в файл будет производиться блоками по 2048 байт (2 килобайта). По умолчанию ibs = obs = bs = 512 и в данном конкретном примере его можно было вообще не указывать.

Также с помощью простой команды dd можно сделать массу полезных вещей. Например:

Работа с MBR (Master Boot Record)

MBR занимает первые 512 байт жёсткого диска. В первых 446 байтах находится системный загрузчик, остальные байты - разметка диска (первичные разделы).

Копирование таблицы разделов с диска /dev/sda на диск /dev/sdb (может быть полезно при создании RAID):

dd if=/dev/sda of=/dev/sdb bs=1 count=64 skip=446 seek=446

Резервное копирование MBR с диска /dev/sda в файл mbr_sda.iso:

dd if=/dev/sda of=mbr_sda bs=512 count=1

или, что по сути то же самое:)

dd if=/dev/sda of=mbr_sda bs=1 count=512

Удаление MBR (затирание нулями):

dd if=/dev/zero of=/dev/sda bs=512 count=1

Удаление MBR (затирание произвольными значениями, сложнее восстанавливать):

dd if=/dev/random of=/dev/sda bs=512 count=1

Восстановление из файла mbr_sda.iso (с полной копией MBR) только загрузчика на диск /dev/sda:

dd if=mbr_sda of=/dev/sda bs=446 count=1

Работа с разделами диска

Здесь стоит обратить внимание, что чем больше значение bs, тем быстрее происходит копирование. При слишком большом bs для операций может не хватить памяти.

Резервное копирование всего раздела /dev/sda1 в образ sda1.iso (размер образа будет равен размеру партиции!):

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

Резервное копирование всего раздела /dev/sda1 в образ sda1.iso.gz со сжатием gzip:

dd if=/dev/sda1 | gzip>sda1.iso.gz

Восстановление партиции /dev/sda1 из сжатого образа sda1.iso.gz:

gzip -cd sda1.iso.gz | dd of=/dev/sda1

Затирание раздела /dev/sda1 нулями (остаётся небольшая возможность восстановления содержимого):

dd if=/dev/zero of=/dev/sda1

Затирание раздела /dev/sda1 нулями и единицами в случайном порядке (практически без шансов на восстановление):

dd if=/dev/urandom of=/dev/sda1

Кстати, /dev/random и /dev/urandom - это два разных устройства. Первое - качественнее, второе - быстрее.

При встрече с ошибкой чтения программа dd по умолчанию прекращает работу. Поэтому, если диск начал «сыпаться» и на нём содержатся ошибки, есть смысл воспользоваться ключом conv=sync,noerror. При этом dd будет игнорировать ошибки чтения блока (заданного параметром bs), и в пункт назначения вместо него будет записывать нули. bs должен быть меньше либо равен размеру кластера диска, чтобы не потерять неиспорченные данные.

Все перечисленные команды годятся для работы не только с разделами (/dev/sda1), но и с целыми дисками (/dev/sda)

Восстановление намагниченности поверхности диска (актуально, если файлы у вас хранятся годами без перезаписи):

dd if=/dev/sda of=/dev/sda

Дополнительно

Варианты расшифровки команды dd: disk dump, direct data, destroy disk.


dd не выводит прогресс операции. Для его просмотра надо ввести в другой консоли:

killall -SIGUSR1 dd

Или в другой же консоли автоматизировать процесс вывода, например, выводить информацию раз в минуту:

watch -n60 killall -SIGUSR1 dd

При восстановлении раздела жёсткого диска и если вы уверены, что на разделе нет ошибок - используйте ключ bs и присвойте ему какое-либо большое значение. Копирование большими блоками может на порядок ускорить операцию.

gzip -cd sda1.iso.gz | dd of=/dev/sda1 bs=32768

По умолчанию ibs = obs = bs = 512.