利用脚本给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即可实现。
中间有些唤醒,是开了一些服务导致,比如威联通的多媒体数据库,会再凌晨时候备份数据库等,会调用媒体盘。
另:如果有好的睡眠休眠方案和建议,欢迎留言。

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

值友2963706101
校验提示文案
abcdef4
我为了pcdn分流,给京东云路由器,和斐讯路由器写限速脚本。原则上是同道中人
校验提示文案
又是一个无聊ID
校验提示文案
值友2874761648
校验提示文案
天涯比邻
校验提示文案
流星追玥
校验提示文案
OverK9
校验提示文案
值友4716156738
校验提示文案
值友4716156738
校验提示文案
OverK9
校验提示文案
值友2963706101
校验提示文案
流星追玥
校验提示文案
abcdef4
我为了pcdn分流,给京东云路由器,和斐讯路由器写限速脚本。原则上是同道中人
校验提示文案
天涯比邻
校验提示文案
值友2874761648
校验提示文案
又是一个无聊ID
校验提示文案