(57)【特許請求の範囲】
【請求項１】
コンピュータを、
再構成可能な記憶装置の複数通りの台数の公倍数Ｍを取得する取得手段、
所定のアルゴリズムに従って、前記記憶装置に記憶されるファイル群を、前記取得手段によって取得された公倍数Ｍ個分のクラスにクラス単位で均等になるように割り当てるファイル割当手段、
前記複数通りの台数のうちの現在の台数から成る前記記憶装置を前記複数通りの台数のうちの他の台数から成る記憶装置に変更する場合、前記クラスと割り当てられる記憶装置との対応関係を有する割当テーブルに従って、前記ファイル割当手段で割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てるクラス割当手段、
として機能させることを特徴とする分散ストレージ管理プログラム。
【請求項２】
前記クラス割当手段は、
前記記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、ａ台の記憶装置にそれぞれ割り当てられているＭ／ａ個のクラスのうち、（Ｍ／ａ−Ｍ／ｂ）個のクラスを、変更対象となる（ｂ−ａ）台の記憶装置にそれぞれ割り当てることを特徴とする請求項１に記載の分散ストレージ管理プログラム。
【請求項３】
前記クラス割当手段は、
前記記憶装置の使用台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられている（Ｍ×（１−ａ／ｂ））個のクラスを、ａ台の記憶装置に（Ｍ／ａ−Ｍ／ｂ）個のクラスずつそれぞれ割り当てることを特徴とする請求項１または２に記載の分散ストレージ管理プログラム。
【請求項４】
コンピュータを、
ファイル群を割り当てるクラスのクラス数Ｍを取得する取得手段、
所定のアルゴリズムに従って、前記ファイル群を前記取得手段によって取得されたクラス数Ｍ個分のクラスにクラス単位で均等になるように割り当てるファイル割当手段、
前記ファイル群を記憶させる記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられているクラス数を０個として、前記ｂ台の記憶装置に割り当てられているクラス数が降順となるようにソートした結果、前記ｂ台の記憶装置のうち、先頭からｒ台（ただし、ｒは、Ｍをａで割った余り）の記憶装置に（ｑ＋１）個（ただし、ｑは、Ｍをａで割った商）のクラスを割り当てるとともに、残余の記憶装置にｑ個のクラスを割り当てることにより、前記ファイル割当手段によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記ｂ台から成る記憶装置に割り当てるクラス割当手段、
として機能させることを特徴とする分散ストレージ管理プログラム。
【請求項５】
ファイル群を割り当てるクラスのクラス数Ｍを取得する取得手段と、
所定のアルゴリズムに従って、前記ファイル群を前記取得手段によって取得されたクラス数Ｍ個分のクラスにクラス単位で均等になるように割り当てるファイル割当手段と、
前記ファイル群を記憶させる記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられているクラス数を０個として、前記ｂ台の記憶装置に割り当てられているクラス数が降順となるようにソートした結果、前記ｂ台の記憶装置のうち、先頭からｒ台（ただし、ｒは、Ｍをａで割った余り）の記憶装置に（ｑ＋１）個（ただし、ｑは、Ｍをａで割った商）のクラスを割り当てるとともに、残余の記憶装置にｑ個のクラスを割り当てることにより、前記ファイル割当手段によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記ｂ台から成る記憶装置に割り当てるクラス割当手段と、
を備えることを特徴とする分散ストレージ管理装置。
【請求項６】
制御手段および記憶手段を備えるコンピュータが、
前記制御手段により、ファイル群を割り当てるクラスのクラス数Ｍを取得する取得工程と、
前記制御手段により、所定のアルゴリズムに従って、前記ファイル群を前記取得工程によって取得されたクラス数Ｍ個分のクラスにクラス単位で均等になるように割り当てるファイル割当工程と、
前記制御手段により、前記ファイル群を記憶させる記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられているクラス数を０個として、前記ｂ台の記憶装置に割り当てられているクラス数が降順となるようにソートした結果、前記ｂ台の記憶装置のうち、先頭からｒ台（ただし、ｒは、Ｍをａで割った余り）の記憶装置に（ｑ＋１）個（ただし、ｑは、Ｍをａで割った商）のクラスを割り当てるとともに、残余の記憶装置にｑ個のクラスを割り当てることにより、前記ファイル割当工程によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記ｂ台から成る記憶装置に割り当てるクラス割当工程と、
を実行することを特徴とする分散ストレージ管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、構成するディスク装置の台数を動的に変更可能な分散ストレージ管理プログラム、分散ストレージ管理装置、および分散ストレージ管理方法に関する。
【背景技術】
【０００２】
複数のディスク装置から構成される分散ストレージシステムでは、ディスク装置の性能を最大限に活かすため、それぞれのディスク装置に保持されるファイル数が十分に均等であることが求められている。また、要求されるストレージ容量は大きく変化する可能性があるため、ディスク装置の台数を動的に変更可能であることが求められている。
【０００３】
これらの要求を満たすためには、ディスク装置の台数変更時にファイルの移動（再配置）が必要となる。従来、大量のデータを複数の記憶装置に分配して管理する手法として、マネージャ・ベースとアルゴリズム・ベースの技術が知られている（例えば、下記非特許文献１参照。）。
【０００４】
マネージャ・ベースの技術では、マネージャとなるコンピュータ装置が１個のファイルごとに対応するディスク装置を管理する。これによれば、ファイル群に対して柔軟にディスク装置を割り当てることが可能であり、ディスク装置ごとのファイル数を均等にして、かつ、ディスク装置の台数変更時にファイルの再配置を最小にすることができる。
【０００５】
また、アルゴリズム・ベースの技術では、ファイル名などのキーワードから算出されるハッシュ値に基づいて、各ファイルを対応するディスク装置に割り当てる。これによれば、ファイルの追加・参照・変更・削除時にファイルごとのマッピングを並列におこなうことができる。
【０００６】
具体的には、例えば、ファイル名から十分大きな整数を生成し、その整数をディスク装置で割った余りによるマッピングをおこなう。これによれば、ディスク装置をａ台からｂ台、または、ｂ台からａ台に変更する場合（ただし、ａ＜ｂ）、必要となる再配置のファイル数は、ａとｂとの最大公約数をＮとすると、全ファイル数の（ｂ−Ｎ）／ｂとなる。
【０００７】
【非特許文献１】“ミクシィのＣＴＯが語る「ｍｉｘｉはいかにして増え続けるトラフィックに対処してきたか」”、［ｏｎｌｉｎｅ］、２００６年３月３０日、日経ソフトウエア、［平成１９年１０月１日検索］、インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｉｔｐｒｏ．ｎｉｋｋｅｉｂｐ．ｃｏ．ｊｐ／ａｒｔｉｃｌｅ／ＮＥＷＳ／２００６０３３０／２３３８２０／＞
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、上述したマネージャ・ベースの技術によれば、マネージャがファイル単位の管理を一元的におこなうため、ファイルの追加・参照・変更・削除に関する全ての問い合わせがマネージャに集中してしまう。この結果、通信トラフィックや排他制御によるボトルネックが生じてしまうという問題があった。
【０００９】
また、上述したアルゴリズム・ベースの技術によれば、ディスク装置ごとのファイル数を十分均等にするためにはランダムな値を生成するハッシュ関数をディスク装置の台数で割るなどの手法がとられる。このため、ディスク装置の増減にともなうファイルの再配置を最小にすることができない場合があるという問題があった。
【００１０】
具体的には、ファイルの再配置先となるディスク装置が、そのときの全ディスク装置の台数によって大きく変わってしまうため、ディスク装置の台数変更時におけるファイルの再配置が大量に発生してしまうという問題があった。
【００１１】
この発明は、上述した従来技術による問題点を解消するため、ディスク装置の台数を変更するときのファイルの再配置を最小化することにより、ストレージシステムの性能を向上させることを目的とする。
【課題を解決するための手段】
【００１２】
上述した課題を解決し、目的を達成するため、この開示技術は、再構成を予定している記憶装置の台数の公倍数Ｍを取得し、所定のアルゴリズムに従って、前記記憶装置に記憶されているファイル群を、取得された公倍数Ｍ個分のクラスに割り当て、現在の台数から成る前記記憶装置を現在の台数とは異なる他の台数から成る記憶装置に変更する場合、前記クラスと割り当てられる記憶装置との対応関係を有する割当テーブルに従って、割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てる。
【００１３】
この開示技術によれば、記憶装置の台数変更時におけるファイルの再配置をクラス単位でおこなうことができる。
【発明の効果】
【００１４】
この開示技術によれば、ディスク装置の台数を変更するときのファイルの再配置を最小化することにより、ストレージシステムの性能を向上させることができるという効果を奏する。
【発明を実施するための最良の形態】
【００１５】
以下に添付図面を参照して、この分散ストレージ管理プログラム、分散ストレージ管理装置、および分散ストレージ管理方法の好適な実施の形態を詳細に説明する。
【００１６】
（ストレージシステムのシステム構成）
まず、本実施の形態にかかるストレージシステムのシステム構成について説明する。図１は、本実施の形態にかかるストレージシステムのシステム構成図である。図１において、ストレージシステム１００は、分散ストレージ管理装置１０１と、複数のサーバ１０２−１〜１０２−ｎとがインターネット、ＬＡＮ、ＷＡＮなどのネットワーク１１０を介して相互に交信可能に接続されている。
【００１７】
ストレージシステム１００は、ウェブサーバなどの外部装置１０３−１〜１０３−ｎに対してストレージサービスを提供するシステムである。ストレージサービスとは、任意のファイル群を、サーバ１０２−１〜１０２−ｎのディスク装置Ｄ1〜Ｄnに保持し、管理するサービスである。なお、Ｄ1〜Ｄnは、各ディスク装置に付与されているディスク番号である。
【００１８】
ストレージシステム１００では、要求されるストレージ容量やアクセス数などに応じて、ファイル群を保持するためのディスク装置Ｄ1〜Ｄnの台数を動的に変更することができる。例えば、要求されるストレージ容量が少ないときには、２台のディスク装置Ｄ1，Ｄ2でストレージサービスを運用する（図１中Ｘ１）。
【００１９】
このあと、例えば、要求されるストレージ容量が増えると、ディスク装置Ｄ1〜Ｄnの台数を２台（ディスク装置Ｄ1，Ｄ2）から４台（ディスク装置Ｄ1〜Ｄ4）に変更する（図１中Ｘ２）。このとき、サーバ１０２−１〜１０２−ｎにかかる負荷を分散するために、ディスク装置Ｄ1，Ｄ2に記憶されているデータの再配置をおこなうことで、ファイル群をディスク装置Ｄ1〜Ｄ4に均等に振り分ける。
【００２０】
ここで、分散ストレージ管理装置１０１は、ディスク装置Ｄ1〜Ｄnの台数変更時に、ファイル群の再配置を管理するコンピュータ装置である。また、サーバ１０２−１〜１０２−ｎは、ディスク装置Ｄ1〜Ｄnを備え、各ディスク装置Ｄ1〜Ｄnに対するファイルのリード／ライトを制御するコンピュータ装置である。
【００２１】
（コンピュータ装置のハードウェア構成）
つぎに、図１に示した分散ストレージ管理装置１０１、サーバ１０２−１〜１０２−ｎおよび外部装置１０３−１〜１０３−ｎ（ここでは、単に「コンピュータ装置」という）のハードウェア構成について説明する。図２は、本実施の形態にかかるコンピュータ装置のハードウェア構成を示す説明図である。
【００２２】
図２において、コンピュータ装置は、コンピュータ本体２１０と、入力装置２２０と、出力装置２３０と、から構成されており、不図示のルータやモデムを介してＬＡＮ，ＷＡＮやインターネットなどのネットワーク１１０に接続可能である。
【００２３】
コンピュータ本体２１０は、ＣＰＵ，記憶部，インターフェースを有する。ＣＰＵは、コンピュータ装置の全体の制御を司る。記憶部は、ＲＯＭ，ＲＡＭ，ＨＤ，光ディスク２１１，フラッシュメモリから構成される。記憶部はＣＰＵのワークエリアとして使用される。
【００２４】
また、記憶部には各種プログラムが格納されており、ＣＰＵからの命令に応じてロードされる。ＨＤおよび光ディスク２１１はディスクドライブによりデータのリード／ライトが制御される。また、光ディスク２１１およびフラッシュメモリはコンピュータ本体２１０に対し着脱自在である。インターフェースは、入力装置２２０からの入力、出力装置２３０への出力、ネットワーク１１０に対する送受信の制御をおこなう。
【００２５】
また、入力装置２２０としては、キーボード２２１、マウス２２２、スキャナ２２３などがある。キーボード２２１は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式であってもよい。マウス２２２は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などをおこなう。スキャナ２２３は、画像を光学的に読み取る。読み取られた画像は画像データとして取り込まれ、コンピュータ本体２１０内の記憶部に格納される。なお、スキャナ２２３にＯＣＲ機能を持たせてもよい。
【００２６】
また、出力装置２３０としては、ディスプレイ２３１、スピーカ２３２、プリンタ２３３などがある。ディスプレイ２３１は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。また、スピーカ２３２は、効果音や読み上げ音などの音声を出力する。また、プリンタ２３３は、画像データや文書データを印刷する。
【００２７】
（実施の形態１）
（分散ストレージ管理装置１０１の機能的構成）
つぎに、実施の形態１にかかる分散ストレージ管理装置１０１の機能的構成について説明する。図３は、分散ストレージ管理装置の機能的構成を示すブロック図である。図３において、分散ストレージ管理装置１０１は、取得部３０１と、ファイル割当部３０２と、クラス割当部３０３と、作成部３０４と、配信部３０５と、を含む構成である。
【００２８】
この制御部となる機能（取得部３０１〜配信部３０５）は、メモリに格納された当該機能に関するプログラムをＣＰＵに実行させることにより、当該機能を実現することができる。また、各機能からの出力データはメモリに保持される。また、図３中矢印で示した接続先の機能的構成は、接続元の機能からの出力データをメモリから読み込んで、当該機能に関するプログラムをＣＰＵに実行させる。
【００２９】
まず、取得部３０１は、任意のファイル群を割り当てるクラスのクラス数Ｍを取得する機能を有する。記憶装置は、ハードディスク、光ディスク２１１、フラッシュメモリなどの記憶媒体（例えば、図１に示したディスク装置Ｄ1〜Ｄn）であってもよく、また、これら記憶媒体を備えるコンピュータ装置（例えば、図１に示したサーバ１０２−１〜１０２−ｎ）であってもよい。
【００３０】
ここでは、クラス数Ｍとして、再構成を予定している記憶装置の台数の公倍数Ｍを取得する。再構成を予定している記憶装置の台数とは、要求されるストレージ容量などに応じて動的に再構成可能な記憶装置の複数通りの台数の集合｛ｍ1，ｍ2，…，ｍk｝である（ｋ：自然数）。運用例としては、要求されるストレージ容量が増大すると記憶装置の台数を増やし、要求されるストレージ容量が減少すると記憶装置の台数を減らすこととなる。
【００３１】
この複数通りの台数は、図２に示したキーボード２２１やマウス２２２などの入力装置２２０をユーザ（ストレージシステム１００の管理者など）が操作することで予め任意に設定される。例えば、複数通りの台数として｛２，４，６｝が設定されたとする。この場合、取得部３０１は、例えば、｛２，４，６｝の公倍数を算出し、複数の公倍数『１２，２４，３６，…』のうちいずれかの数を公倍数Ｍとして取得する。
【００３２】
このとき、複数の公倍数の中から最小公倍数を公倍数Ｍとして取得することとしてもよい。なお、図２に示したキーボード２２１やマウス２２２などの入力装置２２０をユーザが操作することで分散ストレージ管理装置１０１に直接入力された公倍数Ｍを取得することとしてもよい。
【００３３】
ファイル割当部３０２は、所定のアルゴリズムに従って、任意のファイル群を、取得部３０１によって取得された公倍数Ｍ個分のクラスに割り当てる機能を有する。ここで、ファイル群とは、例えば、現在使用されている記憶装置に記憶されているファイル群であってもよく、また、新たに追加するファイル（どの記憶装置にも割り当てられていないファイル）を含むものであってもよい。
【００３４】
具体的には、例えば、ファイル割当部３０２は、公倍数Ｍ個分のクラスを定義し、所定のアルゴリズムを用いてファイル群をクラス単位で均等になるようにグループ化する。ここで、所定のアルゴリズムとは、ファイル群を公倍数Ｍ個分のクラス｛Ｃ1，Ｃ2，…，ＣM｝に均等になるように配分するための関数である。
【００３５】
このアルゴリズムは、ユーザによって任意に設定可能である。具体的には、例えば、各ファイルのファイル名を表わす文字列から１つの整数が定まる十分一様なハッシュ関数ｈ（）を１つ決定し、公倍数Ｍを法とした合同（ｍｏｄ  Ｍ）により、Ｍ個のクラスに分類することとしてもよい。
【００３６】
より具体的には、例えば、ハッシュ関数の一つである「ＳＨＡ１（Ｓｅｃｕｒｅ  Ｈａｓｈ  Ａｌｇｏｒｉｔｈｍ  １）」を用いることとしてもよい。この場合、ファイル群をＭ個のクラス｛Ｃ1，Ｃ2，…，ＣM｝に均等に配分する関数Ｃ（）を「Ｃ（ファイル名）＝ＳＨＡ１（ファイル名）ｍｏｄ  Ｍ」のように定める。なお、「ＳＨＡ１」は公知技術のため詳細な説明を省略する。
【００３７】
クラス割当部３０３は、ファイル割当部３０２によってクラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、クラス単位で任意の台数から成る記憶装置に割り当てる機能を有する。このとき、所定のアルゴリズムに従って、各記憶装置に割り当てられるクラス数が均等になるようにファイル群をクラス単位で割り当てる。
【００３８】
ここで、初期状態の記憶装置の台数としてａ台が与えられたとする。この場合、クラス割当部３０３は、公倍数Ｍを台数ａで割ったＭ／ａ個のクラスを各記憶装置にそれぞれ割り当てる。なお、初期状態の台数は、例えば、図２に示した入力装置２２０をユーザが操作することで分散ストレージ管理装置１０１に直接入力することとしてもよく、また、ストレージシステム１００の設計時に予め設定されていてもよい。
【００３９】
また、クラス割当部３０３は、ファイル群を記憶させる記憶装置の使用台数を現在の台数（例えば、初期状態の台数）から他の台数に変更する場合、ファイル割当部３０２によってクラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、クラス単位で他の台数から成る記憶装置に割り当てる機能を有する。
【００４０】
具体的には、たとえば、記憶装置の台数を、再構成を予定している複数通りの台数｛ｍ1，ｍ2，…，ｍk｝のうち現在の台数ｍ1から他の台数ｍ2に変更する場合、ファイル群をｍ2台の記憶装置にクラス単位で十分均等に割り当てる。このとき、すべてのファイル群が変更前のｍ1台の記憶装置に記憶されている場合、クラスと変更前のｍ1台の各記憶装置との対応関係を有する割当テーブルを参照して割り当てをおこなう。
【００４１】
また、ファイル群に新たに追加する新規ファイルが含まれている場合には、ファイル割当部３０２により、新規ファイルを含むファイル群を公倍数Ｍ個分のクラスに再度割り当て、そのあと、クラス割当部３０３により、クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、クラス単位で他の台数から成る記憶装置に割り当てることとしてもよい。
【００４２】
ここで、割当テーブルとは、クラス割当部３０３による割当結果を示すものである（後述する図４参照）。この割当テーブルを参照することにより、各クラスの割当先の記憶装置を認識することができる。なお、詳細は後述するが、クラス割当部３０３による割当処理が完了すると、任意の手法によりファイルの転送処理が実行され、ファイル群がクラス単位で割当先の記憶装置に記憶されることとなる。
【００４３】
また、台数の変更の要否は、例えば、要求されるストレージ容量に基づいて自動判断することとしてもよい。具体的には、現在の台数に対して、要求されるストレージ容量が所定の閾値以上となった場合、台数を増やす変更指示を出力することとしてもよい。また、現在の台数に対して、要求されるストレージ容量が所定の閾値未満となった場合、台数を減らす変更指示を出力することとしてもよい。
【００４４】
さらに、ユーザが、要求されるストレージ容量を判断し、図２に示したキーボード２２１やマウス２２２などの入力装置２２０を操作することで台数の変更指示（変更後の記憶装置の台数を含む）を入力することとしてもよい。この場合、クラス割当部３０３は、上記変更指示に基づいて、台数の変更および変更内容を判断することとなる。
【００４５】
なお、変更対象となる記憶装置は、ユーザが任意に選択することとしてもよく、また、外部の要件から選択することとしてもよい。例えば、記憶装置の台数を減らすときに、割り当てられているクラス数が少ない記憶装置を優先して選択する。また、他の用途に必要となった記憶装置や故障した記憶装置が存在する場合には、その記憶装置を選択する。
【００４６】
ここで、クラス割当部３０３による割当処理の具体例について説明する。ここでは、変更前の記憶装置の台数をａ台とする。また、ファイル割当部３０２によってファイル群が割り当てられた公倍数Ｍ個分のクラス群が、ａ台の各記憶装置に均等になるように割り当てられている。具体的には、Ｍ／ａ個のクラスが各記憶装置に割り当てられている。
【００４７】
まず、記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合について説明する。クラス割当部３０３は、記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、ａ台の各記憶装置に割り当てられているＭ／ａ個のクラスのうち、（Ｍ／ａ−Ｍ／ｂ）個のクラスを、変更対象となる（ｂ−ａ）台の記憶装置にそれぞれ割り当てる。このとき、Ｍはａ，ｂの公倍数のため、上記（Ｍ／ａ）および（Ｍ／ａ−Ｍ／ｂ）は必ず割り切れる。
【００４８】
要するに、変更前のａ台の記憶装置に割り当てられているクラスの一部を、台数変更により増設される（ｂ−ａ）台の記憶装置に割り当てることで、変更後のｂ台の記憶装置に均等にクラスが割り当てられた状態にする。これにより、ａ台からｂ台に変更する場合のファイルの再配置を最小化することができる。なお、記憶装置の台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合の具体例は、後述する実施例１において説明する。
【００４９】
つぎに、記憶装置の台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合について説明する。クラス割当部３０３は、記憶装置の台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合、変更対象（縮退対象）となる（ｂ−ａ）台の記憶装置に割り当てられている（Ｍ×（１−ａ／ｂ））個のクラスを、ａ台の記憶装置に（Ｍ／ａ−Ｍ／ｂ）個のクラスずつそれぞれ割り当てる。
【００５０】
要するに、変更により減らされる（ｂ−ａ）台の記憶装置に割り当てられているクラスを、残余のａ台の記憶装置に均等に割り当てることにより、変更後のａ台の記憶装置に均等にクラスが割り当てられた状態にする。これにより、ｂ台からａ台に減らす場合のファイルの再配置を最小化することができる。なお、記憶装置の台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合の具体例は、後述する実施例２において説明する。
【００５１】
作成部３０４は、クラス割当部３０３によって割り当てられた割当結果に基づいて、ファイル群が十分均等に割り当てられたクラスと、該各クラスが割り当てられている記憶装置との対応関係を有する割当テーブルを作成する機能を有する。ここで、割当テーブルの具体例について説明する。
【００５２】
図４は、割当テーブルの具体例を示す説明図（その１）である。図４において、割当テーブル４００は、１２個のクラスＣ1〜Ｃ12を、２台のディスク装置Ｄ1，Ｄ2（図１参照）に均等に割り当てた割当結果を表わしている。これは、公倍数Ｍが１２、現在の記憶装置の使用台数が２台の場合の例である。
【００５３】
具体的には、各クラスＣ1〜Ｃ12と、該各クラスＣ1〜Ｃ12が割り当てられているディスク装置との対応関係が表わされている。より具体的には、クラスＣ1〜Ｃ6はディスク装置Ｄ1に割り当てられており、クラスＣ7〜Ｃ12はディスク装置Ｄ2に割り当てられていることを表わしている。なお、図示は省略するが、各クラスＣ1〜Ｃ12には、ファイル群が十分均等に割り当てられている。
【００５４】
配信部３０５は、作成部３０４によって作成された割当テーブルを、記憶装置に対するファイルのリード／ライトを制御する情報処理装置に配信する機能を有する。この情報処理装置は、記憶装置を備えたコンピュータ装置であり、ネットワーク１１０を介して分散ストレージ管理装置１０１と接続されている。具体的には、例えば、情報処理装置は、図１に示したサーバ１０２−１〜１０２−ｎである。
【００５５】
ここで、情報処理装置は、分散ストレージ管理装置１０１から配信される割当テーブルを受信するコンピュータ装置である。また、情報処理装置は、この割当テーブルを参照することにより、記憶装置に対するファイルのリード／ライトを制御する。なお、割当テーブルを参照した記憶装置に対するファイルのリード／ライトについては、後述する実施例３において説明する。
【００５６】
ここで、ファイルの転送処理の具体例について説明する。まず、クラスの割当先が変更される場合について説明する。この場合、配信部３０５により、変更前の割当先の記憶装置を制御する情報処理装置（転送元）に、転送対象のファイルおよび転送先の情報処理装置を特定する転送要求を送信する。
【００５７】
このあと、転送元の情報処理装置は、転送要求を受信し、その転送要求から転送対象のファイルおよび転送先の情報処理装置を特定する。そして、転送対象のファイルを転送先の情報処理装置に転送する。これにより、転送対象のファイルが、転送元の情報処理装置から転送先の情報処理装置に転送される。
【００５８】
つぎに、新規ファイルが追加される場合について説明する。この場合、配信部３０５により、新規ファイルの割当先の記憶装置を制御する情報処理装置（要求先）に、新規ファイルおよび新規ファイルの保持要求を送信する。このあと、要求先の情報処理装置は、保持要求を受信し、新規ファイルを記憶装置に記憶する。
【００５９】
他の例として、配信部３０５により、任意の情報処理装置（要求先）に、新規ファイルおよび新規ファイルの保持要求を送信することとしてもよい。この場合、要求先の情報処理装置において、所定のアルゴリズムから新規ファイルが属するクラスを特定し、そのクラスと割当テーブルとを照らし合わせることで、そのクラスが属する記憶装置を特定することとなる（後述する実施例３を参照。）。
【００６０】
また、作成部３０４は、再構成を予定している記憶装置の複数通りの台数ごとに、公倍数Ｍ個分のクラス群を各記憶装置に均等になるように割り当てた割当結果を表わす割当テーブルを作成することとしてもよい。つまり、複数通りの台数ごとに、記憶装置が再構成された場合の各クラスと各記憶装置との対応関係を有するテーブル表を予め作成する。
【００６１】
そして、この割当テーブルを各情報処理装置に配信することにより、記憶装置が再構成されたときに、その都度、そのときの記憶装置の台数に応じた割当テーブルを作成・配信する必要がなくなる。なお、複数通りの台数ごとの割当結果を表わす割当テーブルの具体例については、図１２を用いて後述する。
【００６２】
ここで、複数通りの台数ごとの割当結果を表わす割当テーブルを作成する具体的な処理手順について説明する。ここでは、複数通りの台数｛ｍ1，ｍ2，…，ｍk｝は、昇順（または、降順）に並べられてあることとする。まず、取得部３０１により、複数通りの台数｛ｍ1，ｍ2，…，ｍk｝の公倍数Ｍを取得する。このあと、ファイル割当部３０２により、ファイル群を公倍数Ｍ個分のクラスに十分均等に割り当てる。
【００６３】
そして、クラス割当部３０３により、ａ＝ｍi、ｂ＝ｍi+1として、ｉ＝１からｉ＝ｋ−１まで、記憶装置の台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する割当処理を繰り返し実行する。最後に、作成部３０４により、クラス割当部３０３による複数の割当結果に基づいて、複数通りの台数ごとの割当結果を表わす割当テーブルを作成する。
【００６４】
（分散ストレージ管理装置の分散ストレージ処理手順）
つぎに、実施の形態１にかかる分散ストレージ管理装置１０１の分散ストレージ処理手順について説明する。図５は、実施の形態１にかかる分散ストレージ管理装置の分散ストレージ処理手順を示すフローチャートである。図５のフローチャートにおいて、まず、取得部３０１により、再構成を予定している記憶装置の台数の公倍数Ｍを取得したか否かを判断する（ステップＳ５０１）。
【００６５】
ここで、公倍数Ｍを取得するのを待って（ステップＳ５０１：Ｎｏ）、取得した場合（ステップＳ５０１：Ｙｅｓ）、ファイル割当部３０２により、所定のアルゴリズムに従って、記憶装置に記憶されているファイル群を、取得部３０１によって取得された公倍数Ｍ個分のクラスに割り当てる（ステップＳ５０２）。そして、クラス割当部３０３により、公倍数Ｍ個分のクラスを、現在の使用台数の記憶装置に均等になるように割り当てる（ステップＳ５０３）。
【００６６】
つぎに、ステップＳ５０３において割り当てられた割当結果に基づいて、ファイルの転送処理を実行する（ステップＳ５０４）。このあと、複数通りの台数のうち現在の台数とは異なる他の台数に変更する記憶装置の台数の変更指示を待つ（ステップＳ５０５：Ｎｏ）。
【００６７】
ここで、変更指示があった場合（ステップＳ５０５：Ｙｅｓ）、クラス割当部３０３により、ファイル割当部３０２によってクラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、クラス単位で他の台数から成る記憶装置に割り当てる（ステップＳ５０６）。最後に、ステップＳ５０６において割り当てられた割当結果に基づいて、ファイルの転送処理を実行して（ステップＳ５０７）、本フローチャートによる一連の処理を終了する。
【００６８】
以上説明した実施の形態１によれば、ファイル群を公倍数Ｍ個分のクラスに十分均等に割り当てることにより、ファイルの転送処理をクラス単位でおこなうことができる。具体的には、クラスを論理ディスクに割り当てることで、記憶装置の台数変更時に、クラスに属するファイルを一括して移動させることができる。これにより、記憶装置の使用台数を変更するときのファイルの再配置を少なくすることができる。
【００６９】
また、クラス群の割当結果を表わす割当テーブルを、記憶装置を制御する情報処理装置に配信することができる。これにより、情報処理装置は、割当テーブルを参照して、記憶装置に対するファイルのリード／ライトを制御することができる。すなわち、新規ファイルの追加やファイル参照などの運用を実施する際に、分散ストレージ管理装置１０１に対する割当結果の問い合わせが不要となりボトルネックを防ぐことができる。
【００７０】
さらに、再構成を予定している記憶装置の複数通りの台数ごとに、クラス群の割当結果を表わす割当テーブルを作成し、その割当テーブルを情報処理装置に配信することができる。これにより、記憶装置の台数を変更するときに、その都度、そのときの記憶装置の台数に応じた割当テーブルを作成・配信する必要がなくなる。
【００７１】
また、記憶装置の台数の変化に関わらず、クラスとファイルとの関係は変化しない。このため、台数変更時のファイル群のクラス割り当てに変更が不要となり、クラスとファイルとの対応関係を効率的に管理することができる。また、記憶装置の台数変更時におけるファイルごとのハッシュ値の再計算が不要となるため、再構成にかかる処理を削減することができる。
【００７２】
なお、実施の形態１では、ファイル数に基づいて、ファイル群を公倍数Ｍ個分のクラスに十分均等に割り当てることとしたが、個々のファイルのデータ量に基づいて、ファイル群を公倍数Ｍ個分のクラスに均等に割り当てることとしてもよい。具体的には、各クラスに割り当てられたファイルの総データ量が十分均等になるように、ファイル群を公倍数Ｍ個分のクラスに割り当てることとしてもよい。
【実施例１】
【００７３】
つぎに、上述した実施の形態１の実施例１について説明する。実施例１では、図１に示したストレージシステム１００において、ディスク装置Ｄ1〜Ｄnの台数を２台（ａ＝２）から４台（ｂ＝４）に変更する場合を例に挙げて説明する。つまり、要求されるストレージ容量の増大に応じて、ディスク装置Ｄ1〜Ｄnの台数を増やす。
【００７４】
（稼働前準備）
まず、ストレージサービスの運用を開始する前の稼働前準備について説明する。稼働前準備として、ストレージシステム１００の管理者により、再構成を予定しているディスク装置Ｄ1〜Ｄnの複数通りの台数を設定する。ここでは、複数通りの台数｛２，４，６｝が設定されている。この結果、取得部３０１により、これら複数通りの台数｛２，４，６｝の最小公倍数Ｍ（Ｍ＝１２）が取得される。
【００７５】
つぎに、最小公倍数Ｍ個分、すなわち、１２個分のクラスＣ1〜Ｃ12を定義し、ファイル割当部３０２により、ファイル群を各クラスＣ1〜Ｃ12に十分均等に割り当てる。ここでは、ファイル群を２４個のファイルｆ1〜ｆ24とする。具体的には、ファイル割当部３０２は、各クラスＣ1〜Ｃ12に２個ずつのファイルを割り当てることとなる。
【００７６】
ここで、ｆ1〜ｆ24は、各ファイルに付与されているファイル番号である。また、Ｃ1〜Ｃ12は、各クラスに付与されているクラス番号である。このあと、初期状態でのディスク装置Ｄ1〜Ｄnの台数ａを設定する。具体的には、例えば、複数通りの台数｛２，４，６｝の中からユーザが任意に選択する。ここでは、２台（ａ＝２）のディスク装置Ｄ1，Ｄ2が設定されている。
【００７７】
（分散ストレージ処理の概要）
以下、図６を用いて実施例１における分散ストレージ処理の概要について説明する。図６は、実施の形態１の実施例１における分散ストレージ処理の概要を示す説明図である。図６において、サーバ１０２−１，１０２−２に備えられたディスク装置Ｄ1，Ｄ2にファイルｆ1〜ｆ24が記憶されている。
【００７８】
ここでは、２台のディスク装置Ｄ1，Ｄ2にファイルｆ1〜ｆ24がクラスＣ1〜Ｃ12単位で均等に記憶されている。具体的には、例えば、所定のアルゴリズムに従って、クラス番号の小さいものから６クラスずつ、ディスク番号の小さいディスク装置Ｄ1，Ｄ2へ順に割り当てる。これにより、ディスク装置Ｄ1にはクラスＣ1〜Ｃ6が、ディスク装置Ｄ2にはクラスＣ7〜Ｃ12が割り当てられる。この結果、ディスク装置Ｄ1，Ｄ2に、ファイルｆ1〜ｆ24が１２個ずつ均等に記憶されることとなる。
【００７９】
このあと、ディスク装置Ｄ1，Ｄ2の台数を、現在の２台から４台に変更する。ここでは、サーバ１０２−３，１０２−４に備えられたディスク装置Ｄ3，Ｄ4を追加する。このとき、クラス割当部３０３により、２台のディスク装置Ｄ1，Ｄ2にそれぞれ割り当てられている６個のクラスのうち、３個のクラスを、変更対象となる２台のディスク装置Ｄ3，Ｄ4にそれぞれ割り当てる。
【００８０】
具体的には、例えば、ディスク装置Ｄ1，Ｄ2にそれぞれ割り当てられている６個（Ｍ／ａ）のクラスのうち、クラス番号の大きいものから３個（Ｍ／ａ−Ｍ／ｂ）のクラスを再配置対象として選択する。すなわち、ディスク装置Ｄ1に割り当てられているクラスＣ4，Ｃ5，Ｃ6、およびディスク装置Ｄ2に割り当てられているクラスＣ10，Ｃ11，Ｃ12を再配置対象として選択する。
【００８１】
このあと、再配置対象として選択された６個（Ｍ×（１−ａ／ｂ））のクラスを、クラス番号の小さいものから順に３クラスずつ（Ｍ／ｂ）、ディスク番号が小さいものから順にディスク装置Ｄ3，Ｄ4に割り当てる。ここでは、クラスＣ4，Ｃ5，Ｃ6がディスク装置Ｄ3に、クラスＣ10，Ｃ11，Ｃ12がディスク装置Ｄ4に割り当てられる。
【００８２】
最後に、クラス割当部３０３による割当結果に基づいて、各クラスに属するファイルを対応するディスク装置に転送する。この結果、各ディスク装置においてファイルが記憶される。具体的には、例えば、クラスＣ4がディスク装置Ｄ3に割り当てられた結果、クラスＣ4に属するファイルｆ4，ｆ16がディスク装置Ｄ3に転送される。
【００８３】
（実施例１における分散ストレージ処理手順）
つぎに、実施例１における分散ストレージ処理手順について説明する。図７は、実施の形態１の実施例１における分散ストレージ処理手順を示すフローチャートである。図７のフローチャートにおいて、まず、再構成を予定しているディスク装置Ｄ1〜Ｄnの複数通りの台数の入力を受け付けたか否かを判断する（ステップＳ７０１）。
【００８４】
ここで、複数通りの台数の入力を待って（ステップＳ７０１：Ｎｏ）、入力を受け付けた場合（ステップＳ７０１：Ｙｅｓ）、取得部３０１により、ステップＳ７０１において入力された複数通りの台数｛２，４，６｝の最小公倍数を算出することにより、最小公倍数Ｍ（Ｍ＝１２）を取得する（ステップＳ７０２）。
【００８５】
このあと、ファイル割当部３０２により、ａ台（ａ＝２）のディスク装置Ｄ1，Ｄ2に記憶されているファイルｆ1〜ｆ24を、ステップＳ７０２において取得された最小公倍数Ｍ個分、すなわち、１２個のクラスＣ1〜Ｃ12に十分均等に割り当てる（ステップＳ７０３）。そして、クラス割当部３０３により、クラスＣ1〜Ｃ12を、ａ台（ａ＝２）のディスク装置Ｄ1，Ｄ2に均等になるように割り当てる（ステップＳ７０４）。
【００８６】
そして、ステップＳ７０４におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、ファイルｆ1〜ｆ24をクラス単位でａ台（ａ＝２）のディスク装置Ｄ1，Ｄ2に転送する（ステップＳ７０５）。
【００８７】
このあと、使用台数の変更指示を待って（ステップＳ７０６：Ｎｏ）、ａ台（ａ＝２）からｂ台（ｂ＝４）に変更する変更指示を受け付けた場合（ステップＳ７０６：Ｙｅｓ）、クラス割当部３０３により、ａ台のディスク装置Ｄ1，Ｄ2にそれぞれ割り当てられているＭ／ａ個のクラスのうち、（Ｍ／ａ−Ｍ／ｂ）個のクラスを、変更対象となる（ｂ−ａ）台のディスク装置Ｄ3，Ｄ4にそれぞれ割り当てる（ステップＳ７０７）。
【００８８】
最後に、ステップＳ７０７におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、再配置対象として選択されたファイルｆ4〜ｆ6，ｆ16〜ｆ18，ｆ10〜ｆ12，ｆ22〜ｆ24をクラス単位で（ｂ−ａ）台のディスク装置Ｄ3，Ｄ4に転送して（ステップＳ７０８）、本フローチャートによる一連の処理を終了する。
【００８９】
実施例１によれば、ディスク装置Ｄ1〜Ｄnの台数をａ台からｂ台（ただし、ａ＜ｂ）に変更するときのファイルの再配置を最小化することができる。具体的には、ファイルの再配置を、（Ｍ／ａ−Ｍ／ｂ）個のクラス単位でおこなうことにより、再配置が必要となるファイル数を最小にすることができる。
【００９０】
例えば、ディスク装置Ｄ1〜Ｄnの台数を９台から１０台に変更する場合、［背景技術］で説明したアルゴリズム・ベースの技術によれば、全ファイル数の９０％のファイルの再配置が必要となるが、実施例１で説明した手法によれば、ファイルの再配置が必要になるのは、理論上の最小値である１０％となる。
【実施例２】
【００９１】
つぎに、上述した実施の形態１の実施例２について説明する。実施例２では、図１に示したストレージシステム１００において、ディスク装置Ｄ1〜Ｄnの台数を４台（ｂ＝４）から２台（ａ＝２）に変更する場合を例に挙げて説明する。つまり、要求されるストレージ容量の減少に応じて、ディスク装置Ｄ1〜Ｄnの台数を減らす。なお、実施例１において説明した箇所と同一箇所については、図示および説明を省略する。
【００９２】
（分散ストレージ処理の概要）
以下、図８を用いて実施例２における分散ストレージ処理の概要について説明する。図８は、実施の形態１の実施例２における分散ストレージ処理の概要を示す説明図である。図８において、４台のディスク装置Ｄ1〜Ｄ4にファイルｆ1〜ｆ24がクラスＣ1〜Ｃ12単位で均等に記憶されている。
【００９３】
このあと、ディスク装置Ｄ1〜Ｄ4の台数を、現在の４台から２台に変更する。ここでは、４台のディスク装置Ｄ1〜Ｄ4のうち、ディスク番号の大きいディスク装置Ｄ3，Ｄ4を変更対象とする。このとき、クラス割当部３０３により、変更対象となる２台のディスク装置Ｄ3，Ｄ4に割り当てられている６個のクラスを、２台のディスク装置Ｄ1，Ｄ2に均等になるように割り当てる。
【００９４】
具体的には、例えば、変更対象となるディスク装置Ｄ3，Ｄ4にそれぞれ割り当てられている３個（Ｍ×（１／ａ−１／ｂ））のクラスを再配置対象として選択する。すなわち、ディスク装置Ｄ3に割り当てられているクラスＣ4，Ｃ5，Ｃ6、およびディスク装置Ｄ4に割り当てられているクラスＣ10，Ｃ11，Ｃ12を再配置対象として選択する。
【００９５】
このあと、再配置対象として選択された６個（Ｍ×（１−ａ／ｂ））のクラスＣ4〜Ｃ6およびＣ10〜Ｃ12を、クラス番号の小さいものから順に３クラス（Ｍ／ａ−Ｍ／ｂ）ずつ、残余のディスク装置Ｄ1，Ｄ2にディスク番号が小さいものから順にそれぞれ割り当てる。ここでは、クラスＣ4，Ｃ5，Ｃ6がディスク装置Ｄ1に、クラスＣ10，Ｃ11，Ｃ12がディスク装置Ｄ2に割り当てられる。
【００９６】
最後に、クラス割当部３０３による割当結果に基づいて、各クラスに属するファイルを対応するディスク装置に転送する。この結果、各ディスク装置においてファイルが記憶される。具体的には、例えば、クラスＣ4がディスク装置Ｄ1に割り当てられた結果、クラスＣ4に属するファイルｆ4，ｆ16がディスク装置Ｄ1に転送される。
【００９７】
（実施例２における分散ストレージ処理手順）
つぎに、実施例２における分散ストレージ処理手順について説明する。ここでは、ディスク装置Ｄ1〜Ｄnの台数を減らす変更指示があった場合における、それ以降の処理手順について説明する。図９は、実施の形態１の実施例２における分散ストレージ処理手順を示すフローチャートである。
【００９８】
図９のフローチャートにおいて、まず、使用台数の変更指示を待って（ステップＳ９０１：Ｎｏ）、ｂ台（ｂ＝４）からａ台（ａ＝２）に変更する変更指示を受け付けた場合（ステップＳ９０１：Ｙｅｓ）、クラス割当部３０３により、変更対象となる（ｂ−ａ）台のディスク装置Ｄ3，Ｄ4に割り当てられている（Ｍ×（１−ａ／ｂ））個のクラスを、ａ台のディスク装置Ｄ1，Ｄ2に（Ｍ／ａ−Ｍ／ｂ）個のクラスずつそれぞれ割り当てる（ステップＳ９０２）。
【００９９】
最後に、ステップＳ９０２におけるクラス割当部３０３による割当結果に基づいて、再配置対象として選択されたファイルｆ4〜ｆ6，ｆ16〜ｆ18，ｆ10〜ｆ12，ｆ22〜ｆ24をクラス単位でａ台のディスク装置Ｄ1，Ｄ2に転送して（ステップＳ９０３）、本フローチャートによる一連の処理を終了する。
【０１００】
実施例２によれば、ディスク装置Ｄ1〜Ｄnの台数をｂ台からａ台（ただし、ａ＜ｂ）に変更するときのファイルの再配置を最小化することができる。具体的には、ファイルの再配置を、（Ｍ／ａ−Ｍ／ｂ）個のクラス単位でおこなうことにより、再配置が必要となるファイル数を最小にすることができる。
【実施例３】
【０１０１】
つぎに、上述した実施の形態１の実施例３について説明する。実施例３では、作成部３０４によって作成された割当テーブルを利用した、サーバ１０２−１〜１０２−ｎの運用例について説明する。図１０は、サーバの運用例の概要を示す説明図である。
【０１０２】
図１０において、サーバ１０２−１，１０２−２に備えられたディスク装置Ｄ1，Ｄ2にクラスＣ1〜Ｃ12が均等に割り当てられている。サーバ１０２−１，１０２−２は、図４に示した割当テーブル４００を参照することにより、ディスク装置Ｄ1，Ｄ2に対するファイルのリード／ライトを制御する。
【０１０３】
ここで、新規ファイルｆiの書込（ライト）要求があった場合におけるサーバ１０２−１〜１０２−ｎの処理手順について説明する。ここでは、外部のコンピュータ装置（例えば、図１に示した外部装置１０３−１〜１０３−ｎ）からサーバ１０２−１に新規ファイルｆnの書込要求があった場合について説明する。なお、割当テーブル４００には、新規ファイルｆiの割当先のクラスを示す情報が含まれている。
【０１０４】
まず、サーバ１０２−１は、外部のコンピュータ装置から新規ファイルｆiの書込要求を受信した場合（１）、予め決めてあるハッシュ関数により、新規ファイルｆiの割当先のクラスＣ1〜Ｃ12を判断する（２）。さらに、割当テーブル４００を参照することにより、新規ファイルｆiが割り当てられているクラスの割当先のディスク装置Ｄ1，Ｄ2を判断する（３）。
【０１０５】
このとき、そのクラス（例えば、クラスＣ1）の割当先がディスク装置Ｄ1であった場合には、新規ファイルｆiをディスク装置Ｄ1に書き込む（４）。一方、そのクラス（例えば、クラスＣ12）の割当先がディスク装置Ｄ2であった場合には、書込要求とともに新規ファイルｆiをサーバ１０２−２に転送する（５）。
【０１０６】
つぎに、ファイルｆjの参照（リード）要求があった場合におけるサーバ１０２−１〜１０２−ｎの処理手順について説明する。ここでは、外部のコンピュータ装置からサーバ１０２−１にファイルｆjの参照要求があった場合について説明する。なお、割当テーブル４００には、新規ファイルｆjの割当先のクラスを示す情報が含まれている。
【０１０７】
まず、サーバ１０２−１は、外部のコンピュータ装置からファイルｆjの参照要求を受信した場合（６）、予め決めてあるハッシュ関数により、ファイルｆjの割当先のクラスＣ1〜Ｃ12を判断する（７）。さらに、割当テーブル４００を参照することにより、ファイルｆjが割り当てられているクラスの割当先のディスク装置Ｄ1，Ｄ2を判断する（８）。
【０１０８】
このとき、そのクラス（例えば、クラスＣ1）の割当先がディスク装置Ｄ1であった場合には、ファイルｆjをディスク装置Ｄ1から読み出す（９）。一方、そのクラス（例えば、クラスＣ12）の割当先がディスク装置Ｄ2であった場合には、ファイルｆjの参照要求をサーバ１０２−２に転送する（１０）。
【０１０９】
（サーバの情報処理手順）
つぎに、サーバ１０２−１〜１０２−ｎの情報処理手順について説明する。ここでは、新規ファイルｆiの書込要求があった場合における書込処理手順を例に挙げて説明する。図１１は、サーバの書込処理手順を示すフローチャートである。
【０１１０】
図１１のフローチャートにおいて、まず、インターフェースにより、外部のコンピュータ装置から新規ファイルｆiの書込要求を受信したか否かを判断する（ステップＳ１１０１）。ここで、書込要求を受信するのを待って（ステップＳ１１０１：Ｎｏ）、受信した場合（ステップＳ１１０１：Ｙｅｓ）、割当テーブル４００を参照して、新規ファイルｆiの割当先のクラスＣ1〜Ｃ12を判断する（ステップＳ１１０２）。
【０１１１】
このあと、ステップＳ１１０２において判断されたクラスの割当先のディスク装置Ｄ1，Ｄ2を判断する（ステップＳ１１０３）。ここで、割当先のディスク装置Ｄ1，Ｄ2が自装置のディスク装置Ｄ1であった場合（ステップＳ１１０４：Ｙｅｓ）、ディスクドライブにより、新規ファイルｆiをディスク装置Ｄ1に書き込んで（ステップＳ１１０５）、本フローチャートによる一連の処理を終了する。
【０１１２】
また、ステップＳ１１０４において、自装置のディスク装置Ｄ1ではなかった場合（ステップＳ１１０４：Ｎｏ）、インターフェースにより、書込要求とともに新規ファイルｆiをサーバ１０２−２に転送して（ステップＳ１１０６）、本フローチャートによる一連の処理を終了する。
【０１１３】
実施例３によれば、サーバ１０２−１〜１０２−ｎは、分散ストレージ管理装置１０１から配信される割当テーブル４００を参照して、ディスク装置Ｄ1〜Ｄnに対するファイルのリード／ライトを制御することができる。これにより、通常の運用時に、分散ストレージ管理装置１０１に対する割当結果の問い合わせが不要となりボトルネックを防ぐことができる。
【０１１４】
また、参照する割当テーブルとして、再構成を予定しているディスク装置の複数通りの台数ごとに、公倍数Ｍ個分のクラス群を各ディスク装置に均等になるように割り当てた割当結果を表わす割当テーブルを用いることとしてもよい。
【０１１５】
図１２は、割当テーブルの具体例を示す説明図（その２）である。図１２において、割当テーブル１２００は、再構成を予定しているディスク装置Ｄ1〜Ｄnの複数通りの台数｛２，４，６｝ごとに、最小公倍数Ｍ個分の１２個のクラスをディスク装置Ｄ1〜Ｄ6に均等に割り当てた割当結果を表している。
【０１１６】
具体的には、例えば、ディスク装置Ｄ1〜Ｄnの台数が２台のときには、クラスＣ1〜Ｃ6がディスク装置Ｄ1、クラスＣ7〜Ｃ12がディスク装置Ｄ2に割り当てられている。また、ディスク装置Ｄ1〜Ｄnの台数が４台のときには、クラスＣ1〜Ｃ3がディスク装置Ｄ1、クラスＣ4〜Ｃ6がディスク装置Ｄ3、クラスＣ7〜Ｃ9がディスク装置Ｄ2、クラスＣ10〜Ｃ12がディスク装置Ｄ4に割り当てられている。
【０１１７】
これにより、サーバ１０２−１〜１０２−ｎは、ディスク装置Ｄ1〜Ｄnの台数に応じて、割当テーブル１２００を参照することにより、ディスク装置Ｄ1〜Ｄnに対するファイルのリード／ライトを制御することができる。また、分散ストレージ管理装置１０１は、ディスク装置Ｄ1〜Ｄnの台数変更時に、その都度、ディスク装置Ｄ1〜Ｄnの台数に応じた割当テーブルを作成・配信する必要がなくなる。
【０１１８】
（実施の形態２）
つぎに、実施の形態２にかかる分散ストレージ管理装置１０１について説明する。実施の形態１では、再構成を予定している記憶装置の台数を予め決めておく必要があったが、実施の形態２では、再構成を予定している記憶装置の台数を決めることなくファイルの再配置を最小化する手法を提案する。
【０１１９】
実施の形態１で説明した手法では、再構成を予定している記憶装置の台数を決めることが難しい状況や、予定外の台数で再構成をおこなわなければならない状況には対応できない。例えば、再構成を予定している記憶装置の台数が｛２，４，６｝の３通りで、その公倍数Ｍとして「１２」が選ばれているとする。
【０１２０】
このような場合、以降において変更可能な記憶装置の台数は「１２」の約数に限られ、それ以外の台数（例えば、５台）の記憶装置により再構成することはできない。そこで、実施の形態２では、再構成を予定している記憶装置の台数を予め指定することなく、記憶装置の台数変更時に、再配置が必要となるファイル数を少なくする手法を提案する。
【０１２１】
以下、実施の形態２にかかる分散ストレージ管理装置１０１の制御部（取得部３０１〜配信部３０５）の具体的な処理内容について説明する。なお、実施の形態１において説明した箇所と同一箇所については、同一符号を付して説明を省略する。
【０１２２】
まず、取得部３０１は、任意のファイル群を割り当てるクラスのクラス数Ｍを取得する。このクラス数Ｍは、任意の固定値である。具体的には、例えば、ストレージシステム１００の運用開始時の使用可能な記憶装置の最大台数の一定倍（例えば、８倍、１０倍など）の数を用いることとしてもよい。
【０１２３】
ここで、取得されるクラス数Ｍが大きいほど各記憶装置に割り当てるクラス数のばらつきが小さくなり、クラス数Ｍが小さいほど各記憶装置に割り当てるクラス数のばらつきが大きくなる。なお、クラス数Ｍは、例えば、図２に示した入力装置２２０をユーザが操作することで分散ストレージ管理装置１０１に直接入力することとしてもよく、また、不図示の外部装置から取得することとしてもよい。
【０１２４】
ファイル割当部３０２は、所定のアルゴリズムに従って、任意のファイル群を、取得部３０１によって取得されたクラス数Ｍ個分のクラスに十分均等に割り当てる。具体的には、例えば、各ファイルのファイル名を表わす文字列から１つの整数が定まる十分一様なハッシュ関数ｈ（）を１つ決定し、クラス数Ｍを法とした合同（ｍｏｄ  Ｍ）により、Ｍ個のクラスに分類する。
【０１２５】
クラス割当部３０３は、ファイル割当部３０２によってファイル群がそれぞれ割り当てられたクラス数Ｍ個分のクラスを、現在使用されている複数台の記憶装置に均等になるように割り当てる。具体的には、まず、各記憶装置に割り当てられる最大クラス数と最小クラス数との差は「高々１」である条件を満たすアルゴリズムを用いて、各記憶装置に割り当てるクラス数を決定する。
【０１２６】
より具体的には、例えば、上記条件を満たす以下のアルゴリズムＡ（Ａ−１，Ａ−２）を用いて、各記憶装置に割り当てるクラス数を決定することができる。ここで、現在使用されている記憶装置の台数をａ台とする。
【０１２７】
（Ａ−１）クラス数Ｍを記憶装置の台数ａで割ったときの商を「ｑ」、余りを「ｒ」とする。
（Ａ−２）各記憶装置に付与されているディスク番号（例えば、Ｄ1〜Ｄn）の小さいものからｒ台の記憶装置に割り当てるクラス数を（ｑ＋１）個、残余の記憶装置に割り当てるクラス数をｑ個に決定する。
【０１２８】
このあと、任意のアルゴリズムを用いて、ａ台の記憶装置に上記決定されたクラス数のクラスをそれぞれ割り当てる。具体的には、例えば、クラス番号の小さいクラスから順に、ディスク番号の小さい記憶装置に割り当てることとしてもよい。
【０１２９】
また、クラス割当部３０３は、記憶装置の使用台数をａ台からｂ台に変更する場合（ただし、ａ＜ｂ）、まず、以下の条件（１）〜（３）を満たすアルゴリズムを用いて、各記憶装置に割り当てるクラス数を決定する。
【０１３０】
（１）各記憶装置に割り当てられる最大クラス数と最小クラス数との差は「高々１」である。
（２）変更後（増設後）において、増設対象の記憶装置に割り当てるクラス数は、既存の記憶装置のクラス数以下である。
（３）既存の記憶装置のクラス数は、変更前（増設前）に比べて増加しない。
【０１３１】
より具体的には、例えば、上記条件（１）〜（３）を満たす以下のアルゴリズムＢ（Ｂ−１，Ｂ−２，Ｂ−３）を用いて、各記憶装置に割り当てるクラス数を決定することができる。
【０１３２】
（Ｂ−１）クラス数Ｍを変更後（増設後）の記憶装置の台数ｂで割ったときの商を「ｑ1」、余りを「ｒ1」とする。
（Ｂ−２）増設対象となる（ｂ−ａ）台の記憶装置に割り当てられているクラス数を０個として、ｂ台の記憶装置を割り当てられているクラス数が降順となるようにソートする。
（Ｂ−３）ソートされたｂ台の記憶装置の先頭からｒ1台の記憶装置に割り当てるクラス数を（ｑ1＋１）個、残余の記憶装置に割り当てるクラス数をｑ1個に決定する。
【０１３３】
つぎに、上記アルゴリズムＢに従って各記憶装置のクラス数を決定した結果、増設後においてクラス数が減る記憶装置に割り当てられているクラスの中から再配置対象クラスを選択する。具体的には、例えば、クラス数が減る記憶装置に割り当てられているクラスのうち、クラス番号が大きいものから順に再配置対象クラスとして選択することとしてもよい。
【０１３４】
最後に、任意のアルゴリズムに従って、再配置対象クラスを、上記アルゴリズムＢに従って決定されたクラス数分だけ増設対象の記憶装置に割り当てる。具体的には、たとえば、再配置対象クラスのうちクラス番号の小さいクラスから順に、増設対象の記憶装置のうちディスク番号の小さい記憶装置に順に割り当てることとしてもよい。
【０１３５】
これにより、記憶装置の使用台数をａ台からｂ台に増やす場合におけるファイルの再配置を最小化することができる。なお、記憶装置の台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合の具体例は、後述する実施の形態２の実施例１において説明する。
【０１３６】
また、クラス割当部３０３は、記憶装置の使用台数をｂ台からａ台に変更する場合（ただし、ａ＜ｂ）、まず、以下の条件（４）および（５）を満たすアルゴリズムを用いて、各記憶装置に割り当てるクラス数を決定する。
【０１３７】
（４）各記憶装置に割り当てられる最大クラス数と最小クラス数との差は「高々１」である。
（５）既存の記憶装置のうち、縮退対象の記憶装置以外の記憶装置のクラス数は、変更前（縮退前）に比べて減少しない。
【０１３８】
より具体的には、例えば、上記条件（４）および（５）を満たす以下のアルゴリズムＣ（Ｃ−１，Ｃ−２，Ｃ−３）を用いて、各記憶装置に割り当てるクラス数を決定することができる。
【０１３９】
（Ｃ−１）クラス数Ｍを変更後（縮退後）の記憶装置の台数ａで割ったときの商を「ｑ2」、余りを「ｒ2」とする。
（Ｃ−２）変更後（縮退後）のａ台の記憶装置を、変更前（縮退前）の時点で割り当てられているクラス数が降順となるようにソートする。
（Ｃ−３）ソートされたａ台の記憶装置の先頭からｒ2台の記憶装置に割り当てるクラス数を（ｑ2＋１）個、残余の記憶装置に割り当てるクラス数をｑ2個に決定する。
【０１４０】
つぎに、縮退対象の記憶装置に割り当てられているクラスを再配置対象クラスとして選択する。最後に、任意のアルゴリズムに従って、再配置対象クラスを、上記アルゴリズムＣに従って決定されたクラス数分だけ変更後（縮退後）の記憶装置に割り当てる。具体的には、例えば、再配置対象クラスのうちクラス番号の小さいクラスから順に、変更後（縮退後）の記憶装置のうちディスク番号の小さい記憶装置に順に割り当てることとしてもよい。
【０１４１】
これにより、記憶装置の使用台数をｂ台からａ台に減らす場合におけるファイルの再配置を最小化することができる。なお、記憶装置の台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合の具体例は、後述する実施の形態２の実施例２において説明する。
【０１４２】
以上説明した実施の形態２によれば、再構成を予定している記憶装置の台数を予め指定することなく、記憶装置の台数変更時におけるファイルの再配置を最小化することができる。この結果、再構成を予定している記憶装置の台数を決めることが難しい状況や、予定外の台数で再構成をおこなわなければならない状況に柔軟に対応することができる。
【０１４３】
なお、実施の形態２の手法では、各記憶装置に割り当てるクラス数に最大１のばらつきが生じることとなるが、クラス数Ｍを十分大きくすることで、このばらつきは相対的に小さくなる。
【実施例４】
【０１４４】
つぎに、上述した実施の形態２の実施例４について説明する。実施例４では、図１に示したストレージシステム１００において、ディスク装置Ｄ1〜Ｄnの台数を５台（ａ＝５）から７台（ｂ＝７）に変更する場合を例に挙げて説明する。
【０１４５】
（稼働前準備）
まず、ストレージサービスの運用を開始する前の稼働前準備について説明する。稼働前準備として、ストレージシステム１００の管理者により、ファイル群を割り当てる任意のクラス数Ｍを設定する。ここでは、クラス数Ｍとして「１７」が設定されている。この結果、取得部３０１により、クラス数Ｍ（Ｍ＝１７）が取得される。
【０１４６】
つぎに、Ｍ個分、すなわち、１７個分のクラスＣ1〜Ｃ17を定義し、ファイル割当部３０２により、任意のファイル群を各クラスＣ1〜Ｃ17に十分均等に割り当てる。このあと、初期状態でのディスク装置Ｄ1〜Ｄnの台数ａを設定する。ここでは、５台（ａ＝５）のディスク装置Ｄ1〜Ｄ5が設定されている。
【０１４７】
（分散ストレージ処理の概要）
以下、図１３を用いて実施の形態２の実施例４における分散ストレージ処理の概要について説明する。図１３は、実施の形態２の実施例４における分散ストレージ処理の概要を示す説明図である。
【０１４８】
図１３において、サーバ１０２−１〜１０２−５に備えられたディスク装置Ｄ1〜Ｄ5にクラスＣ1〜Ｃ17が割り当てられている。具体的には、上述したアルゴリズムＡに従って、ディスク装置Ｄ1，Ｄ2には４個、ディスク装置Ｄ3〜Ｄ5には３個のクラスがそれぞれ割り当てられている。そして、クラスＣ1〜Ｃ17が割り当てられた結果、各クラスＣ1〜Ｃ17に属するファイルがディスク装置Ｄ1〜Ｄ5に記憶されている。
【０１４９】
ここで、ディスク装置Ｄ1〜Ｄ5の台数を、現在の５台から７台に変更する。ここでは、サーバ１０２−６，１０２−７に備えられたディスク装置Ｄ6，Ｄ7を追加する。このとき、上述したアルゴリズムＢに従って、変更後の各ディスク装置Ｄ1〜Ｄ7にそれぞれ割り当てるクラス数を決定する。
【０１５０】
ここでは、ディスク装置Ｄ1〜Ｄ3のクラス数は３個、ディスク装置Ｄ4〜Ｄ7のクラス数は２個となる。つぎに、クラス数が減るディスク装置Ｄ1，Ｄ2，Ｄ4，Ｄ5に割り当てられているクラスの中から再配置対象クラスを選択する。そして、再配置対象クラスをディスク装置Ｄ6，Ｄ7に割り当てる。
【０１５１】
ここでは、クラス割当部３０３により、ディスク装置Ｄ1，Ｄ2にそれぞれ割り当てられている１個のクラスと、ディスク装置Ｄ4，Ｄ5にそれぞれ割り当てられている１個のクラスとを、追加された２台のディスク装置Ｄ6，Ｄ7にそれぞれ割り当てる。
【０１５２】
具体的には、ディスク装置Ｄ1，Ｄ2にそれぞれ割り当てられている４個のクラスのうち、クラス番号の大きいものから１個のクラス（Ｃ4，Ｃ8）を再配置対象として選択する。また、ディスク装置Ｄ4，Ｄ5にそれぞれ割り当てられている３個のクラスのうち、クラス番号の大きいものから１個のクラス（Ｃ14，Ｃ17）を再配置対象として選択する。
【０１５３】
そして、再配置対象として選択されたクラス（Ｃ4，Ｃ8，Ｃ14，Ｃ17）を、クラス番号の小さいものから順に、追加された２台のディスク装置Ｄ6，Ｄ7に割り当てる。このとき、ディスク番号が小さいディスク装置Ｄ6，Ｄ7から順に割り当てる。ここでは、クラスＣ4，Ｃ8がディスク装置Ｄ6に、クラスＣ14，Ｃ17がディスク装置Ｄ7に割り当てられる。
【０１５４】
最後に、任意の手法を用いて、クラス割当部３０３による割当結果に基づいて、各クラスＣ4，Ｃ8，Ｃ14，Ｃ17に属するファイルを、割当先のディスク装置Ｄ6，Ｄ7にクラス単位で転送する。この結果、ディスク装置Ｄ6，Ｄ7においてファイルが記憶される。例えば、クラスＣ4がディスク装置Ｄ6に割り当てられた結果、クラスＣ4に属するファイルがディスク装置Ｄ1からディスク装置Ｄ6に転送される。
【０１５５】
（実施の形態２の実施例４における分散ストレージ処理手順）
つぎに、実施の形態２の実施例４における分散ストレージ処理手順について説明する。まず、稼働前準備処理の具体的な処理手順について説明する。なお、クラス数Ｍを初期状態のディスク装置Ｄ1〜Ｄ5の台数ａ（ａ＝５）で割ったときの商を「ｑ」、余りを「ｒ」とする。
【０１５６】
図１４は、稼働前準備処理の具体的な処理手順を示すフローチャート（その１）である。図１４のフローチャートにおいて、まず、任意のクラス数Ｍの入力を受け付けたか否かを判断する（ステップＳ１４０１）。ここで、クラス数Ｍの入力を待って（ステップＳ１４０１：Ｎｏ）、入力を受け付けた場合（ステップＳ１４０１：Ｙｅｓ）、取得部３０１により、ステップＳ１４０１において入力されたクラス数Ｍ（Ｍ＝１７）を取得する（ステップＳ１４０２）。
【０１５７】
このあと、ファイル割当部３０２により、ストレージシステム１００で保持するファイル群を、ステップＳ１４０２において取得されたクラス数Ｍ個分、すなわち、１７個のクラスＣ1〜Ｃ17に十分均等に割り当てる（ステップＳ１４０３）。
【０１５８】
そして、クラス割当部３０３により、各ディスク装置Ｄ1〜Ｄ5に付与されているディスク番号Ｄ1〜Ｄnの小さいものからｒ台の記憶装置に割り当てるクラス数を（ｑ＋１）個、残余の記憶装置に割り当てるクラス数をｑ個に決定する（ステップＳ１４０４）。このあと、ステップＳ１４０４において決定されたクラス数に基づいて、クラスＣ1〜Ｃ17を、初期状態のａ台（ａ＝５）のディスク装置Ｄ1〜Ｄ5に割り当てる（ステップＳ１４０５）。
【０１５９】
最後に、ステップＳ１４０５におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、ファイル群をクラス単位でディスク装置Ｄ1〜Ｄ5に転送する転送処理を実行して（ステップＳ１４０６）、本フローチャートによる一連の処理を終了する。
【０１６０】
つぎに、現在使用されている５台のディスク装置Ｄ1〜Ｄ5を７台のディスク装置Ｄ1〜Ｄ7に増設する場合の分散ストレージ処理手順について説明する。なお、クラス数Ｍを増設後のディスク装置Ｄ1〜Ｄ7の台数ｂ（ｂ＝７）で割ったときの商を「ｑ1」、余りを「ｒ1」とする。
【０１６１】
図１５は、増設時の分散ストレージ処理手順を示すフローチャート（その１）である。図１５のフローチャートにおいて、まず、使用台数の増設指示の入力を受け付けたか否かを判断する（ステップＳ１５０１）。
【０１６２】
ここで、使用台数の増設指示を待って（ステップＳ１５０１：Ｎｏ）、ａ台（ａ＝５）からｂ台（ｂ＝７）に変更する増設指示を受け付けた場合（ステップＳ１５０１：Ｙｅｓ）、クラス割当部３０３により、増設対象のディスク装置Ｄ6，Ｄ7に割り当てられているクラス数を０個として、ディスク装置Ｄ1〜Ｄ7を、割り当てられているクラス数が降順となるようにソートする（ステップＳ１５０２）。
【０１６３】
そして、クラス割当部３０３により、ソートされたｂ台のディスク装置Ｄ1〜Ｄ7の先頭からｒ1台（３台）のディスク装置Ｄ1〜Ｄ3に割り当てるクラス数を（ｑ1＋１）個（３個）、残余のディスク装置Ｄ4〜Ｄ7に割り当てるクラス数をｑ1個（２個）に決定する（ステップＳ１５０３）。
【０１６４】
このあと、クラス割当部３０３により、ステップＳ１５０３において決定されたクラス数に基づいて、クラス数が減るディスク装置Ｄ1，Ｄ2，Ｄ4，Ｄ5に割り当てられているクラスＣ1〜Ｃ17の中から再配置対象クラスＣ4，Ｃ8，Ｃ14，Ｃ17を選択し（ステップＳ１５０４）、選択された再配置対象クラスＣ4，Ｃ8，Ｃ14，Ｃ17を、ステップＳ１５０３において決定されたクラス数分だけ増設対象のディスク装置Ｄ6，Ｄ7に割り当てる（ステップＳ１５０５）。
【０１６５】
最後に、ステップＳ１５０５におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、再配置対象クラスＣ4，Ｃ8，Ｃ14，Ｃ17に属するファイル群をクラス単位でディスク装置Ｄ6，Ｄ7に転送する転送処理を実行して（ステップＳ１５０６）、本フローチャートによる一連の処理を終了する。
【０１６６】
実施例４によれば、ディスク装置Ｄ1〜Ｄnの台数をａ台（ａ＝５）からｂ台（ｂ＝７）に変更するときのファイルの再配置を最小化することができる。具体的には、アルゴリズムＢに従ってクラス数を決定し、クラスの移動が最小となる再配置対象クラスを選択することにより、結果的にファイルの再配置を最小化することができる。
【０１６７】
図１３に示した例では、アルゴリズムＢに従って決定されたディスク装置Ｄ6，Ｄ7のクラス数分（４個）だけのクラスＣ4，Ｃ8，Ｃ14，Ｃ17の移動しかおこなわれていないため、台数変更時におけるファイルの再配置は最小化されているといえる。
【実施例５】
【０１６８】
つぎに、上述した実施の形態２の実施例５について説明する。実施例５では、図１に示したストレージシステム１００において、ディスク装置Ｄ1〜Ｄnの台数を５台（ｂ＝５）から３台（ａ＝３）に変更する場合を例に挙げて説明する。なお、実施例１において説明した箇所と同一箇所については、図示および説明を省略する。
【０１６９】
（分散ストレージ処理の概要）
以下、図１６を用いて実施の形態２の実施例５における分散ストレージ処理の概要について説明する。図１６は、実施の形態２の実施例５における分散ストレージ処理の概要を示す説明図である。
【０１７０】
図１６において、サーバ１０２−１〜１０２−５に備えられたディスク装置Ｄ1〜Ｄ5にクラスＣ1〜Ｃ17が割り当てられている。具体的には、上述したアルゴリズムＡに従って、ディスク装置Ｄ1、ディスク装置Ｄ2には４個、ディスク装置Ｄ3〜Ｄ5には３個のクラスがそれぞれ割り当てられている。
【０１７１】
ここで、ディスク装置Ｄ1〜Ｄ5の台数を、現在の５台から３台に変更する。ここでは、５台のディスク装置Ｄ1〜Ｄ5のうち、ディスク番号の大きいディスク装置Ｄ4，Ｄ5を縮退対象とする。このとき、上述したアルゴリズムＣに従って、変更後の各ディスク装置Ｄ1〜Ｄ3にそれぞれ割り当てるクラス数を決定する。
【０１７２】
ここでは、ディスク装置Ｄ1，Ｄ2のクラス数は６個、ディスク装置Ｄ3のクラス数は５個となる。つぎに、縮退対象であるディスク装置Ｄ4，Ｄ5に割り当てられているクラスＣ12〜Ｃ17を再配置対象クラスとして選択する。そして、再配置対象クラスをディスク装置Ｄ1〜Ｄ3に割り当てる。
【０１７３】
ここでは、クラス割当部３０３により、再配置対象クラスを、クラス番号の小さいものから順に、ディスク番号の小さいディスク装置Ｄ1〜Ｄ3へ割り当てている。具体的には、ディスク装置Ｄ4に割り当てられているＣ12，Ｃ13がディスク装置Ｄ1に割り当てられる。また、ディスク装置Ｄ4に割り当てられているＣ14とディスク装置Ｄ5に割り当てられているＣ15とがディスク装置Ｄ2に割り当てられる。さらに、ディスク装置Ｄ5に割り当てられているＣ16，Ｃ17がディスク装置Ｄ3に割り当てられる。
【０１７４】
最後に、任意の手法を用いて、クラス割当部３０３による割当結果に基づいて、各クラスＣ12〜Ｃ17に属するファイルを、割当先のディスク装置Ｄ1〜Ｄ3にクラス単位で転送する。この結果、ディスク装置Ｄ1〜Ｄ3においてファイルが記憶される。例えば、クラスＣ12がディスク装置Ｄ1に割り当てられた結果、クラスＣ12に属するファイルがディスク装置Ｄ4からディスク装置Ｄ1に転送される。
【０１７５】
（実施の形態２の実施例５における分散ストレージ処理手順）
つぎに、実施の形態２の実施例５における分散ストレージ処理手順について説明する。なお、稼働前準備処理の具体的な処理手順については実施例４と同様のため説明を省略する。
【０１７６】
ここでは、現在使用されているｂ台（５台）のディスク装置Ｄ1〜Ｄ5をａ台（３台）のディスク装置Ｄ1〜Ｄ3に縮退する場合の分散ストレージ処理手順について説明する。なお、クラス数Ｍを縮退後のディスク装置Ｄ1〜Ｄ3の台数ａ（ａ＝３）で割ったときの商を「ｑ2」、余りを「ｒ2」とする。
【０１７７】
図１７は、縮退時の分散ストレージ処理手順を示すフローチャートである。図１７のフローチャートにおいて、まず、使用台数の縮退指示の入力を受け付けたか否かを判断する（ステップＳ１７０１）。
【０１７８】
ここで、使用台数の縮退指示を待って（ステップＳ１７０１：Ｎｏ）、ｂ台（ｂ＝５）からａ台（ａ＝３）に変更する縮退指示を受け付けた場合（ステップＳ１７０１：Ｙｅｓ）、クラス割当部３０３により、縮退後のａ台のディスク装置Ｄ1〜Ｄ3を、縮退前の時点で割り当てられているクラス数が降順となるようにソートする（ステップＳ１７０２）。
【０１７９】
そして、クラス割当部３０３により、ソートされたａ台のディスク装置Ｄ1〜Ｄ3の先頭からｒ2台（２台）のディスク装置Ｄ1，Ｄ2に割り当てるクラス数を（ｑ2＋１）個（６個）、残余のディスク装置Ｄ3に割り当てるクラス数をｑ2個（５個）に決定する（ステップＳ１７０３）。
【０１８０】
このあと、クラス割当部３０３により、縮退対象のディスク装置Ｄ4，Ｄ5に割り当てられているクラスＣ12〜Ｃ17を再配置対象クラスとして選択する（ステップＳ１７０４）。そして、選択された再配置対象クラスＣ12〜Ｃ17を、ステップＳ１７０３において決定されたクラス数分だけディスク装置Ｄ1〜Ｄ3に割り当てる（ステップＳ１７０５）。
【０１８１】
最後に、ステップＳ１７０５におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、再配置対象クラスＣ12〜Ｃ17に属するファイル群をクラス単位でディスク装置Ｄ1〜Ｄ3に転送する転送処理を実行して（ステップＳ１７０６）、本フローチャートによる一連の処理を終了する。
【０１８２】
実施例５によれば、ディスク装置Ｄ1〜Ｄnの台数をｂ台（ｂ＝５）からａ台（ａ＝３）に変更するときのファイルの再配置を最小化することができる。具体的には、アルゴリズムＣに従ってクラス数を決定し、クラスの移動が最小となる再配置対象クラスを選択することにより、結果的にファイルの再配置を最小化することができる。
【０１８３】
図１５に示した例では、縮退対象となるディスク装置Ｄ4，Ｄ5のクラス数分（６個）だけのクラスＣ12〜Ｃ17の移動しかおこなわれていないため、台数変更時におけるファイルの再配置は最小化されているといえる。
【０１８４】
（実施の形態３）
つぎに、実施の形態３にかかる分散ストレージ管理装置１０１について説明する。実施の形態１，２では、クラス数Ｍとして運用開始前に何らかの固定値を決める必要があったが、実施の形態３では、実際に使用する記憶装置の台数に応じてクラス数Ｍを動的に変更する手法を提案する。
【０１８５】
実施の形態１，２のようにクラス数Ｍを固定値とした場合、クラス数Ｍを小さい値に決めてしまうと、記憶装置の台数が多くなったときに負荷分散の均等さが損なわれてしまう。一方で、クラス数を大きい値に決めてしまうと、割当テーブルのデータサイズが大きくなったり、割当処理にかかる負荷が大きくなるなどのオーバーヘッドが大きくなる。
【０１８６】
そこで、実施の形態３では、記憶装置の台数が少ないときにはクラス数Ｍを小さくし、記憶装置の台数が多くなったときにクラス数Ｍを大きくすることにより、実施の形態１，２と同様に記憶装置の台数変更時におけるファイルの再配置を最小化するとともに、上述したトレードオフの関係を解消する。
【０１８７】
以下、実施の形態３にかかる分散ストレージ管理装置１０１の制御部（取得部３０１〜配信部３０５）の具体的な処理内容について説明する。なお、実施の形態１，２において説明した箇所と同一箇所については、同一符号を付して説明を省略する。
【０１８８】
まず、取得部３０１は、任意のファイル群を割り当てるクラスの複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝と、記憶装置に割り当てられるクラス数の均等性を表わす係数Ｘ（後述する実施例の「均等性係数Ｘ」に相当）とを取得する。
【０１８９】
ここで、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝は、『Ｍ（ｉ＋１）はＭｉの倍数（ただし、ｉ＝１，２，…，ｎ）』を満たす任意の数字列である。具体的には、例えば、複数のクラス数として｛２５６（＝２8），６５５３６（＝２16），１６７７２１６（＝２24），…｝などの固定値を用いてもよい。
【０１９０】
また、係数Ｘ（１以上の実数）は、各記憶装置に割り当てられるクラス数に要求される均等性により任意に設定可能な値である。また、任意のアルゴリズムを用いて、１以上の実数である係数Ｘを決定することとしてもよい。詳細は後述するが、この係数Ｘが大きいほど、各記憶装置に割り当てるクラス数の均等性を高めることができる。
【０１９１】
なお、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝および係数Ｘは、例えば、図２に示した入力装置２２０をユーザが操作することで分散ストレージ管理装置１０１に直接入力することとしてもよく、また、不図示の外部装置から取得することとしてもよい。
【０１９２】
ファイル割当部３０２は、初期状態のクラス数Ｍｉとして、取得部３０１によって取得された複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から下記式（１）を満たす最小のＭｉを選択する。ただし、ａは初期状態の記憶装置の台数である。
【０１９３】
ａ＊Ｘ＜Ｍｉ                      ・・・（１）
【０１９４】
上記式（１）は、係数Ｘが大きければ『ａ＊Ｘ』の値が大きくなり選択されるクラス数Ｍｉが大きくなるため、結果的に各記憶装置に割り当てるクラス数の均等性が高まることを意味している。一方、係数Ｘが小さければ『ａ＊Ｘ』の値が小さくなり選択されるクラス数Ｍｉが小さくなるため、結果的に各記憶装置に割り当てるクラス数の均等性が低くなることを意味している。なお、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝のうち上記式（１）を満たすＭｉが存在しない場合には、クラス数の最大値Ｍｎを選択することとしてもよい。
【０１９５】
また、ファイル割当部３０２は、所定のアルゴリズムに従って、任意のファイル群を、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から選択されたクラス数Ｍｉ個分のクラスにそれぞれ割り当てる。ここで、所定のアルゴリズムとは、以下の条件（６）および（７）を満たすアルゴリズムである。ただし、クラス数Ｍｉに対応するアルゴリズムを「Ｃｉ（）」と表記する。
【０１９６】
（６）ファイル群をクラス数Ｍｉ個分のクラス｛Ｃ０，Ｃ１，…，Ｃ（Ｍｉ−１）｝に十分均等に配分する。
（７）２つのファイルがＣ（ｉ＋１）（）で同じクラスに割り当てられるなら、その２つのファイルはＣ（ｉ）（）でも同じクラスに割り当てられる。
【０１９７】
具体的には、例えば、クラス数の最大値Ｍｎを用いて、つぎのようにＣｎ（）を決めることができる。まず、ファイル名の文字列から１つの整数が定まる十分一様なハッシュ関数を１つ決めｈ（）とする。つぎに、Ｍｎを法とした合同（ｍｏｄ  Ｍｎ）によりＭｎ個のクラスに分類する。そして、このＣｎ（）をもとに、Ｃ１からＣ（ｎ−１）（）を以下のように決める。
【０１９８】
『Ｃｉ（ファイル）＝Ｃｎ（ファイル）をＭｎ／Ｍｉで割ったときの商とする』
【０１９９】
なお、各記憶装置は、クラスの階層構造を有しており、すべてのファイルは、階層構造の最下層のクラスのいずれかに属することとなる。
【０２００】
また、ファイル割当部３０２は、記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、新たなクラス数Ｍｉとして、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から下記式（２）を満たす最小のＭｉを選択する。なお、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝のうち下記式（２）を満たすＭｉが存在しない場合には、クラス数の最大値Ｍｎを選択することとしてもよい。
【０２０１】
ｂ＊Ｘ＜Ｍｉ                      ・・・（２）
【０２０２】
この場合、ファイル割当部３０２は、上記条件（６）および（７）を満たすアルゴリズムを用いて、ファイル群を新たなクラス数Ｍｉ個分のクラスにそれぞれ割り当てることとなる。このとき、上記条件（７）を満たすことにより、ファイル群の割り当てにかかる処理負荷を軽減させることができる。
【０２０３】
なお、ファイル割当部３０２は、記憶装置の使用台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合、新たなクラス数Ｍｉとして、複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から『ａ＊Ｘ＜Ｍｉ』となる最小のＭｉを選択することとしてもよい。この場合も上記同様に、ファイル群を新たなクラス数Ｍｉ個分のクラスにそれぞれ割り当てることとなる。
【０２０４】
なお、クラス割当部３０３、作成部３０４および配信部３０５の具体的な処理内容は、実施の形態２で説明した処理内容と同様のため説明を省略する。
【０２０５】
以上説明した実施の形態３によれば、記憶装置の使用台数に応じてクラス数Ｍを動的に変更することができる。これにより、クラス数Ｍの大小にともなうトレードオフを解消するとともに、記憶装置の台数変更時におけるファイルの再配置を最小化することができる。
【実施例６】
【０２０６】
つぎに、上述した実施の形態３の実施例６について説明する。実施例６では、図１に示したストレージシステム１００において、ディスク装置Ｄ1〜Ｄnの台数を２０台（ａ＝２０）から３０台（ｂ＝３０）に変更する場合を例に挙げて説明する。
【０２０７】
（稼働前準備）
まず、ストレージサービスの運用を開始する前の稼働前準備について説明する。稼働前準備として、まず、クラス数の均等性を表わす均等性係数Ｘを決定する。ここでは、均等性係数Ｘとして「１０」が決定されている。この結果、取得部３０１により、均等性係数Ｘ（Ｘ＝１０）が取得される。
【０２０８】
また、任意のファイル群を割り当てるクラスの複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝を選択する。ここでは、複数のクラス数として｛２５６，６５５３６，１６７７２１６｝を選択する。この結果、取得部３０１により、複数のクラス数｛２５６，６５５３６，１６７７２１６｝が取得される。
【０２０９】
つぎに、ファイル割当部３０２により、上記条件（６）および（７）に従って、クラス数Ｍｉに対応するアルゴリズムＣｉ（）を決める。ここでは、複数のクラス数｛２５６，６５５３６，１６７７２１６｝それぞれに対応するアルゴリズムＣ１（），Ｃ２（），Ｃ３（）として以下のアルゴリズムが決められている。
【０２１０】
Ｃ１（ファイル）＝ＳＨＡ１（ファイル名）の上位１バイトの値
Ｃ２（ファイル）＝ＳＨＡ１（ファイル名）の上位２バイトの値
Ｃ３（ファイル）＝ＳＨＡ１（ファイル名）の上位３バイトの値
【０２１１】
つぎに、初期状態のディスク装置Ｄ1〜Ｄnの台数ａを決める。ここでは、初期状態の台数としてディスク装置Ｄ1〜Ｄ20の２０台（ａ＝２０）が決められている。このあと、ファイル割当部３０２により、初期状態のクラス数Ｍｉとして、複数のクラス数｛２５６，６５５３６，１６７７２１６｝の中から上記式（１）を満たす最小のＭｉを選択する。ここでは、『ａ＊Ｘ＝２００＜Ｍｉ』となるクラス数Ｍ１（＝２５６）が選択される。
【０２１２】
つぎに、Ｍ１個分、すなわち、２５６個分のクラスＣ1〜Ｃ256を定義し、ファイル割当部３０２により、任意のファイル群を各クラスＣ1〜Ｃ256に十分均等に割り当てる。そして、クラス割当部３０３により、実施の形態２で説明したアルゴリズムＡに従って、ディスク装置Ｄ1〜Ｄ20に割り当てるクラス数を決定する。
【０２１３】
ここでは、ディスク装置Ｄ1〜Ｄ17に割り当てるクラス数は１３個、ディスク装置Ｄ18〜Ｄ20に割り当てるクラス数は１２個となる。つぎに、クラス割当部３０３により、クラスＣ1〜Ｃ256を、ディスク装置Ｄ1〜Ｄ20に決定されたクラス数分だけ割り当てる。ここでは、クラス番号の小さいものからディスク番号の小さいものに順に割り当てる。
【０２１４】
（分散ストレージ処理の概要）
以下、図１８を用いて実施の形態３の実施例６における分散ストレージ処理の概要について説明する。図１８は、実施の形態３の実施例６における分散ストレージ処理の概要を示す説明図である。
【０２１５】
図１８において、サーバ１０２−１〜１０２−２０に備えられたディスク装置Ｄ1〜Ｄ20にクラスＣ1〜Ｃ256が均等になるようにそれぞれ割り当てられている。ここで、ディスク装置Ｄ1〜Ｄ20の台数を、現在の２０台から３０台に変更する。ここでは、サーバ１０２−２１〜１０２−３０に備えられたディスク装置Ｄ21〜Ｄ30を追加する。
【０２１６】
つぎに、上記式（２）を用いて、新たなクラス数Ｍｉを複数のクラス数｛２５６，６５５３６，１６７７２１６｝の中から選択する。ここでは、『ｂ＊Ｘ＝３００＜Ｍｉ』となるクラス数Ｍ２（＝６５５３６）が選択される。このあと、クラス割当部３０３により、ディスク装置Ｄ1〜Ｄ20の使用台数の変更にともなってクラス数Ｍｉが変更されたか否かを判断する。ここでは、クラス数Ｍｉがクラス数Ｍ１からクラス数Ｍ２に変更されている。
【０２１７】
この場合、まず、既存のクラスＣ1〜Ｃ256を新たなクラス分けに従って分割する。このとき、新たなクラス分けに従って、クラスとディスク装置Ｄ1〜Ｄ20との対応関係を有する割当テーブルを置き換える。具体的には、割当テーブルのサイズを２５６行から６５５３６行に変更する。そして、変更前のＣ０に対応するディスク装置Ｄ1〜Ｄ20をＣ０〜Ｃ２５５に対応させる。以降同様に、変更前のＣ１〜Ｃ２５５に対応するディスク装置Ｄ1〜Ｄ20を「Ｃ２５６〜Ｃ５１１」〜「Ｃ６５０２４〜Ｃ６５５３５」に対応させる。
【０２１８】
さらに、ファイル群の割当先を決定するアルゴリズムを新しいものに置き換える。ここでは、ファイル群の割当先を決定するアルゴリズムをＣ１（）からＣ２（）に置き換える。なお、各ディスク装置Ｄ1〜Ｄ20が有するクラス階層構造において、現在１段目でクラス分けをおこなっているものを、２段目を用いてクラス分けをおこなうものとする。
【０２１９】
次いで、クラス割当部３０３により、実施の形態２で説明したアルゴリズムＢに従って、変更後の各ディスク装置Ｄ1〜Ｄ30にそれぞれ割り当てるクラス数を決定する。ここでは、ディスク装置Ｄ1〜Ｄ16のクラス数は２１８５個、ディスク装置Ｄ17〜Ｄ30のクラス数は２１８４個となる。
【０２２０】
そして、クラス数が減るディスク装置Ｄ1〜Ｄ20に割り当てられているクラスの中から再配置対象クラスを選択して、その再配置対象クラスをディスク装置Ｄ21〜Ｄ30に割り当てる。なお、クラス割当部３０３による処理内容については実施の形態２で説明した処理内容と同様のため、ここでは図示および説明を省略する。
【０２２１】
（実施の形態３の実施例６における分散ストレージ処理手順）
つぎに、実施の形態３の実施例６における分散ストレージ処理手順について説明する。まず、稼働前準備処理の具体的な処理手順について説明する。なお、初期状態のディスク装置Ｄ1〜Ｄnを、ディスク装置Ｄ1〜Ｄ20の２０台（ａ＝２０）とする。
【０２２２】
図１９は、稼働前準備処理の具体的な処理手順を示すフローチャート（その２）である。図１９のフローチャートにおいて、まず、複数のクラス数｛２５６，６５５３６，１６７７２１６｝および均等性係数Ｘ（Ｘ＝１０）の入力を受け付けたか否かを判断する（ステップＳ１９０１）。
【０２２３】
ここで、複数のクラス数｛２５６，６５５３６，１６７７２１６｝および均等性係数Ｘの入力を待って（ステップＳ１９０１：Ｎｏ）、入力を受け付けた場合（ステップＳ１９０１：Ｙｅｓ）、ファイル割当部３０２により、上記式（１）を用いて、複数のクラス数｛２５６，６５５３６，１６７７２１６｝の中から初期状態のクラス数Ｍｉ（＝Ｍ１＝２５６）を選択する（ステップＳ１９０２）。
【０２２４】
このあと、ファイル割当部３０２により、ストレージシステム１００で保持するファイル群を、ステップＳ１９０２において取得されたクラス数Ｍｉ個分、すなわち、２５６個のクラスＣ1〜Ｃ256に十分均等に割り当てる（ステップＳ１９０３）。
【０２２５】
そして、クラス割当部３０３により、ファイル割当部３０２によってファイル群が割り当てられたクラスＣ1〜Ｃ256を、各ディスク装置Ｄ1〜Ｄ20に割り当てる割当処理を実行する（ステップＳ１９０４）。
【０２２６】
最後に、ステップＳ１９０４におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、ファイル群をクラス単位でディスク装置Ｄ1〜Ｄ20に転送する転送処理を実行して（ステップＳ１９０５）、本フローチャートによる一連の処理を終了する。
【０２２７】
つぎに、現在使用されている２０台のディスク装置Ｄ1〜Ｄ20を３０台のディスク装置Ｄ1〜Ｄ30に増設する場合の分散ストレージ処理手順について説明する。
【０２２８】
図２０は、増設時の分散ストレージ処理手順を示すフローチャート（その２）である。図２０のフローチャートにおいて、まず、使用台数の増設指示の入力を受け付けたか否かを判断する（ステップＳ２００１）。
【０２２９】
ここで、使用台数の増設指示を待って（ステップＳ２００１：Ｎｏ）、ａ台（ａ＝２０）からｂ台（ｂ＝３０）に変更する増設指示を受け付けた場合（ステップＳ２００１：Ｙｅｓ）、ファイル割当部３０２により、上記式（２）を用いて、複数のクラス数｛２５６，６５５３６，１６７７２１６｝の中から新たなクラス数Ｍｉ（＝Ｍ２＝６５５３６）を選択する（ステップＳ２００２）。
【０２３０】
そして、ステップＳ２００２において選択されたクラス数Ｍｉが変更されたか否かを判断し（ステップＳ２００３）、変更された場合（ステップＳ２００３：Ｙｅｓ）、ファイル割当部３０２により、既存のクラスＣ1〜Ｃ256を新たなクラス分けに従って分割する（ステップＳ２００４）。
【０２３１】
そして、クラス割当部３０３により、ファイル割当部３０２によって分割されたクラスＣ1〜Ｃ65536を、変更後の各ディスク装置Ｄ1〜Ｄ30に割り当てる割当処理を実行する（ステップＳ２００５）。
【０２３２】
最後に、ステップＳ２００５におけるクラス割当部３０３による割当結果（割当テーブル）に基づいて、ファイル群をクラス単位でディスク装置Ｄ1〜Ｄ30に転送する転送処理を実行して（ステップＳ２００６）、本フローチャートによる一連の処理を終了する。
【０２３３】
なお、ステップＳ２００３において、選択されたクラス数Ｍｉが変更されていない場合（ステップＳ２００３：Ｎｏ）、ステップＳ２００５に移行して、クラス割当部３０３により、ファイル群が割り当てられたクラスＣ1〜Ｃ256を、変更後の各ディスク装置Ｄ1〜Ｄ30に割り当てることとなる。
【０２３４】
実施例６によれば、ディスク装置Ｄ1〜Ｄnの台数変更（２０台→３０台）にともなって、ファイル群を割り当てるクラス数Ｍを動的に変更（２５６→６５５３６）することができる。これにより、ディスク装置Ｄ1〜Ｄnの台数変更時における負荷分散の均等性を適切に維持することができる。
【０２３５】
以上説明したように、分散ストレージ管理プログラム、分散ストレージ管理装置、および分散ストレージ管理方法によれば、ディスク装置の台数を変更するときのファイルの再配置を最小化することにより、ストレージシステムの性能を向上させることができる。
【０２３６】
なお、実施の形態１〜３で説明した分散ストレージ管理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーションなどのコンピュータで実行することにより実現することができる。このプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。またこのプログラムは、インターネットなどのネットワークを介して配布することが可能な伝送媒体であってもよい。
【０２３７】
以上の実施例を含む実施形態に関し、さらに以下の付記を開示する。
【０２３８】
（付記１）コンピュータを、
再構成を予定している記憶装置の台数の公倍数Ｍを取得する取得手段、
所定のアルゴリズムに従って、前記記憶装置に記憶されているファイル群を、前記取得手段によって取得された公倍数Ｍ個分のクラスに割り当てるファイル割当手段、
現在の台数から成る前記記憶装置を現在の台数とは異なる他の台数から成る記憶装置に変更する場合、前記クラスと割り当てられる記憶装置との対応関係を有する割当テーブルに従って、前記ファイル割当手段で割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てるクラス割当手段、
として機能させることを特徴とする分散ストレージ管理プログラム。
【０２３９】
（付記２）コンピュータを、
ファイル群を割り当てるクラスのクラス数Ｍを取得する取得手段、
所定のアルゴリズムに従って、前記ファイル群を前記取得手段によって取得されたクラス数Ｍ個分のクラスに割り当てるファイル割当手段、
前記ファイル群を記憶させる記憶装置の使用台数を現在の台数から他の台数に変更する場合、前記ファイル割当手段によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てるクラス割当手段、
として機能させることを特徴とする分散ストレージ管理プログラム。
【０２４０】
（付記３）前記クラス割当手段は、
前記ファイル群が現在の台数から成る記憶装置に記憶されている場合、前記クラスと現在使用されている記憶装置との対応関係を有する割当テーブルを参照して、前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記他の台数からなる記憶装置に割り当てることを特徴とする付記２に記載の分散ストレージ管理プログラム。
【０２４１】
（付記４）前記取得手段は、
再構成を予定している記憶装置の台数の公倍数Ｍを取得し、
前記ファイル割当手段は、
所定のアルゴリズムに従って、前記ファイル群を前記取得手段によって取得された公倍数Ｍ個分のクラスに割り当て、
前記クラス割当手段は、
前記記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、ａ台の記憶装置にそれぞれ割り当てられているＭ／ａ個のクラスのうち、（Ｍ／ａ−Ｍ／ｂ）個のクラスを、変更対象となる（ｂ−ａ）台の記憶装置にそれぞれ割り当てることを特徴とする付記２または３に記載の分散ストレージ管理プログラム。
【０２４２】
（付記５）前記クラス割当手段は、
前記記憶装置の使用台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられている（Ｍ×（１−ａ／ｂ））個のクラスを、ａ台の記憶装置に（Ｍ／ａ−Ｍ／ｂ）個のクラスずつそれぞれ割り当てることを特徴とする付記４に記載の分散ストレージ管理プログラム。
【０２４３】
（付記６）前記コンピュータを、
前記クラス割当手段によって割り当てられた割当結果に基づいて、前記クラスと当該クラスが割り当てられた記憶装置との対応関係を有する割当テーブルを作成する作成手段、
前記作成手段によって作成された割当テーブルを、前記記憶装置に対するファイルのリード／ライトを制御する情報処理装置に配信する配信手段として機能させることを特徴とする付記２〜５のいずれか一つに記載の分散ストレージ管理プログラム。
【０２４４】
（付記７）前記作成手段は、
再構成を予定している記憶装置の複数通りの台数ごとに、前記クラスと当該クラスが割り当てられる記憶装置との対応関係を有する割当テーブルを作成することを特徴とする付記６に記載の分散ストレージ管理プログラム。
【０２４５】
（付記８）前記クラス割当手段は、
前記記憶装置の使用台数をａ台からｂ台（ただし、ａ＜ｂ）に変更する場合、変更対象となる（ｂ−ａ）台の記憶装置に割り当てられているクラス数を０個として、前記ｂ台の記憶装置に割り当てられているクラス数が降順となるようにソートした結果、前記ｂ台の記憶装置のうち、先頭からｒ台（ただし、ｒは、Ｍをａで割った余り）の記憶装置に（ｑ＋１）個（ただし、ｑは、Ｍをａで割った商）のクラスを割り当てるとともに、残余の記憶装置にｑ個のクラスを割り当てることを特徴とする付記２に記載の分散ストレージ管理プログラム。
【０２４６】
（付記９）前記クラス割当手段は、
前記記憶装置の使用台数をｂ台からａ台（ただし、ａ＜ｂ）に変更する場合、前記ａ台の記憶装置を変更前の時点で割り当てられているクラス数が降順となるようにソートした結果、前記ａ台の記憶装置のうち、先頭からｒ台（ただし、ｒは、Ｍをａで割った余り）の記憶装置に（ｑ＋１）個（ただし、ｑは、Ｍをａで割った商）のクラスを割り当てるとともに、残余の記憶装置にｑ個のクラスを割り当てることを特徴とする付記８に記載の分散ストレージ管理プログラム。
【０２４７】
（付記１０）前記コンピュータを、
前記クラス割当手段によって割り当てられた割当結果に基づいて、前記クラスと当該クラスが割り当てられる記憶装置との対応関係を有する割当テーブルを作成する作成手段、
前記作成手段によって作成された割当テーブルを、前記記憶装置に対するファイルのリード／ライトを制御する情報処理装置に配信する配信手段として機能させることを特徴とする付記８または９に記載の分散ストレージ管理プログラム。
【０２４８】
（付記１１）前記取得手段は、
前記ファイル群を割り当てるクラスの複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝を取得し、
前記ファイル割当手段は、
前記取得手段によって取得された複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から、前記ファイル群を記憶させる記憶装置の使用台数に応じて選択されたクラス数Ｍ個分のクラスに割り当てることを特徴とする付記８〜１０のいずれか一つに記載の分散ストレージ管理プログラム。
【０２４９】
（付記１２）前記複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝は、Ｍ（ｉ＋１）がＭｉの倍数となる任意の数字列であり（ただし、ｉ＝１，２，…，ｎ−１）、
前記ファイル割当手段は、
前記複数のクラス数｛Ｍ１，Ｍ２，…，Ｍｎ｝の中から、前記記憶装置に割り当てられるクラス数の均等性を表わす係数Ｘと、前記ファイル群を記憶させる記憶装置の使用台数とを掛け合わせた値よりも大きくなる最小のクラス数Ｍを選択することを特徴とする付記１１に記載の分散ストレージ管理プログラム。
【０２５０】
（付記１３）付記１〜１２のいずれか一つに記載の分散ストレージ管理プログラムを記録したコンピュータに読み取り可能な記録媒体。
【０２５１】
（付記１４）ファイル群を割り当てるクラスのクラス数Ｍを取得する取得手段と、
所定のアルゴリズムに従って、前記ファイル群を前記取得手段によって取得されたクラス数Ｍ個分のクラスに割り当てるファイル割当手段と、
前記ファイル群を記憶させる記憶装置の使用台数を現在の台数から他の台数に変更する場合、前記ファイル割当手段によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てるクラス割当手段と、
を備えることを特徴とする分散ストレージ管理装置。
【０２５２】
（付記１５）制御手段および記憶手段を備えるコンピュータが、
前記制御手段により、ファイル群を割り当てるクラスのクラス数Ｍを取得する取得工程と、
前記制御手段により、所定のアルゴリズムに従って、前記ファイル群を前記取得工程によって取得されたクラス数Ｍ個分のクラスに割り当てるファイル割当工程と、
前記制御手段により、前記ファイル群を記憶させる記憶装置の使用台数を現在の台数から他の台数に変更する場合、前記ファイル割当工程によって前記クラス数Ｍ個分のクラスにそれぞれ割り当てられたファイル群を、前記クラス単位で前記他の台数から成る記憶装置に割り当てるクラス割当工程と、
を実行することを特徴とする分散ストレージ管理方法。
【図面の簡単な説明】
【０２５３】
【図１】本実施の形態にかかるストレージシステムのシステム構成図である。
【図２】本実施の形態にかかるコンピュータ装置のハードウェア構成を示す説明図である。
【図３】分散ストレージ管理装置の機能的構成を示すブロック図である。
【図４】割当テーブルの具体例を示す説明図（その１）である。
【図５】実施の形態１にかかる分散ストレージ管理装置の分散ストレージ処理手順を示すフローチャートである。
【図６】実施の形態１の実施例１における分散ストレージ処理の概要を示す説明図である。
【図７】実施の形態１の実施例１における分散ストレージ処理手順を示すフローチャートである。
【図８】実施の形態１の実施例２における分散ストレージ処理の概要を示す説明図である。
【図９】実施の形態１の実施例２における分散ストレージ処理手順を示すフローチャートである。
【図１０】サーバの運用例の概要を示す説明図である。
【図１１】サーバの書込処理手順を示すフローチャートである。
【図１２】割当テーブルの具体例を示す説明図（その２）である。
【図１３】実施の形態２の実施例４における分散ストレージ処理の概要を示す説明図である。
【図１４】稼働前準備処理の具体的な処理手順を示すフローチャート（その１）である。
【図１５】増設時の分散ストレージ処理手順を示すフローチャート（その１）である。
【図１６】実施の形態２の実施例５における分散ストレージ処理の概要を示す説明図である。
【図１７】縮退時の分散ストレージ処理手順を示すフローチャートである。
【図１８】実施の形態３の実施例６における分散ストレージ処理の概要を示す説明図である。
【図１９】稼働前準備処理の具体的な処理手順を示すフローチャート（その２）である。
【図２０】増設時の分散ストレージ処理手順を示すフローチャート（その２）である。
【符号の説明】
【０２５４】
１００  ストレージシステム
１０１  分散ストレージ管理装置
１０２−１〜１０２−ｎ  サーバ
１０３−１〜１０３−ｎ  外部装置
３０１  取得部
３０２  ファイル割当部
３０３  クラス割当部
３０４  作成部
３０５  配信部
４００，１２００  割当テーブル
Ｃ1〜Ｃ12  クラス
Ｄ1〜Ｄn  ディスク装置
ｆ1〜ｆ24，ｆi，ｆj  ファイル
【図１】
0005332364.tif 000002
【図２】
0005332364.tif 000003
【図３】
0005332364.tif 000004
【図４】
0005332364.tif 000005
【図５】
0005332364.tif 000006
【図６】
0005332364.tif 000007
【図７】
0005332364.tif 000008
【図８】
0005332364.tif 000009
【図９】
0005332364.tif 000010
【図１０】
0005332364.tif 000011
【図１１】
0005332364.tif 000012
【図１２】
0005332364.tif 000013
【図１３】
0005332364.tif 000014
【図１４】
0005332364.tif 000015
【図１５】
0005332364.tif 000016
【図１６】
0005332364.tif 000017
【図１７】
0005332364.tif 000018
【図１８】
0005332364.tif 000019
【図１９】
0005332364.tif 000020
【図２０】
0005332364.tif 000021