-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcheck_md
executable file
·75 lines (65 loc) · 1.85 KB
/
check_md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#!/bin/bash
# Check MD RAIDS using /sys filesystem.
# See https://www.kernel.org/doc/Documentation/md.txt
CAT="/bin/cat"
BASENAME="/usr/bin/basename"
SED="/bin/sed"
STATUS_OK=0
STATUS_WARNING=1
STATUS_CRITICAL=2
STATUS_UNKNOWN=3
STATUS=$STATUS_OK
MSG=""
function add_message() {
[ -n "$MSG" ] && MSG="$MSG :: "
MSG="$MSG$1"
}
function raise_status() {
[ $1 -gt $STATUS ] && STATUS=$1
}
cd /sys/block 2>&1 || exit $STATUS_UNKNOWN
for MD in md*; do
if [ ! -e "$MD" ]; then
# md* did not expand, i.e. no arrays defined
add_message "No MD arrays defined!"
raise_status $STATUS_UNKNOWN
break;
fi
MD_LEVEL="$($CAT $MD/md/level)"
if [ -z "$MD_LEVEL" ]; then
# the device is present in the kernel, but not actuall active
continue
fi
MD_STATUS="$($CAT $MD/md/array_state)"
MD_SYNC_STATUS="$($CAT $MD/md/sync_action)"
MD_DEGRADED="$($CAT $MD/md/degraded)"
MD_SUMMARY=""
if [ "$MD_DEGRADED" != "0" ]; then
MD_STATUS="degraded=$MD_DEGRADED"
raise_status $STATUS_CRITICAL
MD_SUMMARY="CRITICAL"
fi
if [ "$MD_STATUS" != "clean" -a "$MD_STATUS" != active -a "$MD_STATUS" != active-idle -a "$MD_STATUS" != "write-pending" ]; then
raise_status $STATUS_CRITICAL
[ -z "MD_SUMMARY" ] && MD_SUMMARY="CRITICAL"
fi
if [ "$MD_SYNC_STATUS" != "idle" ]; then
MD_STATUS="$MD_STATUS,$MD_SYNC_STATUS"
raise_status $STATUS_WARNING
[ -z "$MD_SUMMARY" ] && MD_SUMMARY="WARNING"
fi
for DEV in $MD/md/dev-*; do
DEV_NAME="$($BASENAME "$DEV")"
DEV_STATE="$($CAT $DEV/state)"
MD_STATUS="$MD_STATUS,$DEV_NAME=$DEV_STATE"
DEV_STATE="$(echo "$DEV_STATE" | $SED 's/,*write_*mostly//g')"
if [ "$DEV_STATE" != "in_sync" -a "$DEV_STATE" != "spare" ]; then
raise_status $STATUS_CRITICAL
MD_SUMMARY="CRITICAL"
fi
done
[ -z "$MD_SUMMARY" ] && MD_SUMMARY="OK"
add_message "$MD $MD_SUMMARY ($MD_LEVEL,$MD_STATUS)"
done
echo "$MSG"
exit $STATUS