Сведения о событии с идентификатором 51

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

Применимо к: Windows Server 7 с пакетом обновления 1, Windows Server 2012 R2
Оригинальный номер базы знаний: 244780

Сводка

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

Event ID: 51  
Event Type: Warning  
Event Source: Disk  
Description: An error was detected on device \Device\Harddisk3\DR3 during a paging operation.  
Data:  
0000: 04 00 22 00 01 00 72 00  
0008: 00 00 00 00 33 00 04 80  
0010: 2d 01 00 00 00 00 00 00  
0018: 00 00 00 00 00 00 00 00  
0020: 00 52 ea 04 15 00 00 00  
0028: 01 00 00 00 04 00 00 00  
0030: 03 00 00 00 2a 00 00 00  
0038: 02 84 00 00 00 29 06 00  
0040: 2a 60 0a 82 75 29 00 00  
0048: 80 00

Примечание.

Устройство в описании и конкретные шестнадцатеричные данные могут отличаться.

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

Если общая ошибка возникает, когда компьютер перенакает данные на диск или с диска, регистрируется сообщение о событии с идентификатором 51. В операции подкачки операционная система либо переключает страницу памяти из памяти на диск, либо извлекает страницу памяти с диска на память. Это часть управления памятью Windows.

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

При определенных обстоятельствах система регистрирует следующее сообщение о событии с идентификатором 51:

An error was detected on device \Device\DeviceName during a paging operation

В этом случае никаких вредных последствий не наблюдается. Например, событие с идентификатором 51 регистрируется, когда пустой носитель, например CDR, CDRW, DVDR, вставляется в записываемый диск во время подключения USB-устройства. Система регистрирует событие, даже если диск доступен для записи, а USB-устройство по-прежнему доступно для использования. В этих конкретных случаях записи журнала можно игнорировать. Не требуется выполнять никаких действий.

Примечание.

В Windows XP и Windows Server 2003 имя устройства может быть усечено из-за ограничения размера записи журнала событий. В результате отображаемый номер жесткого диска или само имя объекта устройства могут быть неверными. Так как в разделе данных хранится большой объем информации, пространство, доступное для DeviceName, сокращается. В этом случае вы можете найти соответствующее устройство, просмотрев данные целевого диска, хранящиеся в разделе данных. Дополнительные сведения см. в разделе Декодирование раздела данных сообщения о событии с идентификатором события 51.

В Windows Vista и более поздних версиях размер записи журнала событий увеличен, а DeviceName не усекается.

Вы можете использовать двоичные данные, связанные с любой ошибкой ДИСКА (идентификаторы событий 7, 9, 11, 51 и другие идентификаторы событий), чтобы определить проблему путем декодирования раздела данных.

Событие с идентификатором 51 имеет дополнительный блок дескриптора команд (CDB). При просмотре раздела данных сообщения о событии с идентификатором 51 учитывайте следующие сведения.

Декодирование раздела данных сообщения о событии с идентификатором 51

При декодировании раздела данных примера в разделе Сводка вы увидите, что попытка выполнить операцию записи в LUN 3, начиная с 0x2975820a секторов для 0x0080 секторов, завершается сбоем, так как шина была сброшена, но запрос будет повторно выполнен. Далее в этой статье перечислены конкретные шаги для декодирования этого примера.

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

Offset Длина Values
0x00 1 Тип операции: 0x03 = Чтение, 0x04 = Запись, 0x0F = IOCTL
0x01 1 Количество оставшихся повторных попыток
0x02 2 0x0068 размера данных дампа
0x04 2 Число строк 0x0001
0x06 2 Смещение к имени устройства
0x08 2 Неиспользуемые
0x0a 2 Заполнение байтов
0x0c 4 Код ошибки NTSTATUS
0x10 4 Уникальное значение ошибки
0x14 4 NTSTATUS Final Status 0x00000000 = запрос будет повторно выполнен
0x18 4 Порядковый номер — неиспользуемый
0x1c 4 Код элемента управления io (не применяется к этому событию)
0x20 8 Смещение байтов в плохой сектор, если он есть
0x28 8 Число тактов при возникновении ошибки
0x30 4 Номер порта — неиспользуемый
0x34 1 Флаги ошибок
0x35 3 Неиспользуемые
0x38 88 Структура блока запроса SCSI
0x90 18 Структура данных sense

Декодирование разделов ключей

Ниже приведены ключевые разделы для декодирования.

Код ошибки

В примере, который находится в разделе Сводка , код ошибки указан во второй строке. Эта строка начинается с 0008: и включает в себя последние 4 байта в строке.

0008: 00 00 00 00 33 00 04 80

ErrorCode = 0x80040033

Это код ошибки 51. Этот код одинаков для всех сообщений о событиях с кодом 51:

IO_WARNING_PAGING_FAILURE

Примечание.

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

Код конечного состояния

В примере в разделе Сводка окончательный код состояния указан в 0x14 (в третьей строке), который начинается с 0010: и включает последние четыре октета в этой строке.

0010: 2d 01 00 00 00 00 00

FinalStatus = 0x00000000

Он сопоставляется с STATUS_SUCCESS и подразумевает, что запрос будет повторно выполнен.

Примечание.

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

Целевой диск

Эти данные можно использовать, чтобы определить, на каком диске возникла проблема:

0028: 01 00 00 00 04 00 00 00

Идентификатор пути = 0x0000001, целевой идентификатор = 0x0000004

0030: 03 00 00 00 2a 00 00

LUN = 0x0000003

Может быть проще определить том, используя символьную ссылку, указанную на диск в описании идентификатора события. Например, \Device\Harddisk3\DR3.

Примечание.

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

Параметры блока запросов SCSI (SRB)

В примере в разделе Сводка ScsiStatus 0x02 ( первый байт в строке 0038), а SrbStatus — 0x84 (второй байт в строке 0038). В нем содержатся следующие сведения:

0038: 02 84 00 00 00 29 06 00

ScsiStatus 0x02:
SCSISTAT_CHECK_CONDITION

Коды состояния SCSI: (из SCSI. H)

0x00 = SCSISTAT_GOOD
0x02 = SCSISTAT_CHECK_CONDITION
0x04 = SCSISTAT_CONDITION_MET
0x08 = SCSISTAT_BUSY
0x10 = SCSISTAT_INTERMEDIATE
0x14 = SCSISTAT_INTERMEDIATE_COND_MET
0x18 = SCSISTAT_RESERVATION_CONFLICT
0x22 = SCSISTAT_COMMAND_TERMINATED
0x28 = SCSISTAT_QUEUE_FULL

SrbStatus 0x84:
SRB_STATUS_AUTOSENSE_VALID | SRB_STATUS_ERROR

0x00 = SRB_STATUS_PENDING
0x01 = SRB_STATUS_SUCCESS
0x02 = SRB_STATUS_ABORTED
0x03 = SRB_STATUS_ABORT_FAILED
0x04 = SRB_STATUS_ERROR
0x05 = SRB_STATUS_BUSY
0x06 = SRB_STATUS_INVALID_REQUEST
0x07 = SRB_STATUS_INVALID_PATH_ID
0x08 = SRB_STATUS_NO_DEVICE
0x09 = SRB_STATUS_TIMEOUT
0x0A = SRB_STATUS_SELECTION_TIMEOUT
0x0B = SRB_STATUS_COMMAND_TIMEOUT
0x0D = SRB_STATUS_MESSAGE_REJECTED
0x0E = SRB_STATUS_BUS_RESET
0x0F = SRB_STATUS_PARITY_ERROR
0x10 = SRB_STATUS_REQUEST_SENSE_FAILED
0x11 = SRB_STATUS_NO_HBA
0x12 = SRB_STATUS_DATA_OVERRUN
0x13 = SRB_STATUS_UNEXPECTED_BUS_FREE
0x14 = SRB_STATUS_PHASE_SEQUENCE_FAILURE
0x15 = SRB_STATUS_BAD_SRB_BLOCK_LENGTH
0x16 = SRB_STATUS_REQUEST_FLUSHED
0x20 = SRB_STATUS_INVALID_LUN
0x21 = SRB_STATUS_INVALID_TARGET_ID
0x22 = SRB_STATUS_BAD_FUNCTION
0x23 = SRB_STATUS_ERROR_RECOVERY
0x24 = SRB_STATUS_NOT_POWERED
0x30 = SRB_STATUS_INTERNAL_ERROR
(used by the port driver to indicate that a non-scsi-related error occurred)
0x38 - 0x3f = Srb status values reserved for internal port driver use.

Маски состояния SRB:

0x80 = SRB_STATUS_AUTOSENSE_VALID
0x40 = SRB_STATUS_QUEUE_FROZEN

Необходимо разбить маски состояния SRB, так как они являются субсостоянием. Они объединяются с кодами состояния SRB.

В предыдущем примере 0x840x8_ является маской состояния. SRB_STATUS_AUTOSENSE_VALID Поэтому и 0x04 — это код состояния SRB. Это означает SRB_STATUS_ERROR.

Код чувства

Если состояние SRB является допустимым, коды чувств предоставляют дополнительные сведения. В примере в разделе Сводка код чувств 0x06 ( седьмой байт в строке 0038), а дополнительный код — 0x29 (шестой октет в строке 0038). В нем содержатся следующие сведения:

0038: 02 84 00 00 00 29 06 00

Смысловая клавиша 0x06:

Байт со смещением 003e является ключом смысла. Он сопоставляется с:

0x06 = SCSI_SENSE_UNIT_ATTENTION

Коды контроля: (из SCSI. H)

0x00 = SCSI_SENSE_NO_SENSE
0x01 = SCSI_SENSE_RECOVERED_ERROR
0x02 = SCSI_SENSE_NOT_READY
0x03 = SCSI_SENSE_MEDIUM_ERROR
0x04 = SCSI_SENSE_HARDWARE_ERROR
0x05 = SCSI_SENSE_ILLEGAL_REQUEST
0x06 = SCSI_SENSE_UNIT_ATTENTION
0x07 = SCSI_SENSE_DATA_PROTECT
0x08 = SCSI_SENSE_BLANK_CHECK
0x09 = SCSI_SENSE_UNIQUE
0x0A = SCSI_SENSE_COPY_ABORTED
0x0B = SCSI_SENSE_ABORTED_COMMAND
0x0C = SCSI_SENSE_EQUAL
0x0D = SCSI_SENSE_VOL_OVERFLOW
0x0E = SCSI_SENSE_MISCOMPARE
0x0F = SCSI_SENSE_RESERVED

Дополнительный код контроля (ASC) 0x29:

ASC находится в шестом байте в строке 0038 со смещением 003d и имеет значение 29. Для указанного ключа чувства он сопоставляется с:

0x29 = SCSI_ADSENSE_BUS_RESET

Дополнительные коды чувств: (из SCSI. H)

0x00 = SCSI_ADSENSE_NO_SENSE
0x02 = SCSI_ADSENSE_NO_SEEK_COMPLETE
0x04 = SCSI_ADSENSE_LUN_NOT_READY
0x0C = SCSI_ADSENSE_WRITE_ERROR
0x14 = SCSI_ADSENSE_TRACK_ERROR
0x15 = SCSI_ADSENSE_SEEK_ERROR
0x17 = SCSI_ADSENSE_REC_DATA_NOECC
0x18 = SCSI_ADSENSE_REC_DATA_ECC
0x20 = SCSI_ADSENSE_ILLEGAL_COMMAND
0x21 = SCSI_ADSENSE_ILLEGAL_BLOCK
0x24 = SCSI_ADSENSE_INVALID_CDB
0x25 = SCSI_ADSENSE_INVALID_LUN
0x27 = SCSI_ADSENSE_WRITE_PROTECT
0x28 = SCSI_ADSENSE_MEDIUM_CHANGED
0x29 = SCSI_ADSENSE_BUS_RESET
0x2E = SCSI_ADSENSE_INSUFFICIENT_TIME_FOR_OPERATION
0x30 = SCSI_ADSENSE_INVALID_MEDIA
0x3a = SCSI_ADSENSE_NO_MEDIA_IN_DEVICE
0x3b = SCSI_ADSENSE_POSITION_ERROR
0x5a = SCSI_ADSENSE_OPERATOR_REQUEST
0x5d = SCSI_ADSENSE_FAILURE_PREDICTION_THRESHOLD_EXCEEDED
0x64 = SCSI_ADSENSE_ILLEGAL_MODE_FOR_THIS_TRACK
0x6f = SCSI_ADSENSE_COPY_PROTECTION_FAILURE
0x73 = SCSI_ADSENSE_POWER_CALIBRATION_ERROR
0x80 = SCSI_ADSENSE_VENDOR_UNIQUE
0xA0 = SCSI_ADSENSE_MUSIC_AREA
0xA1 = SCSI_ADSENSE_DATA_AREA
0xA7 = SCSI_ADSENSE_VOLUME_OVERFLOW

Дополнительный квалификатор кода контроля (ASCQ) 0x00:

ASCQ находится в пятом байте в строке 0038 со смещением 003C и имеет значение 00. В этом примере это 00 , поэтому он не применяется для указанного ASC. Этот список ASCQ для каждого кода чувств слишком велик, чтобы включить его в эту статью. Просмотр SCSI. Дополнительные сведения см. в DDK.

Примечание.

Все значения ASC и ASCQ выше 0x80 относятся к поставщику и не описаны в спецификации SCSI или Microsoft DDK. Обратитесь к поставщику оборудования.

Параметры блока дескриптора команд (CDB)

CDB начинается с линии со смещением 0040:

0040: 2a 60 0a 82 75 29 00 00
0048: 80 00

Байты со смещением 0x40 представляют код CDB. Байты от смещения 0x43 до 0x46 представляют начальный сектор, а смещение 0x47 0x49 — количество секторов, участвующих в операции.

Примечание.

Раздел данных CDB не в формате little-endian. Поэтому байты не должны быть перевернуты. Будьте осторожны при декодировании этого раздела, так как формат отличается от предыдущих разделов.

0x2a = Write request
0x0a827529 = The starting sector
0x0080 = The number of sectors

Коды CDB SCSI: (из SCSI. H)

0x00 = SCSIOP_TEST_UNIT_READY
0x01 = SCSIOP_REZERO_UNIT
0x01 = SCSIOP_REWIND
0x02 = SCSIOP_REQUEST_BLOCK_ADDR
0x03 = SCSIOP_REQUEST_SENSE
0x04 = SCSIOP_FORMAT_UNIT
0x05 = SCSIOP_READ_BLOCK_LIMITS
0x07 = SCSIOP_REASSIGN_BLOCKS
0x07 = SCSIOP_INIT_ELEMENT_STATUS
0x08 = SCSIOP_READ6
0x08 = SCSIOP_RECEIVE
0x0A = SCSIOP_WRITE6
0x0A = SCSIOP_PRINT
0x0A = SCSIOP_SEND
0x0B = SCSIOP_SEEK6
0x0B = SCSIOP_TRACK_SELECT
0x0B = SCSIOP_SLEW_PRINT
0x0C = SCSIOP_SEEK_BLOCK
0x0D = SCSIOP_PARTITION
0x0F = SCSIOP_READ_REVERSE
0x10 = SCSIOP_WRITE_FILEMARKS
0x10 = SCSIOP_FLUSH_BUFFER
0x11 = SCSIOP_SPACE
0x12 = SCSIOP_INQUIRY
0x13 = SCSIOP_VERIFY6
0x14 = SCSIOP_RECOVER_BUF_DATA
0x15 = SCSIOP_MODE_SELECT
0x16 = SCSIOP_RESERVE_UNIT
0x17 = SCSIOP_RELEASE_UNIT
0x18 = SCSIOP_COPY
0x19 = SCSIOP_ERASE
0x1A = SCSIOP_MODE_SENSE
0x1B = SCSIOP_START_STOP_UNIT
0x1B = SCSIOP_STOP_PRINT
0x1B = SCSIOP_LOAD_UNLOAD
0x1C = SCSIOP_RECEIVE_DIAGNOSTIC
0x1D = SCSIOP_SEND_DIAGNOSTIC
0x1E = SCSIOP_MEDIUM_REMOVAL
0x23 = SCSIOP_READ_FORMATTED_CAPACITY
0x25 = SCSIOP_READ_CAPACITY
0x28 = SCSIOP_READ
0x2A = SCSIOP_WRITE
0x2B = SCSIOP_SEEK
0x2B = SCSIOP_LOCATE
0x2B = SCSIOP_POSITION_TO_ELEMENT
0x2E = SCSIOP_WRITE_VERIFY
0x2F = SCSIOP_VERIFY
0x30 = SCSIOP_SEARCH_DATA_HIGH
0x31 = SCSIOP_SEARCH_DATA_EQUAL
0x32 = SCSIOP_SEARCH_DATA_LOW
0x33 = SCSIOP_SET_LIMITS
0x34 = SCSIOP_READ_POSITION
0x35 = SCSIOP_SYNCHRONIZE_CACHE
0x39 = SCSIOP_COMPARE
0x3A = SCSIOP_COPY_COMPARE
0x3B = SCSIOP_WRITE_DATA_BUFF
0x3C = SCSIOP_READ_DATA_BUFF
0x40 = SCSIOP_CHANGE_DEFINITION
0x42 = SCSIOP_READ_SUB_CHANNEL
0x43 = SCSIOP_READ_TOC
0x44 = SCSIOP_READ_HEADER
0x45 = SCSIOP_PLAY_AUDIO
0x46 = SCSIOP_GET_CONFIGURATION
0x47 = SCSIOP_PLAY_AUDIO_MSF
0x48 = SCSIOP_PLAY_TRACK_INDEX
0x49 = SCSIOP_PLAY_TRACK_RELATIVE
0x4A = SCSIOP_GET_EVENT_STATUS
0x4B = SCSIOP_PAUSE_RESUME
0x4C = SCSIOP_LOG_SELECT
0x4D = SCSIOP_LOG_SENSE
0x4E = SCSIOP_STOP_PLAY_SCAN
0x51 = SCSIOP_READ_DISK_INFORMATION
0x52 = SCSIOP_READ_TRACK_INFORMATION
0x53 = SCSIOP_RESERVE_TRACK_RZONE
0x54 = SCSIOP_SEND_OPC_INFORMATION
0x55 = SCSIOP_MODE_SELECT10
0x5A = SCSIOP_MODE_SENSE10
0x5B = SCSIOP_CLOSE_TRACK_SESSION
0x5C = SCSIOP_READ_BUFFER_CAPACITY
0x5D = SCSIOP_SEND_CUE_SHEET
0x5E = SCSIOP_PERSISTENT_RESERVE_IN
0x5F = SCSIOP_PERSISTENT_RESERVE_OUT
0xA0 = SCSIOP_REPORT_LUNS
0xA1 = SCSIOP_BLANK
0xA3 = SCSIOP_SEND_KEY
0xA4 = SCSIOP_REPORT_KEY
0xA5 = SCSIOP_MOVE_MEDIUM
0xA6 = SCSIOP_LOAD_UNLOAD_SLOT
0xA6 = SCSIOP_EXCHANGE_MEDIUM
0xA7 = SCSIOP_SET_READ_AHEAD
0xAD = SCSIOP_READ_DVD_STRUCTURE
0xB5 = SCSIOP_REQUEST_VOL_ELEMENT
0xB6 = SCSIOP_SEND_VOLUME_TAG
0xB8 = SCSIOP_READ_ELEMENT_STATUS
0xB9 = SCSIOP_READ_CD_MSF
0xBA = SCSIOP_SCAN_CD
0xBB = SCSIOP_SET_CD_SPEED
0xBC = SCSIOP_PLAY_CD
0xBD = SCSIOP_MECHANISM_STATUS
0xBE = SCSIOP_READ_CD
0xBF = SCSIOP_SEND_DVD_STRUCTURE
0xE7 = SCSIOP_INIT_ELEMENT_RANGE