この特集のトップページへ

Directory design 1... ディレクトリ容量の見積もり
sankaku.gif 縮小されないディレクトリ容量の謎

 「Active Directoryを運用して評価していたところ,スクリプトを使って大量のオブジェクトを作成したあと,それらを削除したのにディレクトリの容量が変更されないのはなぜか?」という質問を受けることがある。

 Active Directoryでは,あるオブジェクトを削除すると,その実体をその場で消すのではなく,削除標識というマークを付けて使用できないようにし,ディスク領域はそのまま占有し続ける。このように削除標識を用いる理由は,「このオブジェクトを削除した」という情報を,ほかのドメインコントローラにも複製して,取りこぼすことなくすべてのドメインコントローラからそのオブジェクトを削除するためである。そして,削除標識の期限(60日間)が切れてガベージコレクションが実行されると,削除標識のあるオブジェクトは削除される。

attenticon.gif 削除標識の期限を変更したい場合には,リソースキットに収録されているADSI EDITというツールを使って,Configuration Containerにある次の項目を変更する。

CN=Directory Service, CN=WindowsNT, CN=ServiceのTombstoneLifeTime

 以上のような仕様のため,Active Directoryでは,実際に使用するデータ量はほんの数Kバイトでも,エクスプローラなどで表示されるファイルの容量は巨大になる。

 ガベージコレクションによってオブジェクトが削除されてディスク領域が解放されると,ディレクトリファイルは次第にフラグメント化され,虫食い状態となる。できることなら,このような空き領域は効率よく再利用したいところであろう。Active Directoryでは,ドメインコントローラを起動したままの状態で,定期的にディレクトリファイルのオンライン最適化を実行する(ガベージコレクション処理の1つである)。その結果,連続した空き領域は,新しくオブジェクトを作成するときに再利用される。しかし,この処理だけでは,ディレクトリファイルの容量そのものは縮小されない。ディレクトリ容量そのものを縮小したい場合には,オフライン最適化を実行する必要がある。

 オフライン最適化を実行するには,ドメインコントローラを起動するときに[F8]キーを押し,[ディレクトリサービス復元モード]を選択して起動したあと,コマンドプロンプトからNTDSUTIL.EXEを実行する。この処理は,各ドメインコントローラごとに実行する必要がある。NTDSUTIL.EXEの実行方法については,次のページのコラムで説明する

 Fig.3で示すグラフは,オブジェクトを徐々に作成し,そのあとそれらを一気に半分まで削除したときのディレクトリファイルの容量の変化を表したものである。Fig.3において青色で示したものがオンライン最適化のみを実行している場合であり,緑色で示したものがオフライン最適化まで実行した場合である。この結果から,2つのことがわかる。1つは,オブジェクトを削除しても,オフライン最適化を実行しない限り,ディレクトリ容量は小さくならないということである。もう1つは,大量の空き領域は新しいオブジェクトを作成するときに再利用されるため,オフライン最適化を実行しない場合でもディレクトリの容量はむやみやたらと増加するわけではないということである。ただし,ガベージコレクションが実行されるまで(デフォルトでは60日間)は,オブジェクトが削除されないため,ディレクトリ容量は増加し続ける点に注意してほしい。

Fig.3 ディレクトリファイルの容量の変化
fig03.gif
prevpg.gif Directory design 7/18 nextpg.gif