パニックでリブートするようにLinuxカーネルを早期に構成する方法は?


13

カーネルコマンドラインに「panic = N」を入力すると、パニックのN秒後にシステムを再起動できます。

しかし、ブートローダーでさえプレイする前に、これを指定するための設定オプション(デフォルトのカーネルコマンドラインオプション以外)はありますか?いくつかのカーネルオプションがありますか?


おそらく、カーネルウォッチドッグサブシステムを介して?
ジル 'SO-悪であるのをやめる

構成ファイルはブート(grub)構成ファイルそのものです。これは、ブート時に呼び出されるパラメーターであり、ファイルシステムがマウントされていない間、grubが他の構成ファイルから読み取ることは期待できないためです。
ニキルマレー

別のカーネルで再起動したいと思うでしょうか?そのためにはブートローダーからの協力が必要になります。その時点で、コマンドライン引数を確実に渡すことができます。一部のブートローダーは、ブートが失敗した場合に別のカーネルで再起動するように設定できます(ユーザーランドプログラムがブートローダーにブートが成功したことを示すようにすることにより)。
ジル 'SO-悪であるのをやめる

はい、別のカーネルからブートするか、カーネルに別のrootfsパスを指定します。ブートローダーの設定には、ユーザースペースが正常に起動したときに変更される変数があります。変わらない場合は、別のことを試してください。ブートローダーの設定はLinuxユーザースペースで変更できるので、このためのカーネルコマンドライン以上のものを望んでいました。問題がある場合は、ユーザースペースが書き込みを開始し、デバイスの電源が切れた可能性があります。そしてそのためのフォールバックデフォルト設定があります; 私はまだこれを手に入れることができる最も堅実なものを探しています。
ショーンJ.ゴフ

回答:


2

そのような設定オプションはないようです。デフォルトのタイムアウトは0です。http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898によれば、「永遠に待機」です。

このオプションはkernel / panic.cで定義されており、初期値を別の値に設定するパッチを作成できます。

3秒後に再起動をハードコードするには、次を変更します。

int panic_timeout;

に:

int panic_timeout = 3;

特別なメカニズムがある場合、ソースをいじるのはお勧めできません
poige

19

からman proc

/ proc / sys / kernel / panic

このファイルは、カーネル変数panic_timeoutへの読み取り/書き込みアクセスを提供します。これがゼロの場合、カーネルはパニックでループします。ゼロ以外の場合、この秒数後にカーネルが自動リブートすることを示します。ソフトウェアウォッチドッグデバイスドライバーを使用する場合、推奨設定は60です。


ここでは、ユーザー空間からのものではなく、カーネル構成オプションを探しています。具体的には、何らかの理由でルートファイルシステムをマウントできない場合(またはその他の理由でユーザー空間が表示されない場合)、再起動する必要があります。
ショーンJ.ゴフ

@ ShawnJ.Goffユーザー空間が立ち上がらないことも心配なら、間違った質問をしていることになります(カーネルがパニックにならなくても再起動したい)。そしてその答えは、定義によるウォッチドッグの形式です。ウォッチドッグサブシステムをアクティブにする必要があります(/dev/watchdogしばらく触れていない場合は再起動をトリガーします)。を参照してくださいDocumentation/watchdog/watchdog-api.txt
ジル「SO-悪であるのをやめる」

1
はい、ウォッチドッグがあります。できるだけ多くの安全策を講じています。
ショーンJ.ゴフ

再起動する代わりにシャットダウンする方法はありますか?
Ciro Santilli新疆改造中心法轮功六四事件

@ ShawnJ.Goffブートローダーは、ユーザー空間がブートされるずっと前にこのパラメーターを渡すことをサポートしています。とにかく、私の答えを参照してください:unix.stackexchange.com/a/517364/6622
poige

5

構成ファイルはブート(grub)構成ファイルそのものです。これは、ブート時に呼び出されるパラメーターであり、ファイルシステムがマウントされていない間、grubが他の構成ファイルから読み取ることは期待できないためです。

ただし、初期化された設定であるため、ランタイムはを通じて変更することもできますsysctl。したがって、/etc/sysctl.confパラメータを使用した基本的な更新kernel.panic = 3は、構成の更新です。


1
grubはすべてのシステムにあるわけではありません。私が取り組んでいるのはgrubを使用していないことです。ブートローダーの設定はフラッシュに保存されます。
ショーンJ.ゴフ

ええ、それでも..ファイルシステムをマウントして、カーネル構成ファイルを読み取ることができますか?はいの場合、そこに行きます。その理由は、カーネルのロード中にカーネルパラメータをカーネルに渡すブートローダーだからです。
ニキルマレー


3

Linux Kernelでは(3以上で見ました)にオプションがあり.configます。CONFIG_PANIC_TIMEOUTはパラメータで、デフォルトは0です。Linuxカーネルのこれらのバージョンでは、Lekensteynの答えも機能します。しかし、その変数は.config唯一のものから取っています。

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

Linuxカーネルのサポート CONFIG_CMDLINE_BOOL

ビルド時にカーネルにブート引数を指定できるようにします。一部のシステム(組み込みシステムなど)では、カーネルブート引数の一部またはすべてをカーネル自体に提供する必要があります(つまり、ブートローダーに依存せずに提供する必要があります)。

この「ポータル」にもいくつかの例があります。例えば

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored



弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.