WindowsXPのクラッシュダンプ
STOPエラー(KERNEL_STACK_INPAGE_ERROR) - enduser’s monthly reportの関連です。
今回の日記の要点を3行でまとめるなら以下のとおりです。
- WindowsXPはSTOPエラーが起きると(既定の設定では)クラッシュダンプを生成する。
- クラッシュダンプは Debugging Tools for Windows で解析できる。
- 解析結果の英語をちゃんと読むと役に立つ情報が書いてあることがある。
それでは一つずつ取り上げていきましょう。
1.WindowsXPはSTOPエラーが起きると(既定の設定では)クラッシュダンプを生成する。
クラッシュダンプは %SYSTEMROOT%\minidump フォルダ内に拡張子 dmp のファイルとして生成されます。
このダンプファイルは 2.で紹介するツールで解析します。
2.クラッシュダンプは Debugging Tools for Windows で解析できる。
Debugging Tools for Windows は、Microsoftサイトで入手できるデバッグ用ツールです。
この中の Windbg を使用してクラッシュダンプの解析を行うことができます。
導入方法は他のサイトでたくさん解説されているため省きます。
シンボルファイルのですが、インターネット常時接続の環境ですので、以下のように設定してオンラインで入手するようにしています。
SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
さて、windbgを起動し、シンボルファイル指定を済ませた環境で今回のクラッシュダンプを読み込ませたところ、以下のとおり表示されました。
Microsoft (R) Windows Debugger Version 6.12.0002.633 X86 Copyright (c) Microsoft Corporation. All rights reserved. Loading Dump File [C:\WINDOWS\Minidump\Mini121811-01.dmp] Mini Kernel Dump File: Only registers and stack trace are available Symbol search path is: SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols Executable search path is: Windows XP Kernel Version 2600 (Service Pack 3) MP (2 procs) Free x86 compatible Product: WinNt, suite: TerminalServer SingleUserTS Personal Built by: 2600.xpsp_sp3_gdr.111025-1629 Machine Name: Kernel base = 0x804d9000 PsLoadedModuleList = 0x8055f720 Debug session time: Sun Dec 18 01:39:31.571 2011 (UTC + 9:00) System Uptime: 1 days 5:36:55.131 Loading Kernel Symbols ............................................................... ................................................................ .............. Loading User Symbols Loading unloaded module list ............................... ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* Use <span class="deco" style="color:#0000FF;">!analyze -v</span> to get detailed debugging information. BugCheck 77, {1, 5d388900, 0, b2d05960} Probably caused by : memory_corruption ( nt!MmInPageKernelStack+176 ) Followup: MachineOwner ---------
ここで、ウィンドウ最下部の 0: kd> の右側の領域に !analyze -v と入力して[Enter]を押すと解析が進み、下記の表示が追加されました。
0: kd> !analyze -v ******************************************************************************* * * * Bugcheck Analysis * * * ******************************************************************************* KERNEL_STACK_INPAGE_ERROR (77) The requested page of kernel data could not be read in. Caused by bad block in paging file or disk controller error. In the case when the first arguments is 0 or 1, the stack signature in the kernel stack was not found. Again, bad hardware. An I/O status of c000009c (STATUS_DEVICE_DATA_ERROR) or C000016AL (STATUS_DISK_OPERATION_FAILED) normally indicates the data could not be read from the disk due to a bad block. Upon reboot autocheck will run and attempt to map out the bad sector. If the status is C0000185 (STATUS_IO_DEVICE_ERROR) and the paging file is on a SCSI disk device, then the cabling and termination should be checked. See the knowledge base article on SCSI termination. Arguments: Arg1: 00000001, (page was retrieved from disk) Arg2: 5d388900, value found in stack where signature should be Arg3: 00000000, 0 Arg4: b2d05960, address of signature on kernel stack Debugging Details: ------------------ ERROR_CODE: (NTSTATUS) 0x1 - STATUS_WAIT_1 BUGCHECK_STR: 0x77_1 CUSTOMER_CRASH_COUNT: 1 DEFAULT_BUCKET_ID: DRIVER_FAULT PROCESS_NAME: System LAST_CONTROL_TRANSFER: from 80514e48 to 804fbf43 STACK_TEXT: b851bd58 80514e48 00000077 00000001 5d388900 nt!KeBugCheckEx+0x1b b851bd8c 80541dd6 0000ed48 00000000 8b060d08 nt!MmInPageKernelStack+0x176 b851bda4 805422a6 8900eda8 805d1fa8 00000000 nt!KiInSwapKernelStacks+0x16 b851bdac 805d1fa8 00000000 00000000 00000000 nt!KeSwapProcessOrStack+0x7c b851bddc 8054815e 8054222a 00000000 00000000 nt!PspSystemThreadStartup+0x34 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16 STACK_COMMAND: kb FOLLOWUP_IP: nt!MmInPageKernelStack+176 80514e48 8a550b mov dl,byte ptr [ebp+0Bh] SYMBOL_STACK_INDEX: 1 SYMBOL_NAME: nt!MmInPageKernelStack+176 FOLLOWUP_NAME: MachineOwner MODULE_NAME: nt DEBUG_FLR_IMAGE_TIMESTAMP: 4ea6b0e6 IMAGE_NAME: memory_corruption FAILURE_BUCKET_ID: 0x77_1_nt!MmInPageKernelStack+176 BUCKET_ID: 0x77_1_nt!MmInPageKernelStack+176 Followup: MachineOwner ---------
原因が上記メッセージに書いてあったことにお気づきでしょうか。
次はその点に触れたいと思います。
3.解析結果の英語をちゃんと読むと役に立つ情報が書いてあることがある。
今回の解析メッセージには役に立つことが書いてありました。見るのは以下の部分です。
In the case when the first arguments is 0 or 1, the stack signature in the kernel stack was not found. Again, bad hardware. (中略) Arg1: 00000001, (page was retrieved from disk)
ものすごく乱暴に読むと、Arg1 が 0 か 1 ならハードウェアが原因と書いてあり、Arg1 は 1 であることも分かります。
そのため、今回のエラーの原因がソフトかハードかについては、「ハードウェアが悪い」と切り分けることができました。
しかし、この時点ではどのハードウェアが悪いのかの情報はありません。
ここで、起動できないハードディスクからイベントログをピックアップできれば、前回の記事のとおりイベントログを解析して「SATAケーブル交換」という解にたどり着けます。
しかし、イベントログ解析前にケーブルを交換・再接続してみるというのは、個人環境なら問題解決手段として十分考えられるアプローチです。
(もう少し慎重に行くなら故障HDDのデータ保全を最優先し、テスト用のケーブルとHDDをつないでみて起動確認を取ります)
このように、クラッシュダンプとイベントログをピックアップして解析することにより、既知の問題の場合は原因の絞り込みが可能な場合があります。
起動しないOSがあるHDDを別PCにつないで内容が認識できる場合、これは有効な問題判別手段となりえるので、一応覚えておいて損はないかと思います。
(こういう問題って、対応方法を忘れたころに起きるから本当に困ります)