如何控制硬盘降速时间?


71

我的PC中有2个HDD。Ubuntu在大约15分钟后非常快速地关闭了辅助HDD,这对我来说很短。我需要控制这次。我该怎么做?

我尝试了GNOME电源管理,但没有发现它有用。

Answers:


67

看一看hdparm

手册man hdparm在命令行上):

-S设置驱动器的待机(停机)超时。驱动器使用此值来确定关闭主轴电机以节省功率之前要等待多长时间(无磁盘活动)。在这种情况下,尽管大多数驱动器的速度要快得多,但该驱动器可能需要长达30秒才能响应随后的磁盘访问。

超时值的编码有些特殊。零值表示“超时已禁用”:设备将不会自动进入待机模式。值从1到240指定5秒的倍数,产生5秒到20分钟的超时。从241到251的值指定30分钟的1到11个单位,从而导致30分钟到5.5小时的超时。值252表示超时21分钟。值253将厂商定义的超时时间设置为8到12小时之间,并且保留值254。255被解释为21分钟加15秒。请注意,某些较旧的驱动器可能对这些值有不同的解释。

因此sudo hdparm -I /dev/sdb | grep level将显示当前的Spindown值,例如:

Advanced power management level: 254

在手册中:保留了254,所以我希望它是Ubuntu的默认设置(任何人都可以确认/扩展此内容吗?)

例:

sudo hdparm -S 25 /dev/sdb = 25 * 5秒后降速。

sudo hdparm -S 245 /dev/sdb =(245-240)* 30分钟后降速。


感谢Rinzwind的技巧,这对我很有帮助,但是我希望我能在下一版本的ubuntu中看到gui,或者可以将其集成到gnome电源管理器中
user16295 2011年

4
关于lzap的答案,您似乎希望grep使用APM(-Bparm),但请谈论-S下降。您还了解APM吗?
涡轮增压

3
当前-B设置如上所示。如何查看当前-S设置?
SabreWolfy 2012年

5
sudo hdparm -y /dev/sdb立即杀死野兽
siamii

1
@SabreWolfy我曾作为一个单独的问题问过:如何找到当前驱动器的降速时间?
ændrük

46

磁盘工具->选择HDD驱动器->单击右上角的“更多操作...”图标->驱动器设置...

我的看起来像这样: 屏幕截图


6
到目前为止最简单,谢谢!(顺便说一句包你需要的,如果你没有,这是安装gnome-disk-utility
格哈德·伯格

去Linux的路!+1
Neu-rah 2015年

是的,非常简单-很高兴在这里。
Zzzach ...

@Ray You,先生,太棒了!我基本上不希望它可以用于外部HDD,但确实可以!
UTF-8

1
为什么大多数技巧都涉及容易出错的文件编辑或控制台操作,而诸如此类的用户友好工具却已经退出了!
WooYek '17年

29

如果您有兴趣在重新启动之间保持hdparm的设置不变,而不是将其添加到crontab中,可以使用/etc/hdparm.conf。我有以下内容,请注意使用大写S而不是小写:

command_line {
    hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 
}

添加该行以您的UUID代替,或者您也可以使用/dev/sdX格式指定设备。您可以使用命令找出磁盘的UUID sudo blkid


3
command_line现在使用正确吗?我有不同的例子/etc/hdparm吗?
2014年

1
OndraŽižka的答案似乎是最新的。
拉斐尔

9
  1. 查找磁盘的UUID

    sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
    
  2. 编辑 /etc/hdparm.conf

    sudo -H gedit /etc/hdparm.conf  # Be careful from now on
    
  3. 查找spindown-time或您的磁盘设置部分。

    /dev/disk/by-label/4TB {
        spindown_time = 1200
    }
    
  4. 我更喜欢通过UUID来引用该磁盘,该磁盘在不同的安装中保持不变(除非您在硬件本身中对其进行更改)。

    /dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 {
        spindown_time = 1200
    }
    
  5. 如果init脚本导致引导问题,则可以传递nohdparm 内核命令行,并且该脚本将不会运行。


该参数的单位是什么?
熟练地

IIRC,是秒。也许这是一个具有通配规则的参数,例如“如果小于10,则为数十秒,如果小于100,则为分钟”,等等。我需要找到。
OndraŽižka,2016年

2
:这不是单位,检查此wiki.archlinux.org/index.php/Hdparm
Ondra参观Žižka

干杯,由于某种原因,我找不到man hdparm.conf
熟练地

man hdparm.conf间接读取值传递给的值,-S因此<255的值应该与顶部答案中的规则兼容。欢迎进一步的信息。
dma_k

8

花费了数小时之后,我发现我的WDC驱动器不支持hdparm -S命令,无论idle3属性值是什么(google:idle3ctl)。这是WD驱动器的常见问题。但是,我很高兴地宣布hd-idle(http://hd-idle.sourceforge.net/)可以正常工作。如果从dpkg生成的软件包中安装(请参阅安装说明),它将在ubuntu和debian上创建守护程序(配置位于/ etc / default / hd-idle中)。从休眠状态恢复后也可以正常工作。

mc default#ps aux | grep hd-idle | grep -v grep | 切-c 66-; 对于[ad]中的f;做hdparm -C / dev / sd $ f | grep -v“ ^ $”; 做完了
/ usr / sbin / hd-idle -i 1800 -a sdc -i 600 -a sdd -i 60 -l /var/log/hd-idle.log
/ dev / sda:
 驱动器状态为:活动/空闲
/ dev / sdb:
 驱动器状态为:待机
/ dev / sdc:
 驱动器状态为:待机
/ dev / sdd:
 驱动器状态为:待机



5

我发现三星HD204UI的旋转行为取决于APM级别(hdparm -B)。如果APM级别为127,则降速超时为10 s。如果APM级别为150,则降速超时由该-S选项定义。


hdparm可以设置但不能获取该-S选项(请参阅如何确定光盘旋转时间)。要获取它,请使用“磁盘” GUI软件。查看带有屏幕截图的其他答案
KrisWebDev'5

5

我添加类似:

@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e  > /dev/null 2> /dev/null

根的crontab。我认为使用uuid更好,因为每次重启时sda/ sdbetc似乎都会改变


10
为什么不使用hdparm.conf
ændrük

3

在Ubuntu 14.04中

磁盘>高亮显示驱动器>单击右上角的齿轮>驱动器设置>现在,您可以在易于使用的GUI中拥有待机,APM,AAM和写入缓存设置!


您如何进行这项工作?我已经设置好了,重启后如果我回过头来,它记得驱动器应该掉电了,但是它永远都不会掉下来。hdparm -C始终显示其处于活动状态,只有从命令行运行hdparm -S xxx才能使其工作。
丹·卡特2014年

1
您在哪里找到“磁盘”?
nealmcb 2015年

1

在使用WD驱动器的Debian上,我发现使用hdparm -S设置任何级别都会导致驱动器在随后的hdparm -I上返回级别254 。所以我真的不确定他们是否在放松。我认为他们仍在放松。

这些驱动器位于服务器阵列上,我真的不希望它们降下来。过去,我通过设置cron作业每隔几分钟更新一次文件来模糊这一点。


1

我对在USB机箱中安装的外部HDD上的hdparm感到不走运,我用来为minidlna提供媒体。

我从这里遇到一个想法:https : //serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping-while-mount

最好的结果来自使用磁盘的uuid,可以通过以下方法找到:

sudo blkid

以下方法确实需要root用户访问权限,但hdparm也需要。这使用crontab每5分钟从驱动器读取一个随机块,并忽略所有消息。为了确保您拥有正确的UUID,请在命令行上进行如下测试(确保您使用所需的UUID,而不是此名称):

sudo dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM

您应该看到如下输出:

1+0 records in
1+0 records out
512 bytes copied, 0.000738308 s, 693 kB/s`

为了抑制此消息的产生,最终可能将其写入某处,可能是下面的/文件系统(在我的情况下位于SSD上),这是我在根crontab中使用的内容。你到那里

sudo crontab -e

然后,在注释下:

*/5 * * * * bash -c 'dd if=/dev/disk/by-uuid/f01df4b5-6865-476a-8d3b-597cbd886d41 of=/dev/null count=1 skip=$RANDOM' >/dev/null 2>&1

希望这对遇到类似问题的人有所帮助。不幸的是,它仍然被写入到系统日志中,但是有抑制这种情况的潜在方法。请参阅此ServerFault帖子

[编辑] 2017-01-07 09:02:

我可以通过编辑/etc/rsyslog.d/50-default.conf来更改以下行,以禁止显示这些消息:

*.*;auth,authpriv.none -/var/log/syslog

对此:

*.*;cron,auth,authpriv.none -/var/log/syslog

不幸的是,这抑制了所有cron消息。我无法让cron重定向注销根文件系统(在我的情况下,该文件位于老化的SSD上,因此我想限制写入次数),但是由于这只是一台家用服务器,因此我可能不会错过很多东西。绝对不会为生产机器推荐这种策略。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.