Для того, чтобы сделать резервную копию (файл-образ) винчестера для последующего восстановления вовсе не нужны коммерческие, проприетарные утилиты - есть старый, как мир, dd. Всё, что нужно сделать -
просто правильно его использовать.
Только зануды делают резервные копии:
настоящие мужчины просто
закачивают все важное на ftp,
позволяя остальным отзеркалировать это.
Линус Торвальдс
Утилита dd есть в любом дистрибутиве, и даже в Knoppix, который можно использовать для восстановления данных. Для этого так же потребуется любой архиватор, в данном примере это gzip. Приведён вариант с архивированием на другую машину по сети с использованием SSH или netcat.
1. Приготовления
Загружаемся с любого LiveCD диска с Линукс / BSD, залогиниваемся под root-аккаунтом.
Убеждаемся, написав в консоли df, что ни один из тех разделов, что мы собираемся копировать, не примонтирована на запись. Решаем, куда будем архивировать данные: это может быть другой раздел на винчестере, внешний жёсткий диск или по сети.
2. Создаём резервную копию
В данном примере /dev/hda это винчестер, который архивируем, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, на которую архивируем, hda.img.gz - получившийся сжатый файл-образ.
2.1 Внешний винчестер или другой раздел диска
Монтируем устройство, куда мы будем архивировать данные# mount -t vfat /dev/sda1 /mnt/sda1
Перегоняем данные с одного винчестера на другой. Так как данных много, полезно их сжать - и никс-системы позволяют это делать "на лету". В примере использван GZip, но подойдёт и любой другой (например, bzip2 или p7zip).
Для этого:# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c > /mnt/sda1/hda.img.gz
Здесь происходит архивирование с одновременным сжатием, результат чего записывается в файл hda.img.gz
Параметр "conv=sync,noerror" указывает dd не читать блок, если при этом происходит ошибка, но записать в архивируемый файл-образ данные, чтобы размер блока не менялся.
Параметр "bs=64K" это размер блока в килобайтах - использование такого большого размера блока ускоряет процесс копирования. Параметр bs можно сделать ещё больше, а именно равным размеру кеша копируемого диска (например bs=8m), это сильно ускорит весь процесс.
Выходной поток передаётся по конвейеру для сжатия gzip, результат выводится в файл на другом диске.
2.2 Удалённо по сети
Всё то же самое, что в п.2.1, но с добавлением в конвейер SSH:# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | ssh -c blowfish user@hostname "dd of=hda.img.gz bs=64k"
Архивный файл появится в домашней директории пользователя user на машине hostname. Если сеть маленькая, лучше вместо hostname использовать просто ip-адрес. Опция -c blowfish заставляет SSH выбрать алгоритм шифрования Blowfish, который быстрее остальных шифрует данные.
Вариант с netcat, если данные копируются по локальной сети и шифрование не нужно:# dd if=/dev/hda conv=sync,noerror bs=64K | gzip -c | nc 192.168.1.1 3333
На удалённой машине должен быть запущен netcat:# nc -l -p 3333 > hda.img.gz
Вариант с SAMBA, если копирование производится на оффтопичную машину: примонтировать удалённо сетевой ресурсsmbmount //192.168.1.100/shared /mnt/remoteshare -o username=имяпользователя,password=пароль
и далее всё то же, что и в п.2.1.
3. Восстанавливаем данные из резервной копии
Пример тот же: /dev/hda это винчестер, который архивируем, hda.img.gz - архивный сжатый файл-образ, а /dev/sda1 - это раздел внешнего винчестера или другая партиция, с которого восстанавливаем данные.
3.1 Внешний винчестер или другой раздел диска
Копируем и распаковываем файл-образ одновременно:# gzip -x /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
Все параметры в п.2 уже объяснены.
3.2 Удалённо по сети
Сетевой вариант с восстановлением из файл-образа:dd if=hda.img.gz | ssh -c blowfish user@deadhost "gunzip -c | dd of=/dev/hda1 bs=64k"
Следует помнить, что в данном случае не следует использовать опцию conv=sync,noerror в опциях dd - если вы всё-таки включите эту опцию, в большинстве случаев это исказит записываемые данные (это заставляет dd не дожидаться данных, приходящих по сети, если целый блок недоступен).
Ссылки
Этот пост является переводом этой замечательной статьи, дополненной и расширенной этой и этой статьями. Так же это применимо к утилитам восстановления данных, описанных здесь.
понедельник, Март 17, 2008
Резервное копирование информации при помощи dd
Эпиграф
Подписаться на:
Комментарии к сообщению (Atom)




20 комментариев:
А еще иногда (на ФС, отличных от ext3/reiser/xfs) возникают проблемы с файлами больше 2х или 4х Гб. Чтобы предотвратить такие проблемы, файл образа можно сразу порезать split-ом:
dd if=/dev/hdb1 | gzip | split -d -b 2G hdb1_img_
Получатся файлы hdb1_img_0, _1, ...
Убеждаемся, написав в консоли df, что ни один из тех разделов, что мы собираемся копировать, не примонтирована на запись.
Или df в дебиане показывает статус ФС, или всё-таки mount?
параметр bs лучше сделать еще больше, а именно равным размеру кеша копируемого диска. Т.е. например bs=8m, это сильно ускорит весь процесс
Или df в дебиане показывает статус ФС, или всё-таки mount?
df наглядней
Одно плохо, бэкап производится без учета ФС
Таким образом если на диске в 200G реальных данных скажем 100G, в образ все равно будут заворачиваться все 200.
И сжатие тут мало поможет, ибо неиспользуемые области содержат далеко не нулевые значения.
Анонимный пишет...
Одно плохо, бэкап производится без учета ФС
Таким образом если на диске в 200G реальных данных скажем 100G, в образ все равно будут заворачиваться все 200.
И сжатие тут мало поможет, ибо неиспользуемые области содержат далеко не нулевые значения.
Для того чтобы учитывать ФС как Вы выразились есть утилита partimage. Которая делает образ только реальных данных. Правда имеется не во всех дистрибутивах в отличии от dd.
Для того чтобы учитывать ФС как Вы выразились есть утилита partimage. Которая делает образ только реальных данных. Правда имеется не во всех дистрибутивах в отличии от dd.
Я это все к чему..
Может таки перед backup с использованием dd, как то прописать во все свободные блоки нули?
Тогда их участие в образе после сжатия будет не столь впечатляюще?
я в свое время делал бэкап с помощью pax, она по сути создает обычный tar.gz, только сохраняет все права и владельцев ФС, ну а восстановление с помощью обычного tar/gunzip. Если кому интересно могу найти с какими ключами использовал.
PS. Бэкапил наживую (в часы наименьшей нагрузки), сервер под FreeBSD 6.0. Ну и естесственно проверял что юэкапы потом можно будет использовать, т.е. восстанавливал на другой машине (другом железе).
Бэкапы нужны, чтобы было легче после такого: http://lug.wsu.edu/node/414 .
openssl+nc тоже дают шифрование. Просто раздаю с сервера образ машины эталонный, ставлю на образ пароль таким образом : )
Одно плохо, бэкап производится без учета ФС. Таким образом если на диске в 200G реальных данных скажем 100G, в образ все равно будут заворачиваться все 200.
И сжатие тут мало поможет, ибо неиспользуемые области содержат далеко не нулевые значения.
Именно для бэкапа в своё время были созданы утилиты dump/restore, которые, в отличие от partimage, есть в любом дистрибутиве. Эти утилиты лишены перечисленных недостатков, кроме того, позволяют делать инкрементальный бэкап.
Перечитываем статью, заменяя dd на dump, и всё хорошо :)
Пример использования dump/restore с корневого раздела удалённой машины в текущую директорию (с файла будет немного по другому)
ssh backup-server.remote "dump -0af- /" | restore -xf .
А чем плох backup с помощью tar ?
2 Portnov пишет...
А еще иногда (на ФС, отличных от ext3/reiser/xfs) возникают проблемы с файлами больше 2х или 4х Гб.
А что за файловые системы, у которых такие проблемы!? Неужели FAT\NTFS? :-)
2 jankkhvej пишет...
Или df в дебиане показывает статус ФС, или всё-таки mount?
Во всяком случае:
$ df
Файловая система 1K-блоков Исп Доступно Исп% смонтирована на
/dev/hda2 58314120 29571488 28742632 51% /
Показано, что раздел смонтирован.
2 past пишет...
параметр bs лучше сделать еще больше, а именно равным размеру кеша копируемого диска. Т.е. например bs=8m, это сильно ускорит весь процесс
Спасибо за ценное замечание, добавлено в текст.
2 Анонимный пишет...
Одно плохо, бэкап производится без учета ФС
Таким образом если на диске в 200G реальных данных скажем 100G, в образ все равно будут заворачиваться все 200.
Так это полный образ диска и есть.
2 Maverick пишет...
есть утилита partimage. Которая делает образ только реальных данных. Правда имеется не во всех дистрибутивах в отличии от dd.
В Дебиане есть, по крайней мере в Этче. Надо будет на досуге о ней написать. Maverick, спасибо за идею!
2 Deepwalker пишет...
openssl+nc тоже дают шифрование. Просто раздаю с сервера образ машины эталонный
В общем тоже вариант.
2 ujo пишет...
Перечитываем статью, заменяя dd на dump, и всё хорошо :)
Да, по ходу дела придётся писать ещё один пост :-)
И ещё раз спасибо за ценные мысли!
Убеждаемся, написав в консоли df, что ни один из тех разделов, что мы собираемся копировать, не примонтирована на запись.
Наверно, раздел всё-таки мужского рода и окончание у "примонтирована" должно быть другим, а? Как считает автор? :)
пофиг смонтирован ли первычный раздел или нет:
cat /dev/hda | gzip -9 > /mnt/disk2/obraz-hda.gz
и куча вариаций на тему.
точную копию диска (например когда собираешь пачками thin-клиенты):
cat /dev/hda > /dev/hdc
@virens
Да, Fat/Ntfs, а еще различные варианты iso9660/udf (если бэкапимся на двд). В большинстве случаев проблемы не возникает, но я предпочитаю перестраховаться :)
imho - может таки стоит перед бэкапом создать
dd if=/dev/zero of=./zero_file bs=FREE_SIZE count=1
и снять вопросы с размером запакованного архива?
Здесь
http://www.samag.ru/art/11.2006/11.2006_03.html
описан скрипт, учитывающий файловую систему. Он для SystemRescueCd, но используемые пакеты можно поставить в любой линукс.
И вообще, SystemRescueCd, который можно запускать с CD или флешки, много интересного несет в себе.
А есть что-либо под линукс, что умеет запакованный образ раздела монтировать, чтобы можно было просмотреть и скопировать выборочные файлы?
Привет, Virens. Можешь подсказать, есть небольшая задачка. Нужно мой ext3 раздел в 14Gb (есть только один раздел, монтирован на /) расширить, т.е. из 14Gb сделать 50Gb, и, конечно, сохранить при этом все те насройки и программы что есть уже в системе. Про это ли говорится в этом посте (или только о backup-е)? Если не про это, можешь, пожалуйста, подсказать, где можно найти/почитать как это правильно сделать.
Спасибо.
Александр.
Ошибочка вышла немного. Пункт 3.1 (цитирую):
>Копируем и распаковываем файл-образ одновременно:
># gzip -x /mnt/sda1/hda.img.gz | dd of=/dev/hda conv=sync,noerror bs=64K
Вместо gzip -x должно быть gunzip -c. Ну и логичнее будет сказать "распаковываем и копируем", но это я уже придираюсь :-)
Отправить комментарий