マジックSysRqキー
マジックSysRqキーは、Linuxカーネルでシステム状態に関する低レベルコマンドを発行するキーシーケンスである。
SysRqとその他のキーとを組み合わせて使用する。これはカーネル開発におけるデバッグ用であると同時に、しばしばシステムがフリーズした際に、その状態からの回復やファイルシステムを破損させることなくコンピュータを再起動させるために使用される。
用途
[編集]サン・マイクロシステムズのOpen Firmware(OpenBoot)と同様のこのキーシーケンスは、ソフトウェア開発やトラブルからの回復を行うための以下のようなツールへのアクセスを提供する。
- 強制的なファイルシステムのアンマウント
- プロセスの強制終了
- キーボード状態の回復
- 書き込みキャッシュのフラッシュ(ディスクへの書き込み)
- システムの再起動
コマンドキー
[編集]キーシーケンスは、Altキー、SysRqキーおよびその他のキー(コマンドキー)を同時に押下する。コマンドキーはキー配列によって異なる。また、キーボードにSysRqキーがない場合は、プリントスクリーンキーで代用する。
動作 | QWERTY | Dvorak | AZERTY |
---|---|---|---|
コンソールに出力するカーネルメッセージのログレベルを制御する。 | 0 - 9 | 0 - 9 | 0 - 9 (Shiftキーは使用しない) |
即座に再起動する。この際ファイルシステムのsyncやアンマウントは行われない。 | b | x | b |
カーネルをクラッシュさせる。 | c | j | c |
現在ホールドされているすべてのロックを表示する。 | d | e | d |
init (PID 1)を除くすべてのプロセスにSIGTERMシグナルを送る(プロセスを終了させる)。 | e | . | e |
メモリ不足を解消するためにプロセスを終了させる oom_kill を呼び出す。 | f | u | f |
Kernel Mode Setting(KMS)使用時に、カーネルのフレームバッファコンソールに切り替えるための緊急措置を提供する[1]。 | g | i | g |
コンソールに簡単な説明を出力する。 | h または Enter | d | h |
init を除くすべてのプロセスにSIGKILLシグナルを送る(プロセスを強制終了させる)。 | i | c | i |
仮想端末上のすべてのプロセスにセキュア・アテンション・キー(SAK)を実行する。 | k | t | k |
現在実行中のすべてのタスクのバックトレースを表示する。 | l | n | l |
現在のメモリ情報をコンソールに出力する。 | m | m | , |
すべての高優先度およびリアルタイムタスクのniceレベルをリセットする。 | n | b | n |
システムを停止させる。 | o | r | o |
現在のレジスタおよびフラグをコンソールに出力する。 | p | l | p |
すべての高精度タイマおよびクロックソースを表示する。 | q | ' | a |
キーボードをrawモードからXLATEモードへ切り替える。X Window Systemを使用している場合、まずこの操作を行ってキーボードを解放する。 | r | p | r |
マウントされているすべてのファイルシステムをsyncする。 | s | o | s |
現在のタスクのリストとその情報をコンソールに表示する。 | t | y | t |
マウントされているすべてのファイルシステムを読み込み専用モードで再マウントする。 | u | g | u |
Voyager SMPプロセッサ情報を表示する。 | v | k | v |
ブロックされている(D state)タスクのリストを表示する。 | w | , | z |
利用法
[編集]設定
[編集]本機能を使用するためには、カーネルがそのコンパイルオプションか、コンフィグレーションで有効にされてコンパイルされている必要がある。
CONFIG_MAGIC_SYSRQ=y
また、/etc/sysctl.conf で有効にされていなければならない。一部のLinuxディストリビューションでは、ユーザが誤って操作してしまわないようにデフォルトで無効になっている。
kernel.sysrq = 0
となっていれば無効であり、
kernel.sysrq = 1
で有効になる。この設定変更を即座に適用するには、以下のコマンドを実行する。
sysctl -p
コマンドラインからのアクセス
[編集]本機能は、カーネルのデバッグ用にキーボードハンドラの一部として実装された。また、procファイルシステムから使用することもできる。これにより、ヘッドレスシステムやリモートシステムでもシェルから利用できる。
kernel.sysrqパラメタで無効にされている場合、まずそれを有効にする。
echo 1 > /proc/sys/kernel/sysrq
マジックSysRqキーは、/proc/sysrq-trigger へコマンドキーを送ることで実行される。
echo b > /proc/sysrq-trigger
これは Alt + SysRq + b と同じであり、システムは再起動される。
リモートからのアクセス
[編集]Linuxのデーモンとして動作するsysrqdは、TCP/IP(ポート4094、認証はプレーンテキストパスワード)を通してSysRqへのアクセス手段を提供する。
ハイパーバイザからのアクセス
[編集]Xenでは、"xl" コマンドを使用してドメインにマジックコマンドを送信する機能を具備している[2]。
再起動手順の語呂合わせ
[編集]Linuxコンピュータがフリーズした場合にそれを安全に再起動させるためのマジックSysRqキーを押下する一連の手順を覚えるための語呂合わせがある。QWERTYまたはAZERTY配列では、"Raising Elephants Is So Utterly Boring"(ゾウを育てるって、もうとっても退屈)、"Reboot Even If System Utterly Broken"(リブートするよ。たとえシステムが完全に壊れてたとしても)、または単に "BUSIER" (busyの比較級)を逆から読む、といったものが使われている[3]。これらは以下の操作を表す。
unRaw (X Window Systemからキーボードの制御を取り戻す) tErminate (すべてのプロセスにSIGTERMシグナルを送り、正常に終了させる) kIll (すべてのプロセスにSIGKILLシグナルを送り、強制的に終了させる) Sync (書き込みキャッシュのデータをディスクに書き込む) Unmount (すべてのファイルシステムを読み込み専用で再マウントする) reBoot (システムを再起動する)
この手順で行えば、一部のプログラムのデータ損失を防ぎ、ファイルシステムの破損を回避することができる。
各コマンドは数秒間の時間を開けて投入しなければならない。例えば、多くのプログラムはSIGTERMシグナルを受け取るとデータの保存など処理を行い、syncやアンマウントはそれを行うためにある程度の時間を要する。
セキュリティ面での懸念
[編集]このキーにより、キーボードやシリアルコンソールからシステムにアクセスできる誰にでも危険なシステムレベルのコマンドが利用可能となることが一部で懸念されている[4]。
関連項目
[編集]参考文献
[編集]- ^ DRM: i915: add mode setting support
- ^ http://www.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5.2/html/Virtualization/sect-Virtualization-Commands_for_Red_Hat_Virtualization-The_xm_command_line_interface.html
- ^ http://fosswire.com/2007/09/08/fix-a-frozen-system-with-the-magic-sysrq-keys/
- ^ http://linuxgazette.net/issue81/vikas.html
- Tony Lawrence (April 13, 2005). “General notes on magic sysrq”. A.P. Lawrence website. 2009年12月15日閲覧。
- Tom Gall (2000年4月1日). “Magic sys request”. Linux. IBM Developer Works. 2007年5月27日時点のオリジナルよりアーカイブ。2009年12月15日閲覧。
外部リンク
[編集]- Documentation/admin-guide/sysrq.rst - Linuxカーネルソースツリー
- Kernel patch to the -mm tree that added the /proc/sysrq-trigger feature - マジックSysRqキーをリモートユーザから利用できるようにするパッチ