Informações sobre a ID do evento 51

A ID do evento 51 pode ocorrer quando você grava informações no disco físico. Este artigo descreve como decodificar a seção de dados de uma mensagem de evento da ID do evento 51.

Aplica-se a: Windows 7 Service Pack 1, Windows Server 2012 R2
Número original do KB: 244780

Resumo

Quando você grava informações no disco físico, a seguinte mensagem de evento pode ser registrada no log do Sistema:

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

Observação

O dispositivo na descrição e os dados hexadecimal específicos podem variar.

Mais informações

Se ocorrer um erro genérico quando as informações das páginas do computador de ou para o disco, uma mensagem de evento da ID do evento 51 será registrada. Em uma operação de paginação, o sistema operacional troca uma página de memória da memória para o disco ou recupera uma página de memória do disco para a memória. Faz parte do gerenciamento de memória do Windows.

No entanto, o computador pode registrar essa mensagem de evento quando carrega imagens de um dispositivo de armazenamento, lê e grava em arquivos mapeados localmente ou em qualquer arquivo (desde que seja E/S em buffer). O computador não registra essa mensagem de evento quando executa E/S não oferecida. Você pode solucionar problemas de uma mensagem de evento da ID do Evento 51 exatamente como solucionar problemas de mensagens de evento ID 9 ou ID de Evento 11.

Em determinadas circunstâncias, o sistema registra a seguinte mensagem de evento da ID do Evento 51:

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

Nesse caso, não são experimentados efeitos nocivos. Por exemplo, a ID do Evento 51 é registrada quando mídia em branco, como CDR, CDRW, DVDR, é inserida em uma unidade gravável enquanto um dispositivo USB está conectado. O sistema registra o evento mesmo que o disco seja gravável e o dispositivo USB ainda seja utilizável. Nesses casos específicos, você pode ignorar com segurança as entradas de log. Nenhuma ação é necessária.

Observação

No Windows XP e no Windows Server 2003, o DeviceName pode ser truncado devido à limitação de tamanho da entrada do log de eventos. Como resultado, o número de disco rígido exibido ou o próprio nome do objeto do dispositivo podem estar incorretos. Como uma grande quantidade de informações é armazenada na seção de dados, o espaço disponível para o DeviceName é reduzido. Nesse caso, você pode encontrar o dispositivo apropriado examinando os dados de disco de destino armazenados na seção de dados. Para obter mais informações, consulte Decodificar a seção de dados de uma mensagem de evento da ID do evento 51.

No Windows Vista e nas versões posteriores, o tamanho da entrada do log de eventos foi aumentado e DeviceName não está truncado.

Você pode usar os dados binários associados a qualquer erro DE DISCO (ID do evento 7, 9, 11, 51 e outras IDs de Evento) para ajudá-lo a identificar o problema decodificação da seção de dados.

Uma ID de Evento 51 tem uma caixa CDB (Bloco de Descritor de Comando) extra. Considere as informações a seguir ao examinar a seção de dados de uma mensagem de evento da ID do evento 51.

Decodificar a seção de dados de uma mensagem de evento da ID do evento 51

Ao decodificar a seção de dados do exemplo na seção Resumo , você pode ver que uma tentativa de executar uma operação de gravação no LUN 3 começando no setor 0x2975820a para setores 0x0080 falha porque o barramento foi redefinido, mas a solicitação será repetida. Posteriormente, este artigo lista as etapas específicas para decodificar este exemplo.

As tabelas a seguir descrevem o que cada deslocamento representa:

Deslocamento Comprimento Values
0x00 1 Tipo de operação: 0x03 = Leitura, 0x04 = Gravação, 0x0F = IOCTL
0x01 1 Número de repetições restantes
0x02 2 Dump Data Size 0x0068
0x04 2 Número de cadeias de caracteres 0x0001
0x06 2 Deslocamento para o nome do dispositivo
0x08 2 Utilizadas
0x0a 2 Bytes de preenchimento
0x0c 4 Código de erro NTSTATUS
0x10 4 Valor de erro exclusivo
0x14 4 NTSTATUS Status Final 0x00000000 = a solicitação será repetida
0x18 4 Número de sequência – Não utilizado
0x1c 4 Código de Controle de Io (não se aplica a este evento)
0x20 8 Deslocamento de byte para o setor ruim, se houver
0x28 8 Contagem de tiques quando o erro ocorreu
0x30 4 Número da porta – Não utilizado
0x34 1 Sinalizadores de Erro
0x35 3 Utilizadas
0x38 88 Estrutura de bloco de solicitação SCSI
0x90 18 Estrutura de dados sense

Seções-chave para decodificar

Aqui estão as seções-chave a serem decodificadas.

O código de erro

No exemplo que está na seção Resumo , o código de erro é listado na segunda linha. Essa linha começa com 0008: e inclui os últimos 4 bytes na linha.

0008: 00 00 00 00 33 00 04 80

ErrorCode = 0x80040033

Esse código é o código para o erro 51. Esse código é o mesmo para todas as mensagens de evento da ID de Evento 51:

IO_WARNING_PAGING_FAILURE

Observação

Ao interpretar os dados hexadecimal na ID de Evento para o código status, lembre-se de que os valores são representados no formato de endiano pequeno.

O código de status final

No exemplo na seção Resumo, o código de status final é listado em 0x14 (na terceira linha) que começa com 0010: e inclui os últimos quatro octetes nessa linha.

0010: 2d 01 00 00 00 00 00 00

FinalStatus = 0x00000000

Ele mapeia para STATUS_SUCCESS e implica que a solicitação será repetida.

Observação

Ao interpretar os dados hexadecimal na ID de Evento para o código status, lembre-se de que os valores são representados no formato de endiano pequeno.

O disco de destino

Você pode usar esses dados para ajudar a determinar em qual disco o problema ocorreu:

0028: 01 00 00 00 04 00 00 00

ID do caminho = 0x0000001, ID de destino = 0x0000004

0030: 03 00 00 2a 00 00 00

LUN = 0x0000003

Talvez seja mais fácil identificar o volume usando o link simbólico listado para a unidade na descrição da ID do evento. Por exemplo, \Device\Harddisk3\DR3.

Observação

As informações do disco de destino são como elas aparecem para o sistema operacional. A virtualização de armazenamento e o software de E/S multipata podem mascarar o que é apresentado ao sistema operacional. Essas informações podem não corresponder diretamente aos mapeamentos físicos.

Os parâmetros SRB (Bloco de Solicitação scsi)

No exemplo na seção Resumo , o ScsiStatus é 0x02 (primeiro byte na linha 0038) e SrbStatus é 0x84 (segundo byte na linha 0038). Ele fornece as seguintes informações:

0038: 02 84 00 00 00 29 06 00

ScsiStatus de 0x02:
SCSISTAT_CHECK_CONDITION

SCSI status códigos: (do 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 de 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.

Máscaras de status SRB:

0x80 = SRB_STATUS_AUTOSENSE_VALID
0x40 = SRB_STATUS_QUEUE_FROZEN

Você deve dividir máscaras de status SRB porque elas são um substato. Eles são combinados com os códigos de status SRB.

No exemplo 0x84 anterior, 0x8_ é uma máscara de status. Portanto, SRB_STATUS_AUTOSENSE_VALID e 0x04 é o código status SRB. Significa SRB_STATUS_ERROR.

O código de sentido

Se o SRB status for que o autosense é válido, os códigos de sentido fornecem mais informações. No exemplo na seção Resumo , o código de sentido é 0x06 (sétimo byte na linha 0038) e o código de sentido adicional é 0x29 (sexto octeto na linha 0038). Ele fornece as seguintes informações:

0038: 02 84 00 00 00 29 06 00

A chave de sentido do 0x06:

O byte em deslocamento 003e é a chave de sentido. Ele mapeia para:

0x06 = SCSI_SENSE_UNIT_ATTENTION

Códigos de sentido: (do 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 (código de sentido) adicional de 0x29:

O ASC está localizado no sexto byte na linha 0038 no deslocamento 003d e tem um valor de 29. Para a chave de sentido especificada, ela mapeia para:

0x29 = SCSI_ADSENSE_BUS_RESET

Códigos de sentido adicionais: (do 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 (qualificação de código de sentido) adicional de 0x00:

O ASCQ está localizado no quinto byte na linha 0038 no deslocamento 003C e tem um valor de 00. Ele é 00 neste exemplo, portanto, ele não se aplica ao ASC especificado. Esta lista de ASCQ para cada código de sentido é muito grande para ser incluída neste artigo. Exibir SCSI. H no DDK para obter mais informações.

Observação

Todos os valores ASC e ASCQ acima 0x80 são específicos do fornecedor e não estão documentados na especificação SCSI ou no Microsoft DDK. Consulte o fornecedor de hardware.

Os parâmetros CDB (Bloco de Descritor de Comando)

O CDB começa na linha com um deslocamento de 0040:

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

Os bytes em deslocamento 0x40 representam o código CDB. Os bytes de deslocamento 0x43 para 0x46 representam o setor inicial e compensam 0x47 para 0x49 representam o número de setores envolvidos na operação.

Observação

A seção de dados cdb não está no formato de little-endian. Portanto, os bytes não devem ser invertidos. Tenha cuidado ao decodificar esta seção, pois o formato é diferente das seções anteriores.

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

Códigos de CDB scsi: (do 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