4

Windows アプリケーションから Intel コントローラの RAID アレイのステータスを定期的に確認する必要があります (または、ステータスの変更について通知を受ける必要があります)。具体的には、RAID 5 アレイが正常かどうか、またはそのディスクの 1 つが欠落しているかどうかを確認する必要があります。

の出力を解析しようとraidcfg32しました (インテルのサイトから入手できます。この readmeを参照してください)。ただし、アプリケーションが監視する必要があるサーバーの 1 つとしか機能しません。他のサーバーraidcfg32では、「サポートされていないハードウェア」エラーが報告されます。も試しCmdTool2ましたが、コントローラーを完全に見つけることができませんでした。

Intel が提供する RAID アレイ監視の残りのオプションは、一連の GUI アプリケーション (Intel Matrix Storage Management Console、Intel Rapid Storage Technology) だけです。

問題のコントローラーは、ESB2、631xESB/632xESB です。

私の問題に関連する Stack Overflow のいくつかの投稿を読んだことがあると思いますが、どれにも答えが含まれていません。「<a href="https://stackoverflow.com/questions/2501855/can-i-get-raid-disk-status-by-using-ps">質問への回答で、レイドディスクのステータスを取得できますか?たとえば、提案されていることは、アレイではなくコントローラーが正常であるかどうかを実際に確認することを可能にします (常に正常です)。

私が探しているのは、(具体的には、.NET アプリケーションから) ステータス情報にアクセスする自動化された方法です。WMI、.NET またはネイティブ API、コンソール出力の解析など、どのオプションでもかまいません。

RAID の状態を監視する方法として GUI アプリケーションを使用する方法が推奨されているのは、ややこしいと思います。これをプログラムで行うために、数十台のサーバーを備えたエンタープライズ展開でどのようなアプローチが使用されていますか?

4

3 に答える 3

6

私もこれを探していました。私はICHxxxシリーズのコントローラーを持っており、パブリックAPIの存在について回答するために、Intelに連絡を取ろうとしていますが、楽観的ではありません。

これが私が短期的に思いついたものです。Intelは、RAIDイベントを「IAANTmon」の下のWindowsイベントログに記録します。したがって、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")
        {
         ...
        }
    }
于 2010-12-08T15:26:37.850 に答える
1

2018 年 11 月 16 日の時点で、Windows 10 で同じ問題に遭遇し、Intel Raid 10 の RAID ステータスを確認する必要があります。

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
               }
            }
于 2018-11-16T18:59:35.623 に答える