个人服务器 篇一:OMV查询硬盘休眠状态(Linux通用)【加料版】

2021-08-11 22:58:25 29点赞 45收藏 3评论

###前言

一开始unraid转移到openmediavault的时候,就很纠结于omv是否需要给硬盘设置高级电源管理。这项操作在unraid里是很方便统一对硬盘进行设置的,但是在omv里需要逐一对于硬盘进行操作(尤其是我的硬盘柜总共有40+硬盘),而且也不是很明白高级电源管理里的各种选项,就一直很劝退……

但是电费单子下来之后,我觉得还是很有必要实操一下了。

我的硬盘柜主要是做半冷存储,主要是大量写入后,几乎不做改动,过了一定时间的存储期限后将其删除。

因此在我的使用场景下,没有很长期的频繁读写操作,所以我的电源管理设置是127,停转时间是30min。(也许后期会提高到60,需要运行一段时间看LoadCycleCount增长是不是很夸张再做决定)

###正题

###查询硬盘休眠状态

设置好硬盘的电源管理后,为了验证是否设置成功并有效的可以Standby已达到节能的目的,便搜索了一下相关内容,然后找到@龙天ivan 的文档

《OMV查询硬盘休眠状态(Linux通用)》 jianshu.com/p/74f65ac27a2a

@龙天ivan 的文档使用下来体验良好,可以快速在不唤醒硬盘的情况下查阅硬盘IDLE状态,即Active或者Standby。

但是同时也到一定的问题,比如一开始无法正确获取硬盘sdaa /sdab 之类的盘符

```

dsk=`ls /dev/|grep 'sd[a-z]$'` #此代码只能识别三位字符盘符,不能识别如 sdaasdab 等驱动器名称

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'` #修改为此即可获取sdaa/sdab等盘位

```

原文的作者也很好的写明白了一步一步的过程,所以很容易看明白是怎么写出这个脚本的。

基于此,跟着他的思路和方法,我跟着测试改写了一些代码,使其实现了更多更适合我的使用场景的功能。

###加料版结果

1.首先解决不能正确识别到sdaa等同类盘符的磁盘

2.增加分割线方便阅读echo结果;

3.使用lsblk和grep将硬盘对应的路径和盘符大小标识出来,方便跟文件系统一一对应,使得结果更直观易读;

4.使用if语句判断硬盘状态,并使用颜色标记硬盘的不同状态,红色ACTIVE,绿色STANDBY,白色UNKOWN;

5.增加 if 嵌套语句判断除开 ACTIVE 和 STANDBY 之外状态的硬盘;

6.使用for语句将UNKNOWN状态的硬盘列举出来,并且在段落最后单独echo出数量以及具体盘符;



OMV查询硬盘休眠状态(Linux通用)【加料版】

颜色标识状态/显示各状态硬盘数量/列出位置状态硬盘颜色标识状态/显示各状态硬盘数量/列出位置状态硬盘

###脚本完整版如下:

-简单阅读一遍可以直接抄作业,按照上文提到的@龙天ivan 的文档存储脚本,对脚本赋予权限即可。不在此赘述。

-需要注意的是,颜色标识在omv的计划任务里并不支持。

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

#function-2:通过echo -e转义与if...elif...else语句使其active呈现红色,standby呈现绿色,方便快速检视硬盘上电情况

#function-3:原for循环语句中加入判断和循环计数方式,统计active和standby的数量

#function-4:增加 if 嵌套语句判断除开 active 和 standby 之外状态的硬盘,并将其标记为 unknown

#function-5:将unknown状态的硬盘列举出来(对for语句上瘾了……

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

standby=0

active=0

unknown=0

c=0

for i in $dsk;

do

echo -e "n";

echo -e "-----------------------";

echo -n "/dev/$i : " ;

stats=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

#echo $stats

if [[ $stats == STANDBY ]]||[[ $stats == ACTIVE ]]||[[ $stats == IDLE_A ]]

then

for s in $stats;

do

if [ $s == STANDBY ]

then

echo -e "�33[30;42m STANDBY �33[0m"

let standby=$standby+1

else

echo -e "�33[37;41m ACTIVE �33[0m"

let active=$active+1

fi

done

else

echo -e "�33[30;47m UNKNOWN �33[0m"

let unknown=$unknown+1

for un in $i

do

list[c]=$un

((c++))

done

fi

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

done

echo -e "n";

echo -e "�33[37;41mActive Disk in Total=$active �33[0m";

echo -e "�33[30;42mStandby Disk in Total=$standby �33[0m";

echo -e "�33[30;47mUnknown Disk in Total=$unknown �33[0m";

#echo $c

echo -e "Unknown Disk list: ";

for((b=0;b<=$c;b++));

do

if [[ $b -lt $c ]]

then

echo ${list[b]}

fi

done

echo -e "n";

exit

```

###本文到此结束

使用愉快,以下内容只是作为我改写过程的记录,方便还原各个功能点引入时候的思路,感兴趣的可以看一下帮忙指正。

v1

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

dsk=`ls /dev/|grep 'sd[a-z]$'` #此代码只能识别三位字符盘符,不能识别如 sdaasdab 等驱动器名称

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'` #修改为此即可

echo `date +%c`

for i in $dsk;

do

echo -n "/dev/$i : " ; #显示盘符

echo `smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `; #显示硬盘通电状态

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7} `; #显示硬盘 lable

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `; #显示硬盘大小

echo -e "n"; #换行

done

exit

```

v2

增加颜色显示加以区分,建立分割线,方便查看各硬盘

```

#!/bin/bash

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

for i in $dsk;

do

echo -e "�33[37;41m !Disk Stats! �33[0m";

echo -n "/dev/$i : " ;

echo `smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

echo -e "n";

done

exit

```

v3

增加条件判断

active 红色

stanby 绿色

check 黄色

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

#function-2:通过echo -e转义与if...elif...else语句使其active呈现红色,standby呈现绿色,方便快速检视硬盘上电情况

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

for i in $dsk;

do

echo -e "-----------------------";

echo -n "/dev/$i : " ;

stats=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

for s in $stats;

do

echo "$s"

if [ $s == STANDBY ]

then

echo -e "�33[30;42m STANDBY �33[0m";

elif [ $s == ACTIVE ]

then

echo -e "�33[37;41m ACTIVE �33[0m";

else

echo -e "�33[30;43m PLEASE CKECK �33[0m";

fi

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

echo -e "n";

done

done

exit

```

v4

增加硬盘状态的数量统计

代码中对 unknown 的判断是无效的,下一个功能版本中修复。(原因为 stats 有可能返回为空 string

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

#function-2:通过echo -e转义与if...elif...else语句使其active呈现红色,standby呈现绿色,方便快速检视硬盘上电情况

#function-3:原for循环语句中加入判断和循环计数方式,统计active和standby的数量

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

standby=0

active=0

unknown=0

for i in $dsk;

do

echo -e "n";

echo -e "-----------------------";

echo -n "/dev/$i : " ;

stats=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

for s in $stats;

do

if [ $s == STANDBY ]

then

echo -e "�33[30;42m STANDBY �33[0m";

let standby=$standby+1

elif [ $s == ACTIVE ]

then

echo -e "�33[37;41m ACTIVE �33[0m";

let active=$active+1

else

echo -e "�33[30;43m UNKNOWN �33[0m";

let unknown=$unknown+1

fi

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

done

done

echo -e "n";

echo -e "�33[37;41mActive Disk in Total=$active �33[0m";

echo -e "�33[30;42mStandby Disk in Total=$standby �33[0m";

echo -e "�33[30;47mUnknown Disk in Total=$unknown �33[0m";

echo -e "n";

exit

```

v5

增加功能 4

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

#function-2:通过echo -e转义与if...elif...else语句使其active呈现红色,standby呈现绿色,方便快速检视硬盘上电情况

#function-3:原for循环语句中加入判断和循环计数方式,统计active和standby的数量

#function-4:增加 if 嵌套语句判断除开 active 和 standby 之外状态的硬盘,并将其标记为 unknown

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

standby=0

active=0

unknown=0

for i in $dsk;

do

echo -e "n";

echo -e "-----------------------";

echo -n "/dev/$i : " ;

stats=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

#echo $stats

if [[ $stats == STANDBY ]]||[[ $stats == ACTIVE ]]||[[ $stats == IDLE_A ]]

then

for s in $stats;

do

if [ $s == STANDBY ]

then

echo -e "�33[30;42m STANDBY �33[0m"

let standby=$standby+1

else

echo -e "�33[37;41m ACTIVE �33[0m"

let active=$active+1

fi

done

else

echo -e "�33[30;47m UNKNOWN �33[0m"

let unknown=$unknown+1

fi

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

done

echo -e "n";

echo -e "�33[37;41mActive Disk in Total=$active �33[0m";

echo -e "�33[30;42mStandby Disk in Total=$standby �33[0m";

echo -e "�33[30;47mUnknown Disk in Total=$unknown �33[0m";

echo -e "n";

exit

```

v6

```

#!/bin/bash

#function-1:显示硬盘盘符+Lable+容量以及硬盘上电状态

#function-2:通过echo -e转义与if...elif...else语句使其active呈现红色,standby呈现绿色,方便快速检视硬盘上电情况

#function-3:原for循环语句中加入判断和循环计数方式,统计active和standby的数量

#function-4:增加 if 嵌套语句判断除开 active 和 standby 之外状态的硬盘,并将其标记为 unknown

#function-5:将unknown状态的硬盘列举出来(对for语句上瘾了……

dsk=`ls /dev/sd* | grep -Po 'sd(a{2}|[a-z]+)$'`

echo `date +%c`

standby=0

active=0

unknown=0

a=0

b=0

c=0

for i in $dsk;

do

echo -e "n";

echo -e "-----------------------";

echo -n "/dev/$i : " ;

stats=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;

#echo $stats

if [[ $stats == STANDBY ]]||[[ $stats == ACTIVE ]]||[[ $stats == IDLE_A ]]

then

for s in $stats;

do

if [ $s == STANDBY ]

then

echo -e "�33[30;42m STANDBY �33[0m"

let standby=$standby+1

else

echo -e "�33[37;41m ACTIVE �33[0m"

let active=$active+1

fi

done

else

echo -e "�33[30;47m UNKNOWN �33[0m"

let unknown=$unknown+1

for un in $i

do

list[c]=$un

((c++))

done

fi

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $7}' `;

echo `lsblk /dev/$i|grep "/srv/dev-disk-by-label-"|awk '{print $4}' `;

done

echo -e "n";

echo -e "�33[37;41mActive Disk in Total=$active �33[0m";

echo -e "�33[30;42mStandby Disk in Total=$standby �33[0m";

echo -e "�33[30;47mUnknown Disk in Total=$unknown �33[0m";

#echo $c

echo -e "Unknown Disk list: ";

for((b=0;b<=$c;b++));

do

if [[ $b -lt $c ]]

then

echo ${list[b]}

fi

done

echo -e "n";

exit

```



展开 收起

DELL 戴尔 Precision 3470 14英寸图形移动工作站笔记本i5-1250P/16G/1T固态/集显/定制

DELL 戴尔 Precision 3470 14英寸图形移动工作站笔记本i5-1250P/16G/1T固态/集显/定制

7999元起

倍控 E5-2650V4 TrueNAS存储服务器

倍控 E5-2650V4 TrueNAS存储服务器

1799元起

倍控 G30S-N100四网2.5G DDR5 准系统

倍控 G30S-N100四网2.5G DDR5 准系统

699元起

etsme小型私有云Me盒 分布式云计算加密存储私密云盘网盘家庭相册

etsme小型私有云Me盒 分布式云计算加密存储私密云盘网盘家庭相册

3899元起

惠普(HP)HPE GEN8/9/10服务器硬盘通用大小盘系列 2.5/3.5英寸 1.2T 10K SAS

惠普(HP)HPE GEN8/9/10服务器硬盘通用大小盘系列 2.5/3.5英寸 1.2T 10K SAS

1599元起

超聚变 配件 适用于2288服务器 影.驰RTX3060显卡

超聚变 配件 适用于2288服务器 影.驰RTX3060显卡

暂无报价

畅网微控 迷你主机(R7-7840HS、准系统)

畅网微控 迷你主机(R7-7840HS、准系统)

2818元起

HP 惠普 ZBook Firefly14G9 14英寸移动图形工作站设计本 i7-1255U/16G DDR5/512G SSD/4G独显T550/Win11H

HP 惠普 ZBook Firefly14G9 14英寸移动图形工作站设计本 i7-1255U/16G DDR5/512G SSD/4G独显T550/Win11H

7999元起

DELL 戴尔 企业级服务器机房设备 H345 阵列卡

DELL 戴尔 企业级服务器机房设备 H345 阵列卡

暂无报价

DELL 戴尔 PowerEdge R350 1U机架式服务器数据库金蝶用友电脑整机 至强E-2356G 六核心 16G/2*4TB企业级

DELL 戴尔 PowerEdge R350 1U机架式服务器数据库金蝶用友电脑整机 至强E-2356G 六核心 16G/2*4TB企业级

14499元起

Lenovo 联想 服务器主机SR570 台式机1U电脑工作站机架式ERP财务软件存储商用 1颗至强铜牌3204 6核1.9GHz 16G内存/2块2T SATA硬盘

Lenovo 联想 服务器主机SR570 台式机1U电脑工作站机架式ERP财务软件存储商用 1颗至强铜牌3204 6核1.9GHz 16G内存/2块2T SATA硬盘

15065元起

HPE MicroSvr G10+ v2微型塔式服务器主机工作站机箱存储设备cpu 奔腾G6405 16G内存 NHP

HPE MicroSvr G10+ v2微型塔式服务器主机工作站机箱存储设备cpu 奔腾G6405 16G内存 NHP

8499元起

DELL 戴尔 PowerEdge R740/R750XS 2U机架式服务器虚拟化主机GPU显卡 R740 1*铜牌3204 6核心6线程 16G内存/1TB 企业级/三年联保

DELL 戴尔 PowerEdge R740/R750XS 2U机架式服务器虚拟化主机GPU显卡 R740 1*铜牌3204 6核心6线程 16G内存/1TB 企业级/三年联保

15649元起

Lenovo 联想 SR588服务器主机2U机架式国产机型AI算力GPU深度学习1颗银牌4210R 16GB内存 2*2TB硬盘

Lenovo 联想 SR588服务器主机2U机架式国产机型AI算力GPU深度学习1颗银牌4210R 16GB内存 2*2TB硬盘

13588元起

倍控 G31 11代I7-1165G7爱快软路由N5105主机i226 M.2 准系统+电源 G31-I3-1115G4四网2.5G 6A电源

倍控 G31 11代I7-1165G7爱快软路由N5105主机i226 M.2 准系统+电源 G31-I3-1115G4四网2.5G 6A电源

890元起

DELL 戴尔 Precision T5820 塔式图形工作站建模渲染设计台式电脑主机至强W-2223/8G/2T/2G独显/定制

DELL 戴尔 Precision T5820 塔式图形工作站建模渲染设计台式电脑主机至强W-2223/8G/2T/2G独显/定制

9599元起
3评论

  • 精彩
  • 最新
  • 难得看到一位也是用OMV的道友 [观察]

    校验提示文案

    提交
  • 不知道是不是网页显示问题,代码引用后omv后台执行脚本测试颜色表示直接乱码,方便的话lz能截个源码图或者文档看下了。 [大囧] 另外echo -e "n"; 不是显示换行而是直接显示 n 不知道是什么原因导致了。 [狂汗]

    校验提示文案

    提交
  • 不明觉厉,回头照着做做

    校验提示文案

    提交
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
关注 打赏
最新文章 热门文章
45
扫一下,分享更方便,购买更轻松