Как рано настроить ядро ​​Linux для перезагрузки при панике?

13

Вы можете поставить «panic = N» в командной строке ядра, чтобы система перезагрузилась через N секунд после паники.

Но есть ли опция конфигурации, чтобы указать это (кроме опции командной строки ядра по умолчанию), прежде чем даже загрузчик вступит в игру? Какой-то вариант ядра может быть?

Шон Дж. Гофф
источник
Возможно, через подсистему наблюдения за ядром?
Жиль "ТАК - перестань быть злым"
Файл конфигурации является самим файлом конфигурации загрузки (grub), поскольку он является параметром, вызываемым во время загрузки, и нельзя ожидать, что grub прочитает какой-либо другой файл конфигурации, пока файловая система не смонтирована.
Nikhil Mulley
Я полагаю, вы захотите перезагрузиться на другое ядро? Это потребует некоторого сотрудничества с загрузчиком, и в этот момент вы наверняка сможете передавать аргументы командной строки. Некоторые загрузчики могут быть настроены для перезагрузки на другое ядро ​​в случае сбоя загрузки (если пользовательская программа указывает загрузчику, что загрузка прошла успешно).
Жиль "ТАК - перестань быть злым"
Да, я буду загружаться либо в другое ядро, либо в ядро ​​с другим путем 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;
Lekensteyn
источник
Плохо
советоваться
19

От man proc:

/ Труды / SYS / ядро ​​/ паника

Этот файл предоставляет доступ на чтение / запись к переменной ядра panic_timeout. Если это ноль, ядро ​​зациклится на панике; если он не равен нулю, это означает, что ядро ​​должно перезагрузиться через это количество секунд. При использовании программного драйвера сторожевого устройства рекомендуемая настройка - 60.

jpalecek
источник
Я ищу здесь опцию конфигурации ядра, а не что-то из пространства пользователя. В частности, если по какой-то причине он не может смонтировать корневую файловую систему (или по какой-то другой причине, пользовательское пространство никогда не появляется), мне нужно его перезагрузить.
Шон Дж. Гофф
@ ShawnJ.Goff Если вы также обеспокоены тем, что пользовательское пространство не появится, вы задаете неправильный вопрос (вы хотите перезагрузиться, даже если ядро ​​не паникует). И ответ - форма сторожевого пса по определению; Вам необходимо активировать подсистему сторожевого таймера (вызывая перезагрузку, если /dev/watchdogона не была нажата в течение некоторого времени). См Documentation/watchdog/watchdog-api.txt.
Жиль "ТАК - перестань быть злым"
1
Да, у меня есть сторожевой пес. Я просто ставлю как можно больше защитных сеток.
Шон Дж. Гофф
Есть ли способ выключения вместо перезагрузки?
Сиро Сантилли 新疆 改造 中心 法轮功 六四 事件
Загрузчик @ ShawnJ.Goff поддерживает передачу этого параметра задолго до загрузки пространства пользователя. В любом случае, увидеть мой ответ: unix.stackexchange.com/a/517364/6622
poige
5

Файл конфигурации является самим файлом конфигурации загрузки (grub), поскольку он является параметром, вызываемым во время загрузки, и нельзя ожидать, что grub прочитает какой-либо другой файл конфигурации, пока файловая система не смонтирована.

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

Никхил Мулли
источник
1
харч есть не на всех системах; тот, с кем я работаю, не использует grub. Конфигурация моего загрузчика хранится во флэш-памяти.
Шон Дж. Гофф
да еще .. может ли он смонтировать файловую систему и прочитать файл конфигурации ядра? если да, то поехали Потому что это загрузчик, который передает параметры ядра ядру при загрузке ядра.
Nikhil Mulley
3

В ядре Linux, (я видел в 3 и выше) есть опция в .config. CONFIG_PANIC_TIMEOUTэто параметр и по умолчанию 0. В этих версиях ядра Linux ответ Лекенштейна также будет работать. Но эта переменная берет из .configединственного.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
источник
1

Поддерживает ядро ​​Linux CONFIG_CMDLINE_BOOL

Разрешить указывать загрузочные аргументы для ядра во время сборки. В некоторых системах (например, встроенных) необходимо или удобно предоставлять некоторые или все аргументы загрузки ядра вместе с самим ядром (то есть не полагаться на загрузчик для их предоставления).

Даже на этом "портале" есть несколько примеров, например,

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

poige
источник
0

Вы можете использовать этот патч, который добавляет опцию конфигурации.

mgalgs
источник
0

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

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

把 友情 留 在 无 盐
источник