web-dev-qa-db-ja.com

Windowsでミラーリングされたディスクの状態をどのように監視しますか?

Windows 2003 Serverにミラーリングされたダイナミックディスクがあります。ボリュームの状態をどのように監視しますか?

ボリュームに問題があるときにサーバーにメールを送信させる方法はありますか?サーバーにS.M.A.R.T.テストを実行させる方法はありますか?

編集:クライアントサーバーにログインし、DISKPART LIST VOLUMEを実行してこれを確認するようなWTFはありません。

Volume ###  Ltr  Label        Fs     Type        Size     Status     Info
----------  ---  -----------  -----  ----------  -------  ---------  --------
Volume 0     X   xDrive       NTFS   Mirror       233 GB  Failed Rd
Volume 1     C                NTFS   Simple        57 GB  Healthy    System
Volume 2     D                       DVD-ROM         0 B  Healthy
Volume 3     F                RAW    Partition    466 GB  Healthy
Volume 4     E   New Volume   NTFS   Partition    932 GB  Healthy
12
NitroxDM

少し前に同じ質問がありました。私が最初に考えたのはWMIの使用ですが、奇妙な理由により、WMIは通常のWin32_ *クラスを通じてRAIDボリュームの正常性を公開しません。

私は最終的に偶然に遭遇しました この記事のスクリプト と私の要件に合わせていくつかの変更を加えました。 diskpart.exeの「LIST VOLUME」コマンドの出力を解析します。これは少し汚くて醜いように見えるかもしれませんが、今のところ、これが私が見た中で最良のオプションです。

リンクされたページに表示されるスクリプトは、 Nagios / NSClient ++ で使用する準備ができています。 VBScriptについて少し知っている場合は、これを変更して、ステータス情報を印刷する代わりに電子メールを送信するのは簡単です。

VBScriptがわからない場合は、目的に応じて変更を加えたバージョンを喜んで提供します。

5
ThatGraemeGuy
for /f "tokens=4,9 delims= " %a IN ('echo list volume ^| diskpart ^| find "SSD"') do echo %a %b

Find "SSD"を "mirror"(またはストライプ...何でも)またはボリューム名に置き換えます。 (私のボリュームはSSD1 + SSD2という名前です)

@echoをオフにしてバッチファイルを挿入します。 :)

@echo off
for /f "tokens=4,9 delims= " %%a IN ('echo list volume ^| diskpart ^| find "SSD"') do echo %%a %%b

上の行はバッチに必要です。 =)

ノート

  • これを機能させるにはボリューム名が必要です。それ以外の場合はtokenstokens=8に変更してください
2
Mindfart

Smartmontools( http://sourceforge.net/apps/trac/smartmontools/wiki )にはWindowsバージョンがありますが、2K8で動作することはわかりません

1
lrosa

この醜いバッチファイルを使用して、100を超えるサーバーを監視し、ミラーのステータスを確認したところ、すばらしい結果が得られました。これは、4時間ごとにパッシブチェックを実行して結果をnagiosサーバーに送信するnsclient ++クライアントプラグインです。

check_mirror.bat

@echo off
echo list volume | diskpart | find "Mirror" > H
for /f %%i in ('type H ^| find /c "Mirror"') do set /a M=%%i 
for /f %%i in ('type H ^| find "Mirror" ^| find /c "Health" ') do set /a H=%%i 
for /f %%i in ('type H ^| find /c "Risk"') do set /a risk=%%i 
@del H /q
rem echo M=%M%, H = %H% Risk=%risk%
if %risk% GTR 0 goto err
IF %M%.==0. goto nomirror
IF %M% EQU %H% goto mirrorok

:err
echo CRITICAL: Something Wrong.
exit /B 1

:mirrorok
echo OK: Mirror Health.
exit /B 0

:nomirror
echo OK: No Mirror Found.
exit /B 1
0
user191549