元RX-7乗りの適当な日々 このページをアンテナに追加 RSSフィード Twitter

RX-7(FD3S)WRX STI関連のキーワードで検索されて来られた方へ。
右サイドのカテゴリ『』をクリックすると関連する項目だけが表示されます。
日々の写真は『Flickr』で公開しています。

2011/04/26

by The Planet

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


先日、諸々の都合で遠隔にあるテスト環境のサーバ(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解読室

hirose31hirose31 2011/04/26 11:31 今回のケースはダメかもすけど、シリアルコンソールからも送れるよー 隣のサーバーと繋いどくとネットワークいじるときとか安心すねー

rx7rx7 2011/04/26 16:35 コメントありがとうございます!
おぉ!それも地味ですが効果ありますね。なるほど!

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。


オススメ (一部は、最近読んでいる本とも言う)
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus) クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ) エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド [24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 Linux-DB システム構築/運用入門 (DB Magazine SELECTION) キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置 スケーラブルWebサイト 実践ハイパフォーマンスMySQL 第3版 ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE) SQLアンチパターン インターネットのカタチ―もろさが織り成す粘り強い世界― ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化 Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)