感谢分享
奖励积分
但如果能排版一下就更完美了
【 在 polarbear31 的大作中提到: 】
: 标 题: 记录一下两天时间死磕树莓派2b作为ups的nut服务器的过程
: 发信站: 水木社区 (Tue Nov 25 18:14:46 2025), 站内
:
: 事情起因是感觉家庭nas存储系统容易在断电的情况下导致硬盘数据丢失。而这个硬盘数据恢复会相当的麻烦,有可能会导致一些家庭已经存储的数据永远的就找不回来了。看了网上介绍,一般建议对这种家庭的nas存储系统添加一个ups作为一个保护。
: Ups的作用并不是为了让你的nas系统长时间在断电的情况下工作,而是为了给你一个关机的缓冲时间,保证你在ups的供电的情况下,正常的完成nas系统的关机。这就需要nas系统要与ups建立一个稳定的通讯。比较简便的做法是将ups上的usb端口,直接与nas服务器的usb端口连接。然后在n
: as系统当中配置Nut服务,实现当ups的市电断电后,通过nut服务nas系统获得该消息并完成正常的关机程序。但是我家的情况是nas系统安装在虚拟机系统里,同时在关机nas的时候也要分开时段,关机虚拟机。目前能实现这个功能的,对于大型的,机房机柜用的ups,其ups厂家都有自己专
: 诺耐绶务程序负责通知各个负载进行随时的按顺序下电。而我们的家用环境显然不适合这种机房机柜用的ups。目前最好的解决方案就是采用nut服务,Network UPS Tools, Nut兼容很多的流行的 ups系统。我们看到的nas进行自动关机功能的,大部分也是内嵌了nut服务。本着废物利用
: 脑颍鬏2b作为一个几十元钱低价的 Linux小主机是时候发挥它的余热了。树莓派2b如果不接其他负载的话,本身能耗比较低。本次我就采用一个5伏1安的usb充电头,作为树莓派2b的电源,连接一根网线和ups的usb线。本次采用的ups是伊顿的650ups。伊顿650支持650伏安的负载,转
: 换成有功功率瓦数大约是400瓦。通过查看nut网站的兼容性情况。伊顿家的ups是他们兼容性最好的一款ups。因为开发nut服务的这个开源程序的好几个主创,好像都是伊顿出来的工程师。我家的连接结构就是市电出来,直接插入ups的供电接口,然后输出接口,接一个插线板,连接光猫、
: 酚善鳎换换蚽as所用的虚拟机系统。树莓派2b通过网线连接到交换机上,通过usb线连接到伊顿650的usb输出口。树莓派2b的供电也在ups的输出端口上。然后就开始了周末两天的死磕树莓派2b作为ups的nut服务器的过程。
: 首先把树莓派2b的操作系统安装好。我采用的是树莓派2b的最新6.12lite版操作系统。这个操作系统是基于Debian13发布的。 Lite版是没有图形界面的,是通过指令访问。这个过程都很流畅,网上也有相关的介绍,就不多过多介绍。建立了ssh远程访问之后,给树莓派2b指定了固定的ip地
: 贰8铝斯诘木迪裨础M瓿闪讼低潮旧淼膗pdate的工作。就把它连接到系统当中,准备配置nut服务了。
: 首先安装nut
: upsyy@ups-server:~$ sudo apt install nut
:
: 用sudo nut-scanner -U查找ups的usb连接位置,
: 如果发生:
: Cannot load SNMP library (libnetsnmp.so) : file not found. SNMP search disabled.
: Cannot load XML library (libneon.so) : file not found. XML search disabled.
: Cannot load AVAHI library (libavahi-client.so) : file not found. AVAHI search disabled.
: Cannot load IPMI library (libfreeipmi.so) : file not found. IPMI search disabled.
: Cannot load NUT library (libupsclient.so) : file not found. NUT search disabled.
: 文件无法找到的错误,需要重新映射文件名,采用下面指令:
: #This fixed helped me on Ubuntu 24.04's included 2.8.1 version of nut to get USB working.
:
: pushd /usr/lib/x86_64-linux-gnu/
: sudo ln -s libusb-1.0.so.0 libusb-1.0.so
: sudo ln -s libnetsnmp.so.40 libnetsnmp.so
: sudo ln -s libavahi-client.so.3 libavahi-client.so
: sudo ln -s libfreeipmi.so.17 libfreeipmi.so
: sudo ln -s libneon-gnutls.so.27 libneon.so
: popd
: 当然用cp文件的方式也行:
: sudo cp libusb-1.0.so.0 libusb-1.0.so
: 然后用sudo nut-scanner -U查找已连接的usb端口,结果:
: Scanning USB bus.
: [nutdev1]
: driver = "usbhid-ups"
: port = "auto"
: vendorid = "0463"
: productid = "FFFF"
: product = "Ellipse ECO"
: serial = "000000000"
: vendor = "EATON"
: bus = "002"
: device = "003"
: busport = "006"
:
: 也是正常的,顺利识别到伊顿650 ups已连接。
: 然后编辑编辑/etc/nut/ups.conf文件
: 注释此行maxretry = 3 # Generally this is just the number of retries, effective together with 'retrydelay'. Normal: 3~5.
: # So the name of my UPS is 'eaton650' now
: [eaton650]
: driver = usbhid-ups # From nut-scanner
: port = auto
: desc = "eaton 650" # Just a string for yourself, should be human readable
: 编辑/etc/nut/nut.conf文件
: MODE=netserver
: 准备开启nut服务。到目前为止一切都正常,也和教程一致。然后就需要开启nut的驱动服务了。输入指令:
: sudo upsdrvctl start
: 结果显示:
: upsyy@ups-server:~$ sudo upsdrvctl start
: Network UPS Tools - UPS driver controller 2.8.1
: Network UPS Tools - Generic HID driver 0.52 (2.8.1)
: USB communication driver (libusb 1.0) 0.46
:
libusb1: Could not open any HID devices: insufficient permissions on everything
: No matching HID UPS found : upsnotify: failed to notify about state 4: no notification tech defined, will not spam more about it
: Driver failed to start (exit status=1)
: Libusb1这里不能打开hid设备,没有权限,驱动启动不成功。
: 没有这个驱动,nut就无法链接到ups,后面的nut服务自然也没有意义。
: 然后就各种网络查找前人的经验,发现需要以下过程设置nut组的权限。
: 在安装nut时,会自动建立一个nut用户和nut组。
: 需要用:ls -l /dev/bus/usb/002查看usb接口的权限,我的显示:
: total 0
: crw-rw-r-- 1 root root 189, 128 Nov 23 22:46 001
: crw-rw-r-- 1 root root 189, 129 Nov 23 22:46 002
: crw-rw-r-- 1 root root 189, 130 Nov 23 23:41 003
: 前面nut-scanner已经发现ups链接在:
: bus = "002"
: device = "003"
: 组权限属于root。
: 用以下方法更改:
: sudo vim /etc/udev/rules.d/62-nut-usbups.rules
: 在相关文件夹下建立一个规则文件,如果没有就新建一个。
: 插入内容:
: ATTR{idVendor}=="0463", ATTR{idProduct}=="ffff", MODE="664", GROUP="nut"
: 注意0463和ffff需要按照你的ups相关信息填写,nut-scanner会扫描出来。
: 然用:
: sudo udevadm control --reload-rules
: sudo udevadm trigger
: 这两个指令让规则生效。再ls -l /dev/bus/usb/002查看,以变为:
: total 0
: crw-rw-r-- 1 root root 189, 128 Nov 23 23:42 001
: crw-rw-r-- 1 root root 189, 129 Nov 23 23:42 002
: crw-rw-r-- 1 root nut 189, 130 Nov 23 23:42 003
: 设备003已有nut组了。
: 然后再开启驱动服务sudo upsdrvctl start,居然结果一样没有任何变化,还是没有权限。
: 好在家里还有一个台式机电脑,把台式机电脑的硬盘更换一个暂时不用的。在这台电脑上安装了一个乌班图Linux系统。同样把伊顿650的Usb口插到台式机上。安装nut服务,按照教程一遍操作之后,立马驱动起来了。这就让我打消了这个伊顿650ups出现故障的可能性。然后继续死磕树莓派
: 牟僮飨低场<绦谕喜檎易柿稀V沼谡业接懈鋈嗽谔永锼敌枰0裯ut的设置进行更改。重新编辑/etc/nut/ups.conf文件,插入:
:
: [eaton650]
: driver = usbhid-ups # From nut-scanner
: port = auto
: desc = "eaton 650" # Just a string for yourself, should be human readable
: product = "Ellipse ECO"
: vendor = "CPS"
: bus = "002" #指定正确的总线序号
: device = "003" #并指定设备号
: 再次,启动nut驱动服务,就一切正常了。然后按照nut教程配置/etc/nuc/upsd.conf文件
: LISTEN 0.0.0.0 3493
: 监听3493端口,
: 配置/etc/nut/upsd.users文件
: [upsadmin]
: password = admin_password # Your admin user 'upsadmin' password
: actions = SET
: actions = FSD # So this user can do 'set' and 'fsd' (force shutdown)
: instcmds = ALL
: upsmon master
:
: # A normal user for normal access
: [upsuser]
: password = normal_user_password
: upsmon slave
: 插入两个访问nut的账号,并指定密码。
: 然后就可以启动 nut-server 服务了。
: 然后按照nas的UPS设置部分以slave身份访问树莓派上的nut服务就可以了。
: 终于让ups起到了真正的作用,ESXI虚拟机系统也安装了nut客户端插件,配置了链接树莓派的nut服务器定时关机。
: 这里 device = "003" #并指定设备号带来一个问题就是Linux系统的设备号是会变的,当你开机时拔下usb线再插上,系统就会分配一个新的设备号,或者你换了原来的usb端口也会改变。如果不做更改还会发生libusb1没有权限的问题。
: --
:
: ※ 来源:·水木社区
http://www.mysmth.net·[FROM: 222.129.132.*]
--
FROM 123.113.108.*