SysRq 사용법

**SysRq(System Request)**는 리눅스 커널에 내장된 긴급 제어 백도어이다. 커널이 응답하지 않거나 시스템이 매우 불안정할 때도, SysRq 키 조합을 통해 시스템을 진단하거나 복구할 수 있도록 도와주는 기능을 한다.

이 글에서는 SysRq의 개념부터 시작해 활성화 방법, 각 명령어의 사용법, 시리얼 터미널 및 프로그래밍적으로 사용하는 방법등에 대해 알아본다.

SysRq ?

SysRq는 리눅스 커널에 탑재된 긴급 커널 제어 명령 도구이다. 사용자나 개발자가 커널이 반응하지 않는 상황에서도 시스템을 복구하거나 상태를 덤프하는 명령을 실행할 수 있게 한다.

커널 패닉, 디스크 I/O 중단, 커널 히스 등에서도 Alt + SysRq + <key> 입력으로 명령을 실행할 수 있음.


SysRq 사용 환경

구분설명
GUI 환경일반 키보드에서 Alt + SysRq + <키>
시리얼 콘솔BREAK 시그널 후 SysRq 키 입력
프로그램에서 호출/proc/sysrq-trigger 사용 또는 커널 API

SysRq 활성화 방법

1. 일시적으로 활성화

echo 1 > /proc/sys/kernel/sysrq

기본값은 0 (비활성화), 1이면 전체 기능 활성화.

2. sysctl.conf에 등록 (재부팅 후 유지)

echo "kernel.sysrq = 1" >> /etc/sysctl.conf
sudo sysctl -p

3. 설정 값 의미

설명
0비활성화
1전체 기능 사용 가능
2~255특정 기능만 허용 (비트 조합)

예:

echo 16 > /proc/sys/kernel/sysrq

→ crash dump (c)만 허용됨.


SysRq 명령어 종류 및 설명

SysRq 명령은 다음과 같은 키 조합으로 실행된다.

Alt + SysRq +

설명
b즉시 재부팅 (reboot)
o시스템 전원 종료 (power off)
s디스크 sync (flush)
u마운트 해제 (read-only remount)
e모든 프로세스 SIGTERM 전송
i모든 프로세스 SIGKILL 전송
t프로세스 트리 덤프
m메모리 상태 출력
c강제 커널 크래시 (panic)
h도움말 출력
w블로킹된 태스크 출력
l현재 CPU 백트레이스 출력
r키보드 Raw 모드 해제
k현재 콘솔 강제 종료
fOOM Killer 실행

사용 예제

1. 시스템 재부팅

echo b > /proc/sysrq-trigger

2. 강제 커널 크래시 (panic)

echo c > /proc/sysrq-trigger

crashdump 환경에서 사용

3. 디스크 상태 안전하게 저장 후 재부팅

echo s > /proc/sysrq-trigger
echo u > /proc/sysrq-trigger
echo b > /proc/sysrq-trigger

시리얼 콘솔에서의 SysRq

원리

  1. BREAK 시그널 전송
  2. 1초 내 SysRq 명령 키 전송

실행 흐름

Host (miniterm, cutecom 등)
└─> BREAK
└─> 'b' 입력 → reboot

pyserial 예제 (Ctrl+B로 BREAK 전송)

import serial
ser = serial.Serial('/dev/ttyUSB0', 115200)
ser.send_break()
ser.write(b'b')

커널 로그: SysRq : Resetting

pyserial-miniterm 에 SysRq를 위한 send BREAK를 추가하는 방법은 아래 글을 참고한다.


SysRq 프로그래밍 인터페이스

1. 사용자 공간: /proc/sysrq-trigger

echo m > /proc/sysrq-trigger

2. 커널 모듈에서 호출

#include <linux/sysrq.h>

handle_sysrq('m'); // 메모리 정보 출력

3. 사용자 정의 SysRq 등록

static void my_sysrq_handler(int key) {
printk(KERN_INFO "Custom SysRq key pressed!\n");
}

static struct sysrq_key_op my_op = {
.handler = my_sysrq_handler,
.help_msg = "x - Custom SysRq",
.action_msg = "SysRq custom",
.enable_mask = SYSRQ_ENABLE_ALWAYS,
};

register_sysrq_key('x', &my_op);

문제 해결

증상원인해결책
SysRq 키 입력 무반응기능 비활성화/proc/sys/kernel/sysrq 확인
시리얼 BREAK 무반응드라이버 미지원USB-UART 종류 변경
reboot 실패udev/mount 진행 중s, ub 실행
로그 누락콘솔 버퍼 부족dmesg -w 또는 netconsole 활용

SysRq 작동 구조


참고

답글 남기기