이런 일은 처음 겪었다.
오늘, 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 이 추가됐다. 뭐가 다른지는…? 위 설명을 읽어봐도 잘 모르겠다.