Как перенести Windows на новый дисковый контроллер
(RAID,SCSI,SATA,PATA) без переустановки заново или поверх
Чтобы
все получилось необходимо понимать синтаксис inf файлов, в этом
несколько поможет статья
Алгоритм:
--------------------------------------------------------------------------------------
a.изучить inf файл от контроллера и выполнить все,что там
написано в ручную (работа с файлами и реестром).
b.узнать из
inf файла (или с помощью WINPE) HardwareID и прописать его в
HKLM\SYSTEM\CONTROL\CRITICALDEVICEDATABASE. в этом же разделе
прописать параметры ClassGUID -соответствующий SCSI(рис.k)
и Service.
c.удалить параметры в
HKLM\SYSTEM\MountedDevices. Удалить параметр
HKEY_LOCAL_MACHINE\SYSTEM\Select\SystemPartition
d.(если
PATA IDE или SATA IDE) прописать в CRITICALDEVICEDATABASE
atapi,pciide,intelide (и ряд других) и перекопировать их *.sys файлы
(Об этом пишет Microsoft в kb314082.
Но все оттуда нам не нужно, этого
достаточно.
e.перекопировать WINDOWS на новый
контроллер.перезагрузка.готово.
f. если новый контроллер уже
присутствует в диспетчере устройств, то пункты a,b,d пропускаем.
------------------------------------------------------------------------------------- Для
примера новый контроллер взят SATA RAID Sil 3114: рис.1
рис.2 рис.3
рис.4 рис.5
рис.6 рис.7
рис.8 рис.9
рис.10 рис.11
рис.12 рис.13
рис.14 рис.15
при работе с inf файлом ,для успешной установки дискового
контроллера обязательно должны быть сделаны записи в трех разделах
реестра: Class Critical Device Database Service если
переносим windows на pata ide контроллер (sata ide контроллер), то с
inf файлом можно не разбираться. новый контроллер можно прописать в
реестре как "стандартный контроллер IDE".
он
обслуживается atapi.sys pciide.sys pciidex.sys они должны лежать в
system32\drivers. classом в данном случае будет "IDE
ATA/ATAPI контроллеры". в Critical Device Database пишем
pci#ven_xxxx&dev_yyyy, где ven_xxxx&dev_yyyy быстро
можно подсмотреть в winpe(запущенном на новом контроллере) или в inf
файле контроллера (обычно в драйверах чипсета платы). в service
должен быть прописан PCIIDE и эта служба должна быть установлена в
состояние "загружать при загрузке windows". То есть
HKLM\SYSTEM\CurrentControlSet\Services\PCIIde\Start=0
в Class
всегда присутствуют такие поля: DriverDate DriverDesc
DriverVersion InfPath InfSection MatchingDeviceID
ProviderName
Их значение всегда можно выяснить в inf
файле драйвера, из них минимально нужно.: DriverDesc InfPath
InfSection MatchingDeviceID
Тип всех этих параметров
REG_SZ.
пример для Class:
DriverDesc, REG_SZ,
Многопроцессорный компьютер с ACPI InfPath, REG_SZ, hal.inf
InfSection, REG_SZ, ACPIAPIC_MP_HAL -точка входа
MatchingDeviceID, REG_SZ, acpiapic_mp -самое трудное для
определения из inf файла, обычно добавляется в Critical Device
Database , по идее если есть раздел в Service
как определить
DriverDesc и MatchingDeviceID. Ищи в inf файле такую строку
xxxxxxxxxx.DeviceDesc=yyyyyyyyyy xxxxxxxxxx=MatchingDeviceID
yyyyyyyyyy=DriverDesc
в разделе Service пишем все что в
inf. Один момент ImagePath=тип REG_EXPAND_SZ
в разделе
Critical Device Database слева MatchingDeviceID (раздел), справа
(параметры) ClassGUID=классу, Service=сервису.
в inf файле :
0x00000000=REG_SZ 0x00020000=REG_EXPAND_SZ 0x00010001=DWORD
по идее секция [hdc] в inf нужна windows для того чтобы
определить точку входа на основе ENUM/PCI/Vendor&dev&Subsys
по поводу синтаксиса- в inf файле запись HKR=текущее
положение в реестре. зачастую драйвера от чипсета запакованы в
install shield формате в файлах .cab Их можно раскрыть с помощью
программ WINPACK(бесплатная) или ZIPSCAN.
:)
усовершенствованный способ: a.панель управления-установка
нового оборудования-указываем inf файл от нового контроллера.
b.удалить параметры в HKLM\SYSTEM\MountedDevices. Удалить
параметр HKEY_LOCAL_MACHINE\SYSTEM\Select\SystemPartition
c.перекопировать WINDOWS на новый
контроллер.перезагрузка.готово.
d. если новый контроллер уже
присутствует в диспетчере устройств, то пункт a пропускаем.
:)
Для запуска WINDOWS на другом дисковом контроллере обычно достаточно
из уже работающего НА НОВОМ КОНТРОЛЛЕРЕ WINDOWS
1)перекопировать файлы System32 ,System32\drivers
2)перекопировать CriticalDeviceDataBase
3)Перекопировать Services
Копировать в пунктах 1,2,3 Нужно конечно не все а только
соответствующее контроллеру.
(например, если вручную правильно не удается прописать драйвер
нового контроллера в систему, то можно быстренько поставить на новый
контроллер голую виндовс, а затем готовые настройки перенести в ту
виндовс которую хотим перенести)
:)
был снят образ с включенного компьютера с помощью ntbackup
после всех необходимых шагов на новом компьютере вылетал синий экран
windows 2003 был установлен на fat32. Снял образ через ntbackup.
Перенес на другой компьютер на ntfs, но после ввода пароля
происходил сразу logout. Потом в итоге понял. Logout происходил из
за того что разрешения на папки и файлы на разделе ntfs куда я
восстановил windows были следующие : system-full, администраторы
full, пользователи -читать, запускать. (так как такие разрешения
были по умолчанию на корневой каталог ntfs раздела и унаследовались
на все папки и файлы, а разархивировал я без опции «восстановить
параметры безопасности»). Поменял разрешения на
корень : все – full . И получилось :)!.
далее проверил. Если за-ntbackup-ить файлы c fat32 затем
восстановить с «восстановить
параметры безопасности» на ntfs, то пермишнс будут
на восстановленные файлы все-full. В не зависимости от того какие
пермишнс были у корня.
То есть если бы я разархивировал с fat32 с опцией «восстановить
параметры безопасности» то не
столкнулся бы с проблемой login-logout-loop.
:)
мучился пару часов windows не хотел с celeron p4-1800 переноситься
на piii, а именно наинал грузиться и замирал с черным экраном. Думал
что из-за того что исходник был на втором разделе а подкачка на
первом а цель наоборот, потом всоопомнил что отключил в диспетчере
устройств контроллеры ata так как на исходнике они не использовались
а на источнике как раз с них загрузка. Все это устранил но не
помогло. Потом подумал что это биос с плохим acpi но это не вязалось
с тем что до этого на компе цели стоял win2003 с acpi ядром, но все
же я полез вдиспетчер устройств чтобы поменять ядро на стандартный
компьютер и вот
оно , оказывается на источнике стоит
ядро "многопроцессорный компьютер с одним процессором"
(почему такое яддро там установил уже и не помню) и сразу
прояснилось вспомнил что cpu-z показывал что celeron 1800 имеет
поддержку многопроцессорности, а piii нет. Вот и ответ. Как только
поменял яддро на "компьютер с acpi" все заработало :)
:)
как узнать HardwareID который состоит из VendorID и DevID c помощью
Linux а не WindowsPE к примеру.
в большинстве случаев чтобы успешно перенести нужно только прописать
HardwareID нового контроллера в CriticalDeviceDatabase. кстати
поэтому Windows Vista легко переносится (в том смысле что не
выскаивает bsod 0x07) потому что если посмотреть в ее
CriticalDeviceDatabase то там прописана огромная туча HardwareID.
:)
переносил на другой контроллер. исходный windows имел системным
диском не c: а e:. перенес на новый винчестер простым копированием
через третью систему. подводные встреченные камни. a) перекопирваол
только ntldr boot.ini и другие корневые файлы и папку windows а
Program Files и Document Settings забыл. b) в bios нужно было
выставить что acpi контроллер включен (компьютер старый), c) когда
система первый раз стартанула и запустилась то никак не появлялось
окно где нужно вводить пароль, догадался что так как системныйдиск
был e: а после смены винчестера новый винчестер был обозван системой
естественно как c: в итоге засунул новый винчестер в другой комп
залез в реестр и изменил букву system\mounted devices с
\DosDevies\C: на \DosDevices\E: и все сработало.
параллельно выяснилась еще одна фишка windows типа того что можно
для одного раздела иметь несколько букв одновременно. для этого
(повторно не проверял) по идее нужно в mounted devices создть копию
\DosDevies\C: и обозвать ее \DosDevies\E: