power / knowledge

NUT이 FSD를 걸고 실제로 꺼지기까지의 순서

paul 2025.10.07 262words (1m)

정전이 길어져서 배터리가 바닥나면 NUT이 FSD(forced shutdown)를 선언한다. 여기서 바로 전원이 끊기는 게 아니라 단계가 있다.

text
FSD → HOSTSYNC → FINALDELAY → SHUTDOWNCMD
                            → OFFDELAY

각 구간에 걸리는 값이 따로 있고, 이걸 잘못 잡으면 아직 안 꺼진 기계가 있는데 UPS가 전원을 끊는다.

값의 의미

항목 위치 의미
HOSTSYNC upsmon.conf primary가 secondary들에게 신호를 보내고 기다리는 시간. secondary 입장에서는 FSD가 안 오는데 배터리가 바닥이면 혼자 꺼지기까지 기다리는 시간
FINALDELAY upsmon.conf 종료 알림을 보내고 실제 SHUTDOWNCMD 를 실행하기까지
OFFDELAY ups.conf FSD 이후 UPS가 출력을 끊기까지
ONDELAY ups.conf 전기가 돌아온 뒤 UPS가 출력을 다시 넣기까지
DEADTIME upsmon.conf 이 시간 동안 소식이 없으면 죽은 것으로 본다. POLLFREQ 값들 중 큰 쪽의 3배 정도로 잡는 게 관례다

실제로 넣은 값

bash
# primary
HOSTSYNC 15
FINALDELAY 5
OVERDURATION 60
bash
# ups.conf
offdelay = 240
ondelay = 120
bash
# secondary
FINALDELAY 0

offdelay 를 240으로 잡은 게 핵심이다. Proxmox에서 VM의 shutdown timeout을 180초로 잡아뒀기 때문이다. VM들이 다 내려가는 데 최대 180초가 걸리는데 UPS가 그 전에 전원을 끊으면 아무 의미가 없다. 여기에 60초를 더 얹어 여유를 뒀다.

secondary의 FINALDELAY 는 0으로 뒀다. primary가 이미 HOSTSYNC 만큼 기다려주므로 secondary가 또 기다릴 이유가 없다. 오히려 빨리 꺼지는 편이 낫다.

OVERDURATION 60 은 과부하 상태에서 UPS와 통신도 안 되는 상황이 60초 넘게 이어지면 critical로 보라는 뜻이다.

POWERDOWNFLAG

bash
POWERDOWNFLAG /run/nut/killpower

종료 과정에서 이 파일이 생기고, 시스템이 마지막에 이 파일을 보고 UPS에 전원을 끊으라고 알린다. primary와 secondary 양쪽에 같은 경로로 둔다.