Linux Server: sudo reboot 명령이 작동하지 않을 때.

이런 일은 처음 겪었다.
오늘, ssh 접속하여 sudo reboot 을 시행했는데, 아무런 반응이 없었다. ssh 가 끊어지지도 않고, 진행되지도 않고.

다른 터미널에서 접속해봐도 여전히 접속은 된다. 그러나 reboot 는 되지 않는다.

이런 일들이 생각보다 많이 있나 보다.
내 눈앞에 있는 하드웨어라면, Magic SysRq Key (Alt-PrtScr-REISUB)를 누르면 된다. 그러나 서버로는 이게 불가능하다.
그런데, 물리 키보드가 없어도 이게 가능하다고 한다.

$ sudo -i
# echo b > /proc/sysrq-trigger

이러면 즉각 재부팅이 된다. 하지만, 이렇게 하면 디스크 Unmount 가 되지 않은 상황이기 때문에 손상이 발생할 수도 있다.

따라서, 다음 두 작업을 먼저 실행해주는 편이 좋겠다.

$ sudo -i
# echo s > /proc/sysrq-trigger
# echo u > /proc/sysrq-trigger
# echo b > /proc/sysrq-trigger
  • s : Sync all mounted filesystems
  • u : Remount all mounted filesystems in read-only mode (Unmount)
  • b : reboot

이건, REISUB 에서 나머지 SUB 이다.

또, 이게 가능하려면 /proc/sys/kernel/sysrq 값이 0 보다 커야 한다. 우분투 및 아치리눅스는 이 값을 176 으로 설정해놨는데, 이 값은 /etc/sysctl.d/10-magic-sysrq.conf 에서 조정할 수 있다.
만약 이 값이 0 이면, 임의로 1(enable all functions of sysrq)로 할당한 뒤 위 작업을 수행한다.

$ cat /proc/sys/kernel/sysrq
0
$ sudo sh -c 'echo 1 > /proc/sys/kernel/sysrq' # 또는 sudo -i 한 후 실행.

그런데, 우분투의 기본값인 176이 뜻하는 바는? conf 파일에 설명이 나와있지만, 그대로 옮겨본다.

# Here is the list of possible values:
#   0 - disable sysrq completely
#   1 - enable all functions of sysrq
#  >1 - enable certain functions by adding up the following values:
#          2 - enable control of console logging level
#          4 - enable control of keyboard (SAK, unraw)
#          8 - enable debugging dumps of processes etc.
#         16 - enable sync command
#         32 - enable remount read-only
#         64 - enable signalling of processes (term, kill, oom-kill)
#        128 - allow reboot/poweroff
#        256 - allow nicing of all RT tasks

176 = 16 + 32 + 128 로, sync/remount/reboot 만 가능하게 설정되어 있다.
그러니, REISUB 을 모두 눌러도 결국 나중 3개(SUB)만 실행되는 거였네.


Ubuntu 22.04 에선 이 값이 438 로 설정돼 있다.
근거(출처)는 찾지 못했지만, 간단한 산수를 해본 결과, 438 은 다음 값들의 합이다.

2 + 4 + 16 + 32 + 128 + 256

전과 비교해서 2, 4, 256 이 추가됐다. 뭐가 다른지는…? 위 설명을 읽어봐도 잘 모르겠다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.