본문 바로가기

개발/Server Side

Safe Reboot - Magic SysRq Key

magic SysRq key는 시스템 상태에 상관 없이 사용자가 low level command를 수행할 수 있도록 해주는 커널 내부에서의 키 조합이다.
(The magic SysRq key is a key combination in the Linux kernel which allows the user to perform various low level commands regardless of the system’s state.)

이것은 시스템을 복구하거나 파일시스템을 손상시키지 않고 재부팅 할 때 사용된다. 키 조합은 Alt+SysRq+CommndKey로 구성된다. 대부분의 시스템에서 SysRq 키는 printscreen 키이다.
(It is often used to recover from freezes, or to reboot a computer without corrupting the filesystem. The key combination consists of Alt+SysRq+commandkey. In many systems the SysRq key is the printscreen key.)

1. SysRq 키를 enable 한다.

$ echo "1" > /proc/sys/kernel/sysrq


CommandKey 리스트
  * ‘k’ – 현재 가상 콘솔에서 실행중인 모든 프로세스 강제 종료(Kills all the process running on the current virtual console.)
  * ’s’ – 마운트 되어있는 모든 파일 시스템 동기화(This will attempt to sync all the mounted file system.)
  * ‘b’ - 파티션 언마운트나 동기화 없이 즉시 리부팅(Immediately reboot the system, without unmounting partitions or syncing.)
  * ‘e’ – init을 제외한 모든 프로세스에게 SIGTERM 시그널 보내기(Sends SIGTERM to all process except init.)
  * ‘m’ – 현재 메모리 상태 정보 출력(Output current memory information to the console.)
  * ‘i’ - init을 제외한 모든 프로세스에게 SIGKILL 시그널 보내기(Send the SIGKILL signal to all processes except init)
  * ‘r’ - 키보드를 raw 모드(X11)에서 XLATE 모드로 전환(Switch the keyboard from raw mode (the mode used by programs such as X11), to XLATE mode.)
  * ’s’ – 마운트된 모든 파일시스템 동기화(sync all mounted file system.)
  * ‘t’ - 현재 task들과 그 정보를 출력(Output a list of current tasks and their information to the console.)
  * ‘u’ - 마운트 되어있는 모든 파일 시스템을 읽기 전용으로 다시 마운트(Remount all mounted filesystems in readonly mode.)
  * ‘o’ – 시스템 즉시 셧다운(Shutdown the system immediately.)
  * ‘p’ – 현재 레지스터와 flag들 출력(Print the current registers and flags to the console.)
  * ‘0-9′ - 콘솔 로그레벨 설정. (Sets the console log level, controlling which kernel messages will be printed to your console.)
  * ‘f’ - 메모리를 많이 차지하는 프로세스를 죽이기 위해 oom_kill 호출(Will call oom_kill to kill process which takes more memory.)
  * ‘h’ – 도움말 출력(Used to display the help. But any other keys than the above listed will print help.)

키를 조합하는 것 대신에 /proc/sysrq-trigger 파일에 echo 하는 것으로도 같은 동작을 수행할 수 있다. 예로써, 시스템을 리부팅하기 위해 다음과 같이 입력하면 된다.
(We can also do this by echoing the keys to the /proc/sysrq-trigger file. For example, to re-boot a system you can perform the following.)
$ echo "b" > /proc/sysrq-trigger

리눅스에서 "safe reboot"를 수행하기 위해서는 다음과 같이 하면 된다. 이렇게 하면 다음 부팅때 fsck 하는 것을 피할 수 있다. 즉, Alt+SysRq 키를 누르고 다음에 진하게 표시된 문자들을 순서대로 누른다.
(To perform a safe reboot of a Linux computer which hangs up, do the following. This will avoid the fsck during the next re-booting. i.e Press Alt+SysRq+letter highlighted below.)
o unRaw : X11로부터 키보드 컨드롤 가져오기(take control of keyboard back from X11)
o tErminate : 프로세스가 정상 종료 하도록 모든 프로세스에게 SIGTERM 시그널 보내기(send SIGTERM to all processes, allowing them to terminate gracefully)
o kIll : 프로세스가 즉시 종료하도록 모든 프로세스에게 SIGKILL 시그널 보내기 (send SIGKILL to all processes, forcing them to terminate immediately)
o Sync : 디스크 동기화(flush data to disk),
o Unmount : 모든 파일 시스템을 읽기 전용으로 다시 마운트(remount all filesystems read-only),
o reBoot : 재부팅