本人自己组装了一台存储,但是先在里面安装了VMware ESXI,再安装Synology虚拟机,然后做硬盘直通,但是当时因为硬盘硬盘数量有限,也没有做RAID,因为即使做利用率最高的RAID 5,利用率也只有
75% (n/n-1),s所以当时没做,现在盘里面也都有数据了。硬盘的健康是我比较担心的问题,之前都是每隔一年把存储的硬盘取出来用硬盘坏道扫描工具扫一下健康情况,但是这个也是挺麻烦的。
也想把这几块盘的数据拷贝出来重新做RAID5,但是数据要备份,而且我这个是直通的,也不知道RAID适用不,而且重要的数据我也有备份。
最近研究了用Zabbix和Scrutiny健康,但是因为我是自己组装的存储,是家用(消费级芯片组)的W-B365 N3主板,ESXI根本识别不了硬盘的健康情况。

- 所以最后通过AI工具找了一个我认为比较适用的办法,就是通过VMware ESXI自带的工具smartinfo查询硬盘健康信息,然后写脚本导出csv文件,再把这些信息给AI工具做分析,然后评估硬盘。
esxcli storage core device list #查询硬盘列表
esxcli storage core device smart get -d t10.ATA_____ST10000NE00082D2PL103________________________________ZS51CH71 #查询具体硬盘的健康信息
root@XWKSESXI01:/usr/lib/vmware/vm-support/bin] esxcli storage core device smart get -d t10.ATA_____ST10000NE00082D2PL103______________________
__________ZS51CH71
Parameter Value Threshold Worst Raw
--------------------------------- ----- --------- ----- ---
Health Status OK N/A N/A N/A
Write Error Count 100 1 100 0
Read Error Count 82 44 64 149443229
Power-on Hours 77 0 77 21009
Power Cycle Count 99 20 99 2044
Reallocated Sector Count 100 10 100 0
Drive Temperature 32 0 56 68719476768
Write Sectors TOT Count 100 0 253 199425729419
Read Sectors TOT Count 100 0 253 230738846856
Uncorrectable Error Count 100 0 100 0
Pending Sector Reallocation Count 100 0 100 0
Uncorrectable Sector Count 100 0 100 0
- VMware ESXI也有自带这个脚本可以直接运行查询所有硬盘健康信息
[root@XWKSESXI01:/usr/lib/vmware/vm-support/bin] ./smartinfo
- 以下是脚本导出硬盘健康的csv文件
mkdir -p /vmfs/volumes/datastore1/smart_csv #创建存放csv的目录
vi /vmfs/volumes/datastore1/scripts/smartinfo_to_csv.sh #创建脚本
chmod +x /vmfs/volumes/datastore1/scripts/smartinfo_to_csv.sh #脚本赋权
/vmfs/volumes/datastore1/scripts/smartinfo_to_csv.sh #执行脚本
- 正式脚本如下
#!/bin/sh
OUTDIR="/vmfs/volumes/6300307e-a5446214-4630-00e0b41f61d2/smart_csv"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
mkdir -p "$OUTDIR"
/usr/lib/vmware/vm-support/bin/smartinfo | awk -v ts="$TIMESTAMP" -v out="$OUTDIR" '
BEGIN {
disk=""
}
$1=="SMART" && $2=="Data" && $3=="for" && $4=="Disk" {
disk=$6
gsub(/[^A-Za-z0-9_.-]/,"_",disk)
file=out"/"disk".csv"
if (!(disk in seen)) {
print "timestamp,parameter,value,threshold,worst,raw" > file
seen[disk]=1
}
next
}
$1=="Parameter" { next }
$1 ~ /^-+/ { next }
NF==0 { next }
disk!="" {
param=$1
for (i=2; i<=NF-4; i++) {
param=param" "$i
}
value=$(NF-3)
threshold=$(NF-2)
worst=$(NF-1)
raw=$(NF)
print ts","param","value","threshold","worst","raw >> file
}
'
- 这个方案总体可以查询到硬盘的健康情况,定期查询,如果发现硬盘健康评分较低,可以自己拿出来用硬盘坏道工具扫描确定是否确定更换。