Découvrez les valeurs par défaut de sysctl? (sans redémarrage)

10

J'ai modifié la valeur de net.core.rmem_maxavec sysctl, et maintenant je voudrais la remettre à sa valeur par défaut.

Si je redémarre, net.core.rmem_maxreviendra à sa valeur par défaut (car elle n'est pas remplacée /etc/sysctl.conf), mais puis-je connaître cette valeur sans redémarrer?

Idéalement, j'aurais dû courir sysctl net.core.rmem_maxpour lire la valeur avant de la modifier, mais j'ai oublié ...

Nicolas Raoul
la source

Réponses:

4

Ce n'est pas possible en général: le noyau ne conserve pas les valeurs d'origine (du moins sous Linux, ce n'est pas le cas, et c'est probablement le cas pour d'autres variantes d'Unix). La valeur du paramètre est stockée dans une variable; lorsque vous modifiez le paramètre, la mémoire contenant la variable est mise à jour de manière irréversible.

Pour la plupart des paramètres, la valeur initiale de la variable est une constante qui est déterminée au moment de la compilation et stockée dans le binaire du noyau. Vous pouvez donc, en principe, inspecter votre binaire du noyau pour trouver la valeur par défaut. Vous devez localiser le symbole correspondant au paramètre qui vous intéresse et suivre l'adresse de ce symbole dans le binaire du noyau. Le démarrage de votre noyau dans une machine virtuelle serait moins de travail.

Pour la plupart des paramètres, vous pouvez consulter la source du noyau - kernel/sysctl.cet d'autres fichiers. Vous verrez des définitions comme

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

(en net/core/sysctl_net_core.c), à partir duquel vous pouvez suivre l'initialisation de la sysctl_rmem_maxvariable . Bien que celui-ci soit initialisé à partir d'une constante, il faut pas mal de lecture de code C pour se développer.

Gilles 'SO- arrête d'être méchant'
la source
0

Sur ma machine OpenBSD, /etc/sysctl.conf répertorie un tas de valeurs sysctl par défaut, mais cette liste n'est pas exhaustive.

La meilleure façon est probablement de lire le code sysctl ou de demander à un ami qui exécute le même système d'exploitation ses valeurs :)

Edd Barrett
la source