Trong thế giới của home lab và máy chủ gia đình, một trong những mối lo ngại lớn nhất chính là làm thế nào để bảo vệ dữ liệu và tắt các thiết bị một cách an toàn khi có sự cố mất điện. Việc bổ sung một bộ lưu điện (UPS) vào hệ thống của bạn là một bước đi thông minh để tránh mất mát dữ liệu. Tuy nhiên, hầu hết các mẫu UPS phổ biến chỉ có một cổng kết nối USB để gửi tín hiệu tắt máy, trong khi một home lab có thể sở hữu nhiều máy chủ, máy ảo hoặc các thiết bị khác cần được tắt đồng thời. Đặc biệt, nếu bạn đang vận hành các siêu giám sát (hypervisor) như Proxmox với nhiều máy ảo (VMs) đang chạy, việc đảm bảo tất cả các thành phần được tắt một cách tuần tự và an toàn trở nên vô cùng quan trọng.
Đây là một vấn đề mà hầu như mọi người đam mê home lab đều phải đối mặt. May mắn thay, đã có một giải pháp hiệu quả từ lâu: sử dụng một công cụ để giám sát tín hiệu tắt máy từ UPS và phát tán tín hiệu đó đến tất cả các thiết bị client được cấp nguồn bởi UPS đó. Một trong những công cụ mạnh mẽ và đáng tin cậy nhất cho mục đích này chính là Network UPS Tools, hay gọi tắt là NUT. NUT đã trở thành “vị cứu tinh” cho hệ thống home lab dựa trên Proxmox của tôi, giúp tôi an tâm hơn mỗi khi mất điện. Bài viết này sẽ hướng dẫn bạn chi tiết cách cài đặt và cấu hình NUT trên máy chủ Proxmox để tự động tắt hệ thống an toàn, bảo vệ dữ liệu quý giá của bạn.
Bộ lưu điện UPS Eaton 3S 850 được cài đặt trong hệ thống home lab
Network UPS Tools (NUT) là gì và tại sao nên sử dụng?
Đảm bảo thiết bị của bạn tắt máy an toàn trong mọi tình huống
Không giống như các trung tâm dữ liệu lớn với nguồn điện dự phòng và hệ thống điện lưới redundant, các home lab thường không có những điều kiện tương tự. Do đó, một hệ thống UPS chạy bằng pin là yếu tố cần thiết để tránh mất dữ liệu khi ngôi nhà của bạn mất điện. Nếu bạn chỉ có một máy chủ hoặc một máy chủ ảo hóa duy nhất, cổng USB đơn lẻ mà hầu hết các mẫu UPS sử dụng để gửi tín hiệu tắt máy vẫn hoạt động tốt. Tuy nhiên, nếu bạn sở hữu nhiều máy chủ ảo hóa, hoặc các thiết bị khác, bạn cần một cách để gửi tín hiệu tắt máy đó đến tất cả các máy chủ liên quan.
Đó chính là lúc Network UPS Tools (NUT) phát huy tác dụng. NUT hoạt động theo mô hình server-client (máy chủ-máy khách), trong đó máy chủ NUT chạy trên thiết bị được kết nối trực tiếp qua USB với UPS. Các client của NUT sẽ được cài đặt trên tất cả các thiết bị khác (bao gồm cả thiết bị đang chạy máy chủ NUT) được cấp nguồn bởi UPS. Điều này có nghĩa là khi điện lưới bị ngắt và UPS bắt đầu hoạt động, khi mức pin của UPS xuống thấp đến ngưỡng an toàn, nó sẽ gửi lệnh tắt máy qua USB. Máy chủ NUT sẽ nhận lệnh này và phát tán tín hiệu đến tất cả các client, những thiết bị này sẽ tự động tắt an toàn trước khi UPS hết pin hoàn toàn, ngăn chặn nguy cơ mất dữ liệu.
Mặc dù việc thiết lập NUT có thể không phải là điều dễ dàng nhất và đòi hỏi bạn phải làm quen với việc chỉnh sửa các tệp cấu hình, kết quả cuối cùng chắc chắn sẽ rất xứng đáng. Hơn nữa, NUT còn có một add-on dành cho Home Assistant để mục đích giám sát, một tính năng mà chúng tôi luôn mong muốn có từ bất kỳ công cụ nào.
Cài Đặt NUT Trên Máy Chủ Proxmox Của Bạn
Trong phần này, chúng ta sẽ đi sâu vào các bước cụ thể để cài đặt và cấu hình NUT trên máy chủ Proxmox của bạn. Việc này sẽ đảm bảo hệ thống của bạn có thể tự động tắt an toàn khi có sự cố về nguồn điện.
Chuẩn bị – Xác định cổng USB của UPS
Vì chúng ta sẽ cài đặt máy chủ NUT trên Proxmox host, trước tiên chúng ta cần xác định cổng USB mà UPS của bạn đang kết nối. Để làm điều này, hãy truy cập vào node PVE (Proxmox Virtual Environment) của bạn và chọn tab Shell. Từ giao diện dòng lệnh (CLI), chúng ta sẽ chạy lệnh lsusb
. Lệnh này sẽ liệt kê tất cả các thiết bị USB đang kết nối.
Khi bạn đã xác định được chi tiết [bus] : [device]
của UPS (ví dụ: 3:2
), hãy chạy lệnh lsusb -v -s 3:2
(thay 3:2
bằng thông tin của bạn) để tìm các chi tiết cụ thể hơn về UPS của bạn. Thông tin này sẽ hữu ích cho việc cấu hình sau này.
Ảnh chụp màn hình lệnh lsusb trên Proxmox hiển thị chi tiết cổng USB của UPS
Tiến hành cài đặt NUT
Sau khi đã xác định được thông tin UPS, giờ là lúc cài đặt NUT. Mở lại Shell trên Proxmox và thực hiện lệnh sau:
apt install nut -y
Khi quá trình cài đặt hoàn tất, chúng ta cần chạy trình quét NUT để thu thập thông tin chi tiết cần thiết cho các tệp cấu hình sắp tới:
nut-scanner -U
Lệnh này sẽ quét và hiển thị thông tin về UPS của bạn mà NUT có thể nhận diện. Hãy ghi lại các thông tin này, đặc biệt là tên driver và cổng kết nối.
Cấu hình các tập tin cần thiết cho NUT
Đây là phần phức tạp nhất, chúng ta cần chỉnh sửa bảy tệp cấu hình khác nhau để NUT hoạt động đúng cách, cùng với một vài lệnh cuối để thay đổi ngưỡng phần trăm pin kích hoạt tắt máy.
-
/etc/nut/nut.conf
- Đầu tiên, hãy tạo một bản sao lưu tệp gốc phòng khi có lỗi:
cp /etc/nut/nut.conf /etc/nut/nut.example.conf
- Sau đó, mở tệp bằng bất kỳ trình soạn thảo văn bản nào (ví dụ:
nano
):nano /etc/nut/nut.conf
- Bạn sẽ thấy dòng
MODE=none
. Thay đổi nó thànhMODE=netserver
, sau đó lưu và thoát.
- Đầu tiên, hãy tạo một bản sao lưu tệp gốc phòng khi có lỗi:
-
/etc/nut/ups.conf
-
Tương tự, tạo một bản sao lưu:
cp /etc/nut/ups.conf /etc/nut/ups.example.conf
-
Mở tệp để chỉnh sửa:
nano /etc/nut/ups.conf
-
Xóa toàn bộ nội dung hiện có và thêm vào phần sau. Hãy chắc chắn thay thế
[apc]
,driver
,port
,vendorid
,productid
,serial
bằng kết quả bạn có được từnut-scanner
và thông tin UPS của bạn.pollinterval = 15 maxretry = 3 offdelay = 120 ondelay = 240 [apc] # APC Back-UPS BGM1500 driver = usbhid-ups port = auto desc = "APC Back-UPS BGM1500" vendorid = 051D productid = 0002 serial = xxxxxxxxxxxx
-
Lưu tệp, sau đó kiểm tra xem có lỗi nào không và đảm bảo nó hiển thị một subdriver:
upsdrvctl start
-
-
/etc/nut/upsd.conf
- Sao lưu tệp cấu hình:
cp /etc/nut/upsd.conf /etc/nut/upsd.example.conf
- Chỉnh sửa tệp:
nano /etc/nut/upsd.conf
- Xóa nội dung và thay thế bằng:
LISTEN 0.0.0.0 3493 LISTEN :: 3493
- Điều này cho phép máy chủ NUT lắng nghe trên tất cả các giao diện mạng.
- Sao lưu tệp cấu hình:
-
/etc/nut/upsd.users
-
Sao lưu tệp cấu hình người dùng:
cp /etc/nut/upsd.users /etc/nut/upsd.example.users
-
Mở tệp bằng trình chỉnh sửa yêu thích của bạn:
nano /etc/nut/upsd.users
-
Chỉnh sửa và điền mật khẩu của riêng bạn (thay
********
bằng mật khẩu mạnh):[upsadmin] # Administrative user password = ******** # Allow changing values of certain variables in the UPS. actions = SET # Allow setting the "Forced Shutdown" flag in the UPS. actions = FSD # Allow all instant commands instcmds = ALL upsmon master [upsuser] # Normal user password = ******** upsmon slave
-
-
/etc/nut/upsmon.conf
-
Sao lưu tệp:
cp /etc/nut/upsmon.conf /etc/nut/upsmon.example.conf
-
Mở và thay thế nội dung (bao gồm mật khẩu quản trị của bạn):
RUN_AS_USER root MONITOR apc@localhost 1 upsadmin ******** master MINSUPPLIES 1 SHUTDOWNCMD "/sbin/shutdown -h" NOTIFYCMD /usr/sbin/upssched POLLFREQ 4 POLLFREQALERT 2 HOSTSYNC 15 DEADTIME 24 MAXAGE 24 POWERDOWNFLAG /etc/killpower NOTIFYMSG ONLINE "UPS %s on line power" NOTIFYMSG ONBATT "UPS %s on battery" NOTIFYMSG LOWBATT "UPS %s battary is low" NOTIFYMSG FSD "UPS %s: forced shutdown in progress" NOTIFYMSG COMMOK "Communications with UPS %s established" NOTIFYMSG COMMBAD "Communications with UPS %s lost" NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding" NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced" NOTIFYMSG NOCOMM "UPS %s is unavailable" NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible" NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC NOTIFYFLAG LOWBATT SYSLOG+WALL+EXEC NOTIFYFLAG FSD SYSLOG+WALL+EXEC NOTIFYFLAG COMMOK SYSLOG+WALL+EXEC NOTIFYFLAG COMMBAD SYSLOG+WALL+EXEC NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC NOTIFYFLAG REPLBATT SYSLOG+WALL NOTIFYFLAG NOCOMM SYSLOG+WALL+EXEC NOTIFYFLAG NOPARENT SYSLOG+WALL RBWARNTIME 43200 NOCOMMWARNTIME 600 FINALDELAY 5
-
-
/etc/nut/upssched.conf
-
Tạo bản sao lưu:
cp /etc/nut/upssched.conf /etc/nut/upssched.example.conf
-
Mở tệp và thay thế nội dung bằng:
CMDSCRIPT /etc/nut/upssched-cmd PIPEFN /etc/nut/upssched.pipe LOCKFN /etc/nut/upssched.lock AT ONBATT * START-TIMER onbatt 30 AT ONLINE * CANCEL-TIMER onbatt online AT LOWBATT * EXECUTE onbatt AT COMMBAD * START-TIMER commbad 30 AT COMMOK * CANCEL-TIMER commbad commok AT NOCOMM * EXECUTE commbad AT SHUTDOWN * EXECUTE powerdown AT SHUTDOWN * EXECUTE powerdown
-
-
/etc/nut/upssched-cmd
- Tệp này thường không tồn tại, vì vậy bạn có thể tạo mới trực tiếp:
nano /etc/nut/upssched-cmd
- Viết nội dung sau vào tệp:
#!/bin/sh case $1 in onbatt) logger -t upssched-cmd "UPS running on battery" ;; shutdowncritical) logger -t upssched-cmd "UPS on battery critical, forced shutdown" /usr/sbin/upsmon -c fsd ;; upsgone) logger -t upssched-cmd "UPS has been gone too long, can't reach" ;; *) logger -t upssched-cmd "Unrecognized command: $1" ;; esac
- Lưu tệp, sau đó cấp quyền thực thi cho nó:
chmod +x /etc/nut/upssched-cmd
- Tệp này thường không tồn tại, vì vậy bạn có thể tạo mới trực tiếp:
Khởi động lại dịch vụ và kiểm tra
Sau khi hoàn tất cấu hình các tệp, chúng ta có thể khởi động lại máy chủ Proxmox hoặc sử dụng CLI để khởi động lại các dịch vụ NUT.
service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start
Bạn có thể kiểm tra mọi thứ đã được thiết lập chính xác hay chưa bằng lệnh sau. Nếu mọi thứ hoạt động đúng, nó sẽ hiển thị danh sách các thông số đang được giám sát:
upsc apc@localhost
Điều chỉnh ngưỡng pin thấp cho UPS
Các cài đặt mặc định cho một số mẫu UPS (ví dụ: APC) có thể quá thấp, khiến lệnh tắt máy diễn ra muộn. Chúng ta sẽ điều chỉnh để lệnh tắt máy diễn ra sớm hơn. Sử dụng hai lệnh sau trong Proxmox VE Shell, với upsadmin
và mật khẩu bạn đã chỉ định trong /etc/nut/upsd.users
:
upsrw -s battery.runtime.low=600 apc@localhost
upsrw -s battery.charge.low=50 apc@localhost
Lệnh đầu tiên đặt thời gian hoạt động còn lại của pin (runtime) là 600 giây (10 phút) trước khi kích hoạt shutdown, trong khi lệnh thứ hai đặt ngưỡng phần trăm pin còn lại là 50% trước khi thực hiện hành động tương tự. Tùy chỉnh các giá trị này để phù hợp với nhu cầu và thời gian tắt máy của hệ thống bạn.
Giám Sát Tình Trạng UPS Với Home Assistant
Sau khi đã cài đặt và cấu hình NUT thành công, việc giám sát tình trạng UPS trở nên dễ dàng hơn bao giờ hết, đặc biệt khi tích hợp với Home Assistant. Home Assistant có một tích hợp sẵn dành cho NUT, cho phép bạn theo dõi mọi thông số quan trọng của UPS ngay trên bảng điều khiển trung tâm của mình.
Để kết nối và giám sát, bạn chỉ cần thêm tích hợp này từ Settings > Devices & Services > Add Integration trong Home Assistant. Bạn sẽ cần nhập địa chỉ IP của máy chủ NUT (Proxmox host), cùng với user
và password
của người dùng thông thường (upsuser
) mà bạn đã thiết lập trước đó. Sau khi kết nối thành công, Home Assistant sẽ tự động lấy dữ liệu từ máy chủ NUT và hiển thị trực quan trên dashboard chính của bạn, cho phép bạn biết chính xác UPS của mình đang hoạt động như thế nào.
Giao diện Home Assistant hiển thị thông tin UPS APC được tích hợp qua máy chủ NUT
Kết Luận
Việc triển khai Network UPS Tools (NUT) trên hệ thống Proxmox của bạn là một bước đầu tư quan trọng và hiệu quả để bảo vệ dữ liệu quý giá trong home lab. Giờ đây, với NUT giám sát các máy chủ Proxmox, bạn có thể giảm bớt lo lắng về việc mất dữ liệu do sự cố mất điện. Khả năng tự động tắt máy an toàn không chỉ giữ cho dữ liệu của bạn nguyên vẹn mà còn bảo vệ phần cứng khỏi những hư hại tiềm ẩn.
Nếu trong tương lai bạn có thêm các máy chủ hoặc thiết bị khác cần giám sát từ máy chủ NUT để tự động tắt an toàn, bạn hoàn toàn có thể thêm chúng làm thiết bị client. Điều này cho phép chúng nhận tín hiệu tắt máy và ngắt nguồn một cách có trật tự trước khi pin UPS cạn kiệt. Mặc dù có những mẫu UPS đắt tiền hơn có thể gửi tín hiệu tắt máy đến nhiều client, nhưng giải pháp dựa trên NUT này không tốn kém thêm chi phí nào và mang lại hiệu quả tương đương, giúp bạn tối ưu hóa đầu tư vào home lab của mình.
Bạn đã từng cài đặt NUT hay có mẹo cấu hình nào thú vị không? Hãy chia sẻ kinh nghiệm của bạn trong phần bình luận bên dưới nhé!