Получайте новые записи в блоге через RSS RSS

Резервное копирование информации при помощи DD

Для того, чтобы сделать резервную копию (файл-образ) винчестера для последующего восстановления вовсе не нужны коммерческие, проприетарные утилиты — есть старый, как мир, dd. Всё, что нужно сделать — просто правильно его использовать. Утилита dd есть в любом дистрибутиве, и даже в Knoppix, который можно использовать для восстановления данных.

Вообще делать копию с активного (примонтированного на запись) раздела не рекомендуется, ибо dd не сможет скопировать файлы, если в них идет запись. Но, я честно говоря, делал такие бэкапы неоднократно, оказывались они вполне рабочими и уже пару раз меня спасали.

Но, чтобы точно не было никаких проблем стоит загрузиться с любого LiveCD диска с Линукс / BSD. После этого залогиниваемся под root-аккаунтом. Убеждаемся, написав в консоли df / mount, что ни один из тех разделов, что мы собираемся копировать, не примонтирован на запись. Решаем, куда будем архивировать данные: это может быть другой раздел на винчестере, внешний жёсткий диск или по сети.

  • /dev/hda это винчестер, который архивируем,
  • /dev/sda1 — это раздел внешнего винчестера или другая партиция, на которую архивируем,
  • hda.img.gz — получившийся сжатый файл-образ.

Создание резервной копии

dd if=/dev/hda of=/dev/sda — полная копия жесткого диска, с одного на другой.

dd if=/dev/hdx of=/path/to/image — копия диска в какую-то папку.

dd if=/dev/hda | gzip -c > /mnt/sda1/hda.img.gz — архивирование с одновременным сжатием, результат чего записывается в файл. hda.img.gz

dd if=/dev/hda conv=sync,noerror of=/dev/sda — параметр "conv=sync,noerror" указывает dd не читать блок, если при этом происходит ошибка, но записать в архивируемый файл-образ данные, чтобы размер блока не менялся.

dd if=/dev/hda bs=64K of=/dev/sda — параметр "bs=64K" это размер блока в килобайтах — использование такого большого размера блока ускоряет процесс копирования. Параметр bs можно сделать ещё больше, а именно равным размеру кеша копируемого диска (например bs=8m), это сильно ускорит весь процесс.

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz — все параметры можно использовать одновременно.

dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k" — копирование удаленно по сети, с использованием SSH. Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.

Восстановление данных из резервной копии

gunzip -c /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K — восстановление с внешнего жестокого диска или другого раздела. Все параметры были разъяснены ранее.

dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"сетевой вариант с восстановлением из файл-образа. Следует помнить, что в данном случае не следует использовать опцию conv=sync,noerror в опциях dd — если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен).


Заметки по теме:

комментариев 7

  1. anonymous (2 июля 2008, 17:09)
  2. >dd if=/dev/hda of=/dev/sda

    При этом надо, чтобы совпадали размеры винчестеров.

  3. Владимир Лапшин (7 июля 2008, 16:56)
  4. А что произойдет если они не совпадут? Насколько я знаю надо только, чтобы тот, на который производится копирование был не меньше, чем то, с которого копируется.
    При этом свободное пространство потеряется конечно.

  5. Дмитрий (26 июля 2009, 22:01)
  6. Свободное пространство не теряется, просто останется не размеченное место на диске. Его можно потом с помощью GParted добавить к любому разделу.

  7. Vulpes (5 ноября 2009, 21:37)
  8. Да, но если конечный будет больше конечно ничего страшного. Но как потом больший диск заталкивать в меньший при востановлении?? ))))))

  9. Владимир Лапшин (9 ноября 2009, 17:49)
  10. Vulpes, запихивать никуда ничего, конечно же, не придется. DD при копировании на диск большего объема создает раздел равный тому, с которого идет копирование.

  11. Zenith (29 сентября 2011, 14:29)
  12. Классная статья. Но для полноты картины не хватает восстановления MBR средствами dd

    # dd if=/dev/hda of=/dev/(устройство на которое переносим MBR) bs=512 count=1

    или же копирование MBR в файл на винте(флэшке/в сетевой каталог)
    # dd if=/dev/hda of=/home/admin/boot.mbr bs=512 count=1

    и восстановление из файла
    # dd if=/home/admin/boot.mbr of=/dev/hda bs=512 count=1

  13. Ити (9 декабря 2011, 15:51)
  14. «Но как потом больший диск заталкивать в меньший при востановлении?? ))))))»
    Обновить образ, только что развернутый на больший диск не получится. Ибо тогда его на этого же размера (или бол.) диск можно развертывать. При развертывании большего нераспределенного пространства в образе, снятом с данного диска на диск меньшего размера, DD не сможет его усечь. Что плохо, конечно, но это расплата за «универсализм» dd.

Напишите комментарий