Дізнайтеся значення за замовчуванням 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змінної . Хоча цей ініціалізується з постійної, для розширення коду С потрібно досить небагато.


0

На моїй машині OpenBSD /etc/sysctl.conf перелічує купу значень sysctl за замовчуванням, але цей список не є вичерпним.

Напевно, найкращий спосіб - прочитати код sysctl або запитати у друга, який працює на тій же ОС щодо його значень :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.