sysctlのデフォルト値を調べますか?(再起動なし)


10

net.core.rmem_maxwith の値を変更したsysctlので、これをデフォルト値に戻したいと思います。

再起動net.core.rmem_maxすると、デフォルト値に戻ります(で上書きされないため/etc/sysctl.conf)が、再起動しなくてもこの値を確認できますか?

理想的にはsysctl net.core.rmem_max、値を変更する前に実行する必要がありましたが、忘れてしまいました...

回答:


4

これは一般的には不可能です:カーネルは元の値を保持しません(少なくともLinuxでは保持せず、これはおそらく他のUNIXバリアントにも当てはまります)。設定の値は変数に格納されます。設定を変更すると、変数を含むメモリが不可逆的に更新されます。

ほとんどの設定では、変数の初期値は定数で、コンパイル時に決定され、カーネルバイナリに格納されます。したがって、原則として、カーネルバイナリを調べてデフォルト値を見つけることができます。興味のある設定に対応するシンボルを見つけ、カーネルバイナリ内のそのシンボルのアドレスに従う必要があります。仮想マシンでカーネルを起動すると、作業が少なくなります。

ほとんどの設定では、カーネルソースkernel/sysctl.cやその他のファイルを確認できます。次のような定義が表示されます

    {
            .procname       = "rmem_max",
            .data           = &sysctl_rmem_max,
            …
    },

net/core/sysctl_net_core.c)から、sysctl_rmem_max変数の初期化をトレースできます。これは定数から初期化されますが、展開するにはCコードを読み取るのにかなりの時間がかかります。


0

私のOpenBSDマシンでは、/ etc / sysctl.confに一連のデフォルトのsysctl値がリストされていますが、このリストは完全ではありません。

おそらく最良の方法は、sysctlコードを読み取るか、同じOSを実行している友人に彼の値を尋ねることです:)

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