본문 바로가기

Linux is..../My Skills

SysRq의 개념과 사용법

전 직장에서 근무당시에 SK*쪽에서 상주근무를 하였는데, 당시에 나는 많은 준비가 안되어있었다.
더군다나 나는 운영(필요한 기술 튜닝, 권고사항, 보안, 성능분석 등등) 해당 분야에 미흡했기 때문에 많은 실수와 부분을 배워나갔다고 볼수 있다.

한달 두달 단순 커맨더에서 벗어나 알고리즘 및 아키텍쳐에 대해서 공부해 나아가야 겠다는 마음이 절실했던 순간이기도 하다.
그런 의미해서 당시 담당 매니저가 나에게 문의헸던 내용에 대해 답변했던 사항을 간단하게 글로써 풀고자 한다.

"Magic" SysRq key는 무엇인가?

Linux kernel문서에 따르면:
이것은 kernel의 정보를 나타나게 하는 콤보 키다. 일반적인 경우, 이 콤보 키를 이용하면 kernel이 무엇을 하고 있든지를 막론하고 즉시로 kernel의 정보를 나타낸다. 그런데 kernel이 완전히 lock되었다면 정보를 제때에 수집못할수 있다.
SysRq콤보 키는 kernel의 정보를 수집하는 가장 좋은 방법이다. 만약 system이 hang되었거나 kernel에 복잡한 issue가 생겼다면 이 콤보 키를 사용하는것이 가장 좋은 선택이다.

어떻게 sysrq 콤보 키를 활성화거나 비활성화 할것인가?
보안상의 고려로 하여 Red Hat Enterprise Linux에서는 이 기능의 비활성화를 기본수치로 하였다.
이 기능을 활성화 시키려면 아래의 명령을 참조해주길 바란다.

#echo 1 > /proc/sys/kernel/sysrq
비활성화 시키는 명령:

 #echo 0 > /proc/sys/kernel/sysrq
윗 방법은 임시적으로 설정하는 방법이다. 만약 재기동후에도 이 기능을 사용하고 싶다면 /etc/sysctl.conf에 해당 내용을 추가해야 한다.

kernel.sysrq = 1
SysRq기능을 사용하면 일부 physical console을 방문할수 있는 계정들이 특정된 기능이 추가되었기 때문에 보안상 문제가 생길수 있다. 일반적인 경우에는 이 기능을 사용하지 않기를 바란다.

어떻게 sysrq를 실행하나?
sysrq를 실행하는 여러가지 방법이 있다. 일반적인 system에서는 아래와 같은 콤보 키를 이용하여 event를 trigger시킨다.

Alt + PrintScreen + [CommandKey]
예를 들면, kernel의 정보를 출력하기 싶다면 m이라는 CommandKey를 사용해주시면 된다. Alt키와 Print Screen키를 동시에 누르시고 m키를 누르시면 된다. 
이 콤보 키는 X windows아래에서는 실행할수 없다. 그렇기 때문에 text virtual terminal로 바꾸신 다음 실행하면 된다. 
Ctrl + Alt + F1로 첫번째 virtual console로 전환한다음 sysrq조합키를 사용하시길 바란다.

만약 serial console에서 이 콤보 키를 사용하려면 Break signal를 보낸 다음 5초내로 sysrq 콤보 키를 사용하시면 된다.

만약 system의 root계정인 경우 /proc/sysrq-trigger파일을 이용하여 sysrq를 실행할수 있다.

#echo 'm' > /proc/sysrq-trigger
SysRq event가 실행한 결과는 어느곳에 나타난다?
SysRq command가 실행한 후 kernel은 해당 정보를 kernel ring buffer에 넣고 system console에 나타나게 한다. 일반적인 경우에 이 정보들은 syslog를 통해 /var/log/messages에 출력한다.

만약 syslogd가 정상적으로 실행되고 있지 않다면, 이 정보들은 /var/log/messages에 나타나게 되지 않을수도 있다. 
이런 경우에는 serial console을 이용하여 정보수집 하는것을 권장한다.

어떤 sysrq event를 실행할수 있나?

SysRq를 활성화 시킨 후 여러가지 기능을 사용할수 있다. 버전이 부동함에 따라 사용방법이 차이가 있지만 몇가지 기능은 공동한 방법으로 실행할수 있다.

• m - 메모리 할당에 대한 정보를 덤프
• t - thread 상태 정보를 덤프
• p - 현재 CPU의 registers와 flags를 덤프 
• c - 의도적으로 system을 crash시킴(diskdump거나 netdump를 사용할시 유용)
• s - 모든 mount된 file system을 즉시로 동기화
• u - 즉시로 모든 mount된 file system을 read-only모드로 remount.
• b - 즉시로 system을 재기동
• o - 즉시로 power off (설치한 상태에서 가능)
• f - Out Of Memory Killer를 기동(OOM)