用于SMART状态输出的调试脚本。
我只能在状态为OK的磁盘上对其进行测试。
我想检验一下论点:
smartctl -H /dev/$disk
因为没有失败,并且脚本没有说明验证失败,所以我总是获得OK状态。
if [[ $ERRORS != 0 ]]; then
echo "CRITICAL: $FAILURES"
exit 2
对于要测试的磁盘,我需要在命令中添加标志,以使其在被测试的服务器上正确执行。
在外壳中:
smartctl -H /dev/vda -d scsi -T permissive
要测试该命令是否需要额外的标志,我需要更改脚本,然后RESULT
应验证1 OK状态。
#!/bin/bash
parse() {
egrep '^(SMART STATUS RETURN:|SMART overall-health self-assessment test result:)'
}
# Validate that 2 status lines are returned by parse
#FIXME: Find a way to read stdin into a variable
validate() {
STATUS=$(cat)
LINES=$(echo $STATUS | wc -l)
if [[ $LINES == 2 ]]; then
echo "$STATUS"
else
echo "Wrong status output returned"
fi
}
verify() {
egrep -v '(SMART overall-health self-assessment test result: PASSED|SMART STATUS RETURN: incomplete response, ATA output registers missing)'
}
DISKS=$(lsblk -nio KNAME,TYPE | grep disk | awk '{print $1}')
# From util-linux 2.23 (RHEL7) we can also use
#DISKS=$(lsblk -Snio KNAME)
ERRORS=0
FAILURES=""
for disk in $DISKS; do
RESULT=$(smartctl -H /dev/$disk | parse | verify)
if [[ -n $RESULT ]]; then
FAILURES+=$disk
ERRORS=1
fi
done
if [[ $ERRORS != 0 ]]; then
echo "CRITICAL: $FAILURES"
exit 2
else
echo "OK"
exit 0
fi