Введение
Если вы хотите иметь точку отката для вашей операционной системы, т. е. при необходимости восстановить "все как было" в случае неудачного эксперимента - необходимо освоить способы создания образов разделов. В нашем случае необходимо снять образ с корневого раздела, и других системных разделов кроме /home (домашнего раздела) и swap (раздела подкачки), если таковые имеются.
Для этого существует множество проприетарных (коммерческих) программ, таких как Norton ghost, Acronis True Image и другие, но описание работы с ними вы можете найти в соответствующей литературе, а мы рассмотрим применение штатной линуксовой утилиты — dd.
Эта утилита работает с блочными устройствами (например, раздел диска /dev/sda1, флешка /dev/sdh1) и создает их посекторные копии. Что это значит — а то, что для dd нет такого понятия как файл, каталог, занятое место, свободное место — она считывает сектора жесткого диска и может сохранить эту информацию уже как файл-образ. Преимущества этой утилиты являются одновременно и ее недостатками — размер файла-образа будет в точности равен размеру копируемого раздела, т. е. если мой корневой каталог находится на разделе в 20 ГБ, из которых занято только 5 ГБ, то размер файла-образа будет ровно 20 ГБ. Согласитесь, малозаманчивая перспектива, ведь хранить такие бэкапы весьма затруднительно.
Ее синтаксис:
dd if=/dev/sda1 of=file.img
,где /dev/sda1 — это жесткий диск, с которого снимается образ, а file.img — создаваемый файл-образ.
Причем здесь перечислены только минимально необходимые параметры (см. man dd)
Чтобы не сохранять образ такого громадного размера на диске (да и просто может не быть столько свободного места), мы воспользуемся архиваторами: zip, gzip, bzip2, включенными в конвейер с утилитой dd. Результат работы архиватора будет налету перенаправляется в файл.
Определение наименований разделов
Итак, создадим копию корневого раздела (домашний каталог трогать не будем), но, сперва нам надо выяснить кто есть кто, т. е. точные наименования разделов. Это предельно важный момент, потому что если вы неправильно укажете раздел при развертывании образа, то безвозвратно потеряете данные на разделе, который ошибочно указали в качестве целевого. (Но не следует думать, что такой проблемы нет в проприетарных программах - там дела обстоят еще хуже, например, Acronis True Image назначает буквы разделам, которые не всегда совпадают с буквами в самой Windows, и расположены они в другом порядке, поэтому единственный "маячок" - это размер раздела и его метка, если она прочиталась. В линуксе все намного проще - наименования разделов сами по себе не меняются никогда!)
Запустим команду: df -h и посмотрим на результат:
df -h /dev/sdb1 20G 3,4G 16G 19% / /dev/sdb11 19G 12G 5,8G 67% /home
Мы видим, что наш корневой раздел находится на разделе /dev/sdb1 — следовательно его и будем «бэкапить» (а при восстановлении в него будем развертывать образ!), осталось только решить — куда записывать файл-образ. Я запишу в домашний каталог (/dev/sdb11) - место есть, да и скорость записи будет выше, но хранить бэкапы лучше на сменных носителях - флешки, USB жесткие диски и т.д., поэтому после проверки контольной суммы (см. раздел "развертывание образа") образ необходимо перенести.
Примечание: я исхожу их того, что система установлена на 3 раздела: /, /home и swap, если у вас больше, то надо делать бэкап и остальных разделов.
Создание образа раздела
Итак, бэкапим корневой раздел:
sudo dd if=/dev/sdb1 bs=8096 | gzip -9cf > root.gz
Примечание: если увас недостаточно места в домашнем каталоге - необходимо прописать полный путь для сохранения образа, (например у вас есть раздел, смонтированный в /media/films, то команда будет выглядеть так: sudo dd if=/dev/sdb1 bs=8096 | gzip -9cf > /media/films/root.gz изменится и путь для обращения к файлу-образу при восстановлении).
Учтите — это долго и нудно, так что придется подождать.
Мы создали сжатый gzip`ом файл-образ корневого раздела root.gz, его размер 7,6 ГБ, что гораздо меньше чем самого корневого раздела (20 ГБ).
Возможно возникнет вопрос - как же так, занято всего 5 ГБ, а архив занимает 7,6 ГБ - отвечаю - это результат сжатия не моих файлов, а 20 ГБ образа, созданного утилитой dd.
Чтобы убедиться в безошибочности работы архиватора, создадим контрольную сумму нашего исходного раздела, а проверим ее после развертывания.
Создание контрольной суммы раздела
Посчитаем md5 сумму раздела /dev/sdb1:
sudo dd if=/dev/sdb1 bs=8096 | md5sum - > root.md5
Это контрольная сумма корневого раздела записанная в файл root.md5, к ней мы вернемся чуть позже.
Развертывание образа
Это самый важный и ответственный этап - собственно для чего все и затевалось, если с вашей системой случился крах - вы сможете быстро получить назад свою готовую и полностью настроенную систему. (Переустановка не всегда лучший выбор).
Для этого нам потребуется загрузиться с Live CD любого линукс дистрибутива, например, компакт диска с убунту. Теперь, внимание, при загрузке с Live CD разделы жесткого диска не примонтированы, (а без доступа к домашнему каталогу хост системы мы не сможем обратиться к файлу-образу!), поэтому необходимо сделать это вручную. Вы помните, что наш домашний каталог /home/serg лежал в /dev/sdb11, монтируем его:
sudo mount /dev/sdb11 /mnt
Теперь мы знаем, что наш файл-образ лежит в /mnt/serg (это мой домашний каталог — у вас будет свой!).
Примечание: если ваш файл-образ находится на сменном устройстве, то его необходимо подключить физически и примонтировать.
Развертываем образ, но сперва проверим правильность его распаковки:
sudo gunzip -c /mnt/serg/root.gz | md5sum
Сравните этот результат с тем, что вы создали раньше в файле root.md5:
cat /mnt/serg/root.md5
Примечание: эту процедуру неплохо бы сделать сразу после создания образа и после переноса бэкапа на сменный носитель.
Они должны совпасть (только вместо ../serg - ваше имя!), теперь развертываем образ:
sudo gunzip -c /mnt/serg/root.gz | dd of=/dev/sdb1 bs=8096
Примечание: несколько раз проверьте правильность указания целевого раздела (у меня это /dev/sdb1, у вас будет свой).
И напоследок проверим, а без ошибок ли все прошло:
sudo dd if=/dev/sdb1 bs=8096 | md5sum
Контрольная сумма свежеразвернутого раздела опять-таки должна совпадать с:
cat /mnt/serg/root.md5
Если все совпадает — то вы успешно откатили систему к исходному состоянию. Перезагружайтесь и получите свое "все как было".
Примечание: вы можете не создавать контрольную сумму и не проверять правильность распаковки, но тогда нет гарантий безошибочности процесса.
Источник
|