본문 바로가기
IT/HomeLabs

[HomeLabs] Proxmox UPS 연동: NUT 설정으로 홈랩 자동 종료 구성하기

by 수누다 2026. 7. 3.

Proxmox UPS 연동: NUT 설정으로 홈랩 자동 종료 구성하기

홈랩을 오래 굴리다 보면 한 번쯤은 정전이나 순간 전압 강하 때문에 식은땀이 나는 순간이 오더라고요. 특히 Proxmox UPS 연동을 안 해둔 상태에서 갑자기 전원이 나가면, 가상머신(VM, Virtual Machine)이나 컨테이너(CT, Container)가 비정상 종료되면서 파일시스템이 꼬이거나, 다음 부팅 때 예상치 못한 복구 작업이 걸릴 수 있어요. 저도 처음엔 "UPS만 꽂아두면 되는 거 아닌가?" 싶었는데, 실제로 써보니까 무정전 전원 장치와 하이퍼바이저(Hypervisor, 가상화 호스트) 사이의 신호 전달이 제대로 돼야 비로소 의미가 있더라고요.

이번 글에서는 제가 홈랩에서 정리해둔 방식 기준으로, Proxmox VE와 UPS를 연동해서 Proxmox 자동 종료까지 연결하는 흐름을 설명드리겠습니다. 중심은 NUT(Network UPS Tools, 네트워크 UPS 관리 도구) 설정이고요. 단순 설치 명령만 나열하지 않고, 왜 그렇게 해야 하는지, 어디서 자주 막히는지, 그리고 실제 검증은 어떻게 하는지까지 같이 보겠습니다.

Proxmox 서버, UPS, 네트워크 스위치, NAS가 어떻게 연결되는지 한눈에 보여주는 전체 구성도입니다.

1. 왜 Proxmox VE와 UPS 연동이 중요한가

쉽게 말해 UPS는 배터리만 달린 멀티탭이 아니에요. 전원 이상이 생겼을 때 "지금 배터리로 버티는 중이니 정리하고 내려가세요"라는 신호를 서버에 줄 수 있어야 제대로 된 구성이 됩니다. 여기서 중요한 포인트! 그냥 전원만 유지한다고 끝이 아니고, 언제 종료를 시작할지를 운영자가 정해줘야 하거든요.

  • 전원 순간 끊김 대응: 짧은 정전에는 서비스 지속
  • 배터리 한계 대응: 오래 가는 정전이면 안전 종료 수행
  • 스토리지 보호: ZFS 같은 파일시스템도 강제 전원 차단은 반갑지 않아요
  • 무인 운영 안정성: 집 비울 때도 자동으로 처리 가능

제가 직접 해보니, UPS를 달아두고도 자동 종료를 안 걸어두면 반쯤만 구성한 셈이었어요. 배터리는 버티는데 결국 배터리가 다 닳으면 더 난감해지거든요. 그래서 홈랩 전원 관리는 "버틴다"보다 "정해진 조건에서 질서 있게 내려간다"에 초점을 두는 게 맞습니다.

2. NUT 설정, 쉽게 말해 어떤 구조인가

NUT(Network UPS Tools)는 UPS 상태를 읽고, 그 상태를 다른 시스템에 전달하고, 필요하면 종료 액션까지 연결하는 도구 모음이에요. 처음엔 이게 뭔가 싶었는데, 역할을 나눠서 보면 생각보다 단순합니다.

구성 요소 역할 홈랩에서 보통 어디에 두나
driver UPS와 직접 통신 USB로 연결된 Proxmox 호스트 또는 별도 관리 서버
upsd 상태를 네트워크로 제공 driver가 있는 같은 장비
upsmon 상태를 감시하고 종료 조건 처리 Proxmox 호스트, 필요하면 다른 서버에도

보통 홈랩에서는 두 가지 패턴이 많아요.

  1. 단일 노드형: UPS를 Proxmox 서버에 USB로 직접 연결하고, 그 서버에서 NUT를 모두 처리
  2. 중앙 관리형: NAS나 별도 리눅스 장비가 UPS를 읽고, Proxmox는 네트워크 클라이언트로 감시

저는 처음에 단일 노드형으로 시작했어요. 가장 단순하고, 장애 포인트가 적어서 입문에는 좋더라고요. 클러스터(Cluster)나 장비가 늘어나면 중앙 관리형이 더 편할 수 있습니다.

3. Proxmox UPS 연동 전에 먼저 확인할 것들

설정 들어가기 전에 아래는 꼭 체크해보세요. 이 단계 건너뛰면 뒤에서 삽질 좀 합니다.

  • UPS가 USB HID(Human Interface Device) 또는 NUT 지원 드라이버로 인식 가능한지
  • UPS 연결 대상이 Proxmox 호스트인지: VM 안에 USB 패스스루로 넣어두면 종료 타이밍이 꼬일 수 있어요
  • 전원 종료 정책이 명확한지: 배터리 잔량 기준인지, 런타임 기준인지, on battery 지속 시간 기준인지
  • 스토리지 구조 파악: 로컬 디스크인지, NAS/iSCSI인지에 따라 종료 순서가 달라질 수 있어요

특히 홈랩 전원 관리에서 많이 놓치는 게 네트워크 장비예요. UPS는 서버만 물려 있고 스위치나 공유기는 일반 멀티탭에 꽂혀 있으면, 정전 때 네트워크가 먼저 죽어버립니다. 그러면 NUT 서버와 클라이언트 통신이 끊겨서 상태 전달이 애매해질 수 있어요. 가능하면 최소한 UPS 상태 전달에 필요한 네트워크 장비는 같이 보호하는 편이 낫습니다.

Proxmox UPS 연동에서 NUT 설정 흐름을 보여주는 구성도

UPS 드라이버, upsd, upsmon이 어떤 순서로 동작하는지 보여주는 설정 흐름도입니다.

4. 실전 구현: Proxmox VE에서 NUT 설치와 기본 설정

이제 실제로 해보겠습니다. 아래 예시는 UPS를 Proxmox 호스트에 USB로 직접 연결하는 가장 흔한 방식이에요. 제품별 드라이버 이름은 다를 수 있으니, 모델별로 NUT 호환 드라이버를 확인해두는 게 좋습니다. 여기서는 대표적으로 많이 쓰는 USB HID 계열 기준으로 적겠습니다.

4-1. 패키지 설치

apt update
apt install nut

설치 후엔 NUT 동작 모드를 지정해요.

grep -v '^#' /etc/nut/nut.conf
MODE=standalone

standalone은 이 장비가 직접 UPS를 읽고 감시까지 하는 형태예요. 만약 별도 NUT 서버가 있고 Proxmox는 감시만 할 거라면 netclient 구성을 생각해볼 수 있습니다.

4-2. UPS 장치 정의

/etc/nut/ups.conf에 UPS를 정의합니다.

[homelab-ups]
  driver = usbhid-ups
  port = auto
  desc = "HomeLab UPS"

여기서 driver는 장치별로 다를 수 있어요. 처음엔 저도 무조건 usbhid-ups면 될 줄 알았는데, 모델에 따라 다른 드라이버가 맞는 경우도 있더라고요. 인식이 안 되면 이 지점부터 다시 봐야 합니다.

4-3. 접근 계정 설정

/etc/nut/upsd.users에 모니터링 계정을 만들어요.

[monuser]
  password = strong-password-here
  upsmon master

단일 서버 기준이라면 upsmon master 권한으로 충분한 경우가 많아요.

4-4. upsd 리스닝 주소 확인

/etc/nut/upsd.conf는 기본적으로 로컬호스트만 열어도 돼요. 다른 장비에서도 상태를 볼 거라면 내부망 IP를 추가하세요.

LISTEN 127.0.0.1 3493
LISTEN 192.168.0.10 3493

외부에 열 필요는 없어요. 이 포트는 내부망에서만 관리하는 걸 권장합니다.

4-5. upsmon 연결 설정

/etc/nut/upsmon.conf에서 감시 대상을 지정합니다.

MONITOR homelab-ups@localhost 1 monuser strong-password-here master
MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h +0"
POLLFREQ 5
POLLFREQALERT 5
HOSTSYNC 15
DEADTIME 15
POWERDOWNFLAG /etc/killpower

여기서 많이 보는 항목 몇 개만 짚어볼게요.

  • MONITOR: 어떤 UPS를 어떤 계정으로 감시할지
  • SHUTDOWNCMD: 종료 시 실제 실행할 명령
  • HOSTSYNC: 클라이언트 종료 대기 관련 타이밍
  • POWERDOWNFLAG: 전원 차단 단계와 연계되는 플래그 파일

설정 후 서비스 재시작해요.

systemctl restart nut-server
systemctl restart nut-monitor

4-6. 상태 확인

upsc homelab-ups@localhost

정상이라면 배터리 상태, 입력 전압, UPS 상태 같은 정보가 출력돼요. 이게 안 나오면 뒤 단계로 가지 마세요. 여기서 멈추고 드라이버, 권한, USB 인식부터 다시 확인하는 게 맞습니다.

5. Proxmox 자동 종료를 어디까지 할 것인가

여기서부터가 운영 포인트예요. 그냥 호스트만 꺼버리면 끝이냐? 사실 그렇진 않습니다. Proxmox는 그 위에 VM과 CT가 올라가 있으니까요. 제가 실제로 써보니까 가장 깔끔했던 건 게스트 종료 시간을 평소에 정리해두는 것이었어요.

  1. 중요 서비스가 올라간 VM은 Guest Agent(QEMU Guest Agent 등)를 가능하면 활성화
  2. 종료 우선순위가 중요한 VM은 Proxmox 시작/종료 순서 옵션을 미리 설정
  3. NAS 의존 서비스가 있다면 스토리지 종료 순서를 마지막까지 고려
  4. UPS 이벤트가 왔을 때 호스트가 너무 빨리 내려가지 않도록 약간의 여유를 둠

실무적으로는 "배터리 모드 진입 즉시 종료"보다, "배터리 모드가 일정 시간 지속되면 종료"가 더 덜 민감해요. 순간 정전은 생각보다 자주 오고, 그때마다 전체 홈랩이 내려가면 운영 피로도가 높아지거든요.

만약 더 세밀하게 제어하고 싶다면, NUT 알림 이벤트를 받아 후처리 스크립트를 거는 방식도 있어요. 예를 들면 배터리 모드 진입 시 로그를 남기고, 실제 저전력 상태(Low Battery)일 때만 종료하도록 설계하는 식입니다.

NOTIFYCMD /usr/sbin/upssched
NOTIFYFLAG ONBATT SYSLOG+EXEC
NOTIFYFLAG LOWBATT SYSLOG+EXEC
NOTIFYFLAG ONLINE SYSLOG+EXEC

이 부분은 환경마다 편차가 있어서, 처음부터 복잡하게 들어가기보다 기본 종료 동작이 안정적으로 되는지 먼저 확인한 뒤 확장하는 걸 추천드립니다.

Proxmox 자동 종료와 UPS 이벤트 흐름을 표현한 운영 화면 이미지

가상머신 종료 순서와 UPS 상태 이벤트가 연결되는 운영 관점을 시각화한 이미지입니다.

6. ⚠️ 트러블슈팅: 실제로 자주 막히는 지점들

이 섹션이 아마 제일 도움 되실 겁니다. 저도 처음엔 설정 파일 몇 줄 넣으면 끝날 줄 알았는데, 생각보다 함정이 많더라고요.

6-1. upsc가 응답하지 않는 경우

가장 먼저 볼 건 세 가지예요.

  • UPS가 운영체제에서 USB 장치로 보이는지
  • ups.conf의 드라이버가 맞는지
  • nut-servernut-monitor가 정상 실행 중인지
systemctl status nut-server
systemctl status nut-monitor
journalctl -u nut-server -n 50
journalctl -u nut-monitor -n 50

로그를 보면 의외로 힌트가 바로 나와요. 드라이버 초기화 실패, 권한 오류, 장치 점유 실패 같은 메시지가 보이면 방향이 잡혀요.

6-2. USB는 잡히는데 상태값이 이상한 경우

이건 UPS 자체 호환성이나 드라이버 매핑 문제일 때가 있어요. 특히 일부 장비는 기본 정보만 주고, 세부 값은 제한적으로 주는 경우가 있더라고요. 이럴 땐 배터리 퍼센트 숫자 하나에만 의존하지 말고, ONBATT(배터리 모드), LOWBATT(저전력) 같은 상태 이벤트 위주로 설계하는 게 더 안정적이었어요.

6-3. 정전 테스트가 무서워서 검증을 못 하는 경우

이거 공감하실 겁니다. 저도 처음엔 멀티탭을 뽑았다가 뭔가 잘못될까 봐 망설였거든요. 근데 검증 없이 운영하면 더 위험해요. 다만 순서를 나눠서 테스트하면 부담이 줄어듭니다.

  1. 상태 조회 테스트: upsc로 현재 값 확인
  2. 이벤트 테스트: UPS 입력 전원을 잠깐 빼서 ONBATT 전환 확인
  3. 복귀 테스트: 전원 복구 후 ONLINE 복귀 확인
  4. 종료 테스트: 실제 종료 조건은 낮은 부하 시간대에만 검증

6-4. 네트워크형 NUT 구성에서 클라이언트가 못 붙는 경우

이건 보통 LISTEN 주소나 방화벽(Firewall) 쪽 문제예요. 그리고 내부 DNS 이름보다 처음엔 IP로 먼저 붙여보는 것이 troubleshooting에는 낫습니다. 이름 해석 문제인지, 포트 문제인지 분리하기 쉬워지거든요.

6-5. 호스트는 꺼졌는데 게스트가 지저분하게 죽는 경우

이건 UPS 문제가 아니라 Proxmox 종료 순서 문제일 가능성이 커요. Guest Agent 설치 여부, VM shutdown timeout, 시작/종료 순서 설정을 다시 보세요. 결국 Proxmox UPS 연동은 UPS만 붙인다고 끝나는 게 아니라, 게스트 운영 정책까지 묶여야 완성돼요.

7. 검증 방법: 완성 후 꼭 확인할 체크리스트

설정 끝났다고 바로 안심하시면 안 돼요. 실제로 써보니까 검증 체크리스트 하나 만들어두는 게 진짜 편하더라고요.

  1. upsc homelab-ups@localhost가 정상 응답하는지 확인
  2. UPS 전원을 잠깐 빼서 상태가 OL에서 배터리 모드로 바뀌는지 확인
  3. 시스템 로그에 ONBATT 이벤트가 기록되는지 확인
  4. 전원 복귀 후 ONLINE 이벤트가 찍히는지 확인
  5. 테스트용 VM이 정상 shutdown 되는지 확인
  6. 호스트 종료 명령이 실제로 실행 가능한 상태인지 확인
journalctl -f

실시간 로그를 보면서 테스트하면 전환 흐름이 명확하게 보여요. 드디어 됐다! 싶은 순간이 여기서 오더라고요. 눈으로 상태 변화를 확인하면 훨씬 안심돼요.

Proxmox UPS 연동 결과와 NUT 상태 검증을 보여주는 터미널 이미지

UPS 상태값, 이벤트 로그, 종료 검증 포인트를 한 화면에서 확인하는 결과 예시입니다.

8. 베스트 프랙티스 정리와 운영 팁

이제 핵심만 압축해서 정리해보겠습니다. 아래는 제가 현재도 지키는 기준이에요.

항목 권장 방식 이유
UPS 연결 위치 가능하면 Proxmox 호스트 직접 연결 구조 단순, 장애 포인트 감소
종료 트리거 즉시 종료보다 지속 조건 기반 순간 정전에 덜 민감
감시 범위 호스트 + 핵심 네트워크 장비 고려 상태 전달 경로 유지
게스트 종료 사전 종료 순서 정리 비정상 종료 방지
검증 주기 정기적인 짧은 테스트 설정 드리프트 조기 발견

추가로 몇 가지 팁을 더 드리면요.

  • USB 케이블 접촉 불량은 생각보다 흔해요
  • NUT 설정을 바꾼 뒤에는 서비스 재시작과 상태 조회를 세트로 하세요
  • 로그 확인 습관을 들이면 문제를 절반은 줄일 수 있어요
  • 클러스터 환경이라면 어느 노드가 UPS 마스터 역할을 할지 먼저 정하는 게 좋습니다

혹시 이런 경험 있으신가요? 정전은 거의 없는데, 막상 한 번 터지면 제일 아픈 타이밍에 오더라고요. 그래서 무정전 전원 장치는 장비 구매보다 운영 설계가 더 중요해요. 저도 처음엔 UPS 하나 달면 끝인 줄 알았는데, 결국 중요한 건 홈랩 전원 관리 시나리오 전체를 미리 정리하는 거였어요.

9. 자주 묻는 질문과 마무리

FAQ

  • Q. UPS를 샀는데 바로 안전 종료가 되나요?
    A. 아니에요. 전원 공급은 되더라도, 상태 전달과 종료 정책이 설정되지 않으면 자동 종료는 동작하지 않습니다.
  • Q. NUT 말고 다른 방법도 있나요?
    A. 있어요. 다만 여러 장비에 상태를 배포하거나 표준적인 구성을 원하면 NUT가 많이 쓰입니다.
  • Q. 배터리 퍼센트 기준과 시간 기준 중 뭐가 더 낫나요?
    A. 환경마다 달라요. 저는 상태 이벤트와 지속 시간을 같이 보는 쪽이 더 안정적이었어요.

정리하면, Proxmox UPS 연동의 핵심은 단순해요. UPS를 연결하고, NUT로 상태를 읽고, 적절한 조건에서 Proxmox 자동 종료가 되도록 만드는 것. 그런데 실제 운영에서는 이 단순한 흐름 사이사이에 종료 순서, 네트워크 생존성, 로그 검증 같은 디테일이 숨어 있더라고요.

이번 글은 troubleshooting 중심으로 정리해봤고요. 다음 글에서는 NUT 서버를 별도로 두고 여러 장비가 하나의 UPS 상태를 공유하는 구조도 다뤄볼 예정입니다. 이전에 다룬 스토리지/가상머신 백업 글과 같이 보시면, 홈랩 안정성이 훨씬 탄탄해질 겁니다.

Proxmox UPS 연동 베스트 프랙티스와 트러블슈팅 요약 인포그래픽

설정 포인트, 검증 순서, 자주 발생하는 문제를 한 장으로 정리한 요약 이미지입니다.

처음엔 헷갈려도 한 번만 제대로 잡아두면 진짜 편해요. 저처럼 미리 한 번 삽질해두시면, 나중에 정전이 와도 훨씬 덜 당황하게 되실 겁니다.