Клонирование разделов windows с помощью загрузочного диска FreeBSD.
Ситуация обычная, сотрудница нашей фирмы попросила «посмотреть домашний компьютер», который «не включается, сын что - то натоврил». Прибыв на место определил что винда не грузится ни в обычном режиме ни в безопасном. Сошлись на том, что вытаскивать данные не будем, а просто переустановим с форматированием. Ребенок учится в средних классах школы и естественно ставит все проги подряд особо не задумываясь. Ограничивать его в любознательности не стоит, пусть учится, тем не менее я понял что аналогичная ситуация (когда система будет запорота загадочным образом) может возникнуть совсем скоро и мы будем к этому не готовы, т.е. все что я смогу сделать — опять все форматировать, ставить винду, дрова и проги. Это не устраивало и я вспомнил как один знакомый говорил о рецепте «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 (я использовал
ftp://ftp.freebsd.org/pub/FreeBSD/ISO-I ... livefs.iso) качаем и пишем на болванку. Выбираем в биосе загрузку с CD и загружаемся с него

- config-country.GIF (10.46 КБ) 12370 просмотров
Далее выбираем пункт меню «Fixit»
и выбираем пункт «use the "live" filesystem CDROM/DVD»
Должно появиться приглашение консоли
получаем список дисков в системе :
например, у меня было 2 диска :
ad0 — диск на который я собираюсь ставить ОС windows
ad4 — диск куда я буду сохранять сжатый образ
Забъем ad0 нулями (все данные на диске будут уничтожены):
Для проведения операции обнуления НЕ нужно монтировать диск ad0.
bs=8M устанавливает размер буфера для этой операции. Рекомендуется ставить размер буфера раным размеру кэша жесткого диска. После того, как dd отработает он выведет затраченное время. У меня этот процесс занял 1,5 часа (винчестер 320Гб).
Теперь самое время для установки windows на чистый HDD. Также поставим необходимые драйвера и программы, увлекаться слишком не стоит, иначе наш образ не поместиться на DVD болванку.
После того как все установлено, подключаем HDD на который мы будем сохранять запакованный образ, загружаемся с live cd и выбираем консоль восстановления Fixit по описанной выше процедуре.
Создаем каталог для монтирования hdd с будущим образом :
монтируем ad4 в /mnt/hdd
Код: Выделить всё
Fixit# mount /dev/ad4 /mnt/hdd (ТРЕБУЕТ ПРОВЕРКИ)
но я не монтировал вручную, а сделал все через
(пункты меню Configure, Fdisk/Label)
снимаем образ и архивируем его на лету
Код: Выделить всё
Fixit# dd bs=8M if=/dev/ad0 | gzip -c > /mnt/hdd/image.gz
Обратите внимание, что 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 24 21:53 image.gz
Все. Теперь можно будет в случае чего быстро восстановить систему загрузившись в Fixit и выполнив команду :
Код: Выделить всё
Fixit# gunzip -c /usr2/image.gz | dd bs=8M of=/dev/ad0
(в момент выполнения этой команды ad0 должен быть отмонтирован)