我想让我的硬盘在空闲时减速,比如说 20 分钟。任何分钟数都可以,因为这个 NAS 很少使用。
我尝试过但没有奏效的方法:
ataidle -S 20 /dev/ada0
只需立即停止驱动器,计时器就不起作用。一旦驱动器由于访问而重新旋转,它们就会保持旋转。camcontrol standby /dev/ada0 -t 1200
相同的行为ataidle
。FreeNAS UI 的存储 -> 磁盘 -> 高级。电源管理器设置只是调用
camcontrol
,同样计时器没有效果。如果选择了允许待机的电源设置(例如 127),则驱动器几乎立即降速(可能在 8 秒后),并且如果有任何访问,则不断地升速和降速。更新:请参阅 如何让 FreeNAS 降低磁盘转速? 有关如何进行这项工作的说明并跳过手动脚本。
如何获得正常的预期“如果一段时间不使用则待命”行为?
使用FreeBSD 11.2-STABLE
通过FreeNAS 11.2
. 驱动器是 4x Samsung 2TB 2.5" .T2000LM003`
# smartctl -P show /dev/ada0
smartctl 6.6 2017-11-05 r4594 [FreeBSD 11.2-STABLE amd64] (local build)
Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org
Drive found in smartmontools Database. Drive identity strings:
MODEL: ST2000LM003 HN-M201RAD
FIRMWARE: 2BC10007
match smartmontools Drive Database entry:
MODEL REGEXP: ST(1500|2000)LM0(03|04|06|07|10) HN-M[0-9]*RAD
FIRMWARE REGEXP: .*
MODEL FAMILY: Seagate Samsung SpinPoint M9T
ATTRIBUTE OPTIONS: None preset; no -v options are required.
更新:请参阅 https://serverfault.com/a/965694/184095 ,了解如何使 GUI 工作并跳过下面的手动脚本编写过程。
我最终非常手动地完成了这项工作。编写一个脚本来检查驱动器活动,如果没有驱动器则关闭驱动器,然后将此脚本安排为 cron 作业。
我选择了一种方法,
iostat
用于在一段时间内监控驱动器,在我的情况下为 600 秒(10 分钟)。如果iostat
报告没有使用情况,请调用ataidle -s /dev/ada[0123]
以挂起驱动器。我设置了一个 cron 作业,每 15 分钟调用一次此脚本:*/15 * * * * spindown_if_idle.sh 600
spindown_if_idle.sh
:收集的指标
我尝试通过查询
collectd
. 我曾经rrdtool fetch
查询存储在 中的指标/var/db/collectd/rrd/localhost/disk-ada0
,但这些指标有几分钟的滞后。依赖它们意味着脚本可能会在最近空闲的情况下使正在使用的驱动器处于备用状态。测试驱动器是否旋转
以下脚本将报告每个驱动器是否空闲或旋转。对测试很有用。
is_spinning.sh
:基于此论坛帖子。
感谢这个想法。几天来,我一直在为这个问题苦苦挣扎。由于我不习惯编写 bash 脚本,所以我在 python3 中重写了它。也许有人觉得它有用:
我的小插件是:当您不希望脚本运行时,可以将小时数添加到 no_sleep_hours。并且您必须将要检查的驱动器添加到“drives_to_check”,这样您就可以排除不应进行减速的驱动器。也许你需要调整 iostat 和 ataidle 的路径,这些是 FreeNAS 中使用的路径。您可以使用:
which adaidle
或which iostat
. 您可以将其添加到 cron*/15 * * * * /usr/local/bin/python3 /path/to/the/folder/check_disk_usage_and_spindown.py