Solucionar problemas da mensagem de erro da ID do evento 50

Este artigo ajuda a solucionar problemas da mensagem de erro da ID do evento 50.

Sintomas

Quando o Windows grava informações no disco físico, ele pode registrar as seguintes mensagens de evento no log do sistema:

ID do evento: 50
Tipo de Evento: Aviso
Fonte do evento: Ftdisk
Descrição: {Lost Delayed-Write Data} O sistema estava tentando transferir dados de arquivo de buffers para \Device\HarddiskVolume4. A operação de gravação falhou e apenas alguns dos dados podem ter sido gravados no arquivo.
Dados:
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 do evento: 26
Tipo de Evento: Informações
Fonte do evento: Pop-up do aplicativo
Descrição: Windows – Falha na gravação atrasada : o Windows não pôde salvar todos os dados do arquivo \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Os dados foram perdidos. Esse erro pode ser causado por uma falha do hardware do computador ou da conexão de rede.

Tente salvar esse arquivo em outro lugar.

Essas mensagens de evento significam exatamente a mesma coisa e são geradas pelos mesmos motivos. Este artigo se concentra na ID do evento 50.

Observação

O dispositivo e o caminho na descrição e os dados hexadecimal específicos nessas mensagens variam dependendo das circunstâncias exatas que causaram o evento.

Mais informações

Há várias fontes diferentes para uma mensagem de ID do evento 50. Por exemplo, ocorrerá uma mensagem de ID 50 de evento registrada de uma origem MRxSmb se houver um problema de conectividade de rede que envolva o redirecionamento. Este artigo aborda a ID do evento 50 mensagens que se referem a problemas de gravação em disco. Examine a mensagem ID do evento 50 para verificar se ela se refere a um problema de gravação em disco e se este artigo se aplica.

Nesse contexto, o Windows registra uma mensagem de ID 50 de evento se ocorrer um erro genérico quando o Windows tentar gravar informações do Gerenciador de Cache do sistema de arquivos (não o cache no nível de hardware) para o disco físico. Esse comportamento de gravação, conhecido como cache de gravação ou gravação atrasada, faz parte da função de gerenciamento de memória do Windows. O cache de gravação melhora o desempenho do sistema. No entanto, falhas nas operações de gravação atrasadas podem causar perda de dados ou integridade de volume.

Normalmente, quando um aplicativo envia uma solicitação de gravação ao Windows, o Gerenciador de Cache armazena em cache a solicitação de gravação e relata ao aplicativo que a gravação foi bem-sucedida. Posteriormente, o Gerenciador de Cache grava os dados no disco físico e, em seguida, limpa o cache. Se ocorrer um erro durante a operação de gravação, os dados serão perdidos quando o Gerenciador de Cache limpar o cache.

Aplicativos ou processos que gravam dados não críticos, como processos de log, usam o Gerenciador de Cache para melhorar o desempenho geral. Aplicativos que gravam dados críticos, como SQL Server, não usam o Gerenciador de Cache. Esses aplicativos definem um FILE_FLAG_NO_BUFFERING sinalizador para garantir que a transação seja concluída diretamente em disco. Gravações diretas em disco nunca geram mensagens de ID do evento 50.

Uma mensagem de ID 50 de evento é semelhante a uma ID do evento 9 ou uma mensagem de ID 11 do evento. Embora o erro não seja tão grave quanto o erro indicado pela ID do evento 9 ou pela mensagem ID do evento 11, você pode usar as mesmas técnicas de solução de problemas para uma mensagem de ID 50 de evento que você faz para uma ID do evento 9 e uma mensagem de ID do evento 11. No entanto, lembre-se de que qualquer coisa que esteja na pilha pode causar gravações de atraso perdidas, como drivers de filtro e drivers de mini-porta.

Decodificação do evento de exemplo

A seção Sintomas deste artigo fornece o seguinte exemplo de uma mensagem de ID do evento 50:

ID do evento: 50
Tipo de Evento: Aviso
Fonte do evento: Ftdisk
Descrição: {Lost Delayed-Write Data} O sistema estava tentando transferir dados de arquivo de buffers para \Device\HarddiskVolume4. A operação de gravação falhou e apenas alguns dos dados podem ter sido gravados no arquivo.
Dados:
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

Como identificar o disco de destino

Você pode identificar o disco que foi o destino da operação de gravação usando o link simbólico listado para a unidade na seção "Description" da mensagem de ID do evento, por exemplo: \Device\HarddiskVolume4.

Como decodificar a seção de dados

As mensagens de ID do evento 50 (e também a ID do evento 9, 11, 51 ou mensagens "DISK" semelhantes) incluem dados binários que você pode usar para ajudar a identificar o problema. A mensagem inclui a seguinte seção de dados:

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

Observação

Quando você estiver convertendo os dados hexadecimal na mensagem de ID do evento no código status, lembre-se de que os valores são representados no formato little-endian.

A tabela a seguir descreve o que cada deslocamento dessa mensagem representa.

OffsetLengthValues Comprimento Values
0x00 2 Não Usado
0x02 2 Tamanho do despejo de dados = 0x0004
0x04 2 Número de Cadeias de Caracteres = 0x0002
0x06 2 Deslocamento para as cadeias de caracteres
0x08 2 Categoria de Evento
0x0c 4 Código de erro NTSTATUS
0x10 8 Não Usado
0x18 8 Não Usado
0x20 8 Não Usado
0x28 4 Código de erro NT Status

O código de erro NT Status

O código de status final é a informação mais importante em uma mensagem de ID 50 do evento. Este é o código de erro retornado quando a solicitação de gravação é feita e é a principal fonte de informações. No exemplo, o código de status final é listado em 0x28 na sexta linha do conjunto de dados. In começa com "0028:" e inclui os quatro octetes nesta linha:

0028: 11 00 00 80

Ao converter os dados hexadecimal na mensagem de ID do evento 50 no código status, lembre-se de que os valores são representados no formato little-endian. Como o código status é a única informação em que você está interessado, talvez seja mais fácil exibir os dados no formato WORDS em vez de BYTES. Se você fizer isso, os bytes estarão no formato correto e os dados poderão ser mais fáceis de interpretar rapidamente.

Para alterar a exibição dos dados, selecione Palavras na janela Propriedades do Evento . Na exibição Palavras de Dados , a seção de dados do exemplo lê da seguinte maneira:

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

Nesse caso, o código de status final é 0x80000011. Esse código status mapeia STATUS_DEVICE_BUSY e implica que o dispositivo está ocupado no momento. Essa foi a razão pela qual a operação de gravação falhou.

Para obter mais informações sobre códigos de status NT, consulte Usando valores NTSTATUS. A lista de códigos também está disponível no SDK (Windows Software Developers Kit), no NTSTATUS. Arquivo H .

O código de categoria de evento

No exemplo, o código de categoria de evento (o código associado à ID do evento 50) está listado na segunda linha. Essa linha começa com "0008:" e inclui os últimos 4 bytes da seguinte linha:

0008: 00 00 00 00 32 00 04 80

Nesse caso, o código de erro é 0x80040032, que corresponde a IO_LOST_DELAYED_WRITE. Essas informações aparecem na descrição do evento como "Dados de Delayed-Write Perdidos".