Узнать значения по умолчанию sysctl? (без перезагрузки)

10

Я изменил значение net.core.rmem_maxс 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 или попросить друга, который работает в той же ОС, узнать его значения :)

Эдд Барретт
источник