我爱编程ITovm

OMV查询硬盘休眠状态(Linux通用)

2018-04-12  本文已影响1724人  龙天ivan

这是一个针对OMV中查询硬盘休眠状态的方法,理论上适用于所有linux

在OMV中,可以针对硬盘分别设置休眠:


设置休眠

设置完成后,怎么检测或查看是不是生效了呢?这就涉及到如何查询硬盘状态了,可以用以下命令查看单块磁盘:

smartctl -i -n standby /dev/sdb|grep "mode"|awk '{print $4}'
结果

我有两块盘,怎么查看呢?

echo `date +%c` && echo -n "/dev/sdb : " && smartctl -i -n standby /dev/sdb|grep "mode"|awk '{print $4}'  && echo -n "/dev/sdc : " && smartctl -i -n standby /dev/sdc|grep "mode"|awk '{print $4}'
结果

如果有很多块呢?上面这种方法就不好了,所以改进一下:

#!/bin/bash 
dsk=`ls /dev/|grep 'sd[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}' `;                                                                                                 
done                                                                                                                                                                          
exit 

把这个存成ckdisk.sh到一个目录下,例如/root/code下,然后chmod +x ckdisk.sh增加可执行权限。

回到omv界面,找计划任务,添加一个:


添加计划任务

注意路径要加对。

保存应用后,点运行即可看到结果:


运行

以下是自动记录日志的方法补充


补充:如果想自动记录硬盘休眠状态的日志可以按如下方法

  1. 修改chkdisk.sh为如下内容:
#!/bin/bash 
path="/root/code"   #这里一定要改成存放的实际路径,crontab比较坑,不支持相对路径没有办法
echo $path
if [ ! -d "$path/Disks" ];then
    mkdir $path/Disks;
fi
dsk=`ls /dev/|grep 'sd[a-z]$'`                                                                                                                                             
for (( t=1;t<6;t++))
do
    echo `date +%c`                                                                                                                                                
    for i in $dsk;                                                                                                                                                                 
    do                                                                                                                                                                 
        echo -n "/dev/$i : " ;                                                                                                                                                
        s=`smartctl -i -n standby /dev/$i|grep "mode"|awk '{print $4}' `;
        if [ -f "$path/Disks/$i.status" ];then
            st=`cat $path/Disks/$i.status`;
        else
            st='';
            touch $path/Disks/$i.status;
        fi
        echo $s>$path/Disks/$i.status;
        if [[ $s != $st ]];then
            echo `date +%c`>>$path/chkdisk.log                                                                                                                                                
            echo -n "/dev/$i : ">>$path/chkdisk.log;                                                                                                                                                
            echo $s>>$path/chkdisk.log;
        fi    
        echo $s;
    done                                                                                                                                                                             
    sleep 10
done
exit
  1. 修改计划任务为每分钟执行:


    image.png

    然后系统每10秒会检查一次硬盘状态(虽然计划任务是每分钟,但程序里已加入每10秒检测),如果硬盘状态发生变化,会自动记录到与chkdisk.sh同目录下的chkdisk.log中。状态不变则不记录日志。

上一篇 下一篇

猜你喜欢

热点阅读