Hack 75. Magic SysRq Key を使用した Linux の安全な再起動

magic SysRq key は Linux カーネル内のキーコンビネーションです。
これを使用することでシステムの状態に関係なく様々な低レベルのコマンドを実行できます。

ファイルシステムを壊さずに、フリーズ状態からの復帰やコンピュータの再起動をしたいことがよくあります。
Alt+SysRq+commandkey というキーコンビネーションで可能です。
多くのシステムでは、SysRq キーは printscreen キーです。

まず、以下のようにSysRq キーを有効にする必要があります。

echo "1" > /proc/sys/kernel/sysrq

SysRq コマンドキーのリスト

次は Alt+SysRq+commandkey で有効なコマンドキーです。
o ‘k’ – 現在の仮想コンソールで実行中のすべてのプロセスをキルします。
o ’s’ – マウントされたすべてのファイルシステムと同期をとろうとします。
o ‘b’ - パーティションをアンマウントしたり同期をとらずにすぐにシステムを再起動します。
o ‘e’ – init 以外のすべてのプロセスに SIGTERM を送ります。
o ‘m’ – コンソールに現在のメモリ情報を出力します。
o ‘i’ - init 以外のすべてのプロセスに SIGKILL を送ります。
o ‘r’ - ローモード(X11 のようなプログラムで使用されるモード)から XLATE モードにキーボードをスイッチします。
o ’s’ – マウントされたすべてのファイルシステムと同期します。
o ‘t’ - コンソールに現在のタスクリストとその情報を出力します。
o ‘u’ - 読み込み専用でマウントされたすべてのファイルシステムを再度マウントします。
o ‘o’ – すぐにシステムをシャットダウンします。
o ‘p’ – コンソールに現在のレジスタとフラグを出力します。
o ‘0-9′ - コンソールログレベルをセットし、カーネルメッセージをコンソールに出力します。
o ‘f’ - oom_kill をコールし多くのメモリを消費するプロセスをキルします。
o ‘h’ – ヘルプを表示します。上記以外のキーもヘルプを表示します。

/proc/sysrq-trigger ファイルにキーを echo することで同様のことができます。
たとえば、システムを再起動するには次のように実行します。

echo "b" > /proc/sysrq-trigger

Magic SysRq Key を使用して Linux を安全に再起動をする

ハングアップした Linux を安全に再起動するためには次のようにします。
次の再起動時に fsck をしないようにします。
たとえば、以下でハイライトされた Alt+SysRq+letter を押下します。
o unRaw (X11 からキーボードの制御を戻す)
o tErminate (SIGTERM をすべてのプロセスに送ります。プロセスを安全に終了させます)
o kIll (SIGILL をすべてのプロセスに送ります。すぐにプロセスを強制終了させます)
o Sync (データをディスクにフラッシュします),
o Unmount (すべてのファイルシステムを読み込み専用で再マウントします)
o 再起動