dd
Программа dd ( disk dump ), используется для копирования ( конвертирования ) дисков, разделов, и прочих операций копирования. Типичный пример:# dd if= of= bs= conv=Важные опции для conv:
- notrunc не обрезать нули в файле на выходе, записывая их как нули
- noerror продолжать после ошибок чтения
- sync дополнять каждый входящий блок нулями до размера ibs-size
Резервное копирование и восстановление
# 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 # Восстановить таблицу размещения разделов
Оригинал