Опубликован: 15.10.2008 | Доступ: свободный | Студентов: 3143 / 506 | Оценка: 4.48 / 4.23 | Длительность: 45:21:00
Лекция 17:

Планирование катастроф и восстановление

Исследование ошибки BSOD

Чтобы устранить причину ошибки BSOD, вы должны выяснить, что вызвало ее. Множество данных, которые вы собрали, является результатом задания опций, выбранных вами для функций восстановления. Тестирование компонентов восстановления после принудительной ошибки BSOD - это хороший способ, чтобы увидеть, нужно ли вам изменить эти опции (например, потому, что вам не нужен полный дамп памяти или мини-дамп не дает достаточной информации).

Совет. После тестирования ваших опций восстановления имеет смысл удалить элемент реестра, который вы добавили для принудительного вызова ошибки BSOD, или изменить его значение на 0 (что отключит эту функцию).
Обратите внимание непосредственно на ошибку STOP

Иногда содержимое ошибки STOP, которое появляется на экране (то есть непосредственно ошибка BSOD), дает достаточную информацию, чтобы определить причину аварийного отказа. В первой строке сообщения STOP используется следующий формат.

STOP идентификатор кода остановки (параметр-1 параметр-2 параметр-3 параметр-4)

Идентификатор кода остановки - это шестнадцатеричное значение, указывающее общую причину аварийного отказа. Каждый из четырех параметров имеет свой собственный смысл, давая дополнительную информацию, которая помогает вам сузить специфику идентификатора кода остановки. Например, многие ошибки STOP содержат следующие параметры.

  • Первый параметр - это адрес памяти, к которому обращался проблемный модуль/драйвер.
  • Второй параметр - это IRQL (линия прерывания), которая используется системой для доступа к адресу памяти, указанному первым параметром.
  • Третий параметр - это тип выполненного доступа к памяти, и последняя цифра интерпретируется следующим образом: 1=Запись; 0=Чтение.
  • Четвертый параметр - это адрес команды, которая пыталась выполнить доступ к указанному адресу памяти.

Вторая строка сообщения STOP содержит описательный текст, который связан с идентификатором кода остановки. Если вызван принудительной аварийный отказ, описанный выше в этой лекции, то вы увидите текст "The end-user manually generated the crashdump".

Конечно, при реальном отказе системы вы увидите другой идентификатор кода остановки и текст. Обычно это такой текст, как, например, UNEXPECTED_ KERNEL MODE TRAP или IRQL NOT LESS OR EQUAL.

Часто вы можете найти соответствующую информацию путем поиска в Microsoft Knowledge Base идентификатора кода остановки или текста, связанного с этим идентификатором. Или вы можете обратиться к персоналу службы поддержки Microsoft, надеясь, что эти данные будут достаточны для анализа проблемы.

Просмотр журнала событий

Просмотрите журнал System в Event Viewer, чтобы увидеть код ошибки bugcheck, а также информацию о файле дампа.


Просмотр файла дампа

Просмотрите содержимое %SystemRoot%, чтобы убедиться в существовании файла дампа memory.dmp. Переименуйте этот файл, используя расширение имени .dmp, чтобы в случае еще одного отказа вы не потеряли эту информацию в результате перезаписи. Если вы задали малый дамп памяти (small dump file), то найдите в под-папке %SystemRoot%\Minidump файл, имя которого содержит дату дампа.

Иногда система не сохраняет файл дампа, хотя вы уверены, что сконфигурировали опции восстановления правильно. Наиболее вероятная причина состоит в том, что том, который вы указали для дампа памяти, содержит недостаточный объем свободного пространства, или файл подкачки оказался слишком мал для дампа. В любом случае запись события журнала System Log в Event Viewer указывает, что файл дампа не был сохранен.

Неаккуратно написанный драйвер диска может не вызывать процедуры ввода-вывода для дампа, которые требуются системе для выполнения дампа. Удивительно, но такие драйверы дисков были не столь уж редки в предыдущих версиях Windows. Средство "цифровая подпись драйверов" в Windows Server 2003 гарантирует, что Microsoft проверила код, и одним из стандартов Microsoft является то, что в драйвер включается поддержка дампа аварийных отказов.

Отправка файла в службу поддержки Microsoft

Если вы обращаетесь в службу поддержки Microsoft и они не могут дать решение, интерпретируя код сообщения STOP, то у вас могут попросить отправить файл дампа через электронную почту или загрузить его на ftp-сайт. Но перед этим выполните сжатие файла. (Файл дампа содержит много "пустот", поэтому он сжимается до размера, который намного меньше размера исходного файла.)

Распространенные ошибки STOP

В этом разделе приводится список наиболее распространенных ошибок STOP, включающий краткое описание их причин и, где это возможно, некоторые предлагаемые решения. Эти ошибки названы "распространенными", поскольку я встречал их несколько раз в дискуссионных списках или кто-либо в Microsoft говорил мне, что эти ошибки часто указывались при обращениях в службу поддержки.

0x0000000A

Описательный текст: IRQL_NOT_LESS_OR_EQUAL. Эта ошибка возникает, если драйвер использовал неверный адрес памяти.

Обычно эта ошибка появляется после того, как вы установили драйвер. Перезагрузите компьютер и нажмите кнопку F8, чтобы вызвать меню Advanced Options (Дополнительные варианты загрузки). Выберите вариант Last Known Good Configuration. Если это сработало, обратитесь к изготовителю для получения исправного драйвера.

Если ошибка возникла после модернизации в Windows Server 2003 из другой операционной системы, проверьте, работает ли на компьютере антивирусное ПО. Если да, то отключите его и проверьте, устранило ли это проблему.

Если ошибка возникла во время новой установки Windows Server 2003, то у вас, возможно, проблема несовместимости оборудования. Убедитесь, что компьютер и все периферийные устройства, которые обнаруживаются процессом установки, включены в список совместимости оборудования (HCL - Hardware Compatibility List).

0x0000001E

Описательный текст: KMODE EXCEPTION NOT HANDLED. Эта ошибка возникает, если программа, работающая в режиме ядра, генерирует неверный процесс, с которым не может работать обработчик ошибок.

Это очень распространенная ошибка, и ее нелегко диагностировать без дополнительной информации. Персонал службы поддержки Microsoft обычно может указать источник проблемы, используя параметры сообщения STOP. Первый параметр - это код исключительного условия, и он обычно полезен для получения информации об ошибочном процессе; остальные параметры помогают определить место проблемы (например, адрес памяти).

Совет. Просмотрите Event Viewer; возможно, в записи этого события указано имя драйвера.

Если вы установили оборудование и/или драйверы непосредственно перед тем, как столкнулись с этой ошибкой, перезагрузите компьютер в режиме Last Known Good Configuration. Затем, конечно, устраните проблему, получив исправный драйвер или удалив несовместимый компонент оборудования.

Если вы столкнулись с этой ошибкой во время установки, то, возможно, у вас проблема совместимости, поэтому сверьте компьютер и его компоненты со списком HCL.

0x00000024

Описательный текст: NTFS FILE SYSTEM. Эта ошибка указывает, что возникла проблема с драйвером для файловой системы NTFS ( ntfs.sys ), когда он разрешал чтение или запись.

Совет. Первый параметр содержит имя исходного файла и номер строки внутри этого файла, которая вызвала ошибку STOP. Первые 16 битов (первые четыре шестнадца-теричные цифры после 0x) указывают исходный файл. Младшие 16 битов (последние четыре шестнадцатеричные цифры) указывают исходную строку в файле, где возникла ошибка STOP.

Имеются следующие наиболее распространенные причины этой ошибки STOP.

  • Сбойные участки на диске.Запустите chkdsk /f (о выполнении chkdsk.exe см. в "DHCP и IP-адресация" ).
  • Проблема, связанная с антивирусным ПО.Отключите это ПО и перезагрузите компьютер, чтобы выяснить, исчезла ли проблема.
  • Недостаточность пула нестраничной памяти.Увеличьте RAM-память на компьютере.
0x0000002E

Описательный текст: DATA BUS ERROR. Это почти всегда аппаратная ошибка, и, чаще всего, ошибка четности в памяти.

Если вы видите эту ошибку после увеличения RAM-памяти на машине, удалите новые блоки RAM. Возможно также, что существующая RAM запортилась, и тогда вам нужно запустить диагностическую программу для проверки RAM.

Причинами этой ошибки могут быть также проблемы жесткого диска (запустите chkdsk /f) или ошибки в драйверах (загрузитесь в режиме Last Known Good Configuration).

0x00000050

Описательный текст: PAGE FAULT IN NONPAGED AREA. Это почти всегда признак аппаратной ошибки, и наиболее распространенная причина - это сбои RAM на системной плате, в кэше L2 RAM или на видеоконтроллере.

Если вы добавили какое-либо оборудование непосредственно перед появлением этой ошибки (даже если это не была RAM-память), удалите это оборудование, и проверьте, осталась ли эта ошибка. Если нет, используйте диагностическую программу для проверки RAM. Другими, менее распространенными причинами этой ошибки могут быть антивирусное ПО (отключите его) и проблемы жесткого диска (запустите chkdsk /f ).

0x00000058

Описательный текст: FTDISK INTERNAL ERROR. Эта ошибка возникает, если вы загружаете зеркальную систему из неверного раздела.

Если вы разделите (Break) это зеркало, восстановите первичный раздел и затем возникнет эта ошибка STOP, значит, первичный раздел содержит ошибку. К сожалению, почти все, кто сталкивается с этой ошибкой, сообщают, что все выглядит правильно, первичный раздел явно является загружаемым и, тем не менее, возникает этот аварийный отказ системы.

Загрузитесь с гибкого диска, где ARC-путь в файле boot.ini указывает на теневую копию. (См. в лекции 5 курса "Администрирование Microsoft Windows Server 2003" о создании загрузочного диска с настроенным файлом boot.ini.) Разделите зеркало, сконфигурируйте новый загрузочный и системный раздел и создайте новое зеркало.

0x0000007A

Описательный текст: KERNEL DATA INPAGE ERROR. Эта ошибка возникает, если запрошенная страница данных ядра в файле подкачки не передается в память. Эту ошибку может вызывать целый ряд сценариев, и наиболее распространены следующие причины.

  • Сбойные блоки на диске (запустите chkdsk /f ).
  • Ошибки в RAM (используйте диагностическую программу для проверки RAM).
  • Неверное подключение кабелей/оконечной нагрузки SCSI (если файл подкачки находится на диске SCSI).
0x0000007B

Описательный текст: INACCESSIBLE BOOT DEVICE. Эта ошибка означает, что системный раздел недоступен процессу загрузки.

Вы не можете запустить отладку для этой ошибки, и любые опции конфигурирования, которые вы задали для восстановления (например, файлы дампа) не касаются этой ошибки, поскольку никакие драйверы и процессы, которые выполняют эти задачи, не загружены, когда возникает эта ошибка.

Этот аварийный отказ обычно возникает во время установки ОС либо после установки нового диска или нового драйвера диска. Однако вирус в загрузочном секторе тоже может вызвать эту ошибку STOP.

Первым делом я всегда применяю самое простое средство, поэтому попытайтесь запустить DOS-программу обнаружения вирусов с загрузочной дискеты. Если это не помогло, то вам нужна повторная установка операционной системы. И, конечно, убедитесь, что установленное вами оборудование или драйвер имеется в списке совместимости (HCL).

0x0000007F

Описательный текст: UNEXPECTED KERNEL MODE TRAP. Наиболее распространенная причина этой ошибки STOP - отказ оборудования.

Эта ошибка обычно возникает, когда вы устанавливаете новое оборудование, включая RAM-память. Вы должны удалить это оборудование и перезагрузиться, чтобы проверить это предположение. Если вы не установили только что новое оборудование, то, возможно, отказал существующий компонент оборудования.

Эта ошибка может также возникнуть, если вы установили новый драйвер для существующего оборудования. Если это так, используйте одну из опций восстановления для замены драйвера или загрузитесь в режиме Last Known Good Configuration.

0x00000076

Описательный текст: PROCESS HAS LOCKED PAGES. Эта ошибка означает, что драйвер блокировал страницы памяти во время операции ввода-вывода и затем не смог разблокировать (освободить) их (грубая ошибка в программировании).

Хотя параметры, представленные в сообщении с этой ошибкой, могут оказать помощь персоналу службы поддержки в определении страниц, которые были блокированы, они не позволяют определить драйвер, вызвавший эту проблему. Вы можете отследить источник проблемы, сконфигурировав свою систему для сохранения следов стека. В следующий раз, когда драйвер вызовет эту ошибку, вы увидите ошибку STOP 0x000000CB, которая дает больше информации. Чтобы сконфигурировать сохранение следов стека, используйте редактор реестра, чтобы перейти в подраздел HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management. Создайте новый элемент данных типа REG DWORD с именем TrackLockedPages и задайте для него значение 1. Вы должны перезагрузить компьютер, чтобы начала действовать эта настройка.

0x00000077

Описательный текст: KERNEL STACK INPAGE ERROR. Эта ошибка возникает, если запрошенная страница данных ядра не может быть вызвана в память.

Наиболее распространенная причина этой ошибки - сбойный блок на жестком диске (запустите chkdsk /f). Другие распространенные причины - это вирус и сбойная RAM-память.

0x00000079

Описательный текст: MISMATCHED HAL. Эта ошибка означает несоответствие между уровнем абстрагирования оборудования (Hardware Abstraction Layer - hal.dll ) или ntoskrnle.exe и ядром установленной ОС или конфигурацией оборудования машины.

Хотя, казалось бы, эта ошибка не может возникнуть вне процесса установки, это все же бывает, и обычно это происходит потому, что кто-то решил обновить ntoskrnl.exe или HAL-файл.

Ntoskrnl.exe создает определенные сложности, поскольку на CD (или при загрузке обновлений) имеются две копии этого файла:

  • ntoskrnl.exe, предназначенный для однопроцессорных систем
  • ntkrnlmp.exe, предназначенный для многопроцессорных систем

Во время установки программа установки использует подходящий файл, но, независимо от используемой копии файла, ему присваивается имя ntoskrnl.exe в системном разделе вашей локальной системы (он находится в %SystemRoot%\System32 ). Если программа установки обнаруживает несколько процессоров, она использует ntkrnlmp.exe и переименовывает этот файл в ntoskrnl.exe после его копирования на локальный компьютер.

Аналогичная ситуация имеется с HAL. На установочном CD имеется несколько HAL-файлов, и программа установки определяет, какой из них является подходящим файлом. Это файл копируется на жесткий диск и переименовывается в hal.dll.

Зная это, нетрудно представить себе, какой хаос возникает, если кто-то решил "обновить" файл или устранить "проблему", переписав один из файлов с CD на жесткий диск. Это происходит чаще, чем вы могли бы предположить. Решение состоит в том, чтобы определить правильный файл и переписать его, переименовав соответствующим образом. Если вы не можете сделать это (не так-то просто определить, какой HAL-файл нужно записать как hal.dll), запустите setup.exe и выберите вариант Repair.

0xC000021A

Описательный текст: STATUS SYSTEM PROCESS TERMINATED. Эта ошибка возникает, когда происходит отказ какой-либо подсистемы пользовательского режима, и система должна перейти в режим ядра. Поскольку операционная система не может выполнить монтирование или запуск без подсистем пользовательского режима (например, без winlogon), то происходит аварийный отказ компьютера.

Примечание. Тот факт, что эта ошибка относится к подсистемам пользовательского режима, означает, что вы не можете исследовать эту проблему с помощью средств отладки ядра.

Этот аварийный отказ почти всегда возникает в результате проблем, связанных с ПО от сторонних компаний, и обычно это проблемы драйверов.

  • Если вы только что установили драйвер какого-либо устройства, перезагрузитесь в режиме Last Known Good Configuration.
  • Если проблема касается какого-либо программного приложения, попытайтесь загрузиться в режиме Safe Mode и затем удалите это ПО с компьютера.
Примечание. Если ПО - это утилита, которая запускается при загрузке, то, возможно, вы сможете использовать Recovery Console (Консоль восстановления), чтобы удалить файлы этого ПО.
0xC0000221

Описательный текст: STATUS IMAGE CHECKSUM MISMATCH. Эта ошибка возникает, если запорчен какой-либо системный драйвер или .dll -файл.

Если в сообщении об ошибке выводится имя поврежденного файла, попытайтесь загрузиться в режиме Safe Mode with Command Prompt (Безопасный режим с командной строкой) и затем скопируйте этот файл с CD Windows Server 2003. Если это сжатый файл, то вы можете использовать команду expand, чтобы распаковать его при копировании. Лично я предпочитаю использовать Recovery Console для выполнения этой задачи, поскольку команда copy в Recovery Console автоматически распаковывает сжатые файлы (и, конечно, было бы хорошо, если "обычная" команда copy делала это, когда исходный файл является сжатым установочным файлом).

Если в сообщении об этой ошибке не выводится имя поврежденного файла, запустите программу установки (Setup) и выберите вариант Repair, чтобы заменить все поврежденные системные файлы.

Windows Error Reporting

Средство Windows Error Reporting (Отчет от ошибках) позволяет вам собирать информацию о серьезных ошибках и просматривать отчеты, информация которых может привести вас к причине ошибки. Это позволяет определять, имеются ли элементы компьютеров, которые приводят к аварийному отказу или "зависанию", что полезно для устранения проблем и создания плана предупреждения аварий.

В это средство включена возможность отправки отчетов в Microsoft для анализа и помощи. Вы можете также отправлять отчеты в точку разделяемого доступа вашей сети, чтобы можно было отслеживать ошибки операционных систем и пытаться раскрыть их причин.

Windows Error Reporting - это часть средства Event Tracker (см. "Контроллеры доменов" ). Вы можете конфигурировать создание отчетов об ошибках как для ошибок операционной системы, так и для ошибок приложений. В Error Reporting используются следующие определения "ошибки".

  • Ошибка операционной системы возникает, когда вы генерируете ошибку типа BSOD или когда происходит незапланированное прекращение работы компьютера (вынужденное прекращение).
  • Ошибка приложения возникает, когда какая-либо программа перестает отвечать и закрывается автоматически или пользователем (обычно с помощью диспетчер задача - Task Manager).

Если операционная система сталкивается с ошибкой BSOD или незапланированным завершением работы компьютера, то при использовании средства Error Reporting информация об ошибке записывается в файл журнала. При следующем входе пользователя с административными правами появляется диалоговое окно отчетов об ошибках. Это диалоговое окно содержит три поля.

  • Choose a Reason (Выбор причины).Выбор из раскрывающегося списка одного из следующих вариантов.
  • Other (unplanned) [Другая (незапланированная)]
  • Other Failure: System Unresponsive (Другой отказ: Система не отвечает)
  • System Failure: Stop error (Отказ системы: ошибка STOP)
  • Security issue (Проблема системы безопасности)
  • Power Failure: Cord Unplugged (Отказ источника питания: не подключен шнур)
  • Power Failure: Environment (Отказ источника питания: окружение)
  • Problem ID (Идентификатор проблемы).Введите текст, чтобы идентифицировать это событие.
  • Comment (Комментарий).Введите текст, чтобы описать, что произошло непосредственно перед событием (если вы это знаете).

После возникновения ошибки операционной системы журнал System в Event Viewer содержит записанную вами информацию в следующем диалоговом окне.


Активизация Error Reporting в окне свойств системы

По умолчанию Windows Server 2003 активизирует средство Error Reporting как для отказов операционной системы, так и для отказов приложений. Это средство активизируется/отключается в диалоговом окне System Properties (Свойства системы). Чтобы открыть это окно, щелкните правой кнопкой на My Computer и выберите пункт Properties. Перейдите во вкладку Advanced и щелкните на Error Reporting, после чего появится диалоговое окно Error Reporting, см. рис. 17.9.

Включение или отключение опций Error Reporting

Рис. 17.9. Включение или отключение опций Error Reporting

Вы можете отключить средство Error Reporting, если имеете обоснованную причину для этого решения, но это не стоит делать для сетевых серверов. Если вы решили отключить это средство, то можете выбрать вариант But Notify Me When Critical Errors Occur (Но уведомлять о критических ошибках), чтобы система Windows извещала вас в случае ошибок операционной системы. Но это не дает возможности отслеживания обстоятельств, которые могли вызвать соответствующую ошибку, то есть не позволит воспрепятствовать таким ошибкам в будущем.

Если активизировать средство Error Reporting, то вы можете выбрать типы ошибок, которые хотите отслеживать, включая или исключая ошибки операционной системы и ошибки приложений. Следующие флажки можно устанавливать для ошибок операционной системы.

  • Windows operating system (Для операционной системы Windows).Этот флажок указывает отслеживание ошибок при возникновении отказа BSOD.
  • Unplanned machine shutdowns (При незапланированном отключении машины).Отслеживание ошибок при отключении питания машины с помощью кнопки power или кнопки reset без использования команды Shut Down (Выключить компьютер).

Для отслеживания ошибок приложений установите флажок Programs. Если вы хотите отслеживать только определенные приложения, щелкните на кнопке Choose Programs (Выбрать программы) и внесите изменения в список отслеживаемых приложений в диалоговом окне Choose Programs.


Чтобы изменить список приложений, включаемых в отчеты об ошибках, выберите вариант All Programs In This List (Все программы из этого списка). Затем выполните один из следующих шагов, чтобы сконфигурировать вывод ошибок для приложений.

  • Сбросьте флажок Programs From Microsoft (Программы от Microsoft), чтобы исключить отслеживание ошибок этих программ.
  • Сбросьте флажок Windows Components, чтобы исключить отслеживание ошибок компонентов операционной системы.
  • Щелкните на кнопке Add и затем введите путь к исполняемому файлу для приложения, которое вы хотите включить в этот список (или используйте кнопку Browse для поиска этого приложения).

Если вы хотите конкретно исключить из отслеживания ошибок одно или несколько приложений, щелкните на кнопке Add внизу этого диалогового окна и затем введите путь к исполняемому файлу или щелкните на кнопке Browse для поиска этого приложения.

Флажок Force Queue Mode For Program Errors (Инициировать режим очереди для программных ошибок) относится к тому, как выводятся ошибки. В режиме Queue mode выводятся десять последних ошибок, причем каждая из них в своем собственном окне. Это позволяет вам считывать отслеживаемые ошибки или отправлять их в Microsoft.

Игорь Ермачков
Игорь Ермачков
Латвия, Рига
Александр Демиденко
Александр Демиденко
Россия, Брянск