Рабочее — информировалка о живости RAID

Рабочее — информировалка о живости RAID

Возникла тут на работе забавная ситуация: есть три сервера с контроллерами LSI. И трудился на них скриптик lsi.sh, цельнотянутый с https://calomel.org/megacli_lsi_commands.html и чуть допиленный. В случае перехода массива в состояние «не-optimal» он рапортует на мыло. Всё бы хорошо, но случилась интересная вещь: выпал один диск, массив перестроился на hot-spare, статус остался optimal, но диск-то вывалился. И был бы он в таком состоянии до кончины еще двух дисков (1 hot-spare, перестройка, и 1 любой другой — вот тут он бы не смог перестроиться и таки стал degraded). Но такая ситуация череповата тем, что умри еще один хард — и массиву точно хана.

Пришлось добавить следилку еще и за состоянием дисков.Берем стандартный кусок кода (с измененным условием — было «написать, что всё хорошо», стало «написать, если всё плохо»):

if [ $1 = «checkNemail» ]
then
EMAIL=»alert@»

# Check if raid is in BAD condition
STATUS=`$MegaCli -LDInfo -Lall -aALL -NoLog | egrep -i ‘fail|degrad|error’`

# On bad raid status send email with basic drive information
if [ «$STATUS» ]; then
$MegaCli -PDlist -aALL -NoLog | egrep ‘Slot|state’ | awk ‘/Slot/{if (x)print x;x=»»;}{x=(!x)?$0:x» -«$0;}END{print x;}’ | sed ‘s/Firmware state://g’ | mail -s `hostname`’ — RAID Notification’ $EMAIL
fi

#И добавляем почти такую же проверку, но по дискам:

STATUSDISK=`$MegaCli -PDlist -aALL -NoLog | egrep ‘Slot|state’ | awk ‘/Slot/{if (x)print x;x=»»;}{x=(!x)?$0:x» -«$0;}END{print x;}’ | sed ‘s/Firmware state://g’ |egrep -v «Online|Hotspare»` #Опросили диски, нас интересуют все состояния, кроме Online и Hotspare
if [ «$STATUSDISK» ]; then
$MegaCli -PDlist -aALL -NoLog | egrep ‘Slot|state’ | awk ‘/Slot/{if (x)print x;x=»»;}{x=(!x)?$0:x» -«$0;}END{print x;}’ | sed ‘s/Firmware state://g’ | mail -s `hostname`’ — RAID Notification’ $EMAIL #Сформировали список статусов всех дисков и отправили на мыло
fi
fi