이벤트 ID 50 오류 메시지 문제 해결

이 문서는 이벤트 ID 50 오류 메시지의 문제를 해결하는 데 도움이 됩니다.

증상

Windows가 실제 디스크에 정보를 쓰면 시스템 로그에 다음 이벤트 메시지를 기록할 수 있습니다.

이벤트 ID: 50
이벤트 유형: 경고
이벤트 원본: Ftdisk
설명: {Lost Delayed-Write Data} 시스템이 버퍼에서 \Device\HarddiskVolume4로 파일 데이터를 전송하려고 했습니다. 쓰기 작업이 실패했고 일부 데이터만 파일에 기록되었을 수 있습니다.
데이터:
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: 26
이벤트 유형: 정보
이벤트 원본: 애플리케이션 팝업
설명: Windows - 지연된 쓰기 실패: Windows에서 \Device\HarddiskVolume4\Program Files\Microsoft SQL Server\MSSQL$INSTANCETWO\LOG\ERRORLOG 파일에 대한 모든 데이터를 저장할 수 없습니다. 데이터가 손실되었습니다. 이 오류는 컴퓨터 하드웨어 또는 네트워크 연결 오류로 인해 발생할 수 있습니다.

이 파일을 다른 곳에 저장해 보세요.

이러한 이벤트 메시지는 정확히 동일한 것을 의미하며 동일한 이유로 생성됩니다. 이 문서에서는 이벤트 ID 50에 중점을 둡니다.

참고

설명의 디바이스 및 경로 및 이러한 메시지의 특정 16진수 데이터는 이벤트를 발생시킨 정확한 상황에 따라 달라집니다.

추가 정보

이벤트 ID 50 메시지에 대한 여러 가지 원본이 있습니다. 예를 들어 리디렉터와 관련된 네트워크 연결 문제가 있는 경우 MRxSmb 원본에서 기록된 이벤트 ID 50 메시지가 발생합니다. 이 문서에서는 디스크 쓰기 문제를 참조하는 이벤트 ID 50 메시지를 다룹니다. 이벤트 ID 50 메시지를 검토하여 디스크 쓰기 문제를 참조하고 이 문서가 적용되는지 확인합니다.

이 컨텍스트에서 Windows는 Windows가 하드웨어 수준 캐시가 아닌 파일 시스템 캐시 관리자의 정보를 실제 디스크에 쓰려고 할 때 일반 오류가 발생하는 경우 이벤트 ID 50 메시지를 기록합니다. 쓰기 저장 또는 지연된 쓰기 캐싱이라고 하는 이 쓰기 동작은 Windows의 메모리 관리 기능의 일부입니다. 쓰기 저장 캐싱은 시스템 성능을 향상시킵니다. 그러나 지연된 쓰기 작업의 실패로 인해 데이터 또는 볼륨 무결성이 손실될 수 있습니다.

일반적으로 애플리케이션이 Windows에 쓰기 요청을 보낼 때 Cache Manager는 쓰기 요청을 캐시하고 쓰기가 성공했다고 애플리케이션에 보고합니다. 나중에 Cache Manager는 데이터를 실제 디스크에 쓴 다음 캐시를 지웁니다. 쓰기 작업 중에 오류가 발생하면 캐시 관리자가 캐시를 지울 때 데이터가 손실됩니다.

로깅 프로세스와 같이 중요하지 않은 데이터를 작성하는 애플리케이션 또는 프로세스는 Cache Manager를 사용하여 전반적인 성능을 향상시킵니다. SQL Server 같은 중요한 데이터를 작성하는 애플리케이션은 캐시 관리자를 사용하지 않습니다. 이러한 애플리케이션은 트랜잭션이 FILE_FLAG_NO_BUFFERING 디스크에 직접 완료되도록 플래그를 설정합니다. 직접 디스크 쓰기는 이벤트 ID 50 메시지를 생성하지 않습니다.

이벤트 ID 50 메시지는 이벤트 ID 9 또는 이벤트 ID 11 메시지와 비슷합니다. 오류는 이벤트 ID 9 또는 이벤트 ID 11 메시지로 표시되는 오류만큼 심각하지는 않지만 이벤트 ID 9 및 이벤트 ID 11 메시지와 마찬가지로 이벤트 ID 50 메시지에 대해 동일한 문제 해결 기술을 사용할 수 있습니다. 그러나 스택에 있는 모든 항목은 필터 드라이버 및 미니 포트 드라이버와 같은 지연 쓰기 손실이 발생할 수 있습니다.

예제 이벤트 디코딩

이 문서의 증상 섹션에서는 이벤트 ID 50 메시지의 다음 예제를 제공합니다.

이벤트 ID: 50
이벤트 유형: 경고
이벤트 원본: Ftdisk
설명: {Lost Delayed-Write Data} 시스템이 버퍼에서 \Device\HarddiskVolume4로 파일 데이터를 전송하려고 했습니다. 쓰기 작업이 실패했고 일부 데이터만 파일에 기록되었을 수 있습니다.
데이터:
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 메시지의 "설명" 섹션에 있는 드라이브에 대해 나열된 기호 링크를 사용하여 쓰기 작업의 대상이었던 디스크를 식별할 수 있습니다(예: \Device\HarddiskVolume4).

데이터 섹션을 디코딩하는 방법

이벤트 ID 50 메시지(이벤트 ID 9, 11, 51 또는 이와 유사한 "DISK" 메시지)에는 문제를 식별하는 데 사용할 수 있는 이진 데이터가 포함됩니다. 메시지에는 다음 데이터 섹션이 포함됩니다.

데이터:
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 메시지의 16진수 데이터를 상태 코드로 변환할 때 값은 little-endian 형식으로 표시됩니다.

다음 표에서는 이 메시지의 각 오프셋이 나타내는 것을 설명합니다.

OffsetLengthValues 길이
0x00 2 사용되지 않음
0x02 2 덤프 데이터 크기 = 0x0004
0x04 2 문자열 수 = 0x0002
0x06 2 문자열에 대한 오프셋
0x08 2 이벤트 범주
0x0c 4 NTSTATUS 오류 코드
0x10 8 사용되지 않음
0x18 8 사용되지 않음
0x20 8 사용되지 않음
0x28 4 NT 상태 오류 코드

NT 상태 오류 코드

마지막 상태 코드는 이벤트 ID 50 메시지에서 가장 중요한 정보입니다. 쓰기 요청이 수행되면 반환되는 오류 코드이며 정보의 핵심 소스입니다. 이 예제에서 최종 상태 코드는 데이터 집합의 여섯 번째 줄에 0x28 나열됩니다. 에서 "0028:"으로 시작하고 이 줄에 4개의 옥텟을 포함합니다.

0028: 11 00 00 80

이벤트 ID 50 메시지의 16진수 데이터를 상태 코드로 변환할 때 값은 little-endian 형식으로 표시됩니다. 상태 코드는 관심 있는 유일한 정보이므로 BYTES 대신 WORDS 형식으로 데이터를 보는 것이 더 쉬울 수 있습니다. 이렇게 하면 바이트가 올바른 형식이 되며 데이터를 빠르게 해석하는 것이 더 쉬울 수 있습니다.

데이터 보기를 변경하려면 이벤트 속성 창에서 단어를 선택합니다. 데이터 단어 보기에서 예제의 데이터 섹션은 다음과 같이 읽습니다.

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

이 경우 최종 상태 코드가 0x80000011. 이 상태 코드는 에 매핑 STATUS_DEVICE_BUSY 되며 디바이스가 현재 사용 중임을 의미합니다. 쓰기 작업이 실패한 이유입니다.

NT 상태 코드에 대한 자세한 내용은 NTSTATUS 값 사용을 참조하세요. 코드 목록은 NTSTATUS의 Windows SDK(소프트웨어 개발자 키트)에서도 사용할 수 있습니다 . H 파일.

이벤트 범주 코드

이 예제에서는 이벤트 범주 코드(이벤트 ID 50과 연결된 코드)가 두 번째 줄에 나열됩니다. 이 줄은 "0008:"으로 시작하며 다음 줄의 마지막 4바이트가 포함됩니다.

0008: 00 00 00 00 32 00 04 80

이 경우 오류 코드는 에 해당하는 0x80040032.IO_LOST_DELAYED_WRITE 이 정보는 이벤트 설명에 "손실된 Delayed-Write 데이터"로 표시됩니다.