Descubra los valores predeterminados de sysctl? (sin reiniciar)

10

He modificado el valor de net.core.rmem_maxwith sysctl, y ahora me gustaría volver a establecerlo en su valor predeterminado.

Si reinicio, net.core.rmem_maxvolveré a su valor predeterminado (porque no se anula /etc/sysctl.conf), pero ¿puedo conocer este valor sin reiniciar?

Idealmente, debería haber corrido sysctl net.core.rmem_maxpara leer el valor antes de modificarlo, pero olvidé ...

Nicolas Raoul
fuente

Respuestas:

4

Esto no es posible en general: el núcleo no retiene los valores originales (al menos en Linux no lo hace, y esto probablemente sea cierto para otras variantes de Unix). El valor de la configuración se almacena en una variable; Cuando cambia la configuración, la memoria que contiene la variable se actualiza irreversiblemente.

Para la mayoría de las configuraciones, el valor inicial de la variable es una constante que se determina en tiempo de compilación y se almacena en el binario del núcleo. Entonces, en principio, podría inspeccionar el binario de su núcleo para encontrar el valor predeterminado. Tendría que ubicar el símbolo correspondiente a la configuración que le interesa y seguir la dirección de ese símbolo en el binario del núcleo. Arrancar su kernel en una máquina virtual sería menos trabajo.

Para la mayoría de las configuraciones, puede buscar en la fuente del núcleo kernel/sysctl.cy en otros archivos. Verás definiciones como

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

(in net/core/sysctl_net_core.c), desde el cual puede rastrear la inicialización de la sysctl_rmem_maxvariable . Si bien este se inicializa a partir de una constante, se necesita bastante lectura del código C para expandirse.

Gilles 'SO- deja de ser malvado'
fuente
0

En mi máquina OpenBSD, /etc/sysctl.conf enumera un montón de valores predeterminados de sysctl, pero esta lista no es exhaustiva.

Probablemente la mejor manera es leer el código sysctl o preguntarle a un amigo que ejecuta el mismo sistema operativo por sus valores :)

Edd Barrett
fuente