Как отслеживать состояние массива RAID на контроллере Intel из приложения Windows?

Мне нужно периодически проверять состояние RAID-массива на контроллере Intel из моего приложения Windows (или получать уведомления об изменении состояния). В частности, мне нужно выяснить, исправен ли массив RAID 5 или отсутствует один из его дисков.

Я попытался проанализировать вывод raidcfg32 (доступен на сайте Intel, см. данный файл сведений ), но он работает только с одним из серверов, за которым должно следить мое приложение. На других серверах raidcfg32 сообщает об ошибке «неподдерживаемое оборудование». Я также пробовал CmdTool2, но он вообще не смог найти контроллер.

Единственным оставшимся вариантом мониторинга массива RAID, поставляемым Intel, является набор приложений с графическим интерфейсом (Intel Matrix Storage Management Console, Intel Rapid Storage Technology).

Рассматриваемые контроллеры: ESB2, 631xESB/632xESB.

Я полагаю, что прочитал несколько сообщений здесь, в Stack Overflow, которые имеют отношение к моей проблеме, и ни один из них не содержит ответа. В ответ на вопрос «Могу ли я получить статус диска Raid с помощью с помощью PS?', то, что предлагается, на самом деле позволяет проверить, исправен ли контроллер, а не массив (так всегда).

Что я ищу, так это автоматизированный способ доступа к информации о состоянии (точнее, из приложения .NET). Любой вариант хорош, будь то через WMI, .NET или нативный API, синтаксический анализ вывода консоли или что-то еще.

Меня сбивает с толку тот факт, что предлагаемый способ мониторинга состояния RAID — через приложение с графическим интерфейсом. Какие подходы используются в корпоративных развертываниях с десятками серверов, чтобы сделать это программно?


person Helgi    schedule 13.08.2010    source источник


Ответы (3)


Я тоже искал это. У меня есть контроллеры серии ICHxxx, и я пытаюсь связаться с Intel, чтобы сообщить о существовании общедоступного API, но я не настроен оптимистично.

Вот что я придумал на краткосрочную перспективу. Intel записывает события RAID в журнал событий Windows в разделе «IAANTmon». Таким образом, вы можете использовать System.Diagnostics.EventLog, перехватывая EventWrittenEventHandler, а затем фильтруя «IAANTmon».

        EventLog eLog = new EventLog("Application");
        eLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWrittenEvent);
        eLog.EnableRaisingEvents = true;

и

    public static void OnEntryWrittenEvent(object source, EntryWrittenEventArgs e)
    {
        if (e.Entry.Source == "IAANTmon")
        {
         ...
        }
    }
person EJA    schedule 08.12.2010

Я тоже изучал этот вопрос, и мне кажется, что smartmontools — лучший вариант. К сожалению, я не нашел пакета, который соответствовал бы моим .NET-потребностям, а так как это что-то простое, я не тратил часы на поиск подходящего решения.

Я прибегал к запуску «smartctl --scan» (часть smartmontools) при запуске моего приложения (Process.Start), собирая список устройств из вывода, а затем периодически запуская «smartctl -H имя-устройства< /em>" для каждого устройства.

Это вернет SMART-результаты общего теста работоспособности диска, пока возвращается "PASSED", вы должны быть в безопасности.

Хотя это далеко не идеально, это дает некоторое представление о состоянии моих рейд-дисков.

person NotImplementedException    schedule 13.11.2018

По состоянию на 16.11.18 в Windows 10 я столкнулся с той же проблемой, когда мне нужно было проверить статус рейда для Intel Raid 10.

Ответ EJA в основном сработал - однако я не получил никаких журналов, записанных в источник «IAANTmon».

На данный момент я использовал ответ EJA, но отфильтровал по источнику «IAStorDataMgrSvc». Здесь записываются мои журналы событий рейда. Кроме того, я проверил, что сообщения содержат либо «Деградация», либо «Восстановление». Это исключит события запуска и журналы извлечения, такие как «Ухудшение состояния тома», «Выполняется восстановление тома», «Выполнение восстановления тома».

Я закончил с чем-то вроде:

private static void OnEntryWrittenEvent(object source, EntryWrittenEventArgs e)
      {
         if (e.Entry.Source == "IAStorDataMgrSvc"
            && (e.Entry.Message.Contains("Degraded")
            || e.Entry.Message.Contains("Rebuilding")))
         {
            // Show status message
         }
      }

При запуске я также проверял журналы за предыдущие несколько дней, если диск был помечен как деградированный, когда моя программа не работала -

foreach (var entry in eLog.Entries.Cast<EventLogEntry>()
               .Where(x => x.Source == "IAStorDataMgrSvc" 
                      && (x.TimeWritten - DateTime.Today).TotalDays < 3))
            {
               if (entry.Message.Contains("Degraded")
                  || entry.Message.Contains("Rebuilding"))
               {
                  // Show status message
               }
            }
person rw_    schedule 16.11.2018
comment
Подход со сканированием прошлых событий является обязательным, поскольку возможен вариант. Следует хранить последнюю проверку, чтобы она покрывала весь неиспользуемый интервал. - person Helder Magalhães; 26.07.2019