web-dev-qa-db-ja.com

logind.conf `IdleAction = kexec`は正確に何をしますか?

logind.confのマニュアルページ は次のように述べています。

IdleAction =

システムがアイドル状態のときに実行するアクションを構成します。 「ignore」、「poweroff」、「reboot」、「halt」、「kexec」、「suspend」、「hibernate」、「hybrid-sleep」、「suspend-then-hibernate」、「lock」のいずれかを取ります。デフォルトは「無視」です。

kexecの値がどこにも説明されているのを見たことがありません。ここで正確にkexecは何をしますか?

実行する同等の kexec(8) コマンドラインはありますか?

とにかく、システムがアイドル状態のときに新しいカーネルをホットリブートすると便利な場合はどのような場合ですか?

4
Tom Hale

はい、新しいカーネルにkexecするために使用できるkexecコマンドラインツールがあります。

ユーザーの観点から見ると、kexecの使用はrebootの使用とほぼ同じですが、現在のカーネルが新しいカーネルをロードして実行を開始する(BIOS、ファームウェアをバイパスする)ため、高速になる傾向があります、ブートローダーなど)

Logindが "kexec"(または "reboot")などのアイドルアクションを提供するポイントは、システムを常に最新の状態に保つのに役立ちます。これは、カーネルのアップグレードの場合、通常、再起動が必要です。アイドル検出は、いつシステムを再起動するのが良いか(うまくいけば、それほど大きな混乱を引き起こさない時間に)を把握し、頻繁に再起動するのに役立ちます(十分な頻度でアイドル状態であると想定)は、パッケージマネージャーが更新されたカーネルをインストールした後、それほど長くないで新しいカーネルで起動することを保証します。

もちろん、これはすべてのユーザーが同意する設定ではないため、このオプションのデフォルト設定ではありません(デフォルトは「何もしない」であり、何もしません...)。


kexecアクションが正確に何をトリガーするかを理解するには、systemctl kexecと同様の systemctl reboot を調べます。そのドキュメントには次のように書かれています。

kexecを介してシステムをシャットダウンして再起動します。これはsystemctl start kexec.target --job-mode = replace-irreversibly --no-blockと同等です。

したがって、これは特別な kexec.target を通過します。これは通常、 require a systemd-kexec.service に構成され、次に 呼び出しkexec引数を持つ/usr/lib/systemd/systemd-shutdownツール(systemctl --force kexecを介して、それは判明します...)。

さらに進むには、ソースコードを確認する必要があります。systemd-shutdown kexecは単純に kexec -e を使用して再起動しようとし、ロジックを「それが失敗した場合、通常の再起動。

kexec(8) のマニュアルページを見ると、kexecの再起動を実行するために必要なのはkexec -eだけであることがわかります。 systemdが統合するすべてのもの。

欠落している他の部分は、起動カーネルをメモリにロードする部分、実際の実行が機能するようにkexec -lを実行する部分です。それは従うべきもう一つのウサギの穴です。読者への演習として(またはおそらく、ここU&Lでの別の質問にはかなり適切です)

4
filbranden