Linuxのサーバをリモートから強制的にOSリブートする

by The Planet


先日、諸々の都合で遠隔にあるテスト環境のサーバ(Linux)のカーネルパラメータを弄っていたのですが、ちょっと設定(メモリまわり)がイキすぎてしまいw、コマンド実行というかforkできなくなってしまった(Cannot allocate memory...)。

んで、shutdownコマンドも実行できなくなったので、直そうと思ったのですが、色々弄った&時間がなかったこともあり、一旦OSを再起動しちゃいたいな、と(汗


が、遠隔にあるサーバなので、物理的な電源スイッチON/OFFができない(厳密には出来る環境ではあったのですが、このサーバはそこに入ってなかったw)。ので、SysRqキーを送ることにした。

やり方

少し無理矢理感はありますが、

# echo b > /proc/sysrq-trigger

を実行すると、強制的にリブートがかかります。
ただし、ファイルシステムのsyncとかumountが行われないので、注意が必要です。


通常、KernelでマジックSysRqキーは有効になっていないと思いますが、↑のように、直接"/proc/sysrq-trigger"に出力すればOKです。
シェルコマンドを受け付けない場合は、"/proc/sys/kernel/sysrq"が"1"に設定されている(カーネルでマジックSysRqキーが有効にされている)前提で、[Alt] + [SysRq/(PrtSc)] + [コマンドkey]を実行すればOKのはず。
ちなみに、上記例の場合、[コマンドkey]は"b"となります。

(安全に再起動するには)

Linuxがフリーズした際に、安全にリブートするマジックSysRqキー押下の一連の流れが、Wikipediaのページに書かれていました。

R ⇒ E ⇒ I ⇒ S ⇒ U ⇒ B

マジックSysRqキー - Wikipedia
unRaw      (X Window Systemからキーボードの制御を取り戻す)
 tErminate (すべてのプロセスにSIGTERMシグナルを送り、正常に終了させる)
 kIll      (すべてのプロセスにSIGKILLシグナルを送り、強制的に終了させる)
  Sync     (書き込みキャッシュのデータをディスクに書き込む)
  Unmount  (すべてのファイルシステムを読み込み専用で再マウントする)
reBoot     (システムを再起動する)

参考: その他のSysRqキー

※ 以下の日本語訳は、Wikipediaのページより抜粋(汗

'b' - Will immediately reboot the system without syncing or unmounting
      your disks.
      即座に再起動する。この際ファイルシステムのsyncやアンマウントは行われない。

'c'	- Will perform a kexec reboot in order to take a crashdump.
      カーネルをクラッシュさせる。

'd'	- Shows all locks that are held.
      現在ホールドされているすべてのロックを表示する。

'e' - Send a SIGTERM to all processes, except for init.
      init (PID 1)を除くすべてのプロセスにSIGTERMシグナルを送る
      (プロセスを終了させる)。

'f'	- Will call oom_kill to kill a memory hog process.
      メモリ不足を解消するためにプロセスを終了させる oom_kill を呼び出す。

'g'	- Used by kgdb on ppc and sh platforms.
      Kernel Mode Setting(KMS)使用時に、カーネルのフレームバッファコンソールに
      切り替えるための緊急措置を提供する。

'h' - Will display help (actually any other key than those listed
      above will display help. but 'h' is easy to remember :-)
      コンソールに簡単な説明を出力する。

'i' - Send a SIGKILL to all processes, except for init.
      init を除くすべてのプロセスにSIGKILLシグナルを送る
      (プロセスを強制終了させる)。

'k' - Secure Access Key (SAK) Kills all programs on the current virtual
      console. NOTE: See important comments below in SAK section.
      仮想端末上のすべてのプロセスにセキュア・アテンション・キー(SAK)を実行する。

'l' - Shows a stack backtrace for all active CPUs.
      現在実行中のすべてのタスクのバックトレースを表示する。

'm' - Will dump current memory info to your console.
      現在のメモリ情報をコンソールに出力する。

'n'	- Used to make RT tasks nice-able
      すべての高優先度およびリアルタイムタスクのniceレベルをリセットする。

'o' - Will shut your system off (if configured and supported).
      システムを停止させる。

'p' - Will dump the current registers and flags to your console.
      現在のレジスタおよびフラグをコンソールに出力する。

'q' - Will dump a list of all running timers.
      すべての高精度タイマおよびクロックソースを表示する。

'r' - Turns off keyboard raw mode and sets it to XLATE.
      キーボードをrawモードからXLATEモードへ切り替える。X Windowを使用している場合、
      まずこの操作を行ってキーボードを解放する。

's' - Will attempt to sync all mounted filesystems.
      マウントされているすべてのファイルシステムをsyncする。

't' - Will dump a list of current tasks and their information to your
      console.
      現在のタスクのリストとその情報をコンソールに表示する。

'u' - Will attempt to remount all mounted filesystems read-only.
      マウントされているすべてのファイルシステムを読み込み専用モードで再マウントする。

'v'	- Dumps Voyager SMP processor info to your console.
      Voyager SMPプロセッサ情報を表示する。

'w'	- Dumps tasks that are in uninterruptable (blocked) state.
      ブロックされている(D state)タスクのリストを表示する。

'x'	- Used by xmon interface on ppc/powerpc platforms.

'0'-'9' - Sets the console log level, controlling which kernel messages
          will be printed to your console. ('0', for example would make
          it so that only emergency messages like PANICs or OOPSes would
          make it to your console.)
          コンソールに出力するカーネルメッセージのログレベルを制御する。

参考


Linuxカーネル2.6解読室

Linuxカーネル2.6解読室

詳解 Linuxカーネル 第3版

詳解 Linuxカーネル 第3版

  • 作者: Daniel P. Bovet,Marco Cesati,高橋浩和,杉田由美子,清水正明,高杉昌督,平松雅巳,安井隆宏
  • 出版社/メーカー: オライリー・ジャパン
  • 発売日: 2007/02/26
  • メディア: 大型本
  • 購入: 9人 クリック: 269回
  • この商品を含むブログ (73件) を見る