有关事件 ID 51 的信息
将信息写入物理磁盘时,可能会发生事件 ID 51。 本文介绍如何解码事件 ID 51 事件消息的数据部分。
适用于:Windows 7 Service Pack 1,Windows Server 2012 R2
原始 KB 编号: 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
注意
说明中的设备和特定的十六进制数据可能会有所不同。
更多信息
如果计算机向磁盘或从磁盘页页信息时发生一般错误,则会记录事件 ID 51 事件消息。 在分页操作中,操作系统将内存页从内存交换到磁盘,或者从磁盘检索内存页。 它是 Windows 内存管理的一部分。
但是,计算机在从存储设备加载图像、读取和写入本地映射文件或任何文件 (时,可能会记录此事件消息,只要它是缓冲的 I/O) 。 计算机在执行非缓冲区 I/O 时不会记录此事件消息。 可以对事件 ID 51 事件消息进行故障排除,就像排查事件 ID 9 或事件 ID 11 事件消息一样。
在某些情况下,系统会记录以下事件 ID 51 事件消息:
An error was detected on device \Device\DeviceName during a paging operation
在这种情况下,不会经历任何有害影响。 例如,当插入 USB 设备时,将空白媒体(如 CDR、CDRW、DVDR)插入可写驱动器时,会记录事件 ID 51。 即使光盘可写,并且 USB 设备仍可用,系统也会记录事件。 在这些特定情况下,可以放心地忽略日志条目。 不需要执行任何操作。
注意
在 Windows XP 和 Windows Server 2003 上,由于事件日志项的大小限制,DeviceName 可能会被截断。 因此,显示的硬盘编号或设备对象名称本身可能不正确。 由于数据节中存储了大量信息,因此可用于 DeviceName 的空间会减少。 在这种情况下,可以通过查看存储在数据部分中的目标磁盘数据来查找相应的设备。 有关详细信息,请参阅 事件 ID 51 事件消息的解码数据部分。
在 Windows Vista 及更高版本上,事件日志条目大小已增加,并且 DeviceName 未截断。
可以使用与任何 DISK 错误关联的二进制数据 (事件 ID 7、9、11、51 和其他事件 ID) ,通过解码数据部分来帮助识别问题。
事件 ID 51 具有额外的命令描述符块 (CDB) 框。 查看事件 ID 51 事件消息的数据部分时,请考虑以下信息。
解码事件 ID 51 事件消息的数据部分
在 “摘要 ”部分解码示例的数据部分时,可以看到尝试从扇区0x2975820a开始对 LUN 3 执行写入操作(0x0080扇区)失败,因为总线已重置,但请求将重试。 稍后,本文列出了对此示例进行解码的具体步骤。
下表描述了每个偏移量所代表的内容:
Offset | 长度 | 值 |
---|---|---|
0x00 | 1 | 操作类型:0x03 = Read,0x04 = Write,0x0F = IOCTL |
0x01 | 1 | 剩余重试次数 |
0x02 | 2 | 转储数据大小0x0068 |
0x04 | 2 | 0x0001字符串数 |
0x06 | 2 | 偏移量到设备名称 |
0x08 | 2 | 闲置 |
0x0a | 2 | 填充字节 |
0x0c | 4 | NTSTATUS 错误代码 |
0x10 | 4 | 唯一错误值 |
0x14 | 4 | NTSTATUS 最终状态0x00000000 = 将重试请求 |
0x18 | 4 | 序列号 - 未使用 |
0x1c | 4 | Io 控制代码 (不适用于此事件) |
0x20 | 8 | 字节偏移到坏扇区(如果有) |
0x28 | 8 | 错误发生时的计时周期计数 |
0x30 | 4 | 端口号 - 未使用 |
0x34 | 1 | 错误标志 |
0x35 | 3 | 闲置 |
0x38 | 88 | SCSI 请求块结构 |
0x90 | 18 | 感知数据结构 |
要解码的关键部分
下面是要解码的关键部分。
错误代码
在 “摘要 ”部分的示例中,错误代码列在第二行中。 该行以 0008 开头: 并在行中包含最后 4 个字节。
0008: 00 00 00 00 33 00 04 80
ErrorCode = 0x80040033
此代码是错误 51 的代码。 对于所有事件 ID 51 事件消息,此代码相同:
IO_WARNING_PAGING_FAILURE
注意
将事件 ID 中的十六进制数据解释为状态代码时,请记住,这些值以小 endian 格式表示。
最终状态代码
在“摘要”部分中的示例中,最终状态代码列在以 0010 开头的第三行 ) 0x14 (,并包括此行中的最后四个八位字节。
0010:2d 01 00 00 00 00 00
FinalStatus = 0x00000000
它映射到 STATUS_SUCCESS
并表示将重试请求。
注意
将事件 ID 中的十六进制数据解释为状态代码时,请记住,这些值以小 endian 格式表示。
目标磁盘
可以使用此数据来帮助确定问题发生在哪个磁盘上:
0028: 01 00 00 00 04 00 00 00
路径 ID = 0x0000001,目标 ID = 0x0000004
0030:03 00 00 00 2a 00 00 00
LUN = 0x0000003
使用事件 ID 的说明中列出的指向驱动器的符号链接来标识卷可能更容易。 例如,\Device\Harddisk3\DR3
。
注意
目标磁盘信息是它在操作系统上显示的方式。 存储虚拟化和多路径 I/O 软件可能会屏蔽提供给操作系统的内容。 此信息可能不直接对应于物理映射。
SCSI 请求块 (SRB) 参数
在“摘要”部分中的示例中,ScsiStatus 在第 0038 行 ) ( 第一个字节0x02,SrbStatus 在第 0038 行 ) 0x84 (秒字节。 它提供以下信息:
0038: 02 84 00 00 00 29 06 00
0x02的 ScsiStatus:
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
0x84的 SrbStatus:
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 状态代码结合使用。
在前面的 0x84 示例中, 0x8_ 是状态掩码。 因此, 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
0x29的 ASC) (其他感知代码:
ASC 位于偏移量为 003d 的第 0038 行的第六个字节中,值为 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 位于偏移 量 003C 的第 0038 行的第五个字节中,值为 00。 此示例中为 00 ,因此不适用于指定的 ASC。 对于每个感知代码,此 ASCQ 列表太大,无法包含在本文中。 查看 SCSI。有关详细信息,DDK 中的 H。
注意
高于 0x80 的所有 ASC 和 ASCQ 值都是特定于供应商的,未在 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
SCSI CDB 代码:从 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
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈