Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article permet de résoudre les problèmes liés au message d’erreur ID d’événement 50.
Symptômes
Lorsque Windows écrit des informations sur le disque physique, il peut consigner les messages d’événement suivants dans le journal système :
ID d’événement : 50
Type d'événement : Avertissement
Source d’événement : Ftdisk
Description : {Perdu les données différées d’écriture} 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 d’é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 du 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 votre matériel informatique ou de votre connexion réseau.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.
Note
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 ID d’événement 50. Par exemple, un message d’ID d’événement 50 enregistré à partir d’une source MRxSmb se produit s’il existe un problème de connectivité réseau qui implique le redirecteur. Cet article traite des messages ID d’événement 50 qui font référence aux problèmes d’écriture de disque. Passez en revue le message ID d’événement 50 pour vérifier qu’il fait référence à un problème d’écriture de 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 d’é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 différée améliore les performances du système. Toutefois, les défaillances 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, le Gestionnaire de cache é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.
Applications ou processus qui écrivent des données non critiques, telles que des 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 le Gestionnaire de cache. 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 d’ID d’événement 50 messages.
Un message ID d’événement 50 est similaire à un ID d’événement 9 ou à un message ID d’événement 11. Bien que l’erreur ne soit pas aussi grave que l’erreur indiquée par l’ID d’événement 9 ou l’ID d’événement 11, vous pouvez utiliser les mêmes techniques de résolution des problèmes pour un message ID d’événement 50 que pour un ID d’événement 9 et un message ID d’événement 11. Toutefois, n’oubliez pas que tout ce qui se trouve dans la pile peut entraîner des écritures perdues, telles que les pilotes de filtre et les pilotes mini-port.
Décodage de l’exemple d’événement
La section Symptômes de cet article fournit l’exemple suivant d’un message ID d’événement 50 :
ID d’événement : 50
Type d'événement : Avertissement
Source d’événement : Ftdisk
Description : {Perdu les données différées d’écriture} 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.
Comment décoder la section données
Les messages ID d’événement 50 (et également l’ID d’événement 9, 11, 51 ou les messages « 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
Note
Lorsque vous convertissez les données hexadécimales dans le message d’ID d’événement en code d’état, 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 | Valeurs |
---|---|---|
0x00 | 2 | Non utilisé |
0x02 | 2 | Taille des données de vidage = 0x0004 |
0x04 | 2 | Nombre de chaînes = 0x0002 |
0x06 | 2 | Décalage vers les chaînes |
0x08 | 2 | Catégorie d'é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 d’état NT
Le code d’état final est l’élément d’information le plus important d’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 source clé d’informations. Dans l’exemple, le code d’état final est répertorié à 0x28 à la sixième ligne du jeu de données. Commence par « 0028 : » et inclut les quatre octets de cette ligne :
0028: 11 00 00 80
Lorsque vous convertissez les données hexadécimales dans le message ID d’événement 50 en code d’état, n’oubliez pas que les valeurs sont représentées au format little-endian. Étant donné que le code d’état est le seul élément d’informations qui vous intéresse, il peut être plus facile d’afficher les données au format WORDS au lieu d’octets. Si vous effectuez cette opération, les octets sont au format correct et les données peuvent être plus faciles à interpréter rapidement.
Pour modifier votre vue 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 lit comme suit :
() Bytes (.)
Words 0000: 00040000 00560002 00000000 80040032 0010: 00000000 00000000 00000000 00000000 0020: 00000000 00000000 80000011
Dans ce cas, le code d’état final est 0x80000011. Ce code d’état est mappé et STATUS_DEVICE_BUSY
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 d’état 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 (le code associé à l’ID d’événement 50) est répertorié dans 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 s’affichent dans la description de l’événement en tant que « Données perdues en écriture différée ».