利用脚本给NAS加上硬盘休眠监测功能,实现可视化
前言:
玩nas也很久了,自己目前用的威联通453bmini,此文章可以实现,硬盘活动与休眠状态检测,因使用定时脚本,理论上底层是linux的nas均可以使用此文章的说明,实现硬盘休眠/运行状态检测。
此前捣鼓了硬盘休眠,一直使用还算完美。关于硬盘休眠处理,这里不多说,需要的小伙伴参考其他人写的,硬盘休眠方案,大概就是把系统关键分区的镜像raid1,设置脚本,使系统盘和存储盘定时分离raid1和合并raid1;然后将swap缓存设置到主硬盘(系统盘,最好是固态),关闭机械盘的swap;有兴趣去搜索别人的设置方案不多讲(有需要,点赞多了,再搞一篇设置休眠的文章;涉及,raid1分离和重建,swap的配置,开机脚本的配置;及配置后,系统升级注意事项,)
正文(本次的硬盘休眠监控方案):
先上实现的结果图,有兴趣的可以阅读(有些细节可能说的不到位,默认大家稍微还是有点略懂的,不明之处谅解,我也是小白,喜欢研究捣鼓的小白):
我的系统4块硬盘,系统识别分别为:sda、sdb、sdc、sdd
我采取的为每10分钟检测一次硬盘休眠状态并记录日志文件,随后调取分析。一天24小时,每小时60分,24*60/10=144次(每天检测144次并记录),然后查看其中那些时段是活动/休眠状态。(我的系统内配置的15钟不活动即硬盘休眠)
sdc为系统盘(装的固态),开了各种服务,已经注定无法休眠,且固态功耗低,这块盘已知长期活动状态。主要检测的就是:sda、sdb、sdd 状态。上图:
监测图1:
监测图2:实现逻辑:
原理:
1.硬盘检测脚本,设置定时运行,每10分钟运行一次,输出日志文件。
2.日志文件转移脚本,每15天运行一次,转移日志。(防止单个日志文件过大)
硬盘监控脚本:
(这个发文编辑器,不好用,编辑起来好累,我只能上图片了,脚本放评论了;考虑后续放到其他地方在发一篇文章):
我是在/Container/admin下面建立的脚本文件disk_monitor.sh,内容如下,注意下面硬盘sda、sdb、sdc、sdd写法,我是4个盘,所以写4个。大家要用,请查好自己是那个几个盘(注意替换),查询方法这里不废话了。
脚本内同,注意改成适合自己的日志的输出路径我配置的是:/share/Container/log/Disklog/disk_monitor.log;大家可自定义路径。
运行的结果就是,在对应目录会生成日志文件:disk_monitor.log;
本质是调用系统自带硬盘检测工具命令:hdparm -C (hdparm命令用法可以百度);
打开日志文件记录内容如下图,然后在利用linux计划任务:crontab 配置每10分钟运行一次(具体多久运行一次,大家也可自定义,5分钟还是20分钟一次都行,最好能与自己系统配置的硬盘多久后自动休眠有契合关系)
对应目录生成日志文件standby :休眠状态 active/idle:活动状态;前面记录了时间戳和盘符。
日志文件如上,注意不要乱改不懂的命令,这里面的空格很重要,有用。日志处理说明:这样的格式记录的好处,下载log日志文件,复制到excel,使用分列,用空格做分隔符,得到如下图。然后做excel折线图,是不是很爽。
复制到excel表,分裂列,空格分隔符如果excel不会用,我无话可说了,哈哈,还是别搞了。最后if函数映射0或1,不会就筛选填充。
反正对应关系:standby :0 active/idle:1;
自己加上表头,映射下状态,对应0/1下载日志,贴excel,分列,然后把状态列处理好0和1;然后时间列,改成文本格式(不能直接改,改了会变数值就乱了),要使用使用函数如图,新插一列:=TEXT(B2,"h:mm:ss");时间改文本格式。【如果处理多日,需要把日也类似时间处理,要用另外的函数,百度下】

然后就可以透视了,分析当日只用三列数:设备/时间/状态,
透视表也很清晰,条件格式处理:标记不同值,直接看也很清晰,0和1颜色不同。
然后复制透视表为普通格式,就可以配置折线图了。其实都不用折线,哈哈。我喜欢折线直观些。弄好表格式存起来,以后直接贴入日志分列,然后另一边excel表直接出折线图。
透视表+折线图再或者像我一样,使用bi工具直接做成可视图标,如下图(较为麻烦,不细说,直接百度搜bi数据分析工具);
再进阶,上面的日志,可以不输出到日志文件,直接输出到自己的数据库,如果自己nas搭建的有数据库的话(有对应的命令,不难,但是没必要,这个也不细说了),然后在用展时端链接数据库。实际仅靠上面日志文档放到excel文档做分析足够用。
bi工具处理后的图配置定时任务(刚才说数据处理篇幅长了,哈哈)
下面是图片(主要这个编辑器不好用....),我把用到命令放这里:
crontab -l 查看计划任务
vim /etc/config/crontab 编辑计划任务,注意按 i键,进入编辑状态。
*/10 * /share/Container/admin/disk_monitor.sh 计划任务命令(注意路径替换实际放脚本的地址)
crontab /etc/config/crontab && /etc/init.d/crond.sh restart 重启计划任务
配置完毕后,每10分钟(具体多久可改),就会执行一次,输出到日志文件了。
自己写的处理记录最后,防止日志文件过大的处理方法:
若不停写日志,以后肯定log文件会很大,我的方案是再写个转移日志的脚本(也可以写定期删除日志文档的脚本)。
接下图定期转移日志的脚本内容,将脚本放到目录,我放的是:
/share/Container/admin/move_disk_log.sh 【用威联通的都知道,其实就是容器的目录,我喜欢放这里,大家可以自由放置】
接下图此步只是测试,大家有需要用,不需要可跳过。

chmod +x /share/Container/admin/move_disk_log.sh 给脚本文件授予执行权限。
然后配置计划任务,每月15号的0点05分,自动执行,老样子:

完毕,整个就配置好了。以上日常监测硬盘活动状态,便于分析使用。经常看到网友论战nas休不休眠的问题:
我个人见解:首先家用盘数并不多,倒不是纠结那点电费(当然能省则省);
1.硬盘要么就不设置休眠停转,跑各种高频服务,常开就行。家用没这个场景。就算有,主盘常开就行,没必要都跟着活动起来,不然总是莫名炒豆子声音,也烦。
2.休眠与活动来回切换,于硬盘寿命来讲,可能常休眠或者常开更好。反而来回切换,寿命最短,涉及到电机启动和关闭,磁头摇臂来回移动磁盘上与归位,反而更不利。
3.使用了分离raid1和重建raid1+swap转移实现休眠,目前使用无问题。基本解决休眠问题。最理想状态是win的睡眠机制或者华硕nas的休眠机制,使用时候快速唤醒,进入状态。不用时候休眠,节能减排且提升寿命(家用nas,真的是2-4天才访问一次设备的文档,没有做到天天用)。参考功率:4盘都活动功率30--45w,休眠15--20w。win系统睡眠和华硕那种休眠方案,能降到5w内。
威联通是没法做到不用关机,用的时候唤醒的(大家都知道威联通开机一次至少5-10分钟,关机一次至少又5分钟,这个也研究过快速开关机的问题,暂时无解,我受不了用的时候等待)。
关于休眠,各自有自己见解和做法,没必要引战。各取所好即可。
另外付一个功率监控图:nas接入功率监测插座+Home Assistant即可实现。
中间有些唤醒,是开了一些服务导致,比如威联通的多媒体数据库,会再凌晨时候备份数据库等,会调用媒体盘。
另:如果有好的睡眠休眠方案和建议,欢迎留言。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

校验提示文案
我为了pcdn分流,给京东云路由器,和斐讯路由器写限速脚本。原则上是同道中人
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
校验提示文案
我为了pcdn分流,给京东云路由器,和斐讯路由器写限速脚本。原则上是同道中人
校验提示文案
校验提示文案
校验提示文案
校验提示文案