dd
Программа
dd (
disk dump ), используется для копирования ( конвертирования ) дисков, разделов, и прочих операций копирования. Типичный пример:
# dd if= of= bs= conv=
Важные опции для
conv:
- notrunc не обрезать нули в файле на выходе, записывая их как нули
- noerror продолжать после ошибок чтения
- sync дополнять каждый входящий блок нулями до размера ibs-size
Размер входных данных по-умолчанию
512 байт (
1 блок). Увеличение размера блока ускоряет процесс копирования, но требует больше памяти.
Резервное копирование и восстановление
# dd if=/dev/hda of=/dev/hdc bs=16065b # Копировать с диска на диск с таким-же размером
# dd if=/dev/sda7 of=/home/root.img bs=4096 conv=notrunc,noerror # Резервное копирование в файл образа
# dd if=/home/root.img of=/dev/sda7 bs=4096 conv=notrunc,noerror # Восстановление из файла образа
# dd bs=1M if=/dev/ad4s3e | gzip -c > ad4s3e.gz # Сделать резервную копию и заархивировать в Zip
# gunzip -dc ad4s3e.gz | dd of=/dev/ad0s3e bs=1M # Восстановить из архива
# dd bs=1M if=/dev/ad4s3e | gzip | ssh eedcoba@fry 'dd of=ad4s3e.gz' # Что и выше, удаленно
# gunzip -dc ad4s3e.gz | ssh eedcoba@host 'dd of=/dev/ad0s3e bs=1M'
# dd if=/dev/ad0 of=/dev/ad2 skip=1 seek=1 bs=4k conv=noerror # Пропустить MBR ( Master Boot Record )
# Необходимо если диск назначения (ad2) меньше.
Лечение
Программа
dd считывает раздел поблочно, если на диске предположительно есть проблемы, нужно использовать опцию
conv=sync,noerror, при этом
dd
будет пропускать битые блоки и записывать нули на диск назначения.
Поэтому важно, установить размер блока, равным, или меньшим, чем размер
блока на диске. Вполне подходящим будет размер блока в
1 килобайт, установить размер на входе и выходе можно опцией
bs=1k.
Если на диске имеются сбойные сектора, но основные данные нужно
сохранить с данного раздела, можно создать файл образа, смонтировать
образ и копировать данные на новый диск. С установленной опцией
noerror,
dd
пропустит поврежденные блоки, записав на их место нули, при этом,
потеряны будут, только данные, содержавшиеся в сбойных секторах диска.
# dd if=/dev/hda of=/dev/null bs=1m # Проверить на наличие бэд блоков
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc | gzip | ssh \ # Отправить на удаленный хост
root@fry 'dd of=hda1.gz bs=1k'
# dd bs=1k if=/dev/hda1 conv=sync,noerror,notrunc of=hda1.img # Сохранить в образ
# mount -o loop /hda1.img /mnt # Создание и монтирование образа
# rsync -ax /mnt/ /newdisk/ # Копировать на новый диск
# dd if=/dev/hda of=/dev/hda # Обновить
# Обновление диска, безопасная операция, но диск при этом должен быть размонтирован.
Удаление данных
# dd if=/dev/zero of=/dev/hdc # Удалить все данные с диска ( забивает диск нулями )
# dd if=/dev/urandom of=/dev/hdc # Удалить все данные с диска ( более предпочтительный вариант )
# kill -USR1 PID # Посмотреть текущее состояние dd (Linux)
# kill -INFO PID # Посмотреть текущее состояние dd (FreeBSD)
Трюки с MBR ( master boot record )
MBR содержит код загрузчика и таблицу разделов. Первый
466 байт отводятся под загрузчик,
466-512 под таблицу размещения разделов.
# dd if=/dev/sda of=/mbr_sda.bak bs=512 count=1 # Сделать резервную копию MBR
# dd if=/dev/zero of=/dev/sda bs=512 count=1 # Удалить MBR и таблицу размещения разделов
# dd if=/mbr_sda.bak of=/dev/sda bs=512 count=1 # Восстановить MBR целиком
# dd if=/mbr_sda.bak of=/dev/sda bs=446 count=1 # Восстановить только загрузчик
# dd if=/mbr_sda.bak of=/dev/sda bs=1 count=64 skip=446 seek=446 # Восстановить таблицу размещения разделов
Оригинал