この時代に Windows Server 2003 のディスク使用率を監視する苦難に見舞われた架空の話です。
尚、問題となるサーバはパフォーマンスの監視はされていないものの、イベントログの監視はされているものとします。
以下のようなバッチファイルを設置し、タスクで定期的に動かすことで解決することにしました。
@echo off
:: しきい値(GB)
set /a Threshold=10
:: dirコマンドの最終行の3つ目のトークン(ディスクの空き容量)を取得
for /F "tokens=3" %%i in ('dir') do @(set DirLastLine=%%i)
:: ディスクの空き容量のカンマを除去
set FreeDiskSpace=%DirLastLine:,=%
:: batでは32bit数値までしか扱えないため末尾9桁を除去して大雑把なGBを得る
set /a FreeDiskSpaceGB=%FreeDiskSpace:~0,-9%
:: しきい値を下回っていればイベントログにエラーを出力する
if %FreeDiskSpaceGB% lss %Threshold% (
eventcreate /L Application /T ERROR /ID 1 /D "Disk Critical [%FreeDiskSpaceGB%GB Free] Threshold=%Threshold%GB"
)
dirコマンドの最終行にディスクの空き容量が表示されていることに気づいたのはつい最近です。だってそういう目的で使ったこと無いし。
32bit数値までしか使えないところに時代を感じます。変数展開でうまく末尾除去でGBに変換ができたので良かったです。危うく rd /s /q C:\Windows
を仕込むところだった
GB への変換が雑なのは間違いないですが、概ね目的が達成できているので良いのだと思います。雑なのは良いことです、コスパ的に考えて。
一気にMBレベルまで食いつぶしたらどうするんだという話はあると思うのですが、そこまで行ったら本当にサーバ止めた方が良いと思う。