Solución de problemas del mensaje de error del identificador de evento 50

Este artículo ayuda a solucionar el mensaje de error del identificador de evento 50.

Síntomas

Cuando Windows escribe información en el disco físico, puede registrar los siguientes mensajes de evento en el registro del sistema:

Identificador de evento: 50
Tipo de evento: Advertencia
Origen del evento: Ftdisk
Descripción: {Lost Delayed-Write Data} El sistema intentaba transferir datos de archivos de búferes a \Device\HarddiskVolume4. Error en la operación de escritura y solo algunos de los datos se pueden haber escrito en el archivo.
Datos:
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

Identificador de evento: 26
Tipo de evento: Información
Origen de eventos: elemento emergente de la aplicación
Descripción: Windows - Error de escritura diferida: Windows no pudo guardar todos los datos del archivo \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Los datos se han perdido. Este error puede deberse a un error del hardware del equipo o de la conexión de red.

Intente guardar este archivo en otro lugar.

Estos mensajes de evento significan exactamente lo mismo y se generan por las mismas razones. Este artículo se centra en el identificador de evento 50.

Nota:

El dispositivo y la ruta de acceso de la descripción y los datos hexadecimales específicos de estos mensajes varían en función de las circunstancias exactas que provocaron el evento.

Más información

Hay varios orígenes diferentes para un mensaje de id. de evento 50. Por ejemplo, se produce un mensaje de id. de evento 50 que se registra desde un origen de MRxSmb si hay un problema de conectividad de red que implica al redireccionamiento. En este artículo se abordan los mensajes del identificador de evento 50 que hacen referencia a problemas de escritura en disco. Revise el mensaje del identificador de evento 50 para comprobar que hace referencia a un problema de escritura en disco y que se aplica este artículo.

En este contexto, Windows registra un mensaje de id. de evento 50 si se produce un error genérico cuando Windows intenta escribir información del administrador de caché del sistema de archivos (no la caché de nivel de hardware) en el disco físico. Este comportamiento de escritura, conocido como almacenamiento en caché de escritura diferida o de escritura diferida, forma parte de la función de administración de memoria de Windows. El almacenamiento en caché de escritura diferida mejora el rendimiento del sistema. Sin embargo, los errores en las operaciones de escritura diferida pueden provocar una pérdida de datos o integridad del volumen.

Normalmente, cuando una aplicación envía una solicitud de escritura a Windows, el Administrador de caché almacena en caché la solicitud de escritura e informa a la aplicación de que la escritura se realizó correctamente. Más adelante, Cache Manager escribe los datos en el disco físico y, a continuación, borra la memoria caché. Si se produce un error durante la operación de escritura, los datos se pierden cuando el Administrador de caché borra la memoria caché.

Las aplicaciones o procesos que escriben datos no críticos, como los procesos de registro, usan Cache Manager para mejorar el rendimiento general. Las aplicaciones que escriben datos críticos, como SQL Server, no usan el Administrador de caché. Estas aplicaciones establecen una FILE_FLAG_NO_BUFFERING marca para garantizar que la transacción se completa directamente en el disco. Las escrituras directas en disco nunca generan mensajes de id. de evento 50.

Un mensaje de id. de evento 50 es similar a un identificador de evento 9 o un mensaje de id. de evento 11. Aunque el error no es tan grave como el que indica el identificador de evento 9 o el mensaje del identificador de evento 11, puede usar las mismas técnicas de solución de problemas para un mensaje de id. de evento 50 que para un identificador de evento 9 y un mensaje de identificador de evento 11. Sin embargo, recuerde que cualquier cosa que esté en la pila puede provocar escrituras con retraso perdido, como controladores de filtro y controladores de minipuertos.

Descodificación del evento de ejemplo

En la sección Síntomas de este artículo se proporciona el ejemplo siguiente de un mensaje de identificador de evento 50:

Identificador de evento: 50
Tipo de evento: Advertencia
Origen del evento: Ftdisk
Descripción: {Lost Delayed-Write Data} El sistema intentaba transferir datos de archivos de búferes a \Device\HarddiskVolume4. Error en la operación de escritura y solo algunos de los datos se pueden haber escrito en el archivo.
Datos:
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

Identificación del disco de destino

Puede identificar el disco que era el destino de la operación de escritura mediante el vínculo simbólico que aparece para la unidad en la sección "Descripción" del mensaje de identificador de evento, por ejemplo: \Device\HarddiskVolume4.

Cómo descodificar la sección de datos

Los mensajes de id. de evento 50 (y también los mensajes de id. de evento 9, 11, 51 o similares de "DISK") incluyen datos binarios que puede usar para ayudar a identificar el problema. El mensaje incluye la siguiente sección de datos:

Datos:
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

Nota:

Al convertir los datos hexadecimales del mensaje de identificador de evento en el código de estado, recuerde que los valores se representan en el formato little-endian.

En la tabla siguiente se describe lo que representa cada desplazamiento de este mensaje.

OffsetLengthValues Length Valores
0x00 2 No usado
0x02 2 Tamaño de datos de volcado = 0x0004
0x04 2 Número de cadenas = 0x0002
0x06 2 Desplazamiento a las cadenas
0x08 2 Categoría del evento
0x0c 4 Código de error NTSTATUS
0x10 8 No usado
0x18 8 No usado
0x20 8 No usado
0x28 4 Código de error de estado nt

Código de error de estado de NT

El código de estado final es la información más importante de un mensaje de id. de evento 50. Este es el código de error que se devuelve cuando se realiza la solicitud de escritura y es el origen clave de la información. En el ejemplo, el código de estado final se muestra en 0x28 en la sexta línea del conjunto de datos. En comienza por "0028:" e incluye los cuatro octetos de esta línea:

0028: 11 00 00 80

Al convertir los datos hexadecimales del mensaje del identificador de evento 50 en el código de estado, recuerde que los valores se representan en el formato little-endian. Dado que el código de estado es la única información que le interesa, es posible que sea más fácil ver los datos en formato WORDS en lugar de BYTES. Si lo hace, los bytes tendrán el formato correcto y los datos podrían ser más fáciles de interpretar rápidamente.

Para cambiar la vista de los datos, seleccione Palabras en la ventana Propiedades del evento . En la vista Palabras de datos, la sección de datos del ejemplo lee lo siguiente:

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

En este caso, se 0x80000011 el código de estado final. Este código de estado se asigna a STATUS_DEVICE_BUSY e implica que el dispositivo está ocupado actualmente. Esta fue la razón por la que se produjo un error en la operación de escritura.

Para obtener más información sobre los códigos de estado nt, vea Uso de valores NTSTATUS. La lista de códigos también está disponible en el Kit para desarrolladores de software (SDK) de Windows, en NTSTATUS. Archivo H .

El código de la categoría de eventos

En el ejemplo, el código de categoría de evento (el código asociado al identificador de evento 50) aparece en la segunda línea. Esta línea comienza con "0008:" e incluye los últimos 4 bytes de la línea siguiente:

0008: 00 00 00 00 32 00 04 80

En este caso, el código de error es 0x80040032, que corresponde a IO_LOST_DELAYED_WRITE. Esta información aparece en la descripción del evento como "Lost Delayed-Write Data".