pve下truenas硬盘休眠不管用,在pve层面设置检测并休眠的方法@优化z690i主板
专门针对 PVE 的 /dev/sda 和 /dev/sdc设置休眠,sdb 飞牛盘开启电源管理 但不休眠,减少磁头停靠。
truenas 每天唤醒6次,使用排查发现是自动证书检测,关闭它,systemctl disable certmonger --now,验证:systemctl status smartd。
总体思路:
sdc能正常休眠,sda经常醒来,不知道为什么,他们组成了阵列,如果sdc在休眠那么sda也应该休眠,所以用以下思路。
先设置sdb apm开启,不休眠,同时用hdparm -S 设定sdc5分钟没活动就休眠。
然后再写一个sh,每 5 分钟运行一次;先检查 sdc 是否休眠,如果 sdc 没休眠 → 什么都不做
如果 sdc 已休眠 → 再检查 sda
如果 sda 已休眠 → 什么都不做
如果 sda 未休眠 → 执行强制休眠 hdparm -Y /dev/sda
不写日志
开机自动运行
先设置sdb apm开启,不休眠,同时用hdparm -S 设定sdc5分钟没活动就休眠
1️⃣ 创建服务文件
nano /etc/systemd/system/hdparm-homedate.service
写入以下内容( 5 分钟空(300秒/5=60)闲后自动 standby,模式为254,防止磁头停靠减少磁盘寿命,永久生效):
[Unit]
Description=Set sda and sdc to standby (sleep) on boot
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/usr/sbin/hdparm -B 254 -S 0 /dev/sdb #磁盘活动时 磁头不要停靠 永远不进入睡眠
ExecStart=/usr/sbin/hdparm -S 60 /dev/sdc
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
✅ 关键点:
[Unit]、[Service]、[Install] 必须独占一行,不要写成一行
ExecStart 是执行命令
RemainAfterExit=yes 表示系统启动后保持设置状态
2️⃣ 重新加载 systemd
systemctl daemon-reload
3️⃣ 启用开机自启
systemctl enable hdparm-homedate.service
4️⃣ 立即生效
systemctl start hdparm-homedate.service
5️⃣ 验证
systemctl status hdparm-homedate.service
hdparm -C /dev/sda
hdparm -C /dev/sdb
hdparm -C /dev/sdc
hdparm -C 查看硬盘状态
active/idle 或 standby 表示已经设置成功
sh脚本
一、创建脚本
创建脚本文件:
nano /usr/local/bin/force_sleep_sda.sh
写入内容:
!/bin/bash
检查 sdc 是否休眠
state_sdc=$(hdparm -C /dev/sdc | grep -i state)
if echo "$state_sdc" | grep -q standby; then
# sdc 已休眠,检查 sda
state_sda=$(hdparm -C /dev/sda | grep -i state)
if echo "$state_sda" | grep -q active; then
# sda 未休眠,强制休眠
hdparm -Y /dev/sda
fi
fi
保存:
Ctrl+O
Enter
Ctrl+X
二、赋予执行权限
chmod +x /usr/local/bin/force_sleep_sda.sh
二、创建 systemd service
创建:
nano /etc/systemd/system/force-sleep-sda.service
内容:
[Unit]
Description=Force sleep sda if sdc already sleeping
[Service]
Type=oneshot
ExecStart=/usr/local/bin/force_sleep_sda.sh
保存退出。
三、创建 timer
创建:
nano /etc/systemd/system/force-sleep-sda.timer
内容:
[Unit]
Description=Run force sleep sda every 5 minutes
[Timer]
开机 2 分钟后首次运行
OnBootSec=2min
每 5 分钟运行一次
OnUnitActiveSec=5min
Unit=force-sleep-sda.service
[Install]
WantedBy=timers.target
保存退出。
四、加载 systemd 配置
systemctl daemon-reexec
systemctl daemon-reload
五、启用并启动 timer
systemctl enable force-sleep-sda.timer
systemctl start force-sleep-sda.timer
六、验证 timer 是否运行
查看:
systemctl list-timers | grep force-sleep
应看到类似:
force-sleep-sda.timer loaded active waiting 3min left
七、验证开机自动运行
检查:
systemctl is-enabled force-sleep-sda.timer
应返回:
enabled
说明:
已设置开机自动运行
每 5 分钟执行一次
不使用 cron
不写任何日志文件
主板优化
1、关闭cpu turboost
2、cpu 模式 max battry
3、offset 电压-100mv
4、开启pcie ASMP 高级电源管理选L1 最高睡眠
5、sata asmp电源管理
6、关闭不用的网卡口,关闭板载音频,wifi关闭没找到。
7、cpu超频设置3000mhz
8、CPU C10 C6最高都开启
9、PVE 设置 动态调整模式,默认最低频。