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

Directory design 1... ディレクトリ容量の見積もり
sankaku.gif Active Directoryデータベースの実体とは

 Windows NTにおけるSAMデータベースの実体は,Windows NTのレジストリであった。しかしActive Directoryにおけるディレクトリの実体は,独立したファイルとなっている。すでにActive Directoryをインストールした経験をお持ちであれば,Active Directoryのインストール時に「データベースをどこに配置するか」と問われることを覚えているだろう。そこで指定したNTDSフォルダ(デフォルトでは,\WINNT\NTDSフォルダ)のなかに生成されるNTDS.DITというファイルが,Active Directoryにおけるディレクトリの実体である。本稿では,このファイルを「ディレクトリファイル」と呼ぶことにする。

Fig.1 Active Directoryのインストール時に指定するNTDSフォルダの所在
fig01.gif

 管理者が,ユーザーやグループなどのオブジェクトを登録または削除したり,セキュリティを設定したりすると,最終的にすべての変更はディレクトリファイルに書き込まれる。このファイルを管理しているLSA(Local Security Authority:LSASS.EXE)は,アクセスするデータをディレクトリファイルからページ単位(8Kバイト)でメモリ上にロードし,管理者が変更した内容をメモリ上にキャッシュする。

 そして,ディレクトリがシャットダウンされるとき(Windows 2000を終了させるとき),またはCPUの負荷が低いとき(アイドルタイム時),メモリ内のすべてのページをディレクトリファイルに書き出し,メモリバッファを解放する。

 では,メモリ上にキャッシュされた情報をディレクトリファイルに書き込むまえにシステムに障害が発生した場合には,どうなるのだろうか? もちろん,キャッシュされていた変更点は紛失してしまうことになる。このような障害を復旧し,キャッシュされていた変更点をディレクトリに反映させるために用いられるのが,トランザクションログファイルである。トランザクションログファイルの所在も,ディレクトリファイルと同じようにActive Directoryのインストール時に設定することができる(デフォルトでは\WINNT\NTDSフォルダに生成される。Fig.1参照)。

 トランザクションログファイルを利用することにより,Active Directoryでは,障害が発生したときにコミットされていなかったトランザクションを自動的に再実行することができる。たとえば,いきなりシステムが落ちた場合でも,システムを再起動させると自動的にトランザクションが再実行される。バックアップからデータを復元した場合も,システムの起動時に未処理のトランザクションが自動的に再実行される。

 Active Directoryでディレクトリの内容を変更した場合の処理内容を,まとめておこう。

  1. LSASS.EXEが変更内容をトランザクションログファイルに書き込む
  2. LSASS.EXEが変更内容をメモリ上のディレクトリページに書き込む
  3. LSASS.EXEがトランザクションを実行する
  4. シャットダウン時またはアイドルタイム時に,メモリ上のディレクトリページがNTDS.DITファイルに書き込まれる
Fig.2 Active Directoryにおけるディレクトリの変更処理
fig02.gif

 以上の説明からもわかるように,障害復旧を考慮して,ディレクトリファイルとトランザクションログファイルを格納するディスクは,物理的に分けておいたほうがよい。物理障害などでディスク上のディレクトリファイルが破壊されても,トランザクションログファイルがほかのドライブ上に残っていれば,それを元にデータを復旧できる可能性が高くなるからである。

 さらに,パフォーマンスを考慮すると,ディレクトリファイルよりも先に書き込まれるトランザクションログファイルを,より高速なディスクに格納することが望ましい。障害復旧を考慮するなら,さらにRAID構成を採用するとよい。この場合,ディレクトリファイルをRAID5(パリティ付きストライプセット)に,トランザクションログファイルをRAID1(ミラーリング)に構成するのがお勧めである。

prevpg.gif Directory design 2/18 nextpg.gif