事件識別碼51的相關資訊

本文說明在您寫入實體磁片資訊時所發生之事件識別碼51的相關資訊,以及如何解碼事件識別碼51事件訊息的資料區段。

原始產品版本:   Windows 7 Service Pack 1、Windows Server 2012 R2
原始 KB 編號:   244780

摘要

當您寫入實體磁片的資訊時,系統記錄檔中可能會記錄下列事件訊息:

事件 ID:51
事件種類:警告
事件來源:磁片
描述:在頁面作業作業期間,在裝置 \Device\Harddisk3\DR3 上偵測到錯誤。
資料:
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 記憶體管理的一部分。

不過,當電腦在 I/O) 進行緩衝的情況下,從儲存裝置、讀取及寫入寫入至本機對應的檔案或任何檔案 (時,可能會記錄此事件訊息。 電腦執行 nonbuffered I/O 時,並不會記錄此事件訊息。 您可以使用與疑難排解事件識別碼9或事件識別碼11事件訊息一樣的事件識別碼51事件訊息進行疑難排解。

在某些情況下,系統會記錄下列事件識別碼51事件訊息:

分頁作業作業期間在裝置 \Device\DeviceName 上偵測到錯誤

在此情況下,不會有任何有害的影響。 例如,當 USB 裝置插入可寫入的磁片時,會記錄事件識別碼51,例如 CDR、CDRW、DVDR 等的空白介質。 即使光碟可寫入,系統也會記錄該事件,但 USB 裝置仍可使用。 在這些特殊情況下,您可以放心忽略記錄專案,而且不需要其他任何動作。

注意

在 Windows XP 和 Windows Server 2003 上,由於事件記錄專案的大小限制,因此可能會截斷 DeviceName。 因此,顯示的硬碟號碼或裝置物件名稱本身可能不正確。 這是因為大量資訊會儲存在 [資料] 區段中,可減少 DeviceName 的可用空間。 在此情況下,您可以查看儲存在 data 區段中的目的磁片資料,以尋找適當的裝置。 如需詳細資訊,請參閱 事件識別碼51事件消息區段的解碼資料區段

在 Windows Vista 和更新版本的 Windows 作業系統上,事件記錄專案大小已增加,而且不會截斷 DeviceName。

您可以使用與任何磁片錯誤( (事件識別碼7,9,11,51)及其他事件 IDs 相關聯的二進位資料,) 以解碼資料區段,協助識別問題。

因為事件識別碼51具有額外的命令描述項區塊 (CDB) ] 方塊中,當您複查事件識別碼51事件訊息的資料區段時,必須考慮下列資訊。

解碼事件識別碼51事件訊息的資料區段

當您解碼 [ 摘要 ] 區段中範例中的 [資料] 區段時,您會看到嘗試執行寫入作業的 LUN 3 為0x0080 磁區0x2975820a 的磁區失敗,因為該匯流排已重設,但會重試要求。 稍後,本文會列出解碼此範例的特定步驟。

下表說明每個位移代表的含義。

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 閒置
0x38 88 SCSI 要求封鎖結構
0x90 18 感知資料結構

要解碼的重要區段

以下是要解碼的主要部分。

錯誤碼

在 [ 摘要 ] 區段的範例中,錯誤碼會列在第二行中。 該行會以 0008: 開始,並在該行中包含最後四個位元組。

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 00

FinalStatus = 0x00000000

這會對應至 STATUS_SUCCESS 並暗指要求會重試。

注意

當您將事件識別碼中的十六進位資料轉譯至狀態碼時,請記住,這些值會以小的 endian 格式表示。

目的地磁片

您可以使用此資料來協助決定發生問題的磁片:

0028: 01 00 00 00 04 00 00 00

Path ID= 0x0000001,Target ID= 0x0000004

0030:03 00 00 00 2a 00 00 00

LUN = 0x0000003

使用事件識別碼描述中列出的磁片磁碟機符號連結,可更容易識別該磁片區。 例如,\Device\Harddisk3\DR3

注意

目的地磁片資訊是對作業系統的顯示方式。 Storage virtualization 和多路徑 I/O 軟體可能掩蓋作業系統所呈現的內容。 此資訊可能不會直接對應至實體對應。

SCSI 要求封鎖 (SRB) 參數

在 [摘要] 區段的範例中,ScsiStatus 為第一個) 0038 位元組 (第一個位元組 ,而 SrbStatus0x84 第二個位元組的第 0038) (第二個位元組。 這會提供下列資訊:

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_VALID0X04 為 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:

其他的感知碼位於第六個位元組的第六個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

) 0x00 的其他感知碼限定詞 (ASCQ:

其他的感知碼限定詞位於第五個位元組 0038 中的第五個位元組(偏移003C,且值為 00)。 在此範例中, 它不適用 于指定的 ASC。 每個探測碼的其他感知碼限定詞清單太大,無法包含在本文中。 View 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 to 0x49 代表作業所涉及的磁區數目。

注意

CDB data 區段不是以小序格式格式化,因此不應翻轉位元組。 當您解碼此區段時,因為格式與舊版不同,所以請務必小心。

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