Informations sur l’ID d’événement 51

L’ID d’événement 51 peut se produire lorsque vous écrivez des informations sur le disque physique. Cet article explique comment décoder la section données d’un message d’événement ID d’événement 51.

Produits concernés : Windows 7 Service Pack 1, Windows Server 2012 R2
Numéro de la base de connaissances d’origine : 244780

Résumé

Lorsque vous écrivez des informations sur le disque physique, le message d’événement suivant peut être enregistré dans le journal système :

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

Remarque

L’appareil dans la description et les données hexadécimales spécifiques peuvent varier.

Plus d’informations

Si une erreur générique se produit lorsque votre ordinateur page des informations vers ou depuis le disque, un message d’événement ID d’événement 51 est enregistré. Dans une opération de pagination, le système d’exploitation échange une page de mémoire de la mémoire vers le disque ou récupère une page de mémoire du disque vers la mémoire. Il fait partie de la gestion de la mémoire de Windows.

Toutefois, l’ordinateur peut enregistrer ce message d’événement lorsqu’il charge des images à partir d’un périphérique de stockage, lit et écrit dans des fichiers mappés localement ou dans n’importe quel fichier (tant qu’il est mis en mémoire tampon E/S). L’ordinateur ne journalise pas ce message d’événement lorsqu’il effectue des E/S sans tampon. Vous pouvez résoudre les problèmes d’un message d’événement ID d’événement 51 exactement comme vous résolvez les problèmes liés aux messages d’événement ID d’événement 9 ou ID d’événement 11.

Dans certaines circonstances, le système enregistre le message d’événement ID d’événement 51 suivant :

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

Dans ce cas, aucun effet nocif n’est ressenti. Par exemple, l’ID d’événement 51 est enregistré quand un média vide, tel que CDR, CDRW, DVDR, est inséré dans un lecteur accessible en écriture pendant qu’un périphérique USB est branché. Le système enregistre l’événement même si le disque est accessible en écriture et que le périphérique USB est toujours utilisable. Dans ces cas particuliers, vous pouvez ignorer en toute sécurité les entrées de journal. Aucune action n’est requise.

Remarque

Sur Windows XP et Windows Server 2003, deviceName peut être tronqué en raison de la limitation de taille de l’entrée du journal des événements. Par conséquent, le numéro de disque dur affiché ou le nom de l’objet d’appareil lui-même peut être incorrect. Étant donné qu’une grande quantité d’informations est stockée dans la section données, l’espace disponible pour deviceName est réduit. Dans ce cas, vous pouvez trouver l’appareil approprié en examinant les données du disque de destination stockées dans la section données. Pour plus d’informations, consultez Décoder la section données d’un message d’événement ID d’événement 51.

Sur Windows Vista et les versions ultérieures, la taille d’entrée du journal des événements a été augmentée et DeviceName n’est pas tronqué.

Vous pouvez utiliser les données binaires associées à toute erreur DISK (ID d’événement 7, 9, 11, 51 et autres ID d’événement) pour vous aider à identifier le problème en décodant la section données.

Un ID d’événement 51 comporte une zone CDB (Command Descriptor Block) supplémentaire. Tenez compte des informations suivantes lorsque vous passez en revue la section données d’un message d’événement ID d’événement 51.

Décoder la section de données d’un message d’événement ID d’événement 51

Lorsque vous décodez la section données de l’exemple dans la section Résumé , vous pouvez voir qu’une tentative d’exécution d’une opération d’écriture dans le numéro d’unité logique 3 à partir du 0x2975820a de secteur pour les secteurs 0x0080 échoue, car le bus a été réinitialisé, mais la demande sera retentée. Plus tard, cet article répertorie les étapes spécifiques pour décoder cet exemple.

Les tableaux suivants décrivent ce que représente chaque décalage :

Offset Longueur Values
0x00 1 Type d’opération : 0x03 = Lecture, 0x04 = Écriture, 0x0F = IOCTL
0x01 1 Nombre de nouvelles tentatives restantes
0x02 2 Taille des données de vidage 0x0068
0x04 2 Nombre de chaînes 0x0001
0x06 2 Décalage sur le nom de l’appareil
0x08 2 Inutilisés
0x0a 2 Remplissage des octets
0x0c 4 Code d’erreur NTSTATUS
0x10 4 Valeur d’erreur unique
0x14 4 NTSTATUS Final Status 0x00000000 = la demande sera retentée
0x18 4 Numéro de séquence - Inutilisé
0x1c 4 Code de contrôle Io (ne s’applique pas à cet événement)
0x20 8 Décalage d’octet sur le secteur défectueux, le cas échéant
0x28 8 Nombre de cycles lorsque l’erreur s’est produite
0x30 4 Numéro de port - Inutilisé
0x34 1 Indicateurs d’erreur
0x35 3 Inutilisés
0x38 88 Structure de bloc de requête SCSI
0x90 18 Détecter la structure des données

Sections clés à décoder

Voici les sections clés à décoder.

Code d’erreur

Dans l’exemple de la section Résumé , le code d’erreur est répertorié sur la deuxième ligne. Cette ligne commence par 0008 : et inclut les 4 derniers octets de la ligne.

0008: 00 00 00 00 33 00 04 80

ErrorCode = 0x80040033

Ce code est le code de l’erreur 51. Ce code est le même pour tous les messages d’événement ID d’événement 51 :

IO_WARNING_PAGING_FAILURE

Remarque

Lorsque vous interprétez les données hexadécimales dans l’ID d’événement en code status, n’oubliez pas que les valeurs sont représentées au format little endian.

Code status final

Dans l’exemple de la section Résumé, le code status final est répertorié à 0x14 (dans la troisième ligne) qui commence par 0010 : et inclut les quatre derniers octets de cette ligne.

0010 : 2d 01 00 00 00 00 00 00

FinalStatus = 0x00000000

Il correspond à STATUS_SUCCESS et implique que la demande sera retentée.

Remarque

Lorsque vous interprétez les données hexadécimales dans l’ID d’événement en code status, n’oubliez pas que les valeurs sont représentées au format little endian.

Disque de destination

Vous pouvez utiliser ces données pour déterminer sur quel disque le problème s’est produit :

0028: 01 00 00 00 04 00 00 00

ID de chemin = 0x0000001, ID cible = 0x0000004

0030 : 03 00 00 00 2a 00 00 00

LUN = 0x0000003

Il peut être plus facile d’identifier le volume à l’aide du lien symbolique répertorié sur le lecteur dans la description de l’ID d’événement. Par exemple : \Device\Harddisk3\DR3.

Remarque

Les informations sur le disque de destination sont la façon dont elles apparaissent sur le système d’exploitation. La virtualisation du stockage et les logiciels d’E/S multivoie peuvent masquer ce qui est présenté au système d’exploitation. Ces informations peuvent ne pas correspondre directement aux mappages physiques.

Paramètres SRB (SCSI Request Block)

Dans l’exemple de la section Résumé , ScsiStatus est 0x02 (premier octet à la ligne 0038) et SrbStatus est 0x84 (deuxième octet à la ligne 0038). Il fournit les informations suivantes :

0038: 02 84 00 00 00 29 06 00

ScsiStatus de 0x02 :
SCSISTAT_CHECK_CONDITION

Codes status SCSI : (à partir de 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.

Masques status SRB :

0x80 = SRB_STATUS_AUTOSENSE_VALID
0x40 = SRB_STATUS_QUEUE_FROZEN

Vous devez décomposer les masques SRB status car ils sont un sous-état. Ils sont combinés avec les codes status SRB.

Dans l’exemple 0x84 précédent, 0x8_ est un masque status. Par conséquent, SRB_STATUS_AUTOSENSE_VALIDet 0x04 est le code status SRB. Cela signifie SRB_STATUS_ERROR.

Code de sens

Si le SRB status que l’autosense est valide, les codes de détection fournissent plus d’informations. Dans l’exemple de la section Résumé , le code de sens est 0x06 (septième octet à la ligne 0038) et le code de sens supplémentaire est 0x29 (sixième octet à la ligne 0038). Il fournit les informations suivantes :

0038: 02 84 00 00 00 29 06 00

La clé de sens de 0x06 :

L’octet au décalage 003e est la clé de sens. Il correspond à :

0x06 = SCSI_SENSE_UNIT_ATTENTION

Codes de détection : (à partir de 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

Code de sens supplémentaire (ASC) de 0x29 :

L’ASC se trouve dans le sixième octet de la ligne 0038 à décalage 003d et a une valeur de 29. Pour la clé de sens spécifiée, elle est mappée à :

0x29 = SCSI_ADSENSE_BUS_RESET

Codes de détection supplémentaires : (à partir de 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

Qualificateur de code de sens supplémentaire (ASCQ) de 0x00 :

AsCQ est situé dans le cinquième octet de la ligne 0038 à décalage 003C, et a une valeur de 00. Comme la valeur est 00 dans cet exemple, elle ne s’applique pas à l’ASC spécifié. Cette liste d’ASCQ pour chaque code de sens est trop volumineuse pour être inclus dans cet article. Afficher SCSI. H dans le DDK pour plus d’informations.

Remarque

Toutes les valeurs ASC et ASCQ ci-dessus 0x80 sont spécifiques au fournisseur et ne sont pas documentées dans la spécification SCSI ou le DDK Microsoft. Reportez-vous au fournisseur de matériel.

Paramètres CDB (Command Descriptor Block)

Le CDB commence à la ligne avec un décalage de 0040 :

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

Les octets au 0x40 de décalage représentent le code CDB. Les octets de offset 0x43 à 0x46 représentent le secteur de départ, et offset 0x47 à 0x49 représentent le nombre de secteurs impliqués dans l’opération.

Remarque

La section de données CDB n’est pas au format little-endian. Les octets ne doivent donc pas être retournés. Soyez prudent lorsque vous décodez cette section, car le format est différent de celui des sections précédentes.

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

Codes CDB SCSI : (à partir de 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