Risolvere i problemi relativi al messaggio di errore ID evento 50

Questo articolo consente di risolvere i problemi relativi al messaggio di errore ID evento 50.

Sintomi

Quando Windows scrive informazioni nel disco fisico, potrebbe registrare i messaggi di evento seguenti nel log di sistema:

ID evento: 50
Tipo evento: Avviso
Origine evento: Ftdisk
Descrizione: {Lost Delayed-Write Data} Il sistema stava tentando di trasferire i dati dei file dai buffer a \Device\HarddiskVolume4. L'operazione di scrittura non è riuscita e solo alcuni dati potrebbero essere stati scritti nel file.
Dati:
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 evento: 26
Tipo evento: Informazioni
Origine evento: Popup applicazione
Descrizione: Windows - Scrittura ritardata non riuscita: Impossibile salvare tutti i dati per il file \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. I dati sono stati persi. Questo errore può essere causato da un errore dell'hardware del computer o della connessione di rete.

Provare a salvare il file altrove.

Questi messaggi di evento indicano esattamente la stessa cosa e vengono generati per gli stessi motivi. Questo articolo è incentrato sull'ID evento 50.

Nota

Il dispositivo e il percorso nella descrizione e i dati esadecimali specifici in questi messaggi variano a seconda delle circostanze esatte che hanno causato l'evento.

Ulteriori informazioni

Esistono diverse origini per un messaggio con ID evento 50. Ad esempio, si verifica un messaggio con ID evento 50 registrato da un'origine MRxSmb se si verifica un problema di connettività di rete che riguarda il reindirizzatore. Questo articolo descrive i messaggi con ID evento 50 che fanno riferimento a problemi di scrittura del disco. Esaminare il messaggio dell'ID evento 50 per verificare che si riferisca a un problema di scrittura del disco e che questo articolo si applichi.

In questo contesto, Windows registra un messaggio di ID evento 50 se si verifica un errore generico quando Windows tenta di scrivere informazioni da Gestione cache del file system (non dalla cache a livello di hardware) nel disco fisico. Questo comportamento di scrittura, noto come write-back o memorizzazione nella cache in scrittura ritardata, fa parte della funzione di gestione della memoria di Windows. La memorizzazione nella cache write-back migliora le prestazioni del sistema. Tuttavia, gli errori nelle operazioni di scrittura ritardata potrebbero causare una perdita di integrità dei dati o del volume.

In genere, quando un'applicazione invia una richiesta di scrittura a Windows, Gestione cache memorizza nella cache la richiesta di scrittura e segnala all'applicazione che la scrittura ha avuto esito positivo. In seguito, Gestione cache scrive i dati nel disco fisico e quindi cancella la cache. Se si verifica un errore durante l'operazione di scrittura, i dati vengono persi quando Gestione cache cancella la cache.

Le applicazioni o i processi che scrivono dati non critici, ad esempio i processi di registrazione, usano Gestione cache per migliorare le prestazioni complessive. Le applicazioni che scrivono dati critici, ad esempio SQL Server, non usano Gestione cache. Tali applicazioni impostano un FILE_FLAG_NO_BUFFERING flag per garantire che la transazione venga completata direttamente su disco. Le scritture direct-to-disk non generano mai messaggi con ID evento 50.

Un messaggio con ID evento 50 è simile a un ID evento 9 o a un messaggio con ID evento 11. Anche se l'errore non è grave come l'errore indicato dal messaggio id evento 9 o ID evento 11, è possibile usare le stesse tecniche di risoluzione dei problemi per un messaggio id evento 50 come per un id evento 9 e un messaggio di ID evento 11. Tuttavia, tenere presente che qualsiasi elemento incluso nello stack può causare scritture con ritardo perso, ad esempio driver di filtro e driver di miniporta.

Decodifica dell'evento di esempio

La sezione Sintomi di questo articolo fornisce l'esempio seguente di un messaggio di ID evento 50:

ID evento: 50
Tipo evento: Avviso
Origine evento: Ftdisk
Descrizione: {Lost Delayed-Write Data} Il sistema stava tentando di trasferire i dati dei file dai buffer a \Device\HarddiskVolume4. L'operazione di scrittura non è riuscita e solo alcuni dati potrebbero essere stati scritti nel file.
Dati:
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

Come identificare il disco di destinazione

È possibile identificare il disco di destinazione dell'operazione di scrittura usando il collegamento simbolico elencato per l'unità nella sezione "Descrizione" del messaggio id evento, ad esempio: \Device\HarddiskVolume4.

Come decodificare la sezione dei dati

I messaggi id evento 50 (e anche l'ID evento 9, 11, 51 o simili "DISK") includono dati binari che è possibile usare per identificare il problema. Il messaggio include la sezione dei dati seguente:

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

Quando si convertono i dati esadecimali nel messaggio dell'ID evento nel codice di stato, tenere presente che i valori sono rappresentati nel formato little-endian.

Nella tabella seguente viene descritto il valore di ogni offset di questo messaggio.

OffsetLengthValues Lunghezza Valori
0x00 2 Non usato
0x02 2 Dimensione dati dump = 0x0004
0x04 2 Numero di stringhe = 0x0002
0x06 2 Offset alle stringhe
0x08 2 Categoria evento
0x0c 4 Codice di errore NTSTATUS
0x10 8 Non usato
0x18 8 Non usato
0x20 8 Non usato
0x28 4 Codice di errore stato NT

Codice di errore stato NT

Il codice di stato finale è la parte più importante di informazioni in un messaggio di ID evento 50. Questo è il codice di errore restituito quando viene effettuata la richiesta di scrittura ed è l'origine chiave delle informazioni. Nell'esempio, il codice di stato finale è elencato in 0x28 alla sesta riga del set di dati. In inizia con "0028:" e include i quattro ottetti in questa riga:

0028: 11 00 00 80

Quando si convertono i dati esadecimali nel messaggio id evento 50 nel codice di stato, tenere presente che i valori sono rappresentati nel formato little-endian. Poiché il codice di stato è l'unica informazione a cui si è interessati, potrebbe essere più semplice visualizzare i dati in formato WORDS anziché BYTES. In questo caso, i byte saranno nel formato corretto e i dati potrebbero essere più facili da interpretare rapidamente.

Per modificare la visualizzazione dei dati, selezionare Parole nella finestra Proprietà evento . Nella visualizzazione Parole dati la sezione dei dati dell'esempio è la seguente:

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

In questo caso, il codice di stato finale viene 0x80000011. Questo codice di stato esegue il mapping a STATUS_DEVICE_BUSY e implica che il dispositivo è attualmente occupato. Questo è il motivo per cui l'operazione di scrittura non è riuscita.

Per altre informazioni sui codici di stato NT, vedere Uso dei valori NTSTATUS. L'elenco dei codici è disponibile anche in Windows Software Developers Kit (SDK), in NTSTATUS. File H .

Codice della categoria di eventi

Nell'esempio, il codice della categoria di eventi (il codice associato all'ID evento 50) è elencato nella seconda riga. Questa riga inizia con "0008:" e include gli ultimi 4 byte della riga seguente:

0008: 00 00 00 00 32 00 04 80

In questo caso, il codice di errore è 0x80040032, che corrisponde a IO_LOST_DELAYED_WRITE. Queste informazioni vengono visualizzate nella descrizione dell'evento come "Dati Delayed-Write persi".