上次粗略写了之后 还是发现了不少问题
主要集中在逻辑上,之前的检测逻辑是有些问题的。
主要优化
优化检测逻辑
优化LAN灯无法识别网络状态问题,能检测出当前网络状态。
优化硬盘物理移除后LED不会消失问题现 (30秒检测一次)
新增硬盘休眠状态检测
优化开启自启服务流程调用的脚步逻辑错误问题
优化之前频繁调用hctl 导致硬盘老是被唤醒问题(现在不会了)
优化后台服务不能检测电源灯和LAN网络问题
现在新的后台检测逻辑是
启动 → 加载映射 → 30秒循环
↓
hdparm检测所有硬盘
↓
成功 → 更新LED → 继续循环
↓
失败 → 重新映射 → 继续循环
现在的映射逻辑是
# 检测硬盘LED: disk1, disk2, disk3, disk4...
# 检测系统LED: power, netdev
lsblk -S -x hctl -o name,hctl,serial
结果按HCTL地址排序:
sda 0:0:0:0 WL2042QT
sdd 1:0:0:0 Z1Z5LKT4
sdc 2:0:0:0 WD-WMC130E15K5E
sdb 3:0:0:0 V6JLAW9V
# 按HCTL顺序映射到LED:
# /dev/sda (HCTL 0:0:0:0) -> disk1
# /dev/sdd (HCTL 1:0:0:0) -> disk2
# /dev/sdc (HCTL 2:0:0:0) -> disk3
# /dev/sdb (HCTL 3:0:0:0) -> disk4
hctl_mapping.conf - HCTL映射配置
HCTL_MAPPING[/dev/sda]="0:0:0:0|WL2042QT|disk1|Model|Size"
HCTL_MAPPING[/dev/sdd]="1:0:0:0|Z1Z5LKT4|disk2|Model|Size"
HCTL_MAPPING[/dev/sdc]="2:0:0:0|WD-WMC130E15K5E|disk3|Model|Size"
HCTL_MAPPING[/dev/sdb]="3:0:0:0|V6JLAW9V|disk4|Model|Size"
disk_mapping.conf
- 简化映射配置
/dev/sda=disk1
/dev/sdd=disk2
/dev/sdc=disk3
/dev/sdb=disk4
如果硬盘位置不连续(如第2个位置没插硬盘):
# HCTL检测结果:
# sda 0:0:0:0 -> disk1
# sdb 2:0:0:0 -> disk2 (注意:跳过了1:0:0:0)
# sdc 3:0:0:0 -> disk3
映射结果:/dev/sda=disk1/dev/sdb=disk2 (实际对应物理位置3)/dev/sdc=disk3 (实际对应物理位置4)
code