ДОУНБ
http://forum.libr.dp.ua/

Переносил старую систему на новое железо
http://forum.libr.dp.ua/viewtopic.php?f=51&t=224
Страница 1 из 1

Автор:  Wladimir Mutel [ 17 июн 2010, 18:43 ]
Заголовок сообщения:  Переносил старую систему на новое железо

Windows 2000 Server. С ролью домен-контроллера. И ещё некоторыми важными службами, которые ставились очень давно, и теперь очень мало кто хочет (или может) переустановить их заново.

Старая системная плата была Intel SE7221BK1-E. Достаточно надёжное железо, в корпусе с хорошей вентиляцией, но после 5 лет непрерывной работы стабильность и надёжность её несколько понизилась. На это железо в 2005-м году я переносил тот же Win2k Server с ещё более старого (мамка Supermicro P3TDDE, диски IDE).

На исходном железе был SATA-AHCI/RAID контроллер Intel ICH6R. Для установки Win2k на диски, подключённые к этому контроллеру, требуется дополнительная дискета с драйвером, загружаемая по F6 при загрузке установщика Windows с компакт-диска. Пытались подыскать более новое железо - оказалось, что F6-дискетки для более новых чипсетов (ICH9R) уже не поддерживают старой Win2k - только WinXP/Win2k3 и дальше. Чуть менее новое железо имело SATA-контроллер ICH7, который был полностью совместим с IDE и потому не требовал F6-дискетки, но на нём проявлялся один большой недостаток Win2k - в этой системе есть лимит объёма IDE дисков - 128GB (131072MB). Если диск бОльшего объёма, остальное его пространство со время установки системы оказывается недоступно. Да, ещё во время установки старой Win2k на пустой диск с нуля нельзя ввести размер раздела больше 99999MB (~100GB), но это уже не такой существенный факт.

В это время что-то ещё раз не заладилось в исходной системе, и Windows отказалась загружаться насовсем. За время её эксплуатации диски с томами ntfs были преобразованы в динамические с программным зеркалированием, и потому прогнать установку Windows в режиме восстановления ранее установленной системы было невозможно - старая Win2k не понимает динамических дисков во время установки, только преобразование базовых дисков в динамические из-под полностью установленной и работающей системы. Или преобразование динамических дисков в базовые после того, как с них были удалены все тома.

Положение становилось критическим. Я решил попробовать завести систему заново с помощью виртуальной машины (VMWare). На мамке с ICH7 настроил Linux, графическую среду, поставил VMWare - и был готов к созданию виртуальных машин, использующих физические диски.

Я взял пустой SATA-диск и установил ещё одну копию Win2k Server на него. После завершения установки и всех обновлений я подключил дополнительно 2 SATA-диска с исходной системы. Все данные на зеркальных томах были исправны и доступны. Только не хотела работать начальная загрузка нужной мне системы. Зависала либо с чёрным экраном, либо с сообщением об ошибке загрузки и отсутствующей операционной системе, смотря на каком оборудовании я пытался загружаться.

Однажды я сталкивался с таким поведением, и начал подозревать, что есть разногласия между геометрией диска, определяемой в BIOSe, и той, что установщик Windows прописывает в таблицу разделов и в загрузочные сектора томов (разделов, файловых систем) NTFS. В том случае мне удалось в BIOSe той системы (промышленного компьютера) включить для диска режим LBA (по умолчанию BIOS определял диск в режиме LARGE с количеством головок 16 вместо 255, и цилиндров >65536), и всё починилось. В BIOSe VMWare у меня не было возможности выбрать геометрию диска, т.к. он был на виртуальном SCSI-контроллере.

Я взял для экспериментов один SATA-диск - половинку зеркального набора, 1.5TB, и полностью очистил его таблицу разделов (прописал нулями первый сектор, MBR). Скопировал образ установочного CD с Win2k Server, загрузился с него в виртуально машине и установил на физический диск. Виртуальный SCSI-драйвер VMWare совместим с драйвером BusLogic, входящим в Win2k и более ранние версии Windows, потому F6-дискетка при установке не нужна. После завершения установки остановил виртуальную машину и посмотрел на созданную при установке таблицу разделов Linuxовским fdiskом. Судя по геометрии разделов, BIOS VMWare либо установщик Windows видел диск с 16 головками и несколькими миллионами цилиндров. А загрузочный сектор NTFS-раздела хранит в себе своё собственное значение числа головок. Это значение используется только при начальной загрузке. Для незагрузочных NTFS-разделов оно может быть, наверно, любым (по крайней мере я с какими-то проблемами из-за этого не сталкивался), а вот для загрузочных, если не совпадает с тем, что видит BIOS (или что прописано в MBR - я не совсем уверен, кто у кого вычитывает эту информацию при начальной загрузке) - приводит к разнообразным проблемам, т.к. BIOSу передаются неверные параметры в запросах int 13h (дисковые операции), и реакция BIOSа бывает непредсказуемой. Может вернуть ошибочный код (поднятый флаг переноса), а может и зависнуть где-то без признаков жизни.

Я посмотрел на файловые системы, что остались на уцелевшей половинке зеркала (благо, современные версии ядра Linux нормально видят динамические/логические диски Windows), и обнаружил, что в загрузочных секторах NTFS указано количество дорожек 255. Это 2 байта по десятичному смещению 26 (или 16-ричному 1A).
Программой ntfsclone скопировал загрузочный диск c: с динамического диска на базовый, исправил 255 на 16 (FF на 10 в 16-ричной системе) - и о чудо, Windows начал грузиться ! Правда, так и не закончил, ибо ему нужно было поменять дисковый драйвер для начальной загрузки. Снова загрузился с образа установочного CD, выбрал установку системы и исправление ранее установленной - и понадеялся, что дальше всё пойдёт гладко.

Но не тут-то было. Возникла ещё одна проблема. Ещё во время установки (после первой перезагрузки) система начала падать в синий экран - STOP 0x1E в модуле ntoskrnl.exe, KMODE_EXCEPTION_NOT_HANDLED. Поискав информацию в Интернете, нашёл, что это может быть вызвано дополнительными драйверами устройств (во времена Win2k программа верификации сторонних драйверов и защита ядра Windows от некорректного поведения драйверов были ещё не так сильны). При смене аппаратной платформы (например, при переносе системы с физического железа на виртуальное) старые драйвера всё равно загружаются и могут лазить куда не следует и валить систему. Рецепт чистки системы от старых драйверов - удалить все файлы OEM*.inf и OEM*.pnf из папки \windows\inf . На всякий случай я заодно переименовал все файлы *.sys, найденные в \windows\system32 и всех её подпапках, в *.sys0

И снова перезапустил установку-восстановление Windows. На этот раз по крайней мере с загрузочным диском C: всё прошло гладко. Загрузилась именно та система, что давно уже была нужна. Я заново установил все нужные обновления (Win2k SP4, IE6 SP1, а также всё, что пришло через сайт Microsoft Update). В "Управлении дисками" создал разделы под копирование исходных файловых систем D: и E:. Остановил виртуальную машину. Скопировал файловые системы NTFS через ntfsclone и расширил через ntfsresize. Снова загрузил виртуальный Win2k Server. Настроил правильные сетевые адреса. Система была снова в работе. Всё уцелело. Думаю, не оставить ли её так вот, в виртуальной машине, и оставить на будущее ? Всё ж нет тех мучений с переносом Windows на новое железо, какие обычно бывает. В виртуальной машине состав аппаратной части намного стабильнее - на любом физическом железе, притом. И надо будет вбросить вторую половинку зеркала и восстановить зеркалирование томов. Тоже, наверно, не на уровне программного зеркала, предоставляемого Windows, а на нижележащем - в Linuxe на уровне mdadm. C Linuxом я себя чувствую весьма уверенно. Он мне часто помогал, в том числе при переносе Windows на другое железо, или при починке различных неполадок. Утилиты ntfsclone/ntfsresize давно позволяли мне точно копировать и изменять размер файловых систем NTFS, чего не позволял делать Microsoft или для чего нужно было покупать дорогостоящие программы сторонних поризводителей (или даже пиратствовать :>). А тут всё бесплатно и к тому же лицензионно чисто. Вот бы ещё без VMWare можно было обойтись ... :>

Страница 1 из 1 Часовой пояс: UTC + 2 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/