매직 SysRq 키

SysRq 키 **매직 SysRq 키**(Magic SysRq key)는 리눅스 커널이 이해하는 키 조합으로, 시스템 상태와 관계없이 사용자가 다양한 낮은 수준의 명령을 수행할 수 있게 한다. 이는 종종 시스템 멈춤에서 복구하거나, 파일 시스템을 손상시키지 않고 컴퓨터를 재부팅하는 데 사용된다.accessdate=2017-05-21 이 키 조합은 재해 복구를 위한 기능에 접근할 수 있게 한다. 이러한 의미에서, 이는 이스케이프 시퀀스의 한 형태로 볼 수 있다. 제공되는 주요 명령은 파일 시스템을 강제로 언마운트하고, 프로세스를 종료하며, 키보드 상태를 복구하고, 기록되지 않은 데이터를 디스크에 쓰는 수단이다. 매직 SysRq 키는 커널 패닉.이나 커널이 제대로 실행되는 것을 방해하는 하드웨어 오류와 같은 특정 조건에서는 작동할 수 없다.
# 구현
리눅스 커널에는 매직 SysRq 기능을 구현하는 `sysrq.c`가 포함되어 있다.language=en 매직 SysRq 기능은 드라이버 코드의 낮은 수준에서 직렬 장치에 의해 호출된다.language=enlanguage=en
# 명령
키 조합은 SysRq와 명령을 제어하는 또 다른 키로 구성된다. Alt 키를 계속 누르고 있는 한, 명령 키를 누르기 전에 SysRq 키를 놓을 수 있다. 이 조합은 항상 QWERTY 키보드 레이아웃을 전제로 한다. 예를 들어, 드보락 자판에서는 시스템을 종료하는 조합이 O 키 대신 R 키를 사용한다. 또한, 일부 키보드에는 별도의 SysRq 키가 없을 수 있다. 이 경우, 별도의 PrtScn 키가 있어야 한다. 일부 장치, 특히 랩톱에서는 매직 SysRq 키를 사용하기 위해 Fn 키를 눌러야 할 수 있다. 예를 들어, 씽크패드 카본 X1에서는 SysRq가 S를 동시에 누른 다음, Alt를 계속 누른 상태에서 Fn과 S를 놓으면 활성화된다.language=en SysRq 기능은 키보드 없이도 접근할 수 있다. 아래의 Other ways to invoke Magic SysRq를 참조한다. 일부 명령은 `/proc/sys/kernel/sysrq`의 비트마스크 값에 지정된 대로 기본적으로 비활성화될 수 있다는 점에 유의한다.website=www.kernel.org {| class="wikitable" |- ! 동작 ! QWERTY ! 드보락 ! AZERTY ! 콜맥 |- | 콘솔에 출력되는 커널 메시지의 유형을 제어하는 콘솔 로그 레벨 설정 | 0 – 9 | 0 – 9 | 0 – 9
(shift 없이) | 0 – 9 |- | 파일 시스템을 언마운트하거나 동기화하지 않고 시스템을 즉시 재부팅 | b | x | b | b |- | 시스템 충돌 수행. 구성된 경우 충돌 덤프가 발생한다. | c | j | c | c |- | 현재 유지되고 있는 모든 락 표시 (CONFIG_LOCKDEP 커널 옵션 필요) | d | e | d | s |- | init (PID 1)을 제외한 모든 프로세스에 SIGTERM 신호 전송 | e | . | e | f |- | oom_kill 호출, OOM 상태를 완화하기 위해 프로세스를 종료 | f | u | f | t |- | 커널 모드 설정을 사용하는 경우, 커널의 프레임 버퍼 콘솔로 전환한다.accessdate = 2013-08-31
커널 내 디버거 kdb가 존재하면 디버거로 진입한다. | g | i | g | d |- | 콘솔에 간략한 도움말 문서 출력
명령에 바인딩되지 않은 모든 키도 이 동작을 수행한다 | h | d | h | h |- | init (PID 1)을 제외한 모든 프로세스에 SIGKILL 신호 전송 | i | c | i | u |- | FIFREEZE ioctl에 의해 고정된 파일 시스템을 강제로 "해동"한다. | j | h | j | n |- | 현재 가상 콘솔의 모든 프로세스 종료 (X 및 SVGAlib 프로그램 종료 가능, 아래 참조)
이는 원래 보안 주의 키를 모방하도록 설계되었다 | k | t | k | e |- | 모든 활성 CPU에 대한 스택 역추적을 보여준다. | l | n | l | i |- | 현재 메모리 정보를 콘솔에 출력 | m | m | , | m |- | 모든 우선순위 높은 작업 및 실시간 작업의 nice 레벨 재설정 | n | b | n | k |- | 시스템 종료 | o | r | o | y |- | 현재 레지스터 및 플래그를 콘솔에 출력 | p | l | p | ; |- | 모든 활성 고해상도 타이머 및 클럭 소스 표시. | q | ' | a | q |- | X11 및 SVGALib과 같은 프로그램에서 사용하는 원시 모드에서 XLATE 모드로 키보드 전환 | r | p | r | p |- | 모든 마운트된 파일 시스템 동기화 | s | o | s | r |- | 현재 작업 목록 및 해당 정보를 콘솔에 출력 | t | y | t | g |- | 모든 마운트된 파일 시스템을 읽기 전용 모드로 다시 마운트 | u | g | u | l |- | 프레임 버퍼 콘솔 강제 복원.
ARM 프로세서의 경우, ETM 버퍼 덤프를 대신 발생시킨다. | v | k | v | v |- | 차단된 (D 상태) 작업 목록 표시 | w | , | z | w |- | 파워PC 플랫폼의 xmon 인터페이스에서 사용.
sparc64에서 전역 PMU 레지스터 표시.
MIPS에서 모든 TLB 항목 덤프.access-date=2022-09-25 | x | q | x | x |- | 전역 CPU 레지스터 표시 (SPARC-64 특정) | y | f | y | j |- | ftrace 버퍼 덤프 | z | ; | w | z |- | BPF 스케줄러 디버그 덤프 | D | Dunno | Dunno | Dunno |- | 콘솔에서 커널 로그 메시지 재생 | R | Dunno | Dunno | Dunno |- | BPF 스케줄러를 비활성화하고 CFS로 되돌리기 | S | Dunno | Dunno | Dunno |} h 명령의 예시 출력: sysrq: HELP : loglevel(0-9) reboot(b) crash(c) terminate-all-tasks(e) memory-full-oom-kill(f) kill-all-tasks(i) thaw-filesystems(j) sak(k) show-backtrace-all-active-cpus(l) show-memory-usage(m) nice-all-RT-tasks(n) poweroff(o) show-registers(p) show-all-timers(q) unraw(r) sync(s) show-task-states(t) unmount(u) force-fb(v) show-blocked-tasks(w) dump-ftrace-buffer(z) dump-sched-ext(D) replay-kernel-logs(R) reset-sched-ext(S)
# 설정
이 기능은 커널 구성의 컴파일 시간 옵션인 CONFIG_MAGIC_SYSRQ와 Sysctl 커널 매개변수인 kernel.sysrq에 의해 제어된다. 최신 커널 (2.6.12 이후accessdate=2013-08-31 )에서는 매직 SysRq 키가 어떻게 사용될 수 있는지에 대해 더 세밀하게 제어할 수 있다.accessdate=2015-04-09 이러한 시스템에서는 /proc/sys/kernel/sysrq에 기록된 숫자가 0, 1 또는 1보다 큰 숫자일 수 있으며, 이는 어떤 기능을 허용할지를 나타내는 비트마스크이다. 우분투에서는 부팅 시 /etc/sysctl.d/10-magic-sysrq.conf에 정의된 값으로 설정된다.
# 용도
저널링 파일 시스템이 등장하기 전에는 매직 SysRq 키의 일반적인 용도 중 하나는 잠긴 리눅스 컴퓨터를 안전하게 재부팅하는 것 (**REISUB**이라는 니모닉으로 표시되는 키 누름 시퀀스 사용)으로, 파일 시스템 손상 위험을 줄였다. 최신 파일 시스템에서는 동기화 및 언마운트가 플러시되지 않은 데이터를 디스크에 강제로 쓰는 데 여전히 유용하지만, 파일 시스템 손상을 방지하는 데 더 이상 필요하지 않다 (그리고 멈춤이 커널의 불량 상태로 인해 발생하는 경우 손상 위험을 증가시킬 수 있다).date = 2019-09-06 우분투와 데비안 같은 배포판에서 kernel.sysrq의 기본값은 각각 176 (동기화, 언마운트, 재부팅 기능 허용) 및 438access-date=August 20, 2024 (동기화, 언마운트, 재부팅 기능 외에 로그레벨, 언로우, 나이스-올-RT-태스크 허용)으로 유지된다. 과거의 또 다른 용도는 정지된 그래픽 프로그램을 종료하는 것이었다. 이는 X 윈도 시스템이 그래픽 모드와 입력 장치에 대한 완전한 제어권을 가지고 있었기 때문이다. 텍스트 모드 명령을 포함하지 않는 배포판에서는 F1 키 시퀀스가 텍스트 콘솔로 강제 전환할 수 있다. 일부 시스템에서는 F1 대신 F2 또는 F3을 사용해야 할 수 있다.
# 매직 SysRq를 호출하는 다른 방법
매직 SysRq 키는 원래 디버깅을 위해 커널의 키보드 핸들러의 일부로 구현되었지만, 이 기능은 proc 파일 시스템을 통해서도 노출되었으며, 헤드리스 및 원격 시스템에 확장된 관리 기능을 제공하는 데 일반적으로 사용된다. 사용자 공간 프로그램 (예: 명령줄 셸)에서 SysRq는 /proc/sysrq-trigger에 쓰기(예: echo s > /proc/sysrq-trigger)를 통해 접근할 수 있다. 많은 임베디드 시스템에는 키보드가 연결되어 있지 않지만, 실행 중인 시스템에 텍스트를 입력/출력하기 위해 직렬 콘솔을 사용한다. 직렬 브레이크 신호를 보낸 다음 원하는 키를 눌러 직렬 콘솔을 통해 매직 SysRq 기능을 호출할 수 있다. 브레이크를 보내는 방법은 직렬 콘솔에 연결하는 데 사용되는 터미널 프로그램이나 하드웨어에 따라 다르다. 이 기능을 활성화하려면 Sysctl 옵션을 설정해야 한다.accessdate = 2015-05-08 리눅스 데몬 sysrqdaccessdate= 2016-09-13 및 tcpconsoleurl-status = dead은 일반 텍스트 암호로 인증한 후 TCP 연결을 통해 SysRq 기능에 접근하는 방법을 제공한다. hangwatchaccessdate = 2013-08-31 데몬은 시스템 부하 평균이 특정 임계값을 초과할 때 미리 구성된 SysRq 트리거를 호출한다. 젠 하이퍼바이저는 xm sysrq 명령을 통해 호스트된 도메인에 매직 명령을 전송하는 기능을 가지고 있다. 또한, O 뒤에 원하는 키를 보내는 브레이크 시퀀스를 통해 젠 파라버추얼 콘솔에서 SysRq 명령을 호출할 수 있다. KVM 하이퍼바이저는 virsh send-key 명령을 통해 호스트된 도메인에 매직 명령을 전송하는 기능을 가지고 있다.website=docs.redhat.com 예:
virsh send-key --domain domainname --keycode KEY_LEFTALT KEY_SYSRQ KEY_S 크롬북에는 키보드가 있지만 전용 SysRq 키는 없다. 대신 볼륨 업 (F10)을 사용한다.accessdate = 2018-10-22accessdate = 2016-07-11accessdate = 2016-07-11 하지만 일부 키는 다른 기능을 가지고 있다.accessdate = 2018-09-25accessdate = 2018-04-12 IBM 파워 시스템즈 서버는 하드웨어 관리 콘솔에서 O 뒤에 원하는 키를 사용하여 매직 SysRq 기능을 호출할 수 있다. IBM 메인프레임 파티션은 3270 또는 HMC에서 - 뒤에 원하는 키를 사용하여 매직 SysRq 기능을 호출할 수 있다.