Як рано налаштувати ядро ​​Linux для перезавантаження на паніку?


13

Ви можете поставити "panic = N" у командному рядку ядра, щоб система перезавантажила N секунд після паніки.

Але чи є опція config, щоб вказати це (крім параметра командного рядка ядра за замовчуванням), перш ніж навіть завантажувач завантажиться в гру? Якийсь варіант ядра може бути?


Можливо, через підсистему сторожового ядра ядра?
Жил "ТАК - перестань бути злим"

Конфігураційний файл - сам файл конфігурації завантаження (grub), оскільки це параметр, який викликається під час завантаження, і не можна очікувати, що його зчитувати з іншого конфігураційного файлу, поки файлова система не змонтована.
Нікхіл Мюллі

Я припускаю, що ви захочете перезавантажити інше ядро? Це зажадає певної співпраці завантажувача, і в цей момент ви, безумовно, зможете передавати аргументи командного рядка. Деякі завантажувачі можуть бути налаштовані для перезавантаження з іншим ядром, якщо завантажувач не вдався (якщо програма користувальницької програми вказує завантажувачу, що завантаження вдалося).
Жил "ТАК - перестань бути злим"

Так, я буду завантажувати або інше ядро, або давати ядру інший шлях до rootfs. У конфігурації завантажувача є змінна, яка змінюється при успішному завантаженні простору користувача; якщо це не зміниться, він знає спробувати щось інше. Я сподівався на щось більше, ніж просто командний рядок ядра для цього, оскільки конфігурація завантажувача може бути змінена користувацькою простором Linux. Якщо є проблема, ймовірно, що користувальницький простір почав писати, а потім пристрій вимкнувся; і для цього є конфігурація резервного копіювання; Я все ще шукаю найтвердішого, що можу це отримати.
Шон Дж. Гофф

Відповіді:


2

Здається, такий варіант конфігурації не існує. За замовчуванням тайм-аут дорівнює 0, що відповідно до http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 є "чекати вічно".

Параметр визначений у kernel / panic.c , ви можете написати патч, який встановлює початкове значення на щось інше.

Щоб жорстко перезавантажити через 3 секунди, змініть:

int panic_timeout;

до:

int panic_timeout = 3;


19

Від man proc:

/ proc / sys / ядро ​​/ паніка

Цей файл надає доступ для читання / запису до змінної ядра panic_timeout. Якщо це нуль, ядро ​​буде панікувати на паніку; якщо немає нуля, це вказує на те, що ядро ​​повинно автозавантажуватися після цієї кількості секунд. Під час використання драйвера програмного забезпечення сторожового пристрою рекомендована установка становить 60.


Я шукаю тут варіант налаштування ядра, а не щось із простору користувачів. Зокрема, якщо з якихось причин він не може змонтувати кореневу файлову систему (або з якоїсь іншої причини, користувацький простір ніколи не з’являється), мені це потрібно для перезавантаження.
Шон Дж. Гоф

@ ShawnJ.Goff Якщо ви також стурбовані тим, що не з’явиться простір користувачів, ви задаєте неправильне запитання (ви хочете перезавантажитись, навіть якщо ядро ​​не панікує). А відповідь - це форма сторожового собаки за визначенням; вам потрібно активувати підсистему сторожового собаки (запускати перезавантаження, якщо /dev/watchdogїї не торкалися протягом певного часу). Див Documentation/watchdog/watchdog-api.txt.
Жиль "ТАК - перестань бути злим"

1
Так, у мене є сторожовий пес. Я просто встановлюю якомога більше мереж безпеки.
Шон Дж. Гофф

Будь-який спосіб відключення замість перезавантаження?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

@ ShawnJ.Goff завантажувач підтримує передачу цього параметра задовго до завантаження простору користувача. У будь-якому разі дивіться мою відповідь: unix.stackexchange.com/a/517364/6622
poige

5

Конфігураційний файл є самим файлом конфігурації завантаження (grub), оскільки це параметр, який викликається під час завантаження, і не можна очікувати, що його зчитувати з іншого конфігураційного файлу, поки файлова система не змонтована.

Однак, будучи ініціалізованим налаштуванням, час виконання також може бути змінено через sysctl. Отже, по суті оновлення /etc/sysctl.confпараметром kernel.panic = 3- це оновлення конфігурації.


1
гріха не у всіх системах; той, з ким я працюю, не використовує grub. Конфігурація мого завантажувача зберігається у спалах.
Шон Дж. Гофф

так, все-таки .. Чи може вона монтувати файлову систему та читати файл конфігурації ядра? якщо так, то там ви йдете. Тому що його завантажувач, який передає параметри ядра до ядра під час завантаження ядра.
Нікхіл Маллі


3

У Linux Kernel (я бачив 3 і вище) є варіант у .config. CONFIG_PANIC_TIMEOUTє параметром і за замовчуванням до 0. У цих версіях ядра Linux відповідь Лекенштейна також буде працювати. Але ця змінна береться від .configєдиної.

int panic_timeout = CONFIG_PANIC_TIMEOUT;

1

Ядро Linux підтримує CONFIG_CMDLINE_BOOL

Дозволити вказувати аргументи завантаження для ядра під час збирання. У деяких системах (наприклад, вбудованих) необхідно або зручно надавати деякі або всі аргументи завантаження ядра самим ядром (тобто не покладатися на завантажувач для їх надання.)

На цьому "порталі" є приклади, наприклад,

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored



0

спочатку укладайте інформацію з інших відповідей. значення визначається в kernel / panic.c і rw через sysctl. вона може передаватися як завантажувальна комбінація.

що я збираюся сказати, командний рядок завантаження може встановлювати значення за замовчуванням під час компіляції .

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