Linuxでカーネルパニックさせる方法 †
Linuxでカーネルパニックをコマンドで簡単に発生させることができます。
以下にカーネルパニックの発生コマンドとカーネルパニック後、指定した秒を経過すると再起動するようにする設定方法を記します。
コマンドでカーネルパニックを発生させる †
以下のコマンドで簡単にカーネルパニックを発生させることができます。
尚、本コマンドはrootユーザで実行してください。
echo c > /proc/sysrq-trigger
実際にカーネルパニックを発生させたときのスクリーンショット †
X11が動作しており、端末を起動してカーネルパニックを発生させるコマンドを実行しても何も表示されないと思います。
以下のスクリーンショットは、仮想コンソールにしてコマンドを実行すれば以下のような表示をみることができます。
GUIが動作している時は、Ctrl+Alt+F1などのようにすれば、仮想コンソールが表示されます。
VirtualBoxを利用してカーネルパニックを発生させました。
カーネルパニック後、自動的にリブートする方法 †
上記のコマンドでカーネルパニックを発生させると上記のカーネルパニックスクリーンショット画面で止まってします。
例えばデータセンターにあるサーバでカーネルパニックを起こした場合、データセンターに行かないと再起動できなくなります。
(サーバーなので、他の方法で対処する機能を持ったサーバー機器もありますが…)
以下のようなオペレーションをすることにより、カーネルパニック後、指定した時間を経過すると再起動されるようになります。
kernel.panicのパラメータに0が指定されている場合、再起動しません。
以下のコマンドで確認することができます。
cat /proc/sys/kernel/panic
または
sysctl kernel.panic
上記コマンドを実行した出力結果です。
両方共0が表示され、デフォルトでは再起動しないように設定されているのが確認できます。
[sakura@centos6 ~]$ cat /proc/sys/kernel/panic
0
[sakura@centos6 ~]$ sysctl kernel.panic
kernel.panic = 0
この値を0以外に変更するとリブートするようになります。
値は秒になります。
一時的な対応 †
以下のコマンドで一時的な対応が可能です。
rootユーザにて作業を行なってください。
echo 秒 > /proc/sys/kernel/panic
一時的な対応を説明すると以下のコマンドを発行した場合、
カーネルパニック後30秒後に再起動されます。
しかし再起動後は30秒と指定した値は0に戻ってしまい再度カーネルパニックが発生した場合、再起動しません。
echo 30 > /proc/sys/kernel/panic
恒久的な対応 †
以下の操作により恒久的な対応が可能になります。
rootユーザにて作業を行なってください。
本記事で動作確認を行ったCentOS6では、kernel.panicの設定がありませんでしたので追加作業になりました。
- /etc/sysctl.conf ファイルを開きます。
- 最終行に30秒後に再起動するように以下の設定を追記しました。
kernel.panic = 30
- 記述(追記)しただけでは反映されないので、以下のコマンドで反映させます。
sysctl -p
以下事項したときの出力です。
- sysctl -p 実行前(30に修正済)
[root@centos6 ~]# sysctl kernel.panic
kernel.panic = 0
- sysctl -pで設定を反映
[root@centos6 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
<省略>
kernel.shmall = 4294967296
kernel.panic = 30
- 再度sysctlコマンドでkernel.panicの値を確認する
[root@centos6 ~]# sysctl kernel.panic
kernel.panic = 30