목차
UPS와 홈서버 연동: Proxmox/TrueNAS 자동 종료 설정 완벽 가이드
안녕하세요, 13년차의 서버실 주인장입니다. 홈랩을 운영하면서 가장 신경 쓰이는 부분이 뭘까요? 저는 주저 없이 전원 문제라고 말할 수 있어요. 특히 갑작스러운 정전은 애지중지 키워온 홈서버의 하드웨어뿐만 아니라, 그 안에 담긴 소중한 데이터까지 한순간에 날려버릴 수 있는 무서운 재앙이거든요.
제가 처음 홈랩을 구성하고 몇 달 뒤였을 겁니다. 한창 드라마를 보는데 갑자기 집 전체가 퍽! 하고 암전되더라고요. 순간 '아, 망했다!' 싶었죠. 다행히 서버는 무사했지만, 그날 이후로 UPS(무정전 전원 장치)의 필요성을 뼈저리게 느꼈습니다. 단순히 전원을 공급해주는 것을 넘어, 정전 시 서버를 안전하게 종료시키는 자동화가 정말 중요하다는 걸 깨달았죠.
오늘은 저처럼 홈랩을 운영하시는 분들을 위해, UPS와 홈서버(특히 Proxmox VE와 TrueNAS)를 연동해서 정전 시 자동으로 시스템이 종료되도록 설정하는 방법을 차근차근 알려드릴게요. 13년 동안 이런저런 삽질을 하면서 터득한 경험을 바탕으로, 여러분은 좀 더 쉽게 성공하시길 바랍니다! 💡
홈랩 UPS 연동 아키텍처: 정전 시 서버들을 안전하게 지키는 핵심 구성입니다.
UPS와 NUT(Network UPS Tools)는 뭐 하는 건가요?
먼저 핵심 개념부터 짚고 넘어갈게요. 'UPS'는 다들 아실 겁니다. 쉽게 말해 보조 배터리 같은 역할을 하면서, 정전이 되면 일정 시간 동안 서버에 전원을 공급해주는 장치죠. 하지만 UPS의 진짜 가치는 단순히 전원을 유지하는 것을 넘어, 서버에게 "야, 지금 전기가 나갔어! 얼른 마무리하고 꺼져야 해!"라고 알려줄 수 있을 때 빛을 발합니다.
이때 필요한 게 바로 NUT(Network UPS Tools)예요. NUT는 UPS와 서버 간의 통신을 담당하는 오픈소스 소프트웨어 스위트(Software Suite)입니다. UPS의 상태(배터리 잔량, 전원 상태 등)를 모니터링하고, 특정 조건(예: 배터리 잔량 20% 미만)이 되면 연결된 서버들에게 종료 신호를 보내는 역할을 하죠.
- UPS 서버 (Server): 물리적인 UPS 장치에 직접 연결되어 UPS 상태를 읽어오는 역할을 해요. 보통 USB 케이블로 연결하죠. 이 서버에
upsd(UPS Daemon)가 실행되면서 다른 클라이언트들에게 UPS 정보를 제공합니다. - UPS 클라이언트 (Client): UPS 서버로부터 UPS 상태 정보를 받아, 특정 조건이 되면 스스로 종료하거나 미리 설정된 작업을 수행합니다. Proxmox VE나 TrueNAS 같은 홈서버들이 여기에 해당해요.
upsmon(UPS Monitor)이 이 역할을 담당합니다.
저는 보통 라즈베리 파이 같은 저전력 장치나, 최소한의 리소스를 할당한 가상 머신에 NUT 서버를 구성합니다. 아무래도 UPS가 서버 전체를 위한 장치이니, 그 정보를 관리하는 서버는 가급적 안정적이고 전력을 덜 먹는 게 좋더라고요.
실전 구현: NUT 서버와 클라이언트 설정
자, 이제 실전입니다. 저는 제가 직접 구성한 환경을 기준으로 설명해 드릴게요. UPS는 APC BR1500MS 같은 모델을 많이 쓰시는데, USB로 연결되는 대부분의 UPS는 NUT와 호환되니 크게 걱정하지 않으셔도 돼요. 제가 사용했던 UPS도 USB로 연결되는 모델이었거든요.
1. NUT 서버 설정 (Debian/Ubuntu 기반 VM 또는 Raspberry Pi)
먼저, UPS에 USB로 직접 연결될 NUT 서버를 설정해봅시다. 저는 Proxmox 위에 데비안(Debian) 가상 머신을 하나 띄워서 사용했어요.
패키지 설치:
sudo apt update
sudo apt install nut
/etc/nut/ups.conf 설정:
이 파일은 UPS 장치의 종류와 연결 방식을 NUT에게 알려줍니다. UPS 모델에 따라 드라이버(driver)가 달라질 수 있으니, NUT 공식 문서를 참고해서 맞는 드라이버를 찾아주세요. 저는 usbhid-ups 드라이버를 사용했어요.
[myups]
driver = usbhid-ups
port = auto
desc = "My HomeLab UPS"
# mincharge = 80 # 배터리 최소 충전량 (예: 80% 미만이면 경고)
# override.battery.charge.low = 20 # 배터리 잔량 20% 미만 시 저전압 경고
/etc/nut/nut.conf 설정:
NUT의 동작 모드를 설정합니다. 여기서는 STANDALONE 대신 SERVER로 설정해야 다른 서버들이 이 UPS 정보를 가져갈 수 있어요.
MODE=SERVER
/etc/nut/upsd.users 설정:
클라이언트들이 UPS 정보를 모니터링할 때 사용할 사용자 계정을 정의합니다. 보안을 위해 강력한 비밀번호를 사용하는 것이 좋겠죠.
[upsmon]
password = YourStrongPasswordHere
actions = SET
instcmds = ALL
upsmon master
/etc/nut/upsd.conf 설정:
NUT 데몬이 어떤 IP 주소와 포트(기본 3493)에서 클라이언트의 연결을 받을지 설정합니다. 저는 홈랩 내부에서만 사용할 것이므로 내부 IP를 바인딩했어요.
LISTEN 0.0.0.0 3493 # 모든 인터페이스에서 수신 (혹은 특정 내부 IP)
NUT 서비스 재시작 및 확인:
sudo systemctl restart nut-server nut-client
sudo systemctl enable nut-server nut-client
sudo upsc myups@localhost # UPS 정보 확인. 'myups'는 ups.conf에 설정한 이름입니다.
upsc myups@localhost 명령어를 실행했을 때, UPS의 다양한 정보(배터리 잔량, 전압 등)가 잘 출력된다면 NUT 서버 설정은 성공입니다! 🎉
NUT 서버 설정의 핵심, ups.conf 파일입니다. UPS 모델에 맞는 드라이버를 찾는 것이 정말 중요해요.
2. Proxmox VE 클라이언트 설정
이제 Proxmox VE 서버가 NUT 서버로부터 UPS 정보를 받아 정전 시 자동으로 종료되도록 설정해볼까요? Proxmox는 Debian 기반이라 NUT 클라이언트 설정이 비교적 간단해요.
패키지 설치:
apt update
apt install nut
/etc/nut/nut.conf 설정:
Proxmox는 NUT 서버가 아닌 클라이언트 역할을 하므로 MODE=NETCLIENT로 설정합니다.
MODE=NETCLIENT
/etc/nut/upsmon.conf 설정:
이 파일에서 어떤 UPS 서버를 모니터링할지, 그리고 어떤 조건에서 종료할지 정의합니다. MONITOR 라인에 NUT 서버의 IP 주소, UPS 이름, 사용자 이름, 비밀번호를 입력하세요.
MONITOR myups@192.168.1.100 1 upsmon YourStrongPasswordHere master
# (192.168.1.100은 NUT 서버의 IP 주소로 바꿔주세요)
MINWARNTIME 300 # UPS 경고 발생 후 최소 5분 대기
FINALDELAY 5 # 시스템 종료까지 추가 대기 시간 (초)
SHUTDOWNCMD "/sbin/shutdown -h now" # 종료 명령
NOTIFYCMD "/usr/sbin/upssched-cmd" # 알림 스크립트 (선택 사항)
NOTIFYFLAG ONLINE SYSLOG+WALL
NOTIFYFLAG ONBATT SYSLOG+WALL
NOTIFYFLAG LOWBATT SYSLOG+WALL
NOTIFYFLAG FSD SYSLOG+WALL
# Proxmox의 경우, 가상머신 및 컨테이너를 먼저 종료해야 합니다.
# 저는 아래와 같이 별도 스크립트를 만들어서 사용했어요.
# /etc/nut/upsmon.conf 에 직접 넣기보다는, SHUTDOWNCMD가 실행할 스크립트 안에 넣는 것이 좋습니다.
# (예시: /etc/nut/ups_shutdown.sh)
# SCRIPT: /etc/nut/ups_shutdown.sh
# (스크립트 예시는 뒤에서 설명합니다)
Proxmox 특화: 가상 머신/컨테이너(VM/CT) 종료 스크립트
Proxmox는 단순히 shutdown -h now만 실행하면 호스트만 꺼지고 VM/CT는 강제 종료될 수 있어요. 이를 방지하려면 VM/CT를 먼저 안전하게 종료하는 스크립트를 작성하여 SHUTDOWNCMD에 연결해야 합니다. 저는 다음과 같은 스크립트를 사용했습니다.
#!/bin/bash
logger -t ups_shutdown "UPS shutting down Proxmox and VMs/CTs..."
# 모든 VM 및 CT 목록 가져오기
vms=$(qm list | awk 'NR>1 {print $1}')
cts=$(pct list | awk 'NR>1 {print $1}')
# VM 종료
for vmid in $vms
do
status=$(qm status $vmid | awk '{print $2}')
if [ "$status" = "running" ]; then
logger -t ups_shutdown "Shutting down VM $vmid..."
qm shutdown $vmid --timeout 30
sleep 5
if [ "$(qm status $vmid | awk '{print $2}')" = "running" ]; then
logger -t ups_shutdown "VM $vmid did not shut down gracefully, stopping..."
qm stop $vmid
fi
fi
done
# CT 종료
for ctid in $cts
do
status=$(pct status $ctid | awk '{print $2}')
if [ "$status" = "running" ]; then
logger -t ups_shutdown "Shutting down CT $ctid..."
pct shutdown $ctid --timeout 30
sleep 5
if [ "$(pct status $ctid | awk '{print $2}')" = "running" ]; then
logger -t ups_shutdown "CT $ctid did not shut down gracefully, stopping..."
pct stop $ctid
fi
fi
done
logger -t ups_shutdown "All VMs/CTs processed. Shutting down Proxmox host."
sleep 10 # VM/CT 종료 대기 시간을 충분히 줍니다.
/sbin/shutdown -h now
이 스크립트를 /etc/nut/ups_shutdown.sh 로 저장하고 실행 권한을 부여한 뒤,
sudo chmod +x /etc/nut/ups_shutdown.sh
/etc/nut/upsmon.conf 파일의 SHUTDOWNCMD를 다음과 같이 수정하세요.
SHUTDOWNCMD "/etc/nut/ups_shutdown.sh"
NUT 클라이언트 서비스 재시작 및 확인:
systemctl restart nut-client
systemctl enable nut-client
upsc myups@192.168.1.100 # NUT 서버의 UPS 정보 확인
3. TrueNAS 클라이언트 설정
TrueNAS는 NUT 클라이언트 기능이 웹 인터페이스에 통합되어 있어 설정이 훨씬 간편합니다. 제가 써보니 이 부분이 정말 편하더라고요!
- TrueNAS 웹 UI에 접속하세요.
- 좌측 메뉴에서 Services (서비스)를 클릭합니다.
- 서비스 목록에서 UPS를 찾아 Configure (설정) 버튼을 클릭하세요.
- 설정 창에서 다음 정보를 입력합니다:
- UPS Type (UPS 유형):
Slave(클라이언트 역할을 하므로) - Remote Host (원격 호스트): NUT 서버의 IP 주소 (예:
192.168.1.100) - Remote Port (원격 포트):
3493(기본값) - Identifier (식별자): NUT 서버의
ups.conf에 설정한 UPS 이름 (예:myups) - Monitor User (모니터 사용자):
upsmon(upsd.users에 설정한 사용자) - Monitor Password (모니터 비밀번호):
YourStrongPasswordHere(upsd.users에 설정한 비밀번호) - Shutdown Mode (종료 모드):
UPS reaches low battery(UPS 배터리가 부족할 때) - Shutdown Timer (종료 타이머):
120(배터리 부족 감지 후 120초 뒤 종료)
- UPS Type (UPS 유형):
- Save (저장) 버튼을 클릭하세요.
- 서비스 목록으로 돌아가서 UPS 서비스를 Enabled (활성화)로 설정하고 Start (시작) 버튼을 클릭합니다.
TrueNAS 로그를 확인하여 UPS 서비스가 정상적으로 시작되었는지, NUT 서버와 통신하는지 확인해 보세요. /var/log/messages나 웹 UI의 시스템 로그에서 관련 메시지를 찾을 수 있어요.
TrueNAS의 UPS 설정 화면입니다. 웹 UI 덕분에 직관적으로 설정할 수 있어요.
⚠️ 주의사항 및 트러블슈팅 (제 삽질 경험 공유)
제가 이 설정을 하면서 겪었던 몇 가지 삽질 경험과 주의사항을 알려드릴게요. 여러분은 저처럼 고생하지 마시길!
- 방화벽 문제: NUT 서버와 클라이언트 간에 3493번 포트 통신이 제대로 되는지 꼭 확인하세요. 특히 NUT 서버로 설정한 VM이나 물리 장치에
ufw나firewalld같은 방화벽이 있다면 3493번 포트를 열어줘야 해요.sudo ufw allow 3493/tcp같은 명령어로 열 수 있습니다. 저는 처음에 이걸 놓쳐서 '왜 연결이 안 되지?' 하고 한참을 헤맸습니다. ㅠㅠ - USB 드라이버 문제: UPS가 USB로 NUT 서버에 제대로 인식되지 않는 경우가 간혹 있어요.
lsusb명령어로 UPS 장치가 목록에 뜨는지 확인하고,dmesg | grep -i usb명령어로 커널 로그를 확인해서 드라이버 로딩에 문제가 없는지 봐야 합니다. 간혹 특정 UPS 모델은 추가적인 드라이버나 커널 모듈이 필요할 수 있거든요. ups.conf드라이버 오설정: 가장 흔한 실수 중 하나예요. UPS 모델에 맞는 정확한 드라이버를 사용해야 합니다.nut-drivers패키지 설치 후man ups.conf나 NUT 공식 문서를 참고하는 게 가장 정확합니다.- 종료 스크립트 테스트: 실제 정전 상황을 흉내 내기 어렵다면, 강제로
lowbatt신호를 보내는 방식으로 테스트할 수 있어요.sudo upsmon -c fsd(Force Shutdown) 같은 명령어를 사용하거나,upsmon.conf에서SHUTDOWNCMD를 테스트용 스크립트로 바꿔서 실행해 보는 것도 좋은 방법입니다. 절대 운영 중인 서버에서 바로 테스트하지 마세요! 중요한 데이터가 날아갈 수 있습니다. 테스트는 항상 충분히 백업된 환경이나 테스트용 서버에서 진행하시고, 스크립트 실행 권한(chmod +x)도 잊지 마세요! - Proxmox VM/CT 종료 순서: 위에서 설명했듯이 Proxmox는 호스트만 종료하면 VM/CT가 강제 종료돼요. 반드시
qm shutdown,pct shutdown명령어를 사용하여 순차적으로 종료하는 스크립트를 사용해야 합니다.
검증 및 결과: 이제 안심하고 홈랩을!
모든 설정이 끝났다면, 이제 정말 잘 작동하는지 확인해야겠죠? 저는 조심스럽게 UPS의 전원 코드를 뽑아서 실제 정전 상황을 시뮬레이션해봤습니다. (물론 중요한 작업은 모두 백업해두고, 아주 짧게 시도했어요.)
결과는? 🎉 대성공이었습니다!
UPS가 배터리 모드로 전환되고, 설정해둔 MINWARNTIME이 지나자 Proxmox와 TrueNAS가 순차적으로 종료되기 시작했어요. Proxmox의 경우, 제가 만들어둔 스크립트 덕분에 VM과 CT들이 먼저 안전하게 꺼진 후 호스트가 종료되는 것을 로그로 확인할 수 있었습니다. TrueNAS도 깔끔하게 종료되었고요.
로그 확인은 journalctl -u nut-client.service (Proxmox/Debian)나 /var/log/messages (TrueNAS)를 통해 할 수 있습니다. 여기에 UPS 상태 변화와 종료 명령이 정상적으로 기록되어 있다면 안심해도 좋아요.
시스템 로그에서 확인하는 자동 종료 과정. 이 메시지를 보면 정말 뿌듯하더라고요!
마무리하며: 홈랩의 든든한 보험, UPS 연동
오늘은 홈랩의 안정성을 한 단계 끌어올리는 UPS 홈서버 연동, 특히 Proxmox UPS와 TrueNAS UPS 자동 종료 설정에 대해 알아봤습니다. 처음에는 NUT 설정이 조금 복잡하게 느껴질 수도 있지만, 한 번 제대로 설정해두면 갑작스러운 정전에도 소중한 장비와 데이터를 안전하게 지킬 수 있어요. 이건 마치 홈랩을 위한 든든한 보험 같은 존재랄까요?
저도 처음엔 '이거까지 해야 하나?' 싶었는데, 한번 정전을 겪고 나니 이제는 홈랩의 필수 요소라고 생각합니다. 여러분도 이 가이드를 통해 성공적으로 UPS 연동을 마치시고, 마음 편히 홈랩을 즐기시길 바랍니다. 다음번에는 또 다른 흥미로운 홈랩 이야기로 찾아올게요! 그때까지 즐거운 삽질(?) 되세요! 😉
UPS 연동의 핵심 가치: 안전한 홈랩, 데이터 보호, 그리고 마음의 평화!
'IT > HomeLabs' 카테고리의 다른 글
| [HomeLabs] 홈서버 구축을 위한 미니PC vs NAS 비교: 용도별 최적 선택 가이드 (1) | 2026.05.20 |
|---|---|
| [HomeLabs] 홈랩 네트워크 광고 차단: Pi-hole vs AdGuard Home 비교 및 구축 가이드 (0) | 2026.05.20 |
| [HomeLabs] 오픈소스 방화벽/라우터 구축: pfSense vs OPNsense 비교 및 설치 가이드 (0) | 2026.05.16 |
| [HomeLabs] 씬클라이언트 홈서버 구축: 저전력 미니PC 활용 완벽 가이드 (0) | 2026.05.13 |
| [HomeLabs] 홈랩 NAS OS 비교: TrueNAS, Unraid, OpenMediaVault 선택 가이드 (0) | 2026.05.13 |
| [HomeLabs] 홈서버 구축: 저전력 미니PC로 Proxmox VE 설치 및 최적화 가이드 (1) | 2026.05.11 |