这是一个针对OMV中查询硬盘休眠状态的方法,理论上适用于所有linux
在OMV中,可以针对硬盘分别设置休眠:
也可以用命令:
hdparm -S 120 /dev/sdx
设置完成后,怎么检测或查看是不是生效了呢?这就涉及到如何查询硬盘状态了,可以用以下命令查看单块磁盘:
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界面,找计划任务,添加一个:
注意路径要加对。
保存应用后,点运行即可看到结果:
以下是自动记录日志的方法补充
补充:如果想自动记录硬盘休眠状态的日志可以按如下方法
- 修改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
-
修改计划任务为每分钟执行:
然后系统每10秒会检查一次硬盘状态(虽然计划任务是每分钟,但程序里已加入每10秒检测),如果硬盘状态发生变化,会自动记录到与chkdisk.sh同目录下的chkdisk.log中。状态不变则不记录日志。