Пасмурным
питерским днем...
На днях у
меня грохнулась NT.
В этот день ничто не
предвещало больших
неприятностей, просто
решил посмотреть кое-какой
софт, скачанный по локалке:
ActivePerl от ActiveState и GNU-Win32 от Cygnus Solutions.
Архив Cygnus оказался битым:
при распаковке появлялась
заставка "Windows Setup",
после чего распаковка
прекращалась. Я скачал
другой архив Win32 (имевший
ту же длину) и поставил его.
Уже не помню зачем мне
нужно было перегрузить NT...
Загрузка
дошла до синего экрана, я
опять увидел, что у меня NT
Workstation Build 1381 Service Pack 5
и 128 метров мозгов. И тут
мне что-то говорят о том,
что невозможно найти winsrv.dll
(для справки: эта DLL
использовалась в
предыдущих версиях NT,
сейчас ее заменяет win32k.sys).
Вот те раз! Ну, думаю,
ерунда какая-то,
перезагрузился еще раз -
то же самое. Last Known Good
Configuration тоже не
помогает. Попробовал ERD
- он отказался
восстановить улей SOFTWARE.
Переустанавливать NT
очень уж не хочется...
Попытка
загрузиться
У меня есть
маленький винчестер, на
котором я храню backup и на
всякий случай дистрибутив
NT с несколькими
сервис-паками. Я подключил
этот винчестер,
загрузился под Windows 98
и поставил еще одну копию NT.
Загрузившись под ней, я
поставил пятый сервис-пак
и драйвера к
видеокарточке (не
работать же на мониторе с
частотой 60Hz!). После этого
приступил в выяснению
причин отказа загружаться.
Первым делом
я проверил, что файл winsrv.dll
действительно находится в
%systemroot%\system32 и
совпадает с файлом из
новой инсталляции NT.
Значит, дело не в нем.
Возможно, проблемы с registry:
я как раз ставил всякий софт,
который мог написать туда
кучу всякой своей ерунды.
Если проблема в реестре,
то скорее всего улей
SYSTEM отпадает: все-таки
сбой не похож на железный,
да и Blue Screen Of Death
не было. В итоге, я
запустил regedt32
и попробовал загрузить
улей SOFTWARE
из упавшей инсталляции NT.
Он не загружался (regedt32
не считал его файлом улья).
Оставалось два варианта:
либо попытаться
восстановить улей
SOFTWARE используя
резервную копию реестра
из папки %systemroot%\repair
или заменить его
содержимым файла software.sav
из папки %systemroot%\system32\config,
который как известно
хранит копию улья,
сделанную в конце
текстовой фазы установки NT.
Я выбрал первый вариант.
Я сохранил
на всякий случай старый
файл software. Затем
при помощи утилиты expand
я распаковал резервную
копию улья software._,
которая была сделана
достаточно давно, когда я
последний раз обновлял ERD,
в файл %systemroot%\system32\config\software
и перезагрузился под
первоначальной
инсталляцией NT.
Она загрузилась!
Вся жизнь -
борьба, покой нам только
снится
После
загрузки я обнаружил, что
repair disk я обновлял
действительно давно: у
меня тогда еще стояли "родные"
драйвера к моей мышке Logitech Mouse Man Wheel
(они были ужасно глючные и
я их снес, оставив обычные
драйвера от Logitech PS/2 Mouse;
после этого колесико
продолжало работать, но
кнопка под большим
пальцем работала только
как Middle Button, а не как SHIFT
как прежде). Помня о том,
что в SOFTWARE хранится
информация об
установленных программах,
я начал проверять, какие
из программ я установил
после backup. Ими в частности
оказались:
Эти и
некоторые другие
программы теперь работали
криво (@Guard постоянно
говорил, что криво
поставлен, Mathematica глючила
со шрифтами, а Visual C++ не
запускала отладчик при
ошибке приложений). Это
все в добавление к тому,
что иконки
соответствующие файлам
этих приложений были undefined.
Я решил
использовать самый
простой выход из этой
ситуации: поставить
глючивший софт "поверх"
существующих копий.
Начать я решил с @Guard.
Установка @Guard
не запускалась, Visual Studio
- тоже. Я проверил еще
несколько setup'ов - ни один
не работает. Попробовал
Office 2000 Install-On-Demand - работает.
Что-то подсказало мне
проверить другие 16-битные
приложения... Ни одно 16-битное
приложение не работало.
Значит, есть проблемы еще
и с NTVDM.
Раз я
изменил улей SOFTWARE,
то, может быть, NTVDM
не работает из-за настроек
в реестре? Находясь в
первоначальной
инсталляции NT, я
при помощи regedt32
загрузил улей SOFTWARE
новой установки NT
создав ключ HKEY_LOCAL_MACHINE\SOFT,
после этого при помощи regedit
экспортировал (Export?Registry?File...)
ключи HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft
и HKEY_LOCAL_MACHINE\SOFT\Microsoft
в текстовые файлы .reg
(Main.reg и New.reg).
Затем я заменил подстроку SOFT\Microsoft
на SOFTWARE\Microsoft в файле New.reg
и, запустив утилиту WinDiff
из пакета Microsoft Visual Studio,
начал сравнивать
содержимое ульев. Никаких
подозрительных различий я
не нашел.
Тогда может
быть различия в файлах?
При помощи той же WinDiff
я сравнил папки system обоих
инсталляций и обнаружил,
что различаются файлы mscdexnt.exe
и mouse.drv из папки %systemroot%\system32:
у них был такой же размер и
дата, как у файлов из
свежей инсталляции, но WinDiff
нашел различия у них
внутри. Я скопировал эти
файлы из новой
инсталляции и запустил command.com
- работает! Запустил
установку @Guard - работает!
Теперь
осталось переставить уже
установленный софт, но я
не смог найти диска с
Mathematica и сервис-паков для
Visual Studio, так что проблемы с
этими программами
пришлось решать вручную.
Mathematica
показывала
математические символы
неправильным шрифтом.
Понятно, что дело в
установке шрифтов: для
установки шрифта
совершенно недостаточно
просто скопировать его в
папку %systemroot%\fonts,
при установке шрифт
прописывается в реестре.
Для того, чтобы
восстановить информацию о
существующих шрифтах я
скопировал все шрифты из
папки fonts во
временную папку и
попытался удалить шрифты
из папки fonts. Все
шрифты за исключением
нескольких удалились (те,
которые не удалились
очевидно были корректно
зарегистрированы и
использовались в это
время). После этого я
установил шрифты из
временной папки обратно
при помощи Install New Font...
из аплета Fonts.
Запустив Mathematica я убедился
в том, что шрифты
показывались нормально.
Оставалась
неприятность с Visual Studio.
Дело в том, что Visual Studio
устанавливает свой
отладчик (debugger)
для обработки ошибок
приложений. После
восстановления улья SOFTWARE,
зарегистрированным
отладчиком стал Dr. Watson
(drwtsn32) -
стандартный обработчик
ошибок приложений в Windows
NT). В Help по этой
программе я нашел ключ в
реестре, в котором
содержится информация о
зарегистрированном
отладчике: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
NT\Current Version\AeDebug. В этом
ключе параметр Debugger
хранит командную строку
для запуска отладчика, я
просто заменил подстроку drwtsn32
на msdev. Параметр Auto
определяет, должен ли
отладчик запускаться
автоматически (1) или
сначала должен показать
диалоговое окошко,
спрашивая у пользователя
нужно ли завершить задачу
или запустить отладчик (0).
При помощи
таких-вот несложных
действий я восстановил
свою установку NT.
Какие же
выводы можно сделать из
всего этого?
- Не нужно
паниковать. Есть много
способов вернуть NT
способность
загружаться.
- Чаще
обновляйте диск
аварийного
восстановления.
- Желательно
иметь возможность
поставить еще одну
копию NT. Для
этого лучше всего иметь
загрузочные дискеты и
CD-ROM с NT. Если у
Вас стояла Windows 2000,
то лучше всего иметь под
рукой Service Pack 4
и выше, так как Windows
2000 изменяет NTFS
с версии 4 на версию 5,
для работы с которой под
NT 4 необходим
этот сервис-пак.
©
Konstantin Romanov
|