Парамедицина для Windows. Эпизод II: Реанимация
АрхивПолезняшки (архив)Сколько волка не корми, а он все равно в лес смотрит. Так и с Windows: от полного развала системы нет никакой страховки. Но где наша не пропадала?
Хотя простая методика, рассмотренная в первой части «Парамедицины», позволяет длительное время обеспечивать работоспособность системы, но концептуально уязвимые места Win9x преподносят сюрпризы в самый неожиданный момент. К тому же, в ней отсутствуют полноценные диагностические и восстановительные утилиты, способные предоставить пользователю вразумительный анализ произошедшего краха. На все случаи стандартный рецепт: произошла ошибка – переустановите приложение или систему. Или вызывайте разработчика. В условиях такого дефицита информации определить реальные причины нередко невозможно, и через некоторое время ситуация повторяется.
Составить более или менее исчерпывающий список причин крахов вряд ли кому-либо удастся. К аварийной ситуации приводит ошибочное удаление или перемещение системных файлов, а их в отличие от DOS теперь тысячи. Связи между программами, возникающие на основе модели компонентных объектов (COM), могут вызывать «цепные реакции» распространения сбоев по приложениям. Развалить систему может неудачно завершившаяся установка какой-либо программы, использование несовместимого между собой программного обеспечения или грубые ошибки в нем. Крахом заканчивается неправильная настройка параметров железа с помощью утилит типа Powertweak. И прочая, и прочая, и прочая…
В тех случаях, когда проблемы возникли после внесения изменений, по крайней мере, ясна причина. Гораздо хуже, когда происходит «ползучий распад»: случайные ошибки приложений, изредка случающиеся немотивированные отказы загрузки в нормальном режиме. Иногда даже выскакивают «синие экраны», предупреждающие о восстановимых ошибках в драйверах и службах (service) с загадочными номерами. Такие симптомы указывают на нестабильную работу Windows, но факторы нестабильности остаются в тени. В одних случаях могут помочь профилактические меры, рассмотренные в первой части, в других – придется использовать пакеты обновления (service pack) для устранения известных ошибок ПО.
Отказ Win9x от загрузки в каком бы то ни было варианте оставляет пользователю только командную строку DOS. В WinMe ситуация немного похуже – чтобы добраться до DOS, придется сразу искать системную дискету. Может, оно и правильно, поскольку реанимацию нужно начинать с проверки на вирусы, но все же неоднократная перезагрузка с дискеты в стрессовой ситуации не улучшает самочувствие пострадавшего. Поэтому крайне необходимо иметь загрузочный реанимационный CD-ROM диск, на котором собраны Windows, антивирусные программы, имеющие DOS-версию, и, к примеру, Norton Utilities.
Предоставляемый с дистрибутивом Windows набор средств для ликвидации кризисов более чем скромен: SCANDISK – для диагностики и восстановления диска и файловой системы, и SCANREG – для диагностики и восстановления базы данных системной информации Registry. SCANDISK дает хоть какие-то объяснения своих действий, а SCANREG вообще обходится без вразумительных комментариев. Поэтому при восстановлении системы пригодится еще DOS-версия Norton Disk Doctor (NDD) и низкоуровневый редактор дисков Norton Disk Editor (NDE), позволяющий напрямую обращаться к физическим секторам винчестера. И, конечно, не обойтись без любого Commander'а (Norton, Volkov, DOS Navigator и т.д.).
Сразу после загрузки в DOS-режиме нужно проверить содержимое папки WINDOWS и WINDOWS\SYSTEM. Если они отсутствуют вообще или содержат пару десятков файлов вместо нескольких сотен и тысяч, если в них отсутствуют exe- и dll-модули, то выход один – убедиться в отсутствии вирусов и полностью переустанавливать систему.
Следующий шаг – проверка диска и файловой системы с помощью SCANDISK. При обнаружении ошибок в главной загрузочной записи диска (master boot record – MBR), в загрузчике DOS (dos boot record) или таблицах распределения файлов (FAT), работу SCANDISK нужно немедленно прекратить, а все дальнейшие операции, в т.ч. исправление ошибок в системных областях, проводить только после резервного копирования пользовательских данных. Пожалуй, единственное, что можно проигнорировать, так это сообщение о расхождении величины свободного пространства, хранящейся в загрузчике DOS, с прямым подсчетом.
Исправления, вносимые дисковыми докторами в системные области, далеко не всегда приводят к желаемому результату. Будьте готовы к тому, что после «лечения» диск станет полностью недоступен либо произойдет частичная потеря ваших данных. Поэтому перед манипуляциями с критической дисковой информацией изучите эти области с помощью NDE.
При отсутствии проблем с железом или системными областями винчестера неудачная загрузка практически всегда связана с повреждениями Registry или критических системных модулей. Registry (или Реестр) – это хранилище информации, необходимой для нормальной загрузки и работы Windows. В него включаются параметры настройки для всех аппаратных средств, программ и пользователей. Основная часть Реестра хранится в файле WINDOWS\system.dat, а некоторые пользовательские настройки в файле WINDOWS\user.dat. Проверка их правильности обычно происходит незаметно для пользователя.
Один раз в сутки, при удачном запуске системы, файлы Registry автоматически резервируются в сжатый файл WINDOWS\SYSBCKUP\rbxxx.cab. Под xxx подразумеваются номера 001, 002 и т.д., которые не согласуются с датами сохранения. Свежесть копии определяется по дате и времени создания файла. Число резервных копий регулируется параметром MaxBackupCopies в файле настроек WINDOWS\scanreg.ini и может достигать 99. Кроме того, копии Registry можно сохранять вручную при помощи утилит SCANREG (в режиме DOS) и SCANREGW (режим Windows). Windows Me имеет еще дополнительную систему восстановления/резервирования Реестра – System Restore, но ведь нужно еще запустить эту самую Me... При обнаружении системой ошибок в Registry производится запуск утилиты восстановления SCANREG. Она сохраняет дефектный реестр в файле WINDOWS\SYSBCKUP\rbbad.cab и восстанавливает его по самой свежей копии.
Надо отметить, что Реестр оказался самым уязвимым местом Windows. Это произошло благодаря тому, что Microsoft разрешила любой программе вписывать туда любой мусор, вплоть до результатов «Lines» или «Марьяжа». Логично было бы отделить хотя бы аппаратную конфигурацию, ведь неизбежные накладки и ошибки программирования разрушают системную информацию, и Windows внезапно отказывается работать.
Однажды я столкнулся с тем, что в сетке на разных машинах стал периодически происходить один и тот же сбой. При включении фиксировалась ошибка в Registry, SCANREG применяла резервную копию, но после перезагрузки – опять ошибка, и все повторялось вновь. Схема восстановления была найдена довольно быстро, а вот причина краха никак не определялась. Он мог происходить несколько дней подряд, а затем проблема вроде бы сама собой исчезала, чтобы выскочить через какое-то время вновь. Шаманские пляски вокруг компьютеров долго были абсолютно безрезультатными. Причину удалось определить совершенно случайно, причем аж в двух игрушках сразу. Каждый ход в игре сопровождался записью текущего состояния в Реестр. Если игры прекращали обычным способом (Файл–>Завершить [или Приостановить]–>Выход), то все было нормально. Но стоило в процессе игры ткнуть кнопку «Закрыть» в правом углу окна, как частенько в Registry записывался какой-то мусор (но не в область сохранения состояния игры!). При полной перезагрузке выскакивала ошибка, и SCANREG могла восстановить Реестр по резервной копии. Но если после 00.00 часов перезагружался сеанс, то бракованная копия оказывалась в архиве (или DOS и Win версии SCANREG по-разному определяют ошибки, или при перезагрузке сеанса Реестр вообще не проверяется), предопределяя на утро бесконечный цикл «загрузка-восстановление».
Вторая критическая точка – это замена важнейших системных модулей, которую опять же может сделать любая программа при установке. Это безобразие в Редмонде грозились прекратить еще со времен Windows 3.1, но, видно, все недосуг. Сил хватило только на добавку в Me системы автоматического восстановления критических файлов по заданному списку. Надо полагать, работает.
В результате таких вот концептуальных ошибок практически каждый пользователь Win9x сталкивался с ситуацией, когда система неожиданно разваливается и требует переустановки. Спешить, тем не менее, не стоит, поскольку далеко не всегда Windows правильно определяет причины ошибок. До запуска Setup лучше выполнить дополнительные исследования, чтобы проблема была действительно решена без ущерба для пользовательской информации. По возможности систему стоит реанимировать, даже если затем будет производиться переустановка. 16-разрядный доступ к дисковым накопителям в режиме MS-DOS значительно медленнее, чем 32-разрядный доступ Windows, и установка, соответственно, продолжается гораздо дольше.
Если Windows не может загрузиться даже в безопасном режиме (Safe Mode), нужно выполнить команду scanreg /fix. При отсутствии масштабных повреждений SCANREG с большой вероятностью исправляет ошибки, и работоспособность системы восстанавливается. В этом случае все же вероятна потеря какой-то информации и сбои в работе отдельных приложений и устройств. Их придется переустанавливать по мере проявления таких ошибок.
Но поскольку возможности SCANREG весьма ограничены, а причина краха может лежать и за пределами Реестра, то в случае неудачи есть несколько вариантов дальнейших действий, позволяющих добиться загрузки хотя бы в безопасном режиме.
Если Windows диагностирует ошибку в Registry, не может ее самостоятельно устранить и входит в цикл «запуск scanreg-перезагрузка», то испорчена текущая версия Registry и версия, используемая для восстановления. Нужно загрузится в DOS-режиме и удалить (лучше переместить во временную папку) из каталога WINDOWS файлы system.dat и user.dat. Затем перейти в каталог WINDOWS\SYSBCKUP и удалить самый свежий (т.е. с самыми поздними датой и временем создания) файл rbxxx.cab. Далее - запустить SCANREG для восстановления Registry. Альтернативный способ – ручной выбор восстанавливаемой копии Реестра – команда scanreg /restore. Если ни одна из копий не поможет загрузить Windows, то ее придется переустановить. Использовать файл system.dat из корневого каталога загрузочного диска желательно в самых крайних случаях. Он создается при установке системы и не содержит информации о последующих изменениях. Поэтому при его использовании придется переустанавливать все приложения. В случае же переустановки системы большая часть информации о приложениях сохранится.
Если Windows не может загрузиться даже в безопасном режиме, диагностируя ошибку в VxD, DLL или EXE файле, то, видимо, поврежден или отсутствует критически важный системный файл.
Для восстановления понадобится дистрибутив Windows. Нужно загрузиться в режиме MS DOS. В каталоге WINDOWS\COMMAND или на установочном диске найти программу extract.exe (Cabinet Extraction Tool) и извлечь копию поврежденного файла из cab-архивов установочных дисков. Пример команды:
extract /A /L c:\windows\system drive_cd:\win98
\win98_21.cab file_name.dll
Здесь ключ /A позволяет просмотреть все архивы за один проход, drive_cd - буква, присвоенная CD-ROM, c:\windows\system - каталог, в котором нужно заменять файл; название cab-файла не имеет значения, лишь бы такой файл был в составе дистрибутива. Возможно, операцию придется повторить для нескольких файлов. Если замена файла не помогла, то проблема может быть связана с файлом WINDOWS\SYSTEM\ddeml.dll.
Но бывает и более противная ситуация, когда ошибка содержится в каком-либо другом модуле, а сбоящий просто получает неправильные данные, и его замена не устраняет проблему. В этом случае, как и при зависании Windows в процессе загрузки без выдачи диагностики, нужно выбирать из меню boot-менеджера вариант загрузки с созданием протокола (Logged) и анализировать файл BOOTLOG.TXT в корневом каталоге системного диска, чтобы определить, какие модули, возможно, повреждены, и попытаться их восстановить с дистрибутивов либо удалить. Если зависание происходит в случайные моменты, то проблема вероятнее всего заключается в сбоях железа (перегрев, глюки, выход из строя и т.д.), и переустановка не поможет.