本文目录导读:

我来为您介绍几种调整硬盘休眠的脚本方法,适用于Linux和Windows系统。
Linux系统
使用hdparm设置硬盘休眠
#!/bin/bash
# 硬盘休眠时间设置脚本
# 设置硬盘休眠时间(单位:秒)
# 120 = 2分钟,300 = 5分钟,0 = 禁用休眠
SLEEP_TIME=120
# 获取所有硬盘设备
DRIVES=$(ls /dev/sd[a-z] 2>/dev/null)
for DRIVE in $DRIVES; do
echo "设置 $DRIVE 休眠时间为 ${SLEEP_TIME}秒"
sudo hdparm -S $(($SLEEP_TIME / 5)) $DRIVE
done
使用sdparm(适用于SAS/SCSI硬盘)
#!/bin/bash
# SCSI/SAS硬盘休眠设置
for DRIVE in /dev/sd[a-z]; do
# 设置电源管理
sudo sdparm --set=STANDBY=1 $DRIVE
# 设置超时时间(秒)
sudo sdparm --set=STANDBY_TIMER=120 $DRIVE
done
完整的管理脚本
#!/bin/bash
CONFIG_FILE="/etc/harddisk_power.conf"
# 读取配置文件
if [ -f "$CONFIG_FILE" ]; then
source "$CONFIG_FILE"
else
# 默认配置
TIMEOUT=120 # 休眠超时时间(秒)
POWER_SAVE=true # 是否启用节电
fi
set_hdd_sleep() {
local DRIVE=$1
local TIMEOUT=$2
# 检查磁盘是否存在
if [ ! -b "$DRIVE" ]; then
echo "错误: 设备 $DRIVE 不存在"
return 1
fi
# 检查是否正在使用
if grep -q "$DRIVE" /proc/mounts; then
echo "警告: $DRIVE 已挂载,跳过"
return 1
fi
# 设置休眠时间
if [ "$POWER_SAVE" = true ]; then
echo "设置 $DRIVE 休眠时间为 ${TIMEOUT}秒"
sudo hdparm -S $(($TIMEOUT / 5)) "$DRIVE"
# 启用高级电源管理
sudo hdparm -B 127 "$DRIVE"
else
echo "禁用 $DRIVE 休眠"
sudo hdparm -S 0 "$DRIVE"
sudo hdparm -B 255 "$DRIVE"
fi
}
# 主循环
for DRIVE in /dev/sd[a-z]; do
if [ -b "$DRIVE" ]; then
set_hdd_sleep "$DRIVE" "$TIMEOUT"
fi
done
系统服务脚本(自动运行)
#!/bin/bash
# /etc/init.d/harddisk-sleep
case "$1" in
start)
echo "设置硬盘休眠..."
for DRIVE in /dev/sd[a-z]; do
if [ -b "$DRIVE" ]; then
hdparm -S 24 "$DRIVE" # 2分钟
hdparm -B 127 "$DRIVE"
fi
done
;;
stop)
echo "禁用硬盘休眠..."
for DRIVE in /dev/sd[a-z]; do
if [ -b "$DRIVE" ]; then
hdparm -S 0 "$DRIVE"
hdparm -B 255 "$DRIVE"
fi
done
;;
status)
for DRIVE in /dev/sd[a-z]; do
if [ -b "$DRIVE" ]; then
hdparm -C "$DRIVE"
fi
done
;;
*)
echo "用法: $0 {start|stop|status}"
exit 1
;;
esac
Windows系统
PowerShell脚本
# 设置硬盘休眠时间
$Timeout = 120 # 分钟
# 获取所有物理磁盘
$Disks = Get-PhysicalDisk | Where-Object {$_.MediaType -eq 'HDD'}
foreach ($Disk in $Disks) {
$DeviceId = $Disk.DeviceId
try {
# 设置硬盘休眠
Set-PhysicalDisk -DeviceNumber $DeviceId -Usage AutoSelect
# 设置电源策略
powercfg /change disk-timeout-ac $Timeout
powercfg /change disk-timeout-dc $Timeout
Write-Host "已设置磁盘 $DeviceId 休眠时间为 ${Timeout}分钟"
}
catch {
Write-Host "设置磁盘 $DeviceId 失败: $_"
}
}
# 查看当前设置
Write-Host "`n当前电源设置:"
powercfg /query
批处理脚本
@echo off
chcp 65001 > nul
echo 硬盘休眠管理工具
echo ================
echo 1. 设置硬盘休眠(5分钟)
echo 2. 设置硬盘休眠(15分钟)
echo 3. 设置硬盘休眠(30分钟)
echo 4. 设置硬盘休眠(1小时)
echo 5. 禁用硬盘休眠(永不)
echo 6. 查看当前设置
echo 7. 退出
set /p choice="请选择 (1-7): "
if "%choice%"=="1" (
powercfg /change disk-timeout-ac 5
powercfg /change disk-timeout-dc 5
echo 已设置硬盘5分钟后休眠
) else if "%choice%"=="2" (
powercfg /change disk-timeout-ac 15
powercfg /change disk-timeout-dc 15
echo 已设置硬盘15分钟后休眠
) else if "%choice%"=="3" (
powercfg /change disk-timeout-ac 30
powercfg /change disk-timeout-dc 30
echo 已设置硬盘30分钟后休眠
) else if "%choice%"=="4" (
powercfg /change disk-timeout-ac 60
powercfg /change disk-timeout-dc 60
echo 已设置硬盘60分钟后休眠
) else if "%choice%"=="5" (
powercfg /change disk-timeout-ac 0
powercfg /change disk-timeout-dc 0
echo 已禁用硬盘休眠
) else if "%choice%"=="6" (
powercfg /query
) else if "%choice%"=="7" (
exit /b
) else (
echo 无效选择
)
pause
注意事项
- 权限:Linux系统需要root权限,Windows需要管理员权限
- SSD固态硬盘:不建议设置频繁休眠,会影响寿命
- 系统盘:不建议设置休眠,可能影响系统性能
- 监控:使用
smartctl或hdparm -C检查硬盘状态 - 持久化:Linux系统需要添加到开机启动项
使用示例
# Linux - 设置2分钟休眠(hdparm参数24 = 120秒/5) sudo ./hdd_sleep.sh # Linux - 查看硬盘状态 sudo hdparm -C /dev/sda # Windows - 运行PowerShell脚本 powershell -ExecutionPolicy Bypass -File "hdd_sleep.ps1"
请根据您的具体需求选择合适的脚本,并适当调整休眠时间参数。