RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Клонирование разделов windows с помощью загрузочного диска FreeBSD [2008]
Ситуация обычная, сотрудница нашей фирмы попросила «посмотреть домашний компьютер», который «не включается, сын что - то натворил». Прибыв на место определил что винда не грузится ни в обычном режиме ни в безопасном. Сошлись на том, что вытаскивать данные не будем, а просто переустановим с форматированием. Ребенок учится в средних классах школы и естественно ставит все проги подряд особо не задумываясь. Ограничивать его в любознательности не стоит, пусть учится, тем не менее я понял что аналогичная ситуация (когда система будет запорота загадочным образом) может возникнуть совсем скоро и мы будем к этому не готовы, т.е. все что я смогу сделать — опять все форматировать, ставить винду, дрова и проги. Это не устраивало и я вспомнил как один знакомый говорил о рецепте «2х винчестеров» — образ свежеустановленной системы снимается утилитой типа акрониса (Acronis True Image) или Нортона Госта (Norton Ghost) на второй винчестер, который затем отключается. В дальнейшем, когда наступит время «ч» можно быстро развернуть систему из образа. Первый вопрос возник после изучения нового Нортона то ли двенадцатой то ли четырнадцатой версии, который работал исключительно под венду и кроме того, требовал установки MS NetFramework. Хотелось чего - то доброго, чистого, не требующего установки, независящего от типа файловой системы и желательно бесплатного. И такое нашлось. Это dd.
Второй вопрос, вернее не совсем вопрос, а сразу решение, возникло после оценки размера установленной винды ХР и всех прог — чуть больше 3Гб, а значит образ влезет на DVD болванку и маме не потребуется отрывать лишнюю тысячу рублей из семейного бюджета на покупку дополнительного HDD. Надо сказать, что утилита dd работает на низком уровне, копируя информацию с носителя по секторам. В этом ее преимущество — не зависит от файловой системы и недостаток — копирует все подряд без разбору. Т.е. если имеем винчестер размером 10Гб то и получим образ в 10Гб. Винчестер 100Гб — образ 100Гб. Естественно такой образ можно пожать архиватором до приемлемого размера, но только если на остальное пространство будут записаны однородные данные, например нули. Что касается файловой системы ntfs, то при удалении файла в ней не происходит физического удаления — стирается только заголовок файла, сами данные остануться нетронутыми до тех пор пока на их место не будет записан другой файл. Тоже самое происходит при форматировании — очищается только служебная область диска. Честно говоря несколько лет назад я был сильно удивлен сначала отформатировав по ошибке диск с данными, а потом восстановив абсолютно всю информацию с него простой утилитой. Теперь представим что на жестком на диске размером 320Гб 150 Гб занято музыкой, мы форматируем его в ntfs, ставим винду, и видим что досутпно 317Гб. Все верно, но если пытаться сжимать образ этого диска, то мы будем сжимать фактически 150Гб, т.к. данные от музыкальных файлов как там были до форматирования так останутся после. Поэтому нам нужно сначала записать однородные данные на весь этот диск (забиваем нулями), а только потом уже форматировать его и ставить винду.
Итак, приступим : В первую очередь нам потребуется LiveCD с любым Linux (на котором есть утилита dd и gzip) или FreeBSD (я использовал это) качаем и пишем на болванку. Выбираем в биосе загрузку с CD и загружаемся с него
Далее выбираем пункт меню «Fixit»
и выбираем пункт «use the "live" filesystem CDROM/DVD»
Должно появиться приглашение консоли
Fixit#
получаем список дисков в системе :
Fixit# dmesg | grep ad
например, у меня было 2 диска : ad0 — диск на который я собираюсь ставить ОС windows ad4 — диск куда я буду сохранять сжатый образ
Забъем ad0 нулями (все данные на диске будут уничтожены):
Fixit# dd bs=8M if=/dev/zero of=/dev/ad0
Для проведения операции обнуления НЕ нужно монтировать диск ad0. bs=8M устанавливает размер буфера для этой операции. Рекомендуется ставить размер буфера равным размеру кэша жесткого диска. После того, как dd отработает он выведет затраченное время. У меня этот процесс занял 1,5 часа (винчестер 320Гб). Теперь самое время для установки windows на чистый HDD. Также поставим необходимые драйвера и программы, увлекаться слишком не стоит, иначе наш образ не поместится на DVD болванку. После того как все установлено, подключаем HDD на который мы будем сохранять запакованный образ, загружаемся с live cd и выбираем консоль восстановления Fixit по описанной выше процедуре. Создаем каталог для монтирования hdd с будущим образом :
Обратите внимание, что output file (of) в параметрах не пишем, вместо этого перенапрявляем стандартный вывод на вход gzip, которому ключем -с указываем выводить результат работы на консоль и тут же перенапрявляем (>) вывод в файл /mnt/hdd/image.gz . Эта операция заняла около трех часов, в результате получился архив объемом 2,5Гб. Теперь у нас есть образ системы. Встроим его в загрузочный *.iso файл. Для этих целей я использовал проприетарный софт Ultra ISO, которая умеет редактировать ISO файлы. Открываем 7.0-RELEASE-i386-livefs.iso, создаем в нем каталог /usr2 и подкладываем туда файл образ, который сняли на прошлом шаге. Сохраняем получившийся образ. У меня получился 3 с небольшим Гб. Пишем его на ДВД и проверяем : загружаемся с него, выбираем консоль восстановления Fixit и смотрим есть ли файл image.zg в каталоге /usr2
Fixit# ls -lh /usr2
-rw-r--r-- 1 root wheel 2.5G Feb 2421:53 image.gz
Все. Теперь можно будет в случае чего быстро восстановить систему загрузившись в Fixit и выполнив команду :