找出sysctl的默认值吗?(无需重新启动)


10

我已经修改了net.core.rmem_maxwith 的值sysctl,现在我想将其设置回其默认值。

如果我重新启动,net.core.rmem_max将恢复为默认值(因为它没有在中被覆盖/etc/sysctl.conf),但是我可以知道该值而无需重新启动吗?

理想情况下sysctl net.core.rmem_max,在修改值之前我应该已经运行过读取该值,但是我忘记了...

Answers:


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代码或向运行相同操作系统的朋友询问其值:)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.