Проблема
Вы собрали сервер с аппаратным RAID-контроллером LSI (Broadcom). Настроили массив из дисков, установили систему. Всё работает. Но вы знаете, что диски имеют свойство ломаться. И когда один диск выходит из строя, контроллер продолжает работать на остальных, но массив переходит в состояние degraded. Вы об этом не узнаете, пока не случится второй сбой или пока не зайдёте в утилиту управления и не увидите красный значок.
Многие администраторы полагаются на визуальную проверку, но в дата-центре с десятками серверов это нереально. Нужна система, которая сама пришлёт предупреждение, если с массивом что-то не так.
Решение
В контроллерах LSI (включая популярные серии MegaRAID) есть встроенные возможности мониторинга через утилиту командной строки StorCLI. Она позволяет не только управлять массивами, но и получать их статус. Мы напишем скрипт, который будет проверять состояние RAID и отправлять уведомления (например, на почту или в Telegram) при проблемах.
Пошаговая инструкция
Шаг 1. Установка StorCLI
Утилита StorCLI поставляется производителем контроллера (Broadcom) и доступна для Windows и Linux.
Для Linux:
- Скачайте пакет с официального сайта Broadcom (требуется регистрация) или найдите в репозиториях некоторых дистрибутивов.
- Установите, например, для Ubuntu/Debian:bashsudo dpkg -i storcli_*.debДля CentOS/RHEL:bashsudo rpm -ivh storcli-*.rpm
Для Windows:
- Скачайте ZIP-архив с исполняемым файлом
storcli64.exe. - Распакуйте в удобную папку (например,
C:\StorCLI).
После установки проверьте, что контроллер виден:
bash
storcli show all
Если утилита выводит информацию о контроллере, значит всё в порядке.
Шаг 2. Основные команды для проверки состояния
Чтобы понять, всё ли хорошо с массивом, нужно посмотреть несколько параметров.
Общий статус всех дисков и массивов:
Терминал: bash
storcli /c0 show all
Где c0 — номер контроллера (обычно 0). Эта команда покажет много информации. Нас интересуют строки с состоянием дисков и массивов.
Проверка состояния дисков (PD — Physical Drives):
Терминал: bash
storcli /c0 /eall /sall show
Вы увидите список всех физических дисков с их состоянием (Online, Failed, Rebuild и т.д.).
Проверка состояния логических томов (VD — Virtual Drives):
Терминал: bash
storcli /c0 /vall show
Статус виртуальных дисков: Optimal (всё хорошо), Degraded (один диск сбойный), Offline.
Краткий статус одной командой:
Терминал: bash
storcli /c0 show summary
Эта команда выводит сводку по контроллеру, включая общее состояние.
Шаг 3. Скрипт проверки и отправки оповещений
Напишем скрипт на bash (для Linux), который будет выполняться по расписанию и при обнаружении проблем отправлять сообщение.
Создайте файл /usr/local/bin/raid_check.sh:
Содержимое скрипта:
#!/bin/bash
# Настройки
CONTROLLER="c0" # Номер контроллера
LOG_FILE="/var/log/raid_check.log" # Лог-файл
EMAIL="admin@example.com" # Почта для оповещений
TELEGRAM_BOT_TOKEN="ваш_токен" # Для Telegram (опционально)
TELEGRAM_CHAT_ID="ваш_chat_id" # ID чата Telegram
# Функция отправки email
send_email() {
echo "$1" | mail -s "RAID Alert on $(hostname)" "$EMAIL"
}
# Функция отправки Telegram (если настроено)
send_telegram() {
if [ -n "$TELEGRAM_BOT_TOKEN" ] && [ -n "$TELEGRAM_CHAT_ID" ]; then
curl -s -X POST "https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage" \
-d chat_id="$TELEGRAM_CHAT_ID" \
-d text="$1" > /dev/null
fi
}
# Получаем статус виртуальных дисков
VD_STATUS=$(storcli /$CONTROLLER /vall show J)
# Используем вывод в JSON (ключ J) для удобства парсинга
# Проверяем, есть ли неоптимальные состояния
DEGRADED=$(echo "$VD_STATUS" | jq '.Controllers[0].ResponseData."Virtual Drives"[] | select(.State != "Optl")')
if [ -n "$DEGRADED" ]; then
MESSAGE="ВНИМАНИЕ! На сервере $(hostname) RAID массив в состоянии не Optimal. Подробности: $(echo "$DEGRADED" | jq -c '.')"
echo "$(date): $MESSAGE" >> "$LOG_FILE"
send_email "$MESSAGE"
send_telegram "$MESSAGE"
fi
# Проверяем состояние физических дисков (наличие Failed)
FAILED_DISKS=$(storcli /$CONTROLLER /eall /sall show J | jq '.Controllers[0].ResponseData."Drive Information"[] | select(.State == "Failed")')
if [ -n "$FAILED_DISKS" ]; then
MESSAGE="ВНИМАНИЕ! На сервере $(hostname) обнаружены сбойные диски: $(echo "$FAILED_DISKS" | jq -c '.')"
echo "$(date): $MESSAGE" >> "$LOG_FILE"
send_email "$MESSAGE"
send_telegram "$MESSAGE"
fi
Этот скрипт требует установленной утилиты jq для парсинга JSON. Установите её:
Терминал: bash
sudo apt install jq # Debian/Ubuntu
sudo yum install jq # CentOS/RHEL
Если вы не хотите использовать JSON, можно парсить обычный текстовый вывод, но JSON надёжнее.
Сделайте скрипт исполняемым:
Терминал: bash
sudo chmod +x /usr/local/bin/raid_check.sh
Шаг 4. Настройка отправки почты
Для отправки email через команду mail в Linux нужно установить почтовый сервер, например, ssmtp или postfix.
Установка ssmtp (простой вариант):
Терминал: bash
sudo apt install ssmtp mailutils
sudo nano /etc/ssmtp/ssmtp.conf
Пример конфигурации для Gmail:
Просто пример:
root=your@gmail.com
mailhub=smtp.gmail.com:587
AuthUser=your@gmail.com
AuthPass=your_password
UseSTARTTLS=YES
Проверьте отправку:
Терминал: bash
echo "Test" | mail -s "Test" admin@example.com
Если используете Telegram, токен и chat ID можно получить, создав бота через @BotFather и найдя свой chat ID.
Шаг 5. Добавление в cron
Запускайте скрипт регулярно, например, каждые 30 минут:
Терминал: bash
sudo crontab -e
Добавьте строку:
Пример для CRON
*/30 * * * * /usr/local/bin/raid_check.sh
Теперь система будет проверять состояние RAID и оповещать вас при проблемах.
Шаг 6. Проверка работы
Намеренно создайте проблему (если есть запасной диск, можно имитировать сбой, выдернув диск) и убедитесь, что скрипт срабатывает. Или просто запустите его вручную и посмотрите лог.
После настройки мониторинга RAID вы будете узнавать о проблемах с дисками задолго до того, как они приведут к потере данных или простою сервера. StorCLI позволяет автоматизировать этот процесс, и это не требует больших усилий.







