如何控制硬盘停机时间?
我的电脑里有2个硬盘。 Ubuntu在大约15分钟后非常快地关闭了二级硬盘,这对我来说很短暂。 我需要控制这个时间。 我该怎么做?
我尝试过GNOME电源管理,但没有发现它有用。
看看hdparm
。
从手册 (命令行中的man hdparm
):
-S设置驱动器的备用(spindown)超时。 驱动器使用该值来确定在关闭主轴电机以节省功率之前等待多长时间(没有磁盘活动)。 在这种情况下,驱动器可能需要30秒才能响应后续磁盘访问,尽管大多数驱动器都要快得多。
超时值的编码有点奇怪。 值为零表示“禁用超时”:设备不会自动进入待机模式。 从1到240的值指定5秒的倍数,产生从5秒到20分钟的超时。 从241到251的值指定1到11个30分钟的单位,产生30分钟到5.5小时的超时。 值252表示超时为21分钟。 值253将供应商定义的超时时间设置为8到12小时,并保留值254。 255被解释为21分钟加15秒。 请注意,某些较旧的驱动器可能对这些值有不同的解释。
所以sudo hdparm -I /dev/sdb | grep level
sudo hdparm -I /dev/sdb | grep level
将显示当前的spindown值,例如:
Advanced power management level: 254
从手册:254保留,所以我希望它是Ubuntu的默认值(任何人都可以确认/扩展这个吗?)
例:
sudo hdparm -S 25 /dev/sdb
= 25 * 5秒后的spindown。
sudo hdparm -S 245 /dev/sdb
= spindown(245-240)* 30分钟后。
磁盘工具 – >选择硬盘驱动器 – >单击右上角的“更多操作…”图标 – >驱动器设置…
我看起来像这样:
如果您有兴趣在重新启动之间执行hdparm的设置持久性,而不是将其添加到crontab,则可以使用/etc/hdparm.conf
。 我有以下内容,请注意使用大写S,而不是小写:
command_line { hdparm -S 25 /dev/disk/by-uuid/f6c52265-d89f-43a4-b03b-302c3dadb215 }
添加该行替换您的UUID,或者您也可以使用/dev/sdX
格式指定设备。 您可以使用命令sudo blkid
找到磁盘的UUID。
-
找到磁盘的UUID 。
sudo lsblk --output NAME,FSTYPE,LABEL,UUID,MODE
-
编辑
/etc/hdparm.conf
sudo -H gedit /etc/hdparm.conf # Be careful from now on
-
查找
spindown-time
或磁盘设置部分。/dev/disk/by-label/4TB { spindown_time = 1200 }
-
我更喜欢通过UUID引用磁盘,它在不同的安装中保持不变(除非你在硬件本身中更改它)。
/dev/disk/by-uuid/91e32677-0656-45b8-bcf5-14acce39d9c2 { spindown_time = 1200 }
-
如果init脚本导致引导问题,则可以在内核命令行上传递
nohdparm
,并且不会运行该脚本。
花了几个小时后,我发现我的WDC驱动器不支持hdparm -S命令,无论idle3属性值(google:idle3ctl)。 这是WD硬盘的常见问题。 但我很高兴地宣布,hd-idle( http://hd-idle.sourceforge.net/ )运行完美。 如果从dpkg-builded包安装(请参阅安装说明),它会在ubuntu和debian上创建守护进程(config在/ etc / default / hd-idle中)。 从hibernate状态恢复后也能很好地工作。
mc默认#ps aux | grep hd-idle | grep -v grep | cut -c 66-; 对于[ad]中的f; 做hdparm -C / dev / sd $ f | grep -v“^ $”; DONE / 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: 驱动状态是:待机
我发现三星HD204UI的spindown行为取决于APM级别( hdparm -B
)。 如果APM级别为127,则spindown超时为10秒。 如果APM级别为150,则spindown超时由-S
选项定义。
我添加如下内容:
@reboot sudo hdparm -S244 /dev/disk/by-uuid/71492809-e463-41fa-99e2-c09e9ca90c8e > /dev/null 2> /dev/null
到root的crontab。 我认为使用uuid更好,因为sda
/ sdb
等似乎随着每次重启而改变
在Ubuntu 14.04中
磁盘>突出显示驱动器>单击右上角的齿轮>驱动器设置>现在您可以在易于使用的GUI中使用待机,APM,AAM和写入缓存设置!
在Debian上,使用WD驱动器,我发现使用hdparm -S设置任何级别都会导致驱动器在后续hdparm -I上返回254级别。 所以我真的不确定他们是不是在旋转。 我认为他们仍在旋转。
这些驱动器在服务器arrays上,我真的不希望它们永远失效。 在过去,我通过设置一个cron作业来每隔几分钟更新一个文件。
我在安装在USB机箱中的外置硬盘上没有运气hdparm,我用它来为minidlna提供媒体服务。
我从这里看到了一个想法: https : //serverfault.com/questions/562738/keeping-usb-backup-drive-from-sleeping-while-mounted
最好的结果来自使用磁盘的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`
为了抑制这条消息,这可能最终被写入某处,可能是/ filesystem(在我的情况下在SSD上),下面就是我在root 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
希望这可以帮助其他有类似问题的人。 不幸的是,这仍然被写入syslog,但有可能有办法抑制它; 看到这个ServerFaultpost 。
[编辑] 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上,因此我想限制写入)的日志记录,但由于这只是一个家庭服务器,我可能不会错过很多。 肯定不会为生产机器推荐这种策略。