Rozwiązywanie problemów z komunikatem o błędzie o identyfikatorze zdarzenia 50

Ten artykuł ułatwia rozwiązywanie problemów z komunikatem o błędzie o identyfikatorze zdarzenia 50.

Symptomy

Gdy system Windows zapisuje informacje na dysku fizycznym, może rejestrować następujące komunikaty zdarzeń w dzienniku systemu:

Identyfikator zdarzenia: 50
Typ zdarzenia: ostrzeżenie
Źródło zdarzenia: Ftdisk
Opis: {Lost Delayed-Write Data} System próbował przesłać dane plików z buforów do \Device\HarddiskVolume4. Operacja zapisu nie powiodła się i tylko niektóre dane mogły zostać zapisane w pliku.
Dane:
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

Identyfikator zdarzenia: 26
Typ zdarzenia: informacje
Źródło zdarzenia: wyskakujące okienko aplikacji
Opis: Windows — opóźnione zapisywanie nie powiodło się: system Windows nie może zapisać wszystkich danych dla pliku \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG. Dane zostały utracone. Ten błąd może być spowodowany awarią sprzętu komputerowego lub połączenia sieciowego.

Spróbuj zapisać ten plik w innym miejscu.

Te komunikaty o zdarzeniach oznaczają dokładnie to samo i są generowane z tych samych powodów. Ten artykuł koncentruje się na identyfikatorze zdarzenia 50.

Uwaga

Urządzenie i ścieżka w opisie oraz określone dane szesnastkowe w tych komunikatach różnią się w zależności od dokładnych okoliczności, które spowodowały zdarzenie.

Więcej informacji

Istnieje kilka różnych źródeł komunikatu o identyfikatorze zdarzenia 50. Na przykład komunikat o identyfikatorze zdarzenia 50 zarejestrowany ze źródła MRxSmb występuje, jeśli występuje problem z łącznością sieciową, który obejmuje przekierowanie. Ten artykuł dotyczy komunikatów o identyfikatorze zdarzenia 50, które odwołują się do problemów z zapisem dysku. Przejrzyj komunikat o identyfikatorze zdarzenia 50, aby sprawdzić, czy odnosi się ono do problemu z zapisem dysku i czy ten artykuł ma zastosowanie.

W tym kontekście system Windows rejestruje komunikat o identyfikatorze zdarzenia 50, jeśli wystąpi błąd ogólny, gdy system Windows próbuje zapisać informacje z menedżera pamięci podręcznej systemu plików (a nie pamięci podręcznej na poziomie sprzętu) na dysku fizycznym. To zachowanie zapisu, znane jako zapisywanie zwrotne lub buforowanie opóźnionego zapisu, jest częścią funkcji zarządzania pamięcią systemu Windows. Buforowanie zapisu wstecznego zwiększa wydajność systemu. Jednak błędy w operacjach opóźnionego zapisu mogą powodować utratę danych lub integralności woluminu.

Zazwyczaj gdy aplikacja wysyła żądanie zapisu do systemu Windows, menedżer pamięci podręcznej buforuje żądanie zapisu i zgłasza aplikacji, że zapis zakończył się pomyślnie. Później menedżer pamięci podręcznej zapisuje dane na dysku fizycznym, a następnie czyści pamięć podręczną. Jeśli podczas operacji zapisu wystąpi błąd, dane zostaną utracone, gdy menedżer pamięci podręcznej wyczyści pamięć podręczną.

Aplikacje lub procesy, które zapisują dane inne niż krytyczne, takie jak procesy rejestrowania, używają Menedżera pamięci podręcznej w celu zwiększenia ogólnej wydajności. Aplikacje, które zapisują krytyczne dane, takie jak SQL Server, nie używają Menedżera pamięci podręcznej. Takie aplikacje ustawiają flagę FILE_FLAG_NO_BUFFERING , aby zagwarantować, że transakcja zostanie ukończona bezpośrednio na dysku. Zapisy bezpośrednie do dysku nigdy nie generują komunikatów o identyfikatorze zdarzenia 50.

Komunikat o identyfikatorze zdarzenia 50 jest podobny do zdarzenia o identyfikatorze 9 lub komunikatu o identyfikatorze zdarzenia 11. Chociaż błąd nie jest tak poważny jak błąd wskazywany przez komunikat o identyfikatorze zdarzenia 9 lub identyfikatorze zdarzenia 11, możesz użyć tych samych technik rozwiązywania problemów dla komunikatu o identyfikatorze zdarzenia 50, co w przypadku zdarzenia o identyfikatorze 9 i komunikatu o identyfikatorze zdarzenia 11. Należy jednak pamiętać, że wszystkie elementy znajdujące się w stosie mogą powodować utratę opóźnień zapisu, takich jak sterowniki filtrów i sterowniki miniportów.

Dekodowanie przykładowego zdarzenia

Sekcja Symptomy tego artykułu zawiera następujący przykład komunikatu o identyfikatorze zdarzenia 50:

Identyfikator zdarzenia: 50
Typ zdarzenia: ostrzeżenie
Źródło zdarzenia: Ftdisk
Opis: {Lost Delayed-Write Data} System próbował przesłać dane plików z buforów do \Device\HarddiskVolume4. Operacja zapisu nie powiodła się i tylko niektóre dane mogły zostać zapisane w pliku.
Dane:
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

Jak zidentyfikować dysk docelowy

Dysk, który był miejscem docelowym operacji zapisu, można zidentyfikować za pomocą linku symbolicznego wymienionego dla dysku w sekcji "Opis" komunikatu o identyfikatorze zdarzenia, na przykład: \Device\HarddiskVolume4.

Jak dekodować sekcję danych

Komunikaty o identyfikatorze zdarzenia 50 (a także identyfikator zdarzenia 9, 11, 51 lub podobne komunikaty "DYSK") zawierają dane binarne, których można użyć do zidentyfikowania problemu. Komunikat zawiera następującą sekcję danych:

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

Uwaga

Podczas konwertowania danych szesnastkowych w komunikacie o identyfikatorze zdarzenia na kod stanu należy pamiętać, że wartości są reprezentowane w formacie mało endiańskim.

W poniższej tabeli opisano, co reprezentuje każde przesunięcie tego komunikatu.

OffsetLengthValues Długość Wartości
0x00 2 Nieużywane
0x02 2 Rozmiar danych zrzutu = 0x0004
0x04 2 Liczba ciągów = 0x0002
0x06 2 Przesunięcie do ciągów
0x08 2 Kategoria zdarzenia
0x0c 4 Kod błędu NTSTATUS
0x10 8 Nieużywane
0x18 8 Nieużywane
0x20 8 Nieużywane
0x28 4 Kod błędu stanu NT

Kod błędu stanu NT

Ostateczny kod stanu jest najważniejszą informacją w komunikacie o identyfikatorze zdarzenia 50. Jest to kod błędu, który jest zwracany podczas żądania zapisu i jest kluczowym źródłem informacji. W tym przykładzie kod stanu końcowego jest wyświetlany na 0x28 w szóstym wierszu zestawu danych. Rozpoczyna się od "0028:" i zawiera cztery oktety w tym wierszu:

0028: 11 00 00 80

Podczas konwertowania danych szesnastkowych w komunikacie o identyfikatorze zdarzenia 50 na kod stanu należy pamiętać, że wartości są reprezentowane w formacie mało endiańskim. Ponieważ kod stanu jest jedynym elementem informacji, który Cię interesuje, może być łatwiej wyświetlić dane w formacie WORDS zamiast BAJTów. Jeśli to zrobisz, bajty będą w prawidłowym formacie, a dane mogą być łatwiejsze do szybkiej interpretacji.

Aby zmienić widok danych, wybierz pozycję Słowa w oknie Właściwości zdarzenia . W widoku Wyrazy danych sekcja danych przykładu jest następująca:

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

W tym przypadku kod stanu końcowego jest 0x80000011. Ten kod stanu jest mapowany na STATUS_DEVICE_BUSY i oznacza, że urządzenie jest obecnie zajęte. Z tego powodu operacja zapisu nie powiodła się.

Aby uzyskać więcej informacji na temat kodów stanu NT, zobacz Using NTSTATUS Values (Używanie wartości NTSTATUS). Lista kodów jest również dostępna w zestawie Windows Software Developers Kit (SDK) w systemie NTSTATUS. Plik H .

Kod kategorii zdarzeń

W tym przykładzie kod kategorii zdarzeń (kod skojarzony z identyfikatorem zdarzenia 50) jest wyświetlany w drugim wierszu. Ten wiersz rozpoczyna się od "0008:" i zawiera ostatnie 4 bajty z następującego wiersza:

0008: 00 00 00 00 32 00 04 80

W tym przypadku kod błędu jest 0x80040032, co odpowiada .IO_LOST_DELAYED_WRITE Te informacje są wyświetlane w opisie zdarzenia jako "Utracone dane Delayed-Write".