使用hdparm在X分钟后将HDD置于待机状态不起作用

我在家庭服务器上使用Ubuntu 12.04。 有5个硬盘驱动器:一个带OS的SSD和4个HDD(Samsung HD204UI)使用mdadm配置为RAID5。

我不经常需要RAID(比如平均每天大约一次); 它包含多媒体数据和一些备份,因此我决定在大多数时间将驱动器置于待机状态。

我使用hdparm将驱动器配置为在20分钟后自动降速,这里以/dev/sda为例:

 hdparm -S 240 /dev/sda 

该命令的输出证实了这一点:

 /dev/sdb: setting standby to 240 (20 minutes) 

但问题是驱动器在最后一次访问后约5秒(而不是20分钟)后旋转,并且

 hdparm -C /dev/sdb 

显示:

 /dev/sdb: drive state is: standby 

为什么驱动器没有按照配置等待20分钟? 它与RAID设置有关吗? (我不这么认为……)

这个非常短的超时是有问题的,因为它是一个RAID5,当我访问一个文件时,它在四个驱动器周围以块为单位进行传播。 由于在读取驱动器2时不需要驱动器1,因此在下次使用时(在读取驱动器3之后)它将处于睡眠状态。 因此,驱动器在整个时间内保持旋转,导致吞吐量接近零。

对于那些关心我的驱动器寿命的人来说:驱动器平均每天上下调整一次是没有问题的,因为我更喜欢节省能源和热量而不是驱动器的运行状况(我使用RAID5,内容不是不是很重要。

您的BIOS中是否启用了AHCI? 如果没有尝试打开它并重新尝试。

如果仍然不起作用,那么你可能不得不尝试一些更复杂的东西,因为hdparm并不总能很好地与SATA驱动器配合使用,这就是我认为你拥有的。

查看此页面以获取使用crontab的以下相对简单的解决方案:

 sudo apt-get install sg3-utils crontab -e 

现在,将其添加到crontab的底部(将sdx替换为您希望置于待机状态的驱动器):

 0-59/15 * * * * ( if [ ! -f /dev/shm/1 ] ; then touch /dev/shm/1 /dev/shm/2; fi ; mv /dev/shm/1 /dev/shm/2; cat /proc/diskstats > /dev/shm/1 ) >/dev/null 2>&1 0-59/15 * * * * ( export HD="sdx "; if [ "$(diff /dev/shm/1 /dev/shm/2 | grep $HD )" = "" ] ; then /usr/bin/sg_start --stop /dev/$HD; fi ) >/dev/null 2>&1 

当然,在尝试任何此操作之前, 最好对硬盘驱动器的内容执行完整备份。

也许更好的方法可能是:

hdparm -B 1 -Y / dev / device
hdparm -B 255 / dev / device

第一个hdparm立即将设备置于待机状态。 第二个关闭APM,因此磁盘保持待机模式,直到下一次磁盘访问。