Help us understand the problem. What is going on with this article?

CentOS7.0でカーネルパニックを発生させてみる

More than 3 years have passed since last update.

既に色々記事がありますが、実際に手を動かしてやってみたのでメモ。

参考

環境

  • CentOS Linux release 7.0.1406 (Core)
  • VirtualBox 5.0.4
  • Vagrant

そもそもカーネルパニックとは

カーネルパニック

カーネルパニックとは、オペレーティングシステム(OS)のカーネル部分において、何らかの理由で致命的なエラーが発生し、安全に復旧することができなくなった状態のことである。
カーネルパニックが発生すると、OSは完全に停止してしまい、強制終了を行って再起動する以外に対応方法がなくなる。
カーネルパニックは主にUNIX系OSにおいて用いられる表現であるが、UNIXから派生したLinux系OSやMac OS Xにおいても、同上の状況をカーネルパニックと呼ぶことがある。Windows系OSでは、同様の状況はブルースクリーンと呼ばれることが多い。

Linuxで実際にカーネルパニックが発生したことを見たことはないのですが、Windowsのブルースクリーンだと見たことがあります。

OSは完全に停止し、強制終了を行って再起動する以外の方法がなくなると。では以下より実際に色々触ってみたいと思います。

カーネルパニックを発生させる

以下でカーネルパニックを発生させることができます

$sudo sh -c "echo c > /proc/sysrq-trigger"

上記をsshログインしているVM上で実行すると、 恐らくOSが停止してしまい、Ctrl+Cなどを実行して反応がなくターミナルを削除せざるをえなくなりました。
なお、上記の状態でVirtualBoxを見ると仮想マシンの状態はrunningとなったままです。ただし、再度ターミナルからsshによるリモートログインを試みてもエラーとなってしまいます。

再起動によって事象改善が見込める場合もあるということでOSの再起動をします。

$vagrant reload

再起動完了後は無事sshログインができるようになりました。

カーネルパニック発生時に再起動するようにする

デフォルトの状態ではカーネルパニック発生時に何も起きず、利用者側で明示的に再起動を行う必要があります。
上記についてカーネルパラメーター(kernel.panic)を設定することでカーネルパニック発生時に自動的に設定した秒数後に再起動する事が出来るとのことなのでやってみます。

まずは、現在の設定を確認します。

# ファイルでkernelパラメーターを確認
$cat /proc/sys/kernel/panic
0

# sysctlコマンドでkernelパラメーターを確認
$sysctl kernel.panic
kernel.panic = 0

上記の値を0より大きい値で設定すると設定した秒数後に再起動します。

一時的に設定する

以下のコマンドで一時的にカーネルパニック時の再起動を設定できます。一時的とは今起動しているOSが再起動するまでで、再起動した場合には設定が無効化されています。

# 設定
$echo 5 > /proc/sys/kernel/panic

# 確認
$cat /proc/sys/kernel/panic
5
$sysctl kernel.panic
kernel.panic = 5

設定ができてそうなので、同じ方法でカーネルパニックを発生させてみます。
今度はsshで確立していた通信のコネクションが切断され、VirtualBoxの画面を見ているとどうやら再起動していることも分かりました。

少し時間を待ってからsshログインを試みると無事ログインができました、

また、/var/log/boot.logについても追記がされており、再起動したことが確認できました。

なお、カーネルパラメーターを確認すると設定が元に戻っていることも確認できます。

$cat /proc/sys/kernel/panic
0

$sysctl kernel.panic
kernel.panic = 0

恒久的に設定する

sysctlコマンドや/proc/sys/kernle/panicファイルによって設定した場合一時的な設定となるため、恒久的な設定が必要です。

以下のファイルを変更した対応します。

/etc/sysctl.conf
kernel.panic = 5

また、上記はreboot後に有効かとなるため、明示的に設定を行います。

# 設定が反映されていない
$sysctl kernel.panic
kernel.panic = 0

# 反映
$sysctl -p

#確認
$sysctl kernel.panic
kernel.panic = 5

この状態で再度カーネルパニックを発生させます。
先ほどと同じようにVMが再起動し、sshログインができるようになった後、カーネルパラメーターを確認してみます。

$sysctl kernel.panic
kernel.panic = 5

今度は無事設定内容がreboot後も設定されていました。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away