先日のブログの記事で、IIS7.x Web サイト共有ホスティングサービスのための、プロビジョニング用のサンプルアプリケーションを公開させていただきましたが、早速アップデートの準備を進めています。
次のアップデートでは、以下の機能の追加を予定しております。
1. ディスククォータの制御
2. ファイルスクリーン機能の実装
3. データベースとデータベースの管理ユーザー作成
その中から、今回はディスク クォータの制御をどのように実装するかについて書きたいと思います。
Windows Server の 2 種類のクォータ機能
Windows におけるディスク クォータの機能は、Windows 2000 で NTFS ディスク クォータが初めて搭載され、Windows Server 2003 R2 からは、ファイルサーバー リソース マネージャー (FSRM) が提供する、記憶域によるクォータ機能が追加されました。
この二つのクォータの機能の違いはなにかというと、NTFS ディスク クォータは、ユーザーアカウント、セキュリティグループに対しディスクの使用量を制御するのに対し、 FRMS が提供するクォータの機能は、フォルダごと、ドライブごとに、個別に使用量を設定することができます。
ちなみに前者の NTFS ディスククォータは、Windows XP,Vista, 7 などのクライアント OS にも付属していますが、FSRM はサーバー OS のみに付属します。
この 2 つのディスククォータの具体的な使用方法については、以下のドキュメントをご参照ください。
[HOWTO] Windows Server 2003 のディスククォータを使用してディスク容量とディスクの使用を管理する方法』
http://support.microsoft.com/kb/326212/ja
(※) Windows Server 2003 について書かれていますが、Windows Server 2008 でも同様です。
FSRM - 『ファイルサーバー リソース マネージャ』
http://www.microsoft.com/japan/technet/windowsserver/2008/library/c203b256-30c5-426b-9e33-9d108256097e.mspx?mfr=true
<補足 : ファイルサーバー リソース マネージャのインストールについて>
Windows Web Server 2008 では、サーバーマネージャーの [機能] 画面の [機能の追加]から直接セットアップできますが、Standard 以上のエディションでは [役割] で "ファイルサービス" を追加する必要があります。ファイルサーバー リソース マネージャは 役割 ファイルサービスの機能の一部です。
プログラムによるディスククォータの設定
理由としては、サンプルアプリケーションが作成する IIS 管理ユーザーアカウントは、Windows 上のユーザーアカウントでないため、NTFS ディスククォータでは細かな制御ができないためです。
そんなわけで、ここでは NTFS ディスククォータ制御のためのコードは、詳しく紹介しくませんが、いちおう サンプルコードが記述されたドキュメントを紹介させていただきます。サンプルコードは vbs で記述されておりますが、WMI を使用したものなので、適宜目的の言語で書き直していただければと思います。
『Windows Server 2003 と Windows XP におけるディスク クォータ管理』
http://www.microsoft.com/japan/technet/scriptcenter/topics/win2003/quotas.mspx
NTFS のディスククォータについては、上記のような、詳しいうえウィットに富んだジョークまで入った素敵なドキュメントが用意されておりますが、FRMS が提供するディスククォータについても以下のように親切なサンプルコードが用意されています。
ただし、"野生的"という言葉があまりにも似合いすぎる C++ コードで記述されていますが....。
『Limiting the Amount of Data Written to a Directory』
http://msdn.microsoft.com/en-us/library/bb870630(VS.85).aspx
プロビジョニング用のサンプルアプリケーションは C# で書いていますので、当然のことながらこのままサンプルコードは使用することはできません。
ということで、猛々しく雄雄しい、野生の猛獣のような C++ コードを、フレンドリでチャーミングな、お茶の間の子猫ちゃんのような C# に書き換えてみました。
公開されているマネージコードのサンプルがないので、正しいかどうかは ??? ですが、ちゃんと動作を確認してあります。
※) c:\windows\system32\srm.dll を参照設定してください。 using FsrmLib; //クォータの情報を取り出す際に使用するクラス
//テンプレートによるディスククォータの指定
//クォータの削除 |
呼び出し方は次のようにします。
//目的のフォルダに 100MB のクォータを設定 //目的のフォルダにテンプレートを使用してクォータを設定 //クォータの情報をメッセージボックスに表示
|
念のために、このコードを検証すめための注意点を書いておきますと、このコードはファイルサーバーリソースマネージャー(FSRM) の API をコールしますので、あらかじめ Windows Server 2008 に同機能をインストールしておいてください。
あと、今回使用している FSRM のライブラリは COM なので、vbs や、VB とかからでも使用できます。
次回はファイルスクリーンの設定について書きます。
では。
