イベント 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 は物理ディスクにデータを書き込み、キャッシュをクリアします。 書き込み操作中にエラーが発生した場合、キャッシュ マネージャーがキャッシュをクリアすると、データは失われます。

ログ 記録プロセスなど、重要でないデータを書き込むアプリケーションまたはプロセスでは、キャッシュ マネージャーを使用して全体的なパフォーマンスを向上させます。 SQL Serverなどの重要なデータを書き込むアプリケーションでは、Cache Manager は使用されません。 このようなアプリケーションは、トランザクションが 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 進データを状態コードに変換する場合は、値がリトル エンディアン形式で表されていることに注意してください。

次の表は、このメッセージの各オフセットが表す内容を示しています。

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 メッセージ内の最も重要な情報です。 これは、書き込み要求が行われたときに返されるエラー コードであり、それが重要な情報ソースです。 この例では、最終的な状態コードがデータ セットの 6 行目の0x28に一覧表示されます。 では "0028:" で始まり、この行には 4 つのオクテットが含まれています。

0028: 11 00 00 80

イベント ID 50 メッセージの 16 進データを状態コードに変換する場合は、値がリトル エンディアン形式で表されていることに注意してください。 状態コードは関心のある唯一の情報であるため、BYTES ではなく WORDS 形式でデータを表示する方が簡単な場合があります。 これを行うと、バイトが正しい形式になり、データの解釈が簡単になる可能性があります。

データのビューを変更するには、[イベントのプロパティ] ウィンドウで [単語] を選択します。 [ Data 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 に関連付けられているコード) が 2 行目に一覧表示されています。 この行は "0008:" で始まり、次の行の最後の 4 バイトが含まれます。

0008: 00 00 00 00 32 00 04 80

この場合、エラー コードは に対応 IO_LOST_DELAYED_WRITE0x80040032。 この情報は、イベントの説明に "失われた Delayed-Write データ" として表示されます。