Monday, January 11, 2016

Резервное копирование информации при помощи 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 не дожидаться данных, приходящих по сети, если целый блок недоступен).

No comments: