hdparm -s 设置空闲休眠时间单位为5秒,如-s 120表示10分钟后休眠;有效值1–240对应5秒至20分钟,241–251为30分钟起的厂商自定义范围,255禁用休眠;需配合-b 127启用apm并写入/etc/hdparm.conf持久化,且禁用bios中alpm以防干扰。

hdparm -S 设置空闲后休眠秒数(单位是5秒)
Ubuntu 对机械硬盘的休眠控制不走系统级电源策略,而是直接靠 hdparm 发送 ATA 命令。关键参数是 -S:它设的是“空闲多少个 5 秒单位后自动停转”。比如 sudo hdparm -S 120 /dev/sdb 表示空闲 600 秒(10 分钟)后休眠。
常见误区是以为填 60 就代表 60 秒——实际不是。有效值范围是 1–240(对应 5 秒到 20 分钟),241–251 是厂商自定义范围(部分硬盘支持更长),255 表示禁用自动休眠。
- 必须用 root 权限执行,普通用户无权修改硬盘电源状态
- 目标设备不能是系统盘(如
/dev/sda),否则可能在休眠时触发 I/O 错误甚至卡死 - USB 硬盘盒或某些 NVMe-to-SATA 转接器会拦截或忽略该命令,此时需换用
hd-idle
/etc/hdparm.conf 持久化配置写法
临时设置重启即失效,要开机就生效,得写进 /etc/hdparm.conf。注意格式非常严格:段落开头必须是设备路径(带空格),大括号必须独占行,等号前后不能有空格,且每项只写一次。
正确写法示例(针对 /dev/sdb):
/dev/sdb {
spindown_time = 120
apm = 127
}
其中 apm = 127 很关键:APM(Advanced Power Management)值低于 128 才允许硬盘响应休眠指令;设成 255 就彻底锁死节能功能,-S 也会失效。
- 改完文件后必须重启
hdparm服务:sudo systemctl restart hdparm - 某些发行版(如 Ubuntu Server 24.04)默认不启用该服务,需先运行
sudo systemctl enable hdparm - 如果硬盘是热插拔的(如 USB 或 eSATA),配置不会自动应用到新插入设备,得靠 udev 规则或脚本补位
systemd 定时器替代方案:当 hdparm 不生效时
有些硬盘(尤其是 Western Digital Green、某些 SMR 盘或固件锁定的 NAS 盘)根本不理 hdparm -S。这时可绕过 ATA 层,用 hd-idle 工具轮询 I/O 活动,手动触发 hdparm -y 强制休眠。
安装与配置步骤:
- 装工具:
sudo apt install hd-idle - 编辑服务文件:
sudo nano /etc/default/hd-idle,设HD_IDLE_OPTS="-a sdb -i 600"(表示监控sdb,空闲 600 秒后休眠) - 启用服务:
sudo systemctl enable hd-idle && sudo systemctl start hd-idle
这种方式本质是“用户态轮询 + 强制停转”,比原生 hdparm 多一层 CPU 开销,但兼容性高得多。唯一要注意的是:若硬盘正在被 rsync、snapraid 或其他后台进程持续读写,hd-idle 会一直重置计时器,导致永不休眠。
验证是否真休眠:别只听声音
靠“听不到转动声”判断休眠不可靠——有些硬盘休眠后仍有微弱电流声,有些则因固件问题假休眠(磁头归位但盘片仍在慢转)。可靠验证方式只有两个:
- 执行
sudo hdparm -C /dev/sdb:返回drive state is: standby或drive state is: sleeping才算成功;active/idle表示仍在运转 - 用红外测温枪测硬盘外壳温度:休眠 5 分钟后应比运行时低 8℃ 以上(环境静止前提下)
特别容易被忽略的一点:很多 SATA 主板在 BIOS 中默认开启 “Aggressive Link Power Management”(ALPM),它会让 SATA 控制器主动断开链路,导致系统误判硬盘离线,进而反复重试 I/O、阻止休眠。遇到反复唤醒/无法休眠,先去 BIOS 关掉 ALPM。











