Finden Sie sysctl Standardwerte heraus? (ohne Neustart)

10

Ich habe den Wert von net.core.rmem_maxwith geändert sysctlund möchte ihn jetzt auf den Standardwert zurücksetzen.

Wenn ich neu starte, net.core.rmem_maxwird der Standardwert wiederhergestellt (da er nicht überschrieben wird /etc/sysctl.conf). Kann ich diesen Wert jedoch ohne Neustart ermitteln?

Idealerweise hätte ich sysctl net.core.rmem_maxden Wert lesen sollen, bevor ich ihn geändert habe, aber ich habe vergessen ...

Nicolas Raoul
quelle

Antworten:

4

Dies ist im Allgemeinen nicht möglich: Der Kernel behält die ursprünglichen Werte nicht bei (zumindest unter Linux nicht, und dies gilt wahrscheinlich auch für andere Unix-Varianten). Der Wert der Einstellung wird in einer Variablen gespeichert. Wenn Sie die Einstellung ändern, wird der Speicher mit der Variablen irreversibel aktualisiert.

Bei den meisten Einstellungen ist der Anfangswert der Variablen eine Konstante, die zur Kompilierungszeit ermittelt und in der Kernel-Binärdatei gespeichert wird. Sie können also im Prinzip Ihre Kernel-Binärdatei überprüfen, um den Standardwert zu ermitteln. Sie müssten das Symbol finden, das der Einstellung entspricht, an der Sie interessiert sind, und der Adresse dieses Symbols in der Kernel-Binärdatei folgen. Das Booten Ihres Kernels in einer virtuellen Maschine wäre weniger Arbeit.

Für die meisten Einstellungen können Sie in der Kernelquelle kernel/sysctl.cund in anderen Dateien nachsehen . Sie sehen Definitionen wie

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

(in net/core/sysctl_net_core.c), von dem aus Sie die Initialisierung der sysctl_rmem_maxVariablen verfolgen können . Während dieser von einer Konstanten initialisiert wird, erfordert das Lesen von C-Code ziemlich viel Lesen, um ihn zu erweitern.

Gilles 'SO - hör auf böse zu sein'
quelle
0

Auf meinem OpenBSD-Computer listet /etc/sysctl.conf eine Reihe von Standardwerten für sysctl auf, diese Liste ist jedoch nicht vollständig.

Wahrscheinlich ist der beste Weg, den sysctl-Code zu lesen oder einen Freund, der dasselbe Betriebssystem ausführt, nach seinen Werten zu fragen :)

Edd Barrett
quelle