본문 바로가기

About/Computer

Linux Magic SysRq Key Setting

o Magic SysRq Key란 무엇인가?
    - magic system request key 의 줄임말.
    - magical key combo를 말하는 것으로 해당 키를 누르게되면 커널이 무엇을
       하고 있던간에 커널이 완전히 죽은 경우가 아니라면, 바로 응답을 준다.

o 커널 컴파일옵션

make menuconfig -> Kernel Hacking -> Kernel Debugging 체크 -> Magic Sysrq Key 체크

* 일반적으로 배포되는 리눅스에는 위 옵션이 기본적으로 체크되어 있다. 따라서
   설치된 커널은 이미 sysrq 를 지원하도록 준비가 되어있는 셈이다.

o sysrq 활성화/비활성화
sysrq 를 run-time 에 enable / disable 할 수 있는데, 다음 명령을 사용한다.

enable : # echo 1 > /proc/sys/kernel/sysrq
disable : # echo 0 > /proc/sys/kernel/sysrq

o sysrq 사용
콘솔에서 <alt>-<sysrq>-"magic key" 를 누르면 된다.

o magic key 종류와 기능
magic key 에 해당하는 키와 그 기능을 살펴보면 다음과 같다.
(아래 내용은 커널 소스의 Documents/sysrq.txt 를 참조하였다.)

'r'     - 키보드 raw mode를 끄고 XLATE모드로 설정
          (상당히 제한적이며, 상/하 키 이벤트를 탐지할 수 없다. 모든 키에 대해 Ctrl/Alt/Shift를 처리할 수 없다)
          (* Quite limited, cannot detect key up/key down events. Doesn't handle ctrl/alt/shift for all keys.)
          -> X 서버 또는 svgalib 프로그램 Crash의 경우 편리함

'k'     - Secure Access Key (SAK), 현재 가상 콘솔 상의 모든 프로그램을 종료한다.
          (로그인시에 패스워드를 갈취하는 트로이목마 프로그램이 없기를 원할 때 유용하다.
           현재 가상 콘솔상의 모든 프로그램을 종료하여 트로이목마 프로그램이 실행한 것이 아닌 init에 의해
           실행된 로그인 프롬프트를 원할 경우)

'b'     - sync나 디스크의 마운트해제(unmount)없이 시스템을 즉시 reboot

'c'     - sync나 디스크의 마운트해제없이 의도적으로 시스템 crash를 일으킨다.
          이 키는 NETDUMP 클라이언트 패키지 또는 DISKDUMP 패키지가 설치되었다면 가장 유용하다

'o'     - 시스템을 끈다.(설정이 되어 있고 지원한다면).

's'     - 모든 마운트된 파일 시스템에 대해 sync 시도

'u'     - 모든 마운트된 파일 시스템을 읽기전용으로 마운트 시도

'p'     - 콘솔상에 현재 레지스터(register)와 플래그(flag)를 뿌려준다.

't'     - 콘솔상에 현재 작업 목록과 그 정보를 뿌려준다.

'm'   - 콘솔상에 현재 메모리 정보를 뿌려준다.

'v' - Dumps Voyager SMP processor info to your console.
        (Voyager SMP Processor가 뭔지.. 암튼 그 프로세서 정보를 콘솔에 뿌려준단다.)

'0'-'9' - 어떤 커널 메세지를 콘솔에 뿌려줄지 제어하는 콘솔 로그 레벨을 설정한다.
          ('0'의 경우 매우 긴급한 메시지만 콘솔상에 뿌려준다. syslogd/klogd가
           실행중이라면 계속 로그를 생성한다.(파일시스템에..))

'e'     - init 프로세스를 제외한 모든 프로세스에 SIGTERM 시그널을 보낸다.

'i'     - init 프로세스를 제외한 모든 프로세스에 SIGKILL 시그널을 보낸다.

'l'     - 모든 프로세스(init 포함)에 SIGKILL 시그널을 보낸다.(이를 수행한 후에 시스템은 동작하지 않음)

'h'     - 도움말을 표시한다.(실제로 위의 목록에 없는 key들은 도움말을 보여준다. 하지만 'h'가 기억하기 쉬움)

위에서 run-time 으로 sysrq ON/OFF 를 할 수 있는 방법을 얘기하였다. 하지만 이것은 reboot 후에는 적용되지
않는다. reboot 후에 적용되도록 하려면, 다음과 같은 방법을 사용한다.

1. /etc/sysctl.conf 파일을 직접 수정한다.

# vi /etc/sysctl.conf
  kernel.sysrq = 1 입력
# reboot

위와 같이 하면 reboot 후 항상 sysrq 가 enable 상태로 reboot 된다.


2. sysctl 명령어를 사용한다.

# sysctl -w kernel.sysrq=1

위 명령은 결국 /etc/sysctl.conf 에 kernel.sysrq=1 옵션을 기록해준다. 따라서 reboot 후에 적용된다.

만일 서버에 접속할 수는 있어도 콘솔은 없는 경우에 sysrq 를 사용하고 싶다면, 다음 파일을 사용하여 가능하다.

/proc/sysrq-trigger

말 그대로 sysrq-trigger 이다. 해당 파일의 permission 은 --w------ 이다. 즉 root 권한으로 쓰기만 가능하다.

echo b > /proc/sysrq-trigger 라고 하면 콘솔에서 <alt>-<sysrq>-"b" 를 누른것과 동일한 효과를 나타낸다. 즉 reboot 된다. 즉 sysrq-trigger 파일에 원하는 명령어를 써주면 바로 해당하는 sysrq 명령이 수행된다.

** 상기 내용은 http://blog.naver.com/pinocc/120037594446의 내용에 리눅스 커널문서중 sysrq.txt의 내용을
첨가하여 정리한 것임
** 더 상세한 내용은 sysrq.txt 내용을 보시기 바람.

'About > Computer' 카테고리의 다른 글

Apache 에서 가상 부하 테스트.  (1) 2011.12.21
tpmC (Transcation Processing Perfomance Council)  (1) 2011.12.16
[번역] 안드로이드의 고아들.  (3) 2011.11.02
vmstat 사용법  (0) 2011.03.04
Apple Battery Charger  (1) 2011.02.28