[quote][size=2][url=forum.php?mod=redirect&goto=findpost&pid=174860&ptid=30261][color=#999999]苏万x 发表于 2025-9-16 17:21[/color][/url][/size]
情况一样,组Raid的四块不能正常休眠,其余正常,求教程[/quote]
下面给出 通用化脚本,可同时监控 sdb、sdc、sdd、sde、sdf 五块硬盘,每 15 分钟检测一次各自 15 分钟内的 I/O 增量,若完全空闲则 hdparm -y 待机。
📄 脚本:/usr/local/bin/spindown_multi.sh
#!/bin/bash
# SPDX-License-Identifier: MIT
# spindown_multi.sh – spin down sdb..sdf after 15 min idle
# 2025-07-14
# 要监控的磁盘列表,可按需增删
DISKS=(/dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf)
INTERVAL_SEC=900
LOGFILE="/var/log/spindown_multi.log"
# 保存初始 I/O 统计的关联数组
declare -A last_read last_write
for d in "${DISKS[@]}"; do
dev=$(basename "$d")
read -r last_read[$dev] last_write[$dev] < <(
awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
)
done
log() {
echo "$(date '+%F %T') $*" | tee -a "$LOGFILE"
}
log "Started monitoring disks: ${DISKS[*]} (interval ${INTERVAL_SEC}s)"
while :; do
sleep "$INTERVAL_SEC"
for d in "${DISKS[@]}"; do
dev=$(basename "$d")
read -r cur_read cur_write < <(
awk -v d="$dev" '$3==d {print $6" "$10}' /proc/diskstats
)
[[ -z $cur_read || -z $cur_write ]] && continue
read_inc=$(( cur_read - last_read[$dev] ))
write_inc=$(( cur_write - last_write[$dev] ))
if (( read_inc == 0 && write_inc == 0 )); then
hdparm -y "$d" >/dev/null 2>&1
[[ $? -eq 0 ]] && log "$d idle – spindown issued" \
|| log "ERROR: hdparm -y failed on $d"
else
log "$d busy (r $read_inc / w $write_inc) – skipped"
fi
last_read[$dev]=$cur_read
last_write[$dev]=$cur_write
done
done
🔧 安装步骤(与单盘相同)
-
保存脚本
sudo nano /usr/local/bin/spindown_multi.sh
# 粘贴后保存
-
赋权
sudo chmod +x /usr/local/bin/spindown_multi.sh
-
systemd 服务(开机自启)
创建 /etc/systemd/system/spindown-multi.service:
[Unit]
Description=Auto spin-down multiple disks after idle
After=local-fs.target
[Service]
Type=simple
ExecStart=/usr/local/bin/spindown_multi.sh
Restart=always
[Install]
WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload
sudo systemctl enable --now spindown-multi.service
📊 查看日志
sudo tail -f /var/log/spindown_multi.log
🔧 调整事项
- 若想增加/减少磁盘,只需修改脚本里
DISKS=(...) 一行即可。
- 若希望间隔更短/更长,改
INTERVAL_SEC(单位为秒)。
- 日志文件路径也可自行修改。
参考这个配置