Active Directoryのドメインコントローラでディスクの書き込みキャッシュを有効にするには

問題

 Windows 2000以降のServer OSのマシンをドメインコントローラにすると、 NTDSディレクトリ(dcpromoでドメインコントローラにするときのデフォルト値は%SYSTEMROOT%\NTDS)の存在するボリュームを有する物理ドライブの書き込みキャッシュが無効にされる。ディスクのプロパティ画面で手動で有効にしても、再起動するとdiskドライバが再び無効に戻してしまう。このときシステムログに以下のようなイベントが記録される。

イベントの種類: 警告
イベント ソース: Disk
イベント カテゴリ: なし
イベント ID: 34
説明:
ドライバは、デバイス \Device\Harddisk2\DR2 の書き込みキャッシュを無効にしました。

 この結果、物理ディスクが1つしかないシステムではディスク側の書き込みキャッシュがまったく効かなくなり、書き込み性能が悪化する。休止状態への移行にも時間が掛かるようになる。
 物理ディスク全体のキャッシュが無効になるので、一つの物理ディスク上でパーティションを切ってNTDSディレクトリを別のパーティションに持って行っても無意味である。

 これはWindows Serverの仕様である(KB321543参照)。

強引な対処策

注意: Microsoftがわざわざ書き込みキャッシュを強制的に無効にしているにはそれなりの理由があってのことと考えられます。以下に述べる設定はあなたご自身のリスクで行なってください。その結果不具合が生じても、当方は責めを負いかねます。

 diskcach.exeとタスクスケジューラを使って、起動の度に自動的に書き込みキャッシュをオンにする。コマンドプロンプトから

schtasks /create /RU SYSTEM /SC ONSTART /TN diskcach /TR "<diskcachのあるディレクトリ>\diskcach -w 1 <物理ディスク番号>"

としてdiskcachをタスクに登録する。なおコントロールパネルの[タスク]アプレットを使って登録することも考えられるが、その場合システムアカウントで実行するように設定できないので、管理者権限のあるユーザー名とパスワードを指定することになる。 

補足

 この対処策は、開発マシンなどでServer OSを使っている場合に便利だろう。本番サーバにはあまりお勧めしない。

 なお、RAIDカード経由で接続されているディスクなどでは、diskドライバが書き込みキャッシュを無効にできないようで、以下のような恨みがましい記録が残されるものの、この問題は起こらないことが多いようである(KB942402参照)。

イベントの種類: 警告
イベント ソース: Disk
イベント カテゴリ: なし
イベント ID: 32
説明:
ドライバは、デバイス \Device\Harddisk0\DR0 の書き込みキャッシュが有効であることを検出しました。 データが壊れる可能性があります。

前ページ | 目次 | 次ページ