Устранение неполадок с сообщением об ошибке с идентификатором события 50

Эта статья поможет устранить неполадки с сообщением об ошибке события с идентификатором 50.

Симптомы

Когда Windows записывает информацию на физический диск, она может записать в системный журнал следующие сообщения о событиях:

Идентификатор события: 50
Тип события: Предупреждение
Источник события: Ftdisk
Описание: {Lost Delayed-Write Data} Система пыталась перенести данные файлов из буферов в \Device\HarddiskVolume4. Операция записи завершилась сбоем, и в файл могли быть записаны только некоторые данные.
Данных:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

Идентификатор события: 26
Тип события: Сведения
Источник события: всплывающее окно приложения
Описание: Windows — ошибка отложенной записи: Windows не удалось сохранить все данные для файла \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Данные были потеряны. Эта ошибка может быть вызвана сбоем оборудования компьютера или сетевого подключения.

Попробуйте сохранить этот файл в другом месте.

Эти сообщения о событиях означают то же самое и создаются по тем же причинам. В этой статье рассматривается событие с идентификатором 50.

Примечание.

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

Дополнительная информация

Существует несколько разных источников для сообщения события с идентификатором 50. Например, сообщение о событии с идентификатором 50, зарегистрированное из источника MRxSmb, возникает, если возникла проблема с сетевым подключением, которая связана с перенаправлением. В этой статье рассматриваются сообщения о событиях с идентификатором 50, которые ссылаются на проблемы записи на диск. Просмотрите сообщение с идентификатором события 50, чтобы убедиться, что оно ссылается на проблему записи на диск и что применяется эта статья.

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

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

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

Сообщение о событии с идентификатором 50 аналогично сообщению с идентификатором события 9 или событию с идентификатором 11. Хотя ошибка не так серьезна, как ошибка, указываемая в сообщении с идентификатором события 9 или событием с идентификатором 11, можно использовать те же методы устранения неполадок для сообщения события с идентификатором 50, что и для события с идентификатором 9 и сообщения с идентификатором события 11. Однако помните, что все, что находится в стеке, может привести к потере задержки записи, например драйверы фильтров и драйверы мини-портов.

Декодирование примера события

В разделе "Симптомы" этой статьи приведен следующий пример сообщения о событии с идентификатором 50:

Идентификатор события: 50
Тип события: Предупреждение
Источник события: Ftdisk
Описание: {Lost Delayed-Write Data} Система пыталась перенести данные файлов из буферов в \Device\HarddiskVolume4. Операция записи завершилась сбоем, и в файл могли быть записаны только некоторые данные.
Данных:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

Определение целевого диска

Вы можете определить диск, который был целевым объектом операции записи, используя символьную ссылку, указанную для диска в разделе "Описание" сообщения об идентификаторе события, например : \Device\HarddiskVolume4.

Декодирование раздела данных

Сообщения о событиях с идентификатором 50 (а также события с идентификатором 9, 11, 51 или аналогичные "DISK" сообщения) включают двоичные данные, которые можно использовать для выявления проблемы. Сообщение содержит следующий раздел данных:

Данных:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

Примечание.

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

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

OffsetLengthValues Длина Values
0x00 2 Не используется
0x02 2 Размер данных дампа = 0x0004
0x04 2 Число строк = 0x0002
0x06 2 Смещение строк
0x08 2 Категория события
0x0c 4 Код ошибки NTSTATUS
0x10 8 Не используется
0x18 8 Не используется
0x20 8 Не используется
0x28 4 Код ошибки состояния NT

Код ошибки состояния NT

Окончательный код состояния — это наиболее важная информация в сообщении о событии с идентификатором 50. Это код ошибки, который возвращается при выполнении запроса на запись и является ключевым источником информации. В этом примере окончательный код состояния отображается в 0x28 в шестой строке набора данных. В начинается с "0028:" и включает четыре октета в этой строке:

0028: 11 00 00 80

При преобразовании шестнадцатеричных данных в сообщении с идентификатором события 50 в код состояния следует помнить, что значения представлены в малоидентичном формате. Так как код состояния является единственной интересующей вас информацией, может быть проще просмотреть данные в формате WORDS вместо БАЙТ. В этом случае байты будут иметь правильный формат, и данные могут быть проще интерпретировать быстро.

Чтобы изменить представление данных, выберите Слова в окне Свойства события . В представлении Слова данных раздел данных примера выглядит следующим образом:

() Bytes (.) 
Words 0000: 00040000 00560002 00000000 80040032 0010: 00000000 00000000 00000000 00000000 0020: 00000000 00000000 80000011

В этом случае окончательный код состояния 0x80000011. Этот код состояния сопоставляется с STATUS_DEVICE_BUSY и подразумевает, что устройство в настоящее время занято. Это стало причиной сбоя операции записи.

Дополнительные сведения о кодах состояния NT см. в разделе Использование значений NTSTATUS. Список кодов также доступен в пакете SDK для разработчиков программного обеспечения Для Windows в NTSTATUS. H-файл .

Код категории событий

В этом примере код категории событий (код, связанный с событием с идентификатором 50) указан во второй строке. Эта строка начинается с "0008:" и включает в себя последние 4 байта следующей строки:

0008: 00 00 00 00 32 00 04 80

В этом случае код ошибки 0x80040032, который соответствует IO_LOST_DELAYED_WRITE. Эти сведения отображаются в описании события как "Потерянные Delayed-Write данные".