Linux:Magic SysRQの有効化と活用方法

※当サイトは広告収入で運営されているため広告が表示される場合があります。

まえがき

キーボードについている「SysRQ」というキーの使いみちをご存知でしようか?あまりに使われていないからか徐々に姿を消しつつありますが、PCメーカー製の標準的な109キーのキーボードにはまだ印字されていることが多いです。

SysRQはシステムリクエスト(System Request)の略で、一般的にはあまり知られていませんが、カーネル開発時によく使われるコマンド・キーです。多くのキーボードではPrtSc(プリントスクリーン)キーと同じキーです。

Windows ではほぼ使いみちのないこのキーですが「マジック SysRQ」と呼ばれるほど Linux では大変有用なのでご紹介いたします。

何に使えるの?

システムがフリーズした際、電源ボタンや再起動ボタンを押して強制的に終了させるとジャーナル・ファイルシステムにエラーが起きたりやデータロスが起こります。

しかしSysRQはシステムがデッドロックしていても様々な割り込みリクエストをシステムに対し行えるのでデータを同期させてからシステムを終了させたり、安全に再起動を行うことができます。システム管理者も知っておくと大変便利なコマンド・キーです。ただ当たり前ではありますが、カーネルパニックになっている状態だと反応しません。

下準備

多くのディストリビューションではユーザが誤って操作しないようマジック SysRQ は無効化されています。

SysRQ キーが有効になっているか調べるにはプロセス・ディレクトリ配下のファイルを調べます。

cat /proc/sys/kernel/sysrq
16

私の環境(Arch Linux)では16となっていますが、ディストリビューションによっては100だったり6だったりします。もしくは 0 の場合は完全に無効化された状態です。

いずれにしてもこの値は「1」でないと SysRQ は使えません。

su

スーパーユーザになり、

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

sysrq に1の値をねじ込みます。

cat /proc/sys/kernel/sysrq
1

今度はターミナルに「1」と表示されるはずです。SysRQキー・コマンドが有効になりました。

起動時にSysRQを有効化する

先程はプロセスファイルを手動でいじることでSysRQを有効化しましたが、proc配下のファイルはPCを再起動すると初期化されてしまいます。起動時に有効化するには以下のように sysctl にカーネルのパラメータを読み込ませる必要があります。

再びスーパーユーザに

su
su

ファイル名はなんでも良いのですが、 kernel.sysrq に1を入れるコンフィグファイルを作成します。

# echo "kernel.sysrq = 1" >> /etc/sysctl.d/99-sysctl.conf

これで起動時からSysRQが使えるようになります。

AltSysRQ + コマンド・キー

REISUB

システムを安全に再起動させるための手順は以下の語呂合わせで覚えると便利です。

Reboot Even If System Utterly Broken

システムが完全にぶっ壊れていても再起動させる。という意味です。

この頭文字と SysRQ キーのコンビネーションを順々に押していくと安全にシステムを再起動させることができます。

Alt + SysRQ + (R E I S U B)

それぞれコマンド・キーが何を意味をしているのか見ていきましよう。

コマンド・キー
RunRawX Window System からキーボード操作を取り上げる
EtErminateすべてのプロセスにSIGTERMシグナルを送る
IkIllすべてのプロセスにSIGKILLシグナルを送信
SSyncキャッシュデータをディスクに書き込む
UUnmountすべてのファイルシステムのマウントを解除する
BreBootシステムを再起動

上記の順番に従えばファイル・システムの破損とデータの損失を最小限に留めることができます。

一回コマンドを実行するごとに時間を開けて入力しないとデータを完全に同期させる前にシステムが再起動してしまう場合があるので注意してください。

デスクトップ・ユーザでしたら、メモリの中に大量の書き込みキャッシュデータが滞納されているということはあまりないと思いますが、サーバを運用している場合、一つのコマンドを実行し終えるのに数分かかる場合があります。ハードウェアの様子を見ながら焦らずに一つ一つ実行していくのがポイントです。

コメント

タイトルとURLをコピーしました