Ubuntu Weekly Recipe

第674回 カーネルのクラッシュ情報を解析する

この記事を読むのに必要な時間:およそ 9.5 分

クラッシュダンプの保存先をネットワーク上に変更する

前回はクラッシュダンプをローカルのファイルシステムに保存していました。しかしながらリモートで解析する予定がある,もしくは,ローカルには十分なサイズのストレージが存在しないのなら,クラッシュダンプを直接リモートに保存したいところです。Ubuntuのクラッシュダンプの設定は/etc/default/kdump-toolsにまとまっています。ここを変更すれば,SSH接続先のマシンやNFS上にクラッシュダンプを保存することが可能です。

設定方法自体は上記ファイルにコメントが記載されているため,そこまで迷うことはないでしょう。ここでは例として,SSH接続で保存する方法を紹介します。まず/etc/default/kdump-toolsの末尾のほうを次のように変更します。

# SSH - username and hostname of the remote server that will receive the dump
#       and dmesg files.
# SSH_KEY - Full path of the ssh private key to be used to login to the remote
#           server. use kdump-config propagate to send the public key to the
#           remote server
#SSH="<user at server>"
#SSH_KEY="<path>"
SSH="shibata@192.168.0.59"

最低限必要な設定は,SSH「ユーザー名@アドレス」を記載するだけです。上記はIPv4アドレスですが,もちろんホスト名等も可能です。SSH_KEYにはSSH接続する際の秘密鍵を指定します。何も指定しない場合は,/root/.ssh/kdump_id_rsaを自動生成してくれます。

設定ファイルの準備ができたら,一度SSHサーバー先にアクセスして公開鍵を登録します。これはkdump-config propagateコマンドで実現できます。

$ sudo kdump-config propagate
Need to generate a new ssh key...
The authenticity of host '192.168.0.59 (192.168.0.59)' can't be established.
ECDSA key fingerprint is SHA256:2GCRtJY7/m5ZAk/m1LB1EYO88iUPHF1NJ3+QpgVURmw.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
shibata@192.168.0.59's password:
propagated ssh key /root/.ssh/kdump_id_rsa to server shibata@192.168.0.59

これだけで準備完了です。あとはシステムをクラッシュさせてみましょう。クラッシュしたマシンの/var/crashではなく,接続先として設定したSSHサーバー上の/var/crash/以下に「⁠⁠クラッシュしたマシンのIPアドレス⁠⁠-⁠クラッシュ日時⁠⁠」なディレクトリが生成され,そこにクラッシュダンプが保存されているはずです。

前述のソースパッケージのダウンロード先に保存するようにしておけば,ターゲットマシンのストレージを消費することなく,詳細なデバッグが可能になります。

Ubuntu WikiのCrashdumpRecipeにはクラッシュダンプの解析に関する,いくつかのノウハウが掲載されています。カーネル関連の問題について,ケースごとの参考文献のリストもあるのでそちらも参考になるでしょう。単に不具合の出所を探りたいならカーネルのバージョンを切り替えつつ問題を絞り込む方法もあります。

カーネルのクラッシュは致命的な問題につながることが多々あります。カーネルクラッシュに遭遇したら,将来の自分のためにも,恐れず原因を追求するよう心がけましょう。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。