2010/05/06(Thu)超強制再起動

2010/05/06 23:06 Software::Linux
最近のOS(Windows等も含めて)は昔に比べてカーネル空間とユーザ空間がきちんと分けられているので、ユーザアプリケーションがヘマってもOSごと止まることは稀であるが、カーネルをいじくっているような開発者の場合はそうもいかない。例えば、セグメンテーションフォールトに類することをやれば即Kernel Panicである。

そんなわけで、私が経験したことなのだけど、リモートPCにsshなりしてそこでカーネルモジュールの開発というのはかなりヒヤヒヤものである。一歩間違えば、カーネルがモジュールの解放待ちでdead lockを起こすなんて事も。
こうなると、shutdownやkill -9コマンドを使っても再起動できなくなる*1わけだが、物理的に電源スイッチを押せない状況の場合に、超強制再起動する方法があるので紹介。
Twitterに呟いたら割と短時間で赤favだったので、割と知られていないテクニックかな?

*1 : 割り込み不可能なI/O wait待ちのプロセスが溜まりまくっていく。psしたときSTATがDとなる。

How to

$ su
# echo b > /proc/sysrq-trigger
これだけ。
SysRqキーはLinuxにおいてはカーネルに低レベルメッセージを投げるための特殊なキーとして扱われることを利用している。
リモート越しだとキーを飛ばせないので、/procに実装されたソケットを使っているわけだが、詳しくはWikipediaを参照。

なお、syncなどの安全な電源を切る方法を一切無視して再起動するので、ファイルシステムが壊れたりなどの被害もあるかもしれない。開発機のみに限定して使った方がよさそう。