FreeBSD Daily Topics

2011年11月21日カーネルのクラッシュダンプを取る方法(コンソール)

tips

How to get a kernel crashdump

FreeBSD CURRENTを使っている場合や、デフォルトでは有効になっていない機能を使っている場合、さまざまなアプリケーションのカーネルモジュールを組み合わせて使っている、新しいデバイスとデバイスドライバを使っている、実験的な機能を試用している場合など、カーネルがパニックすることがあります。

カーネルがパニックした場合、パニック時のデータがあると、何が原因でパニックが発生したのか把握しやすくなります。問題の修正、または問題を回避するために、こうしたデータが重要になります。

パニック発生時にクラッシュダンプを取得するようにするには、/etc/rc.confに次のような設定を追加しておきます。コアデータがスワップ領域に書き出され、次のシステム起動時に回収されて/var/crash/ディレクトリ以下にクラッシュダンプデータやクラッシュ時の状況のサマリデータが出力されるようになります。

dumpdev="AUTO"
dumpdir="/var/crash"
crashinfo_enable="YES"

デバッグをかけることもできますし、どこで問題が起きたか把握するだけであればcore.txt.0といったテキストファイルの内容を読むだけで多くのことがわかります。このオプションはCURRENTでは最初から有効になっていると思います。RELEASEに対しては無効になっているのではないかと思いますので、使用する場合には明示的に書くようにしてください。

% ls -l /var/crash/
total 2713196
-rw-r--r--  1 root  wheel           2 Nov  9 13:42 bounds
-rw-------  1 root  wheel      141506 Aug 22 20:46 core.txt.0
-rw-------  1 root  wheel      219502 Nov  9 13:22 core.txt.1
-rw-------  1 root  wheel      221065 Nov  9 13:43 core.txt.2
-rw-------  1 root  wheel         605 Aug 22 20:46 info.0
-rw-------  1 root  wheel         445 Nov  9 13:21 info.1
-rw-------  1 root  wheel         444 Nov  9 13:42 info.2
-rw-r--r--  1 root  wheel           5 Sep 26 22:04 minfree
-rw-------  1 root  wheel   517865472 Aug 22 20:46 vmcore.0
-rw-------  1 root  wheel  1197342720 Nov  9 13:21 vmcore.1
-rw-------  1 root  wheel  1200979968 Nov  9 13:42 vmcore.2
%

たとえば次の出力であれば、VirtualBoxのvboxnetadpカーネルモジュールでパニックが発生していることがわかります(このケースではVimage関連でVBoxのモジュールがパニックを引き起こしています⁠⁠。

% less /var/crash/core.txt.2
...
#10 0xffffffff80b6baa3 in calltrap ()
    at /usr/src/sys/amd64/amd64/exception.S:228
#11 0xffffffff80924d25 in ifindex_alloc_locked (idxp=0xffffff846475092e)
    at /usr/src/sys/net/if.c:276
#12 0xffffffff80929b81 in if_alloc (type=6 '\006')
    at /usr/src/sys/net/if.c:432
#13 0xffffffff82ba1124 in vboxNetAdpOsCreate ()
   from /boot/modules/vboxnetadp.ko
#14 0xffffffff82ba172f in vboxNetAdpCreate () from /boot/modules/vboxnetadp.ko
#15 0xffffffff82ba1515 in VBoxNetAdpFreeBSDCtrlioctl ()
   from /boot/modules/vboxnetadp.ko
#16 0x0000000000000000 in ?? ()
#17 0x00000000c0207601 in ?? ()
#18 0x0000000000000000 in ?? ()
#19 0xffffff8464750a60 in ?? ()
#20 0xffffffff807872fb in devfs_ioctl_f (fp=0xffffff8464750990, 
    com=18446743542818998672, data=Variable "data" is not available.
)
...
%

メーリングリストやフォーラムに問題を報告する時にはこうしたデータを提供すると、問題の解決が早くなる可能性があります。

スワップ領域にZFSを使用している場合には注意が必要です。クラッシュダンプはZFSのスワップ領域に対応していませんので、クラッシュダンプを書き出すことができません。クラッシュダンプを取得するために通常のパーティション領域をスワップとして指定するか、dumpdev=""で書きださせたいパーティションを指定する必要があります(指定には十分注意してください⁠⁠。

おすすめ記事

記事・ニュース一覧