この記事は、イベント ID 50 エラー メッセージのトラブルシューティングに役立ちます。
現象
Windows が物理ディスクに情報を書き込むと、システム ログに次のイベント メッセージが記録されることがあります。
イベント ID: 50
イベントの種類: 警告
イベント ソース: Ftdisk
説明: {遅延書き込みデータが失われました} システムがバッファーから \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 について説明します。
Note
説明のデバイスとパス、およびこれらのメッセージ内の特定の 16 進データは、イベントの原因となった正確な状況によって異なります。
詳細
イベント ID 50 メッセージにはいくつかの異なるソースがあります。 たとえば、MRxSmb ソースからログに記録されたイベント ID 50 メッセージは、リダイレクターに関連するネットワーク接続の問題がある場合に発生します。 この記事では、ディスク書き込みの問題を参照するイベント ID 50 メッセージについて説明します。 イベント ID 50 メッセージを確認して、ディスク書き込みの問題を参照していることと、この記事が適用されることを確認します。
このコンテキストでは、Windows が (ハードウェア レベルのキャッシュではなく) ファイル システムのキャッシュ マネージャーから物理ディスクに情報を書き込もうとしたときに一般的なエラーが発生した場合、Windows はイベント ID 50 メッセージをログに記録します。 この書き込み動作は、書き戻しキャッシュまたは遅延書き込みキャッシュと呼ばれ、Windows のメモリ管理機能の一部です。 ライトバック キャッシュを使用すると、システムのパフォーマンスが向上します。 ただし、遅延書き込み操作でエラーが発生すると、データまたはボリュームの整合性が失われる可能性があります。
通常、アプリケーションが Windows に書き込み要求を送信すると、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 メッセージに使用できます。 ただし、スタック内にあるものは、フィルター ドライバーやミニ ポート ドライバーなど、遅延損失の書き込みを引き起こす可能性があることを覚えておいてください。
サンプル イベントのデコード
この記事の「 Symptoms 」セクションでは、イベント ID 50 メッセージの次の例を示します。
イベント ID: 50
イベントの種類: 警告
イベント ソース: Ftdisk
説明: {遅延書き込みデータが失われました} システムがバッファーから \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
Note
イベント 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 形式でデータを表示する方が簡単な場合があります。 これを行うと、バイトは正しい形式になり、データはすばやく解釈しやすくなります。
データのビューを変更するには、Event のプロパティウィンドウで 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 値の使用を参照してください。 コードの一覧は、Windows ソフトウェア 開発者キット (SDK) の NTSTATUS でも入手できます。H ファイル。
イベント カテゴリ コード
この例では、イベント カテゴリ コード (イベント ID 50 に関連付けられているコード) が 2 行目に一覧表示されています。 この行は "0008:" で始まり、次の行の最後の 4 バイトが含まれます。
0008: 00 00 00 00 32 00 04 80
この場合、エラー コードは0x80040032され、 IO_LOST_DELAYED_WRITE
に対応します。 この情報は、イベントの説明に "Lost Delayed-Write Data" と表示されます。