Как я могу контролировать состояние RAID-массива на контроллере Intel из приложения Windows? - PullRequest
3 голосов
/ 13 августа 2010

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

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 08 декабря 2010

Я тоже это искал.У меня есть контроллеры серии 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")
        {
         ...
        }
    }
1 голос
/ 13 ноября 2018

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

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

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

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

0 голосов
/ 16 ноября 2018

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

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

В этот момент я использовал ответ EJA, но отфильтровал по источнику "IAStorDataMgrSvc".Это где мои журналы событий рейда написаны.Кроме того, я проверил, что сообщения содержат «Degraded» или «Rebuilding».Это исключит события запуска и журналы извлечения, такие как «Том ухудшился», «Выполняется перестройка тома», «Восстановление тома завершено».

Я получил что-то вроде:

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
               }
            }
...