Résoudre les problèmes liés au message d’erreur 50 de l’ID d’événement

Cet article vous aide à résoudre le message d’erreur ID d’événement 50.

Symptômes

Lorsque Windows écrit des informations sur le disque physique, il peut enregistrer les messages d’événements suivants dans le journal système :

ID d’événement : 50
Type d'événement : Avertissement
Source de l’événement : Ftdisk
Description : {Lost Delayed-Write Data} Le système tentait de transférer des données de fichier à partir de mémoires tampons vers \Device\HarddiskVolume4. L’opération d’écriture a échoué et seules certaines données ont peut-être été écrites dans le fichier.
Données:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

ID d’événement : 26
Type d'événement : Informations
Source de l’événement : Fenêtre contextuelle de l’application
Description : Windows - Échec de l’écriture différée : Windows n’a pas pu enregistrer toutes les données pour le fichier \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Les données ont été perdues. Cette erreur peut être due à une défaillance de la connexion matérielle ou réseau de votre ordinateur.

Essayez d’enregistrer ce fichier ailleurs.

Ces messages d’événement signifient exactement la même chose et sont générés pour les mêmes raisons. Cet article se concentre sur l’ID d’événement 50.

Remarque

L’appareil et le chemin d’accès dans la description et les données hexadécimales spécifiques dans ces messages varient en fonction des circonstances exactes qui ont provoqué l’événement.

Plus d’informations

Il existe plusieurs sources différentes pour un message d’ID d’événement 50. Par exemple, un message d’ID d’événement 50 enregistré à partir d’une source MRxSmb se produit en cas de problème de connectivité réseau impliquant le redirecteur. Cet article traite des messages d’ID d’événement 50 qui font référence à des problèmes d’écriture sur disque. Passez en revue le message d’ID d’événement 50 pour vérifier qu’il fait référence à un problème d’écriture sur disque et que cet article s’applique.

Dans ce contexte, Windows enregistre un message d’ID d’événement 50 si une erreur générique se produit lorsque Windows tente d’écrire des informations à partir du Gestionnaire de cache du système de fichiers (et non du cache au niveau du matériel) sur le disque physique. Ce comportement d’écriture, appelé mise en cache de l’écriture différée ou différée, fait partie de la fonction de gestion de la mémoire de Windows. La mise en cache en écriture différée améliore les performances du système. Toutefois, des échecs dans les opérations d’écriture différée peuvent entraîner une perte d’intégrité des données ou du volume.

En règle générale, lorsqu’une application envoie une demande d’écriture à Windows, Cache Manager met en cache la demande d’écriture et signale à l’application que l’écriture a réussi. Plus tard, Cache Manager écrit les données sur le disque physique, puis efface le cache. Si une erreur se produit pendant l’opération d’écriture, les données sont perdues lorsque cache Manager efface le cache.

Les applications ou les processus qui écrivent des données non critiques, comme les processus de journalisation, utilisent Cache Manager pour améliorer les performances globales. Les applications qui écrivent des données critiques, telles que SQL Server, n’utilisent pas Cache Manager. Ces applications définissent un FILE_FLAG_NO_BUFFERING indicateur pour garantir que la transaction est effectuée directement sur le disque. Les écritures directes sur disque ne génèrent jamais de messages d’ID d’événement 50.

Un message d’ID d’événement 50 est similaire à un message d’ID d’événement 9 ou d’ID d’événement 11. Bien que l’erreur ne soit pas aussi grave que l’erreur indiquée par le message ID d’événement 9 ou ID d’événement 11, vous pouvez utiliser les mêmes techniques de résolution des problèmes pour un message d’ID d’événement 50 que pour un id d’événement 9 et un message d’ID d’événement 11. Toutefois, n’oubliez pas que tout ce qui se trouve dans la pile peut entraîner une perte d’écritures différées, comme les pilotes de filtre et les pilotes de mini-port.

Décodage de l’exemple d’événement

La section Symptômes de cet article fournit l’exemple suivant de message d’ID d’événement 50 :

ID d’événement : 50
Type d'événement : Avertissement
Source de l’événement : Ftdisk
Description : {Lost Delayed-Write Data} Le système tentait de transférer des données de fichier à partir de mémoires tampons vers \Device\HarddiskVolume4. L’opération d’écriture a échoué et seules certaines données ont peut-être été écrites dans le fichier.
Données:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

Comment identifier le disque cible

Vous pouvez identifier le disque qui était la cible de l’opération d’écriture à l’aide du lien symbolique répertorié pour le lecteur dans la section « Description » du message d’ID d’événement, par exemple : \Device\HarddiskVolume4.

Guide pratique pour décoder la section données

Les messages d’ID d’événement 50 (ainsi que les messages d’ID d’événement 9, 11, 51 ou « DISK » similaires) incluent des données binaires que vous pouvez utiliser pour identifier le problème. Le message inclut la section de données suivante :

Données:
0000: 00 00 04 00 02 00 56 00
0008: 00 00 00 00 32 00 04 80
0010: 00 00 00 00 00 00 00 00
0018: 00 00 00 00 00 00 00 00
0020: 00 00 00 00 00 00 00 00
0028: 11 00 00 80

Remarque

Lorsque vous convertissez les données hexadécimales du message d’ID d’événement en code status, n’oubliez pas que les valeurs sont représentées au format little-endian.

Le tableau suivant décrit ce que représente chaque décalage de ce message.

OffsetLengthValues Longueur Values
0x00 2 Non utilisé
0x02 2 Taille des données de vidage = 0x0004
0x04 2 Nombre de chaînes = 0x0002
0x06 2 Décalage sur les chaînes
0x08 2 Catégorie de l'événement
0x0c 4 Code d’erreur NTSTATUS
0x10 8 Non utilisé
0x18 8 Non utilisé
0x20 8 Non utilisé
0x28 4 Code d’erreur d’état NT

Code d’erreur de l’état NT

Le code status final est l’élément d’information le plus important dans un message d’ID d’événement 50. Il s’agit du code d’erreur retourné lorsque la demande d’écriture est effectuée, et il s’agit de la principale source d’informations. Dans l’exemple, le code status final est répertorié à 0x28 à la sixième ligne du jeu de données. Dans commence par « 0028 : » et inclut les quatre octets de cette ligne :

0028: 11 00 00 80

Lorsque vous convertissez les données hexadécimales du message d’ID d’événement 50 en code status, n’oubliez pas que les valeurs sont représentées au format little-endian. Étant donné que le code status est la seule information qui vous intéresse, il peut être plus facile d’afficher les données au format WORDS plutôt qu’au format BYTES. Si vous procédez ainsi, les octets seront au format correct et les données seront peut-être plus faciles à interpréter rapidement.

Pour modifier l’affichage des données, sélectionnez Mots dans la fenêtre Propriétés de l’événement . Dans la vue Mots de données , la section données de l’exemple se lit comme suit :

() Bytes (.) 
Words 0000: 00040000 00560002 00000000 80040032 0010: 00000000 00000000 00000000 00000000 0020: 00000000 00000000 80000011

Dans ce cas, le code status final est 0x80000011. Ce code status correspond à STATUS_DEVICE_BUSY et implique que l’appareil est actuellement occupé. C’est la raison pour laquelle l’opération d’écriture a échoué.

Pour plus d’informations sur les codes de status NT, consultez Utilisation des valeurs NTSTATUS. La liste des codes est également disponible dans le Kit de développement logiciel (SDK) Windows, dans NTSTATUS. Fichier H .

Code de catégorie d’événement

Dans l’exemple, le code de catégorie d’événement (code associé à l’ID d’événement 50) est répertorié sur la deuxième ligne. Cette ligne commence par « 0008 : » et inclut les 4 derniers octets de la ligne suivante :

0008: 00 00 00 00 32 00 04 80

Dans ce cas, le code d’erreur est 0x80040032, ce qui correspond à IO_LOST_DELAYED_WRITE. Ces informations apparaissent dans la description de l’événement sous la forme « Données Delayed-Write perdues ».