Compartir a través de


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

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

Síntomas

Cuando Windows escribe información en el disco físico, podría 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: {Datos de escritura retrasados perdidos} El sistema estaba intentando 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 del evento: elemento emergente de la aplicación
Descripción: Windows- Error de escritura retrasada: Windows no pudo guardar todos los datos del archivo \Device\HarddiskVolume4\Archivos de programa\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Se han perdido los datos. Este error puede deberse a un error de la conexión de red o hardware del equipo.

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 identificador de evento 50. Por ejemplo, se produce un mensaje de identificador de evento 50 registrado desde un origen MRxSmb si hay un problema de conectividad de red que implica el redirector. En este artículo se tratan los mensajes de identificador de evento 50 que hacen referencia a problemas de escritura en disco. Revise el mensaje id. de evento 50 para comprobar que hace referencia a un problema de escritura de disco y que se aplica este artículo.

En este contexto, Windows registra un mensaje de identificador de evento 50 si se produce un error genérico cuando Windows intenta escribir información desde el 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 diferida, forma parte de la función de administración de memoria de Windows. El almacenamiento en caché de reescritura mejora el rendimiento del sistema. Sin embargo, los errores en las operaciones de escritura diferida pueden provocar una pérdida de la integridad de los datos o del volumen.

Normalmente, cuando una aplicación envía una solicitud de escritura a Windows, Cache Manager 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 cache Manager 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 identificador de evento 50.

Un mensaje id. de evento 50 es similar a un identificador de evento 9 o un mensaje de identificador de evento 11. Aunque el error no es tan grave como el error indicado por el identificador de evento 9 o el identificador de evento 11, puede usar las mismas técnicas de solución de problemas para un mensaje de identificador de evento 50 que para un mensaje de identificador de evento 9 y un mensaje de identificador de evento 11. Sin embargo, recuerde que todo lo que se encuentra en la pila puede provocar escrituras de retraso perdido, como controladores de filtro y controladores de mini puerto.

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: {Datos de escritura retrasados perdidos} El sistema estaba intentando 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 id. de evento 50 (y también el identificador de evento 9, 11, 51 o mensajes similares "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 en el mensaje de identificador de evento al 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 se utiliza
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 de eventos
0x0c 4 Código de error NTSTATUS
0x10 8 No se utiliza
0x18 8 No se utiliza
0x20 8 No se utiliza
0x28 4 Código de error de estado NT

El código de error de estado NT

El código de estado final es el fragmento de información más importante de un mensaje de identificador 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 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 con "0028:" e incluye los cuatro octetos de esta línea:

0028: 11 00 00 80

Al convertir los datos hexadecimales en el mensaje id. de evento 50 al código de estado, recuerde que los valores se representan en el formato little-endian. Dado que el código de estado es el único fragmento de información que le interesa, puede ser más fácil ver los datos en formato WORDS en lugar de BYTES. Si lo hace, los bytes estarán en el formato correcto y es posible que los datos sean 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 de la siguiente manera:

() 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. Este fue el motivo por el 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 de Windows (SDK), en NTSTATUS. Archivo H .

Código de categoría de evento

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 "Datos de escritura retrasados perdidos".