▼ 2010/05/06(Thu) 超強制再起動
最近のOS(Windows等も含めて)は昔に比べてカーネル空間とユーザ空間がきちんと分けられているので、ユーザアプリケーションがヘマってもOSごと止まることは稀であるが、カーネルをいじくっているような開発者の場合はそうもいかない。例えば、セグメンテーションフォールトに類することをやれば即Kernel Panicである。
そんなわけで、私が経験したことなのだけど、リモートPCにsshなりしてそこでカーネルモジュールの開発というのはかなりヒヤヒヤものである。一歩間違えば、カーネルがモジュールの解放待ちでdead lockを起こすなんて事も。
こうなると、shutdownやkill -9コマンドを使っても再起動できなくなる*1わけだが、物理的に電源スイッチを押せない状況の場合に、超強制再起動する方法があるので紹介。
Twitterに呟いたら割と短時間で赤favだったので、割と知られていないテクニックかな?
そんなわけで、私が経験したことなのだけど、リモート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などの安全な電源を切る方法を一切無視して再起動するので、ファイルシステムが壊れたりなどの被害もあるかもしれない。開発機のみに限定して使った方がよさそう。
参考になった記事や興味深かった記事は、他の人も見つけやすいようにリンクやはてブしていただけると助かります…。
コメントも歓迎です。
▼ コメント(0件)
- TB-URL http://mo.kerosoft.com/0158/tb/
