最近将硬盘柜从DIY的Nas(原生CentOS)小主机中移动到了一台装PVE的主机下,几天下来发现硬盘柜的耗电量每天都是0.6度以上,比之前的0.1度翻了5倍,这样下去电费都交不起了,最终发现是硬盘柜没有休眠。
🔍 问题分析
硬盘柜中有5块磁盘,盘符为sdc~sdg,使用mdadm软路由组了个Raid5,挂在到了 /mnt/data目录下,结构如下:
sdc~sdg (物理盘) → md5 (RAID5阵列) → /mnt/data (挂载点)
要让sdc~sdg休眠,需要确保:
- RAID阵列(md5)本身没有频繁访问,之前在CentOS下能入进休眠说明问题不在这。
- 挂载点(/mnt/data)没有文件系统访问,使用
lsof /mnt/data检查文件系统访问,待机状态下为空,并没有进程访问。 - 系统服务不扫描这些物理磁盘。问题就应该出在这pve对磁盘的监控上了。
🛠️ 解决方案
方案1. 关掉pve状态监控(不推荐)
最简单粗爆的办法就是关掉pvestatd,关了之后pve后台所有状态都不会更新了。
pvestatd stop
方案2. 关掉sdc~sdg磁盘相关监控
1. 调整LVM过滤器
编辑 /etc/lvm/lvm.conf,在 devices部分添加filter规则:
# 备份原配置
cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf.backup
# 编辑配置文件
vim /etc/lvm/lvm.conf
找到或添加以下内容:
devices {
# 其他配置...
filter = [ "a|/dev/sda|", "a|/dev/sdb|", "r|.*|" ]
global_filter = [ "a|/dev/sda|", "a|/dev/sdb|", "r|.*|" ]
}
解释:
a|/dev/sda|- 允许sda(你的系统盘)a|/dev/sdb|- 允许sdb(你的系统盘)r|.*|- 拒绝所有其他设备(包括sdc~sdg)
应用配置:
# 更新initramfs
update-initramfs -u
# 重启LVM服务
systemctl restart lvm2-lvmetad.service
# 或者重启系统
reboot
2. 调整smartd监控
编辑 /etc/smartd.conf,为这些硬盘设置更长的检查间隔或禁用监控:
# 在文件末尾添加:忽略阵列磁盘的SMART温度变化属性更新,及休眠时不检查
/dev/sdc -I 194 -n standby,q
/dev/sdd -I 194 -n standby,q
/dev/sde -I 194 -n standby,q
/dev/sdf -I 194 -n standby,q
/dev/sdg -I 194 -n standby,q
# 或者完全忽略这些盘的smart监控
# DEVICESCAN -d ignore /dev/sd[c-g]
重启smartd服务:
systemctl restart smartd
3. 使用hdparm设置休眠超时
为每个物理磁盘设置休眠超时:
# 设置10分钟(120 * 5秒)后休眠
hdparm -S 120 /dev/sdc
hdparm -S 120 /dev/sdd
hdparm -S 120 /dev/sde
hdparm -S 120 /dev/sdf
hdparm -S 120 /dev/sdg
# 使设置永久生效,添加到/etc/rc.local
echo 'hdparm -S 120 /dev/sdc' >> /etc/rc.local
echo 'hdparm -S 120 /dev/sdd' >> /etc/rc.local
echo 'hdparm -S 120 /dev/sde' >> /etc/rc.local
echo 'hdparm -S 120 /dev/sdf' >> /etc/rc.local
echo 'hdparm -S 120 /dev/sdg' >> /etc/rc.local
🔧验证休眠状态
设置完成后,验证磁盘是否能够休眠:
# 检查磁盘状态(standby表示已休眠)
hdparm -C /dev/sdc
hdparm -C /dev/sdd
hdparm -C /dev/sde
hdparm -C /dev/sdf
hdparm -C /dev/sdg
# ...检查所有磁盘
# 监控磁盘活动
watch -n 1 'hdparm -C /dev/sd[c-g]'
看到硬盘的状态为休眠了,现在就等硬盘柜进入休眠省电状态了。

评论区