マジックSysRqキー

SysRqキー

マジックSysRqキーは、 Linuxカーネルが認識するキーの組み合わせで、システムの状態に関係なく、ユーザーが様々な低レベルコマンドを実行できるようにします。フリーズからの回復や、ファイルシステムを破損させずにコンピュータを再起動するためによく使用されます。[ 1 ]

このキーの組み合わせは、災害復旧のための機能へのアクセスを提供します。この意味では、これはエスケープシーケンスの一種と考えることができます。提供されるコマンドの主なものは、ファイルシステムの強制アンマウント、プロセスの強制終了、キーボードの状態の回復、未書き込みデータのディスクへの書き込みなどです。

マジックSysRqキーは、カーネルパニック[ 2 ]やハードウェア障害によってカーネルが正常に動作しなくなるなど、特定の条件下では機能しません。

実装

Linuxカーネルにはsysrq.c、マジックSysRq機能を実装した[ 3 ]が含まれています。マジックSysRq機能は、シリアルデバイス[ 4 ] [ 5 ]によってドライバコードの低レベルで 呼び出されます。

コマンド

キーの組み合わせは、Alt+SysRqと、発行されるコマンドを制御する別のキーで構成されます。 が押されている 限り、コマンド キーを押す前にキーを離すことができます。SysRqAlt

組み合わせは常にQWERTYキーボードレイアウトを想定しています。例えば、Dvorakキーボードレイアウトでは、システムをシャットダウンする組み合わせは ではなく キーを使用します。また、キーボードによっては独立したキーがない場合があります。その場合は、独立したキーを用意する必要があります。 ROSysRqPrtScn

一部のデバイス、特にノートパソコンでは、マジックキーを使用するために キーを押す必要がある場合があります。たとえば、Thinkpad Carbon X1では、+ + を同時に押し、 を押したまま と を放すことでがアクティブになります。[ 6 ]FnSysRqSysRqAltFnSFnSAlt

SysRq機能はキーボードなしでもアクセスできます。以下の「Magic SysRqを呼び出すその他の方法」を参照してください。一部のコマンドは、のビットマスク値で指定されているように、初期状態では無効になっている場合があることに注意してください/proc/sys/kernel/sysrq[ 7 ]

アクション QWERTYドヴォルザークアザーティコレマック
コンソールに出力されるカーネルメッセージの種類を制御するコンソールログレベルを設定します。 09090- (それなし) 9⇧ Shift09
ファイルシステムをアンマウントまたは同期せずに、システムを直ちに再起動します。 bxbb
システムクラッシュを実行します。設定されている場合、クラッシュダンプが取得されます。 cjcc
現在保持されているすべてのロックを表示します(CONFIG_LOCKDEPカーネルオプションが必要です) deds
initPID 1) 以外のすべてのプロセスにSIGTERMシグナルを送信します。e.ef
oom_killを呼び出してプロセスを強制終了し、OOM状態 を緩和します。fuft
カーネルモード設定を使用する場合は、カーネルのフレームバッファコンソールに切り替えます。[ 8 ]カーネル内デバッガkdbが存在する場合は、デバッガに入ります。 gigd
簡潔なヘルプドキュメントをコンソールに出力します。コマンドにバインドされていないキーでもこのアクションを実行する必要があります。 hdhh
initPID 1) 以外のすべてのプロセスにSIGKILLシグナルを送信します。iciu
強制的に「解凍する」 – FIFREEZE ioctl によって凍結されたファイルシステム。 jhjn
現在の仮想コンソール上のすべてのプロセスを強制終了します(XおよびSVGAlibプログラムを強制終了できます。下記参照)。これは元々、セキュアアテンションキーを模倣するために設計されたものです。ktke
すべてのアクティブな CPU のスタック バックトレースを表示します。 lnli
現在のメモリ情報をコンソールに出力します mm,m
すべての高優先度タスクとリアルタイムタスク のniceレベルをリセットしますnbnk
システムを停止する oroy
現在のレジスタとフラグをコンソールに出力します plp;
すべてのアクティブな高解像度タイマーとクロック ソースを表示します。 q'aq
キーボードを、X11SVGAlibなどのプログラムで使用されるrawモードからXLATEモード に切り替えます。rprp
マウントされたすべてのファイルシステムを同期する sosr
現在のタスクとその情報のリストをコンソールに出力します tytg
マウントされているすべてのファイルシステムを読み取り専用モード で再マウントします。ugul
フレームバッファコンソールを強制的に復元します。ARMプロセッサの場合は、代わりにETMバッファのダンプを実行します。 vkvv
ブロックされた(D状態)タスクのリストを表示する w,zw
PowerPCプラットフォームのxmonインターフェースで使用されます。sparc64ではグローバルPMUレジスタを表示します。MIPSではすべてのTLBエントリをダンプます[ 9 ]xqxx
グローバル CPU レジスタを表示する (SPARC-64 固有) yfyj
ftraceバッファをダンプする z;wz
BPFスケジューラのデバッグダンプ D? ? ?
コンソール上でカーネルログメッセージを再生する R? ? ?
BPFスケジューラを無効にしてCFSに戻す S? ? ?

+コマンドの出力例: SysRqh

sysrq: ヘルプ: loglevel(0-9)、reboot(b)、crash(c)、terminate-all-tasks(e)、memory-full-oom-kill(f)、kill-all-tasks(i)、thaw-filesystems(j)、sak(k)、show-backtrace-all-active-cpus(l)、show-memory-usage(m)、nice-all-RT-tasks(n)、poweroff(o)、show-registers(p)、show-all-timers(q)、unraw(r)、sync(s)、show-task-states(t)、unmount(u)、force-fb(v)、show-blocked-tasks(w)、dump-ftrace-buffer(z)、dump-sched-ext(D)、replay-kernel-logs(R)、reset-sched-ext(S) 

構成

この機能は、カーネル構成のコンパイル時オプションCONFIG_MAGIC_SYSRQ [ 4 ]とsysctlカーネルパラメータkernel.sysrq両方によって制御されます。

新しいカーネル(2.6.12以降[ 10 ])では、マジックSysRqキーの使用方法をより細かく制御できます。[ 11 ]これらのマシンでは、 /proc/sys/kernel/sysrqに書き込まれる数値は0、1、または1より大きい数値で、許可する機能を示すビットマスクです。Ubuntuでは、この値は起動時に/etc/sysctl.d/10-magic-sysrq.confで定義された値に設定されます。

用途

ジャーナリングされたファイルシステムの登場以前は、マジック SysRq キーの一般的な使用法は、ロックされた Linux コンピュータを安全に再起動すること (ニーモニックREISUBで示されるキー押下のシーケンスを使用) であり、これによりファイルシステムが破損するリスクが軽減されました。最近のファイルシステムでは、同期とアンマウントはフラッシュされていないデータをディスクに強制的に書き込むために依然として有用ですが、ファイルシステムの破損を防ぐためにはもはや必要ありません (また、ロックアップがカーネルの不良状態によって引き起こされた場合、破損のリスクが増大する可能性があります)。[ 12 ] Ubuntu や Debian などのディストリビューションのkernel.sysrqのデフォルト値は、それぞれ176 (同期、アンマウント、および再起動の機能を許可) と 438 [ 13 ] (同じ機能に加えて、ログレベル、未加工、および nice-all-RT-tasks を許可) のままです。

過去には、X ウィンドウ システムがグラフィカル モードと入力デバイスを完全に制御していた ため、フリーズしたグラフィカルプログラムを強制終了する目的でも使用されていました。

テキストモードコマンドが含まれていないディストリビューションでは、キーシーケンス+ + でテキストコンソールに強制的に切り替えられる場合があります。システムによっては、 の代わりにまたはを使用する必要がある場合があります。 CtrlAltF1F2F3F1

Magic SysRqを呼び出す他の方法

マジックSysRqキーは元々、カーネルのデバッグ用キーボードハンドラーの一部として実装されていましたが、その機能はprocファイルシステム経由でも公開されており、ヘッドレスシステムやリモートシステムに拡張管理機能を提供するために広く使用されています。ユーザー空間プログラム(コマンドラインシェルなど)からは、 /proc/sysrq-trigger(例:)に書き込むことでSysRqにアクセスできます。[ 1 ]echo s > /proc/sysrq-trigger

多くの組み込みシステムにはキーボードが付属しておらず、代わりにシリアルコンソールを介して実行中のシステムへのテキスト入出力が行われます。シリアルコンソールからシリアルブレーク信号を送信し、その後に任意のキーを押すことで、Magic SysRq機能を呼び出すことができます。ブレーク信号の送信方法は、シリアルコンソールへの接続に使用する端末プログラムまたはハードウェアによって異なります。この機能を有効にするには、 sysctlオプションを設定する必要があります。[ 14 ]

Linuxデーモンsysrqd [ 15 ]tcpconsole [ 16 ]は、プレーンテキストパスワードによる認証後、TCP接続を介してSysRq機能にアクセスする手段を提供します。hangwatch [ 17 ]デーモンは、システム負荷平均が一定の閾値を超える と、事前に設定されたSysRqトリガーを起動します。

Xenハイパーバイザーにはxm sysrqコマンドを介してホストドメインにマジックコマンドを送信する機能があります。[ 18 ]さらに、Xen準仮想コンソールからブレークシーケンス+に続けて目的のキーを送信することでSysRqコマンドを呼び出すことができます。 CtrlO

カーネルベース仮想マシン(KVM)ハイパーバイザーには、virsh send-keyコマンドを介してホストされたドメインにマジックコマンドを送信する機能があります。[ 19 ] 例:

virsh send-key --domain ドメイン名 --keycode KEY_LEFTALT KEY_SYSRQ KEY_S 

Chromebookにはキーボードはありますが、専用のSysRqキーはありません。代わりに+ (プラス)キーを使用します。 [ 20 ] [ 21 ] [ 22 ]ただし、一部のキーは異なる機能を持っています。[ 23 ] [ 24 ]AltVolumeUpAltF10

IBM Power Systemsサーバーは、ハードウェア管理コンソールから+に続けて目的のキーを押すことで、Magic SysRq 機能を呼び出すことができます。 CtrlO

IBM メインフレーム パーティションは、 3270または HMC で+に続けて目的のキーを押すことで Magic SysRq 機能を呼び出すことができます。 ^-

参照

参考文献

  1. ^ a b「Linux Magic System Request Key Hacks」 . kernel.org . 2013年8月12日. 2017年5月21日閲覧
  2. ^ Khamlichi, Mel (2010年10月18日)、「Use Magic SysRq Combination Key to Recover from a Frozen System in Linux」、Unixmen、2014年8月20日時点のオリジナルよりアーカイブ、 2014年9月21日閲覧。
  3. ^ "linux/drivers/tty/sysrq.c at master · torvalds/linux" . GitHub . 2025年3月27日閲覧
  4. ^ a b "linux/drivers/usb/serial/generic.c at 6537cfb395f352782918d8ee7b7f10ba2cc3cbf2 · torvalds/linux" . GitHub . 2025年3月27日閲覧
  5. ^ "linux/include/linux/serial_core.h at 6537cfb395f352782918d8ee7b7f10ba2cc3cbf2 · torvalds/linux" . GitHub . 2025年3月27日閲覧
  6. ^ 「ノートパソコンでのAlt+SysRq」。Super User 。 2023年7月25日閲覧
  7. ^ 「Linux マジックシステム リクエスト キー ハック — Linux カーネル ドキュメント。www.kernel.org
  8. ^ Barnes, Jesse (2008-11-07). 「DRM: ​​i915: モード設定サポートの追加」 . Git (コミット). カーネル. 2013年8月31日閲覧
  9. ^ 「Linux Magic System Request Key Hacks」 . 2021年9月13日. 2022年9月25日閲覧
  10. ^ Calleja, Diego (2012年7月17日). 「Linux 2.6.12」 . Linux Kernel Newbies . 2013年8月31日閲覧
  11. ^ "QA/Sysrq" . Fedoraプロジェクト. 2013年5月9日. 2015年4月9日閲覧
  12. ^ 「ドキュメント: sysrq: 'S' 'U' を 'B' の前に置かないことを推奨します" . Git (コミット). カーネル. 2019-09-06.
  13. ^ 「4.9. Magic SysRqキーの使用制限」 . Debianセキュリティマニュアル. 2024年8月20日閲覧。
  14. ^ Turner, Glen; Komarinski, Mark F (2003-03-31). 「Magic SysRq key」 .リモートシリアルコンソールの使い方. Linuxドキュメンテーションプロジェクト. 2015年5月8日閲覧
  15. ^ Danjou, Julien. 「sysrqd」 . GitHub (プロジェクト) . 2016年9月13日閲覧。
  16. ^ファン・ヒュースデン、フォルケルト。「tcpコンソール」2017-08-31 のオリジナルからアーカイブ2013 年 8 月 31 日に取得
  17. ^モーガン、ポール。「ハングウォッチ」GitHub 2013 年 8 月 31 日に取得
  18. ^ 「27. xmコマンドクイックリファレンス」Enterprise Linux 5仮想化ガイドRedHat 、 2013年8月31日取得
  19. ^ 「20.26. 指定されたゲスト仮想マシンへのキーストロークの組み合わせの送信 | 仮想化の導入および管理ガイド | Red Hat Enterprise Linux | 7 | Red Hat ドキュメント」 . docs.redhat.com . 2025年7月29日閲覧
  20. ^ 「デバッグボタンのショートカット」。Chromium OSドキュメント2018年10月22日閲覧。
  21. ^ 「変更 29110: CHROMIUM: sysrq: F10 をマジック sysrq キーとして扱う」 。 2016年7月11日閲覧
  22. ^ 「Chromium OS dev: ChromiumOS カーネルの SysRq」 。 2016年7月11日閲覧
  23. ^ 「システムハングのデバッグ支援」 Chromiumプロジェクト2018年9月25日閲覧。
  24. ^ 「CHROMIUM: sysrq: sysrq-x に Chrome/X へのシグナル送信機能を追加」 。 2018年4月12日閲覧