공황 상태에서 재부팅하도록 Linux 커널을 조기에 구성하는 방법은 무엇입니까?


13

커널 명령 줄에 "panic = N"을 넣어 패닉 발생 후 N 초 후에 시스템을 재부팅 할 수 있습니다.

그러나 부트 로더조차도 작동하기 전에 이것을 지정하는 구성 옵션이 있습니까 (기본 커널 명령 행 옵션 제외)? 일부 커널 옵션은 무엇입니까?


아마도 커널 워치 독 서브 시스템을 통해?
Gilles 'SO- 악마 그만'

구성 파일은 부팅시 호출되는 매개 변수이므로 파일 시스템이 마운트되지 않은 동안 다른 구성 파일에서 읽을 수 없기 때문에 부팅 (grub) 구성 파일 자체입니다.
Nikhil Mulley

다른 커널로 재부팅하고 싶다고 생각하십니까? 그것은 부트 로더로부터 약간의 협력을 필요로 할 것이며, 그 시점에서 반드시 명령 행 인수를 전달할 수있을 것입니다. 부팅이 실패하면 사용자 부트 로더가 부트 로더에 부트 성공을 알리도록하여 일부 부트 로더를 다른 커널로 재부팅하도록 설정할 수 있습니다.
Gilles 'SO- 악마 그만해'

예, 다른 커널로 부팅하거나 커널에 다른 rootfs 경로를 지정합니다. 부트 로더 설정에는 사용자 공간이 성공적으로 부팅 될 때 변경되는 변수가 있습니다. 변경되지 않으면 다른 것을 시도하는 것을 알고 있습니다. 부트 로더의 구성은 Linux 사용자 공간에서 수정할 수 있기 때문에 커널 명령 줄 이상의 것을 원했습니다. 문제가있는 경우 사용자 공간에서 쓰기를 시작한 후 장치의 전원이 꺼 졌을 수 있습니다. 이에 대한 대체 기본 구성이 있습니다. 나는 여전히 이것을 얻을 수있는 가장 견고한 찾고 있습니다.
Shawn J. Goff

답변:


2

그러한 구성 옵션이없는 것 같습니다. http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 에 따르면 기본 시간 초과는 0 이며 "영원히 대기"입니다.

이 옵션은 kernel / panic.c에 정의되어 있으며 , 초기 값을 다른 것으로 설정하는 패치를 작성할 수 있습니다.

3 초 후에 재부팅을 하드 코딩하려면 다음을 변경하십시오.

int panic_timeout;

에:

int panic_timeout = 3;

특별한 메커니즘이있을 때 소스를 다루는
poige

19

보낸 사람 man proc:

/ proc / sys / kernel / panic

이 파일은 커널 변수 panic_timeout에 대한 읽기 / 쓰기 액세스를 제공합니다. 이것이 0이면 커널은 공황 상태를 반복합니다. 0이 아닌 경우이 시간 (초) 후에 커널이 자동 재부팅되어야 함을 나타냅니다. 소프트웨어 워치 독 장치 드라이버를 사용하는 경우 권장 설정은 60입니다.


사용자 공간이 아닌 커널 구성 옵션을 찾고 있습니다. 특히 어떤 이유로 루트 파일 시스템을 마운트 할 수없는 경우 (또는 다른 이유로 사용자 공간이 나타나지 않는 경우) 재부팅해야합니다.
Shawn J. Goff

@ ShawnJ.Goff 만약 사용자 공간이 오지 않을까 걱정된다면, 잘못된 질문을하고있는 것입니다 (커널이 패닉 상태가 아니더라도 재부팅하고 싶습니다). 그리고 그 대답은 정의에 의한 일종의 감시입니다. 워치 독 하위 시스템을 활성화해야합니다 ( /dev/watchdog한동안 터치하지 않은 경우 재부팅 트리거 ). 참조하십시오 Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- 악마 그만해'

1
네, 감시견이 있습니다. 가능한 한 많은 안전망을 배치하고 있습니다.
Shawn J. Goff

재부팅 대신 종료하는 방법이 있습니까?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

@ ShawnJ.Goff 부트 로더는 사용자 공간이 부팅되기 오래 전에이 매개 변수의 전달을 지원합니다. 어쨌든, 내 대답을 참조하십시오 : unix.stackexchange.com/a/517364/6622
poige

5

구성 파일은 부팅시 호출되는 매개 변수이므로 파일 시스템이 마운트되지 않은 동안 다른 구성 파일에서 읽을 수 없기 때문에 부팅 (grub) 구성 파일 자체입니다.

그러나 초기화 된 설정이므로를 통해 런타임을 수정할 수도 있습니다 sysctl. 따라서 기본적 /etc/sysctl.conf으로 매개 변수 kernel.panic = 3를 사용하여 업데이트하는 것이 구성 업데이트입니다.


1
grub이 모든 시스템에있는 것은 아닙니다. 내가 작업하고있는 것은 grub을 사용하지 않습니다. 부트 로더 설정이 플래시에 저장됩니다.
Shawn J. Goff

그래, 그래도 .. 파일 시스템을 마운트하고 커널 설정 파일을 읽을 수 있는가? 그렇다면, 거기 있습니다. 커널을로드하는 동안 커널 매개 변수를 커널로 전달하는 부트 로더이기 때문입니다.
Nikhil Mulley


3

Linux Kernel에서는 (3 이상에서 보았습니다)에 옵션이 .config있습니다. CONFIG_PANIC_TIMEOUT매개 변수이며 기본값은 0입니다. 이 버전의 Linux 커널에서는 Lekensteyn의 답변도 효과가 있습니다. 그러나 그 변수는 .config유일한 것입니다.

int panic_timeout = CONFIG_PANIC_TIMEOUT;



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.