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

lee*_*mes 13 raid power-management mdadm hard-drive

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

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

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

hdparm -S 240 /dev/sda
Run Code Online (Sandbox Code Playgroud)

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

/dev/sdb:
 setting standby to 240 (20 minutes)
Run Code Online (Sandbox Code Playgroud)

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

hdparm -C /dev/sdb
Run Code Online (Sandbox Code Playgroud)

显示:

/dev/sdb:
 drive state is:  standby
Run Code Online (Sandbox Code Playgroud)

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

这个非常短的超时是有问题的,因为它是一个 RAID5,当我访问一个文件时,它会在四个驱动器周围按块分布。由于读取驱动器 2 时不需要驱动器 1,因此在下次使用时(从驱动器 3 读取后)它进入休眠状态。因此,驱动器始终上下旋转,导致吞吐量接近于零。

对于关心我的驱动器寿命的人:驱动器平均每天上下旋转一次是没有问题的,因为我更喜欢节省能源和热量而不是驱动器的健康状况(我使用 RAID5 并且内容是不是很重要)。

Sir*_*rlo 11

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

如果这仍然不起作用,那么您可能需要尝试一些更复杂的东西,因为hdparmSATA 驱动器并不总是能很好地发挥作用,我认为这就是您所拥有的。

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

sudo apt-get install sg3-utils
crontab -e
Run Code Online (Sandbox Code Playgroud)

现在,将此添加到您的 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
Run Code Online (Sandbox Code Playgroud)

当然,在尝试任何这些之前,强烈建议您对硬盘驱动器的内容进行完整备份。