彷徨えるフジワラ

年がら年中さまよってます

"zpool status" の core dump 問題

折角新規ゾーンを作成したので、非 global ゾーン側での "zpool status" 実行で core dump してしまう件に関して確認してみる。

…………うーむ、何の問題も無く動くなぁ > "zpool status"@非 global ゾーン

assert 行番号から見て zpool_main.c は 2009.06 == onnv_111b 時点のものと思われるので、最新版までの間の ZPOOL_STATUS enum の増減に関する変更を更新履歴から調べてみると:

	ZPOOL_STATUS_REMOVED_DEV,	/* removed device */

という値の追加で ZPOOL_STATUS_OK 値をずらしてしまっている 3e86bccfd4da チェンジセットが怪しい感じ。
変更自体は libzfs.so 共有ライブラリと zpool コマンドの両方に同時適用されているけど、パッケージングの際にコマンド側の同梱が漏れたんじゃないかなぁ。

こういう時こそ ident 情報の出番だな。what コマンド(SCCS)で何か出てくるかな?

$ what `which zpool` /usr/lib/libzfs.so
/usr/sbin/zpool:
        SunOS 5.11 snv_111a November 2008
/usr/lib/libzfs.so:
        SunOS 5.11 snv_111a November 2008

OpenSolaris 2009.06(snv_111b) 向けのものにしては少々古い気がしないでもないけど、zpool コマンドに関しては .comment セクションの内容をダンプして見た結果と一致しているから、多分 pragma ident で埋め込まれた情報と合っている筈。

という報告をしたところ、元投稿主の瀧さんから IRC 上で「what の出力は合っていた」との報告が………… orz

うーん、そうなると私のスキルの範囲ではお手上げだなぁ。

後は dbx で zpool_get_status() の戻り値を確認するぐらいだけど、多分「想定している ZPOOL_STATUS_OK の値とは違う値が返って来た」というのがわかるだけで、何が悪いのかは不明のままな気が。ちなみに、2009.06 でちゃんと動く環境だと、ZPOOL_STATUS_OK は 0x13。