(57)【要約】【課題】ライトペナルティの発生を抑止する。【解決手段】各々が、複数の記憶装置のそれぞれの１ブロックの記憶領域の集合である複数のストライプの中から、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択する。第２の選択手段は、該移動元のストライプ以外のストライプの中から、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択する。移動手段は、該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動する。【選択図】図１
2013196276.tif 000002
【特許請求の範囲】
【請求項１】
各々が、複数の記憶装置のそれぞれの１ブロックの記憶領域の集合である複数のストライプの中から、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択する第１の選択手段と、
該移動元のストライプ以外のストライプの中から、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択する第２の選択手段と、
該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動する移動手段と、
を有する情報処理装置。
【請求項２】
前記第１の選択手段は、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプを、移動元として選択する、
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
前記第１の選択手段は、データが格納されているストライプのうち、データが格納されているブロック数が少ないストライプを、移動元として優先的に選択する、
ことを特徴とする請求項１または２のいずれかに記載の情報処理装置。
【請求項４】
前記第１の選択手段は、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプが見つからなくなるまで、移動元とするストライプの選択を繰り返し実行する、
ことを特徴とする請求項１乃至３のいずれかに記載の情報処理装置。
【請求項５】
前記第２の選択手段は、データ移動後に生じる空きブロック数が少ないストライプを、移動先として優先的に選択する、
ことを特徴とする請求項１乃至４のいずれかに記載の情報処理装置。
【請求項６】
ファイルシステムにおける移動元のストライプに格納されていたデータの格納先のブロック位置の指定を、該移動元のストライプのブロックの位置から移動先のストライプのブロックの位置に更新する更新手段、
をさらに有することを特徴とする請求項１乃至５のいずれかに記載の情報処理装置。
【請求項７】
未使用の記憶装置を追加時に、既存のストライプそれぞれに、該未使用の記憶装置内のブロックを追加する追加手段をさらに有し、
前記第１の選択手段は、既存のストライプそれぞれへのブロックの追加が行われたときに、移動元とするストライプの選択処理を開始する、
ことを特徴とする請求項１乃至６のいずれかに記載の情報処理装置。
【請求項８】
コンピュータに、
各々が、複数の記憶装置のそれぞれの１ブロックの記憶領域の集合である複数形成されたストライプであって、ストライプ内のブロックは、データと該データの誤り訂正符号との格納に使用される前記複数のストライプのうち、少なくとも１つのブロックにデータが格納されているストライプを、移動元として選択し、
該移動元のストライプ以外のストライプのうち、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択し、
該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動する、
処理を実行させるプログラム。
【請求項９】
コンピュータが、
各々が、複数の記憶装置のそれぞれの１ブロックの記憶領域の集合である複数のストライプの中から、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択し、
該移動元のストライプ以外のストライプの中から、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択し、
該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動してデータを配置する、
ことを特徴とするデータ配置方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理を行う情報処理装置、プログラムおよびデータ配置方法に関する。
【背景技術】
【０００２】
ＲＡＩＤ（Redundant Array of Inexpensive Disks）は、複数のハードディスクを組み合わせて運用することで、耐障害性を確保して大容量の記憶領域を構築する技術である。ＲＡＩＤの実装構成としては、ディスク記憶領域をストライプ化し、パリティによりデータの保護を行うものがある。
【０００３】
これは、ハードディスクの記憶空間を複数のストライプで構成し、分割したデータをストライプに書き込み（ストライピング）、データの書き込み時にはパリティ計算を行って、計算結果を保持しておく。
【０００４】
このようなＲＡＩＤでは、複数のハードディスクから同時並行読み出しが可能なので、読み出し速度を高めることが可能である。
また、一部のハードディスクに障害が発生しても、残りのデータとデータ修正用のパリティとにもとづいて、欠損したデータを算出できるので、元のデータを回復することが可能である。
【０００５】
従来のＲＡＩＤ技術として、ストライプ内のデータを他のストライプに移動し、ストライプの再構築を行って記憶領域を拡張する技術が提案されている。また、ディスクドライブの増設時、既設のディスクドライブに格納されているデータを、既設のディスクドライブと、増設されたディスクドライブとに分散して格納する技術が提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平８−１１５１７３号公報
【特許文献２】特開２００９−２３０３５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、上記のような構成のＲＡＩＤでは、データおよびパリティがすでに書き込まれているストライプの空き領域に、新たなデータを書き込む場合、ライトペナルティが生じるという問題がある。
【０００８】
ライトペナルティは、パリティ処理によるデータ書き込み時のオーバーヘッドであり、ライトペナルティの発生は、データ書き込み処理を遅延させる。また、ライトペナルティが頻繁に生じると、データ書き込み処理の遅延が増大し、システム運用効率の低下が引き起こされることになる。
【０００９】
１つの側面では、本発明は、ライトペナルティの発生を抑止した情報処理装置、プログラムおよびデータ配置方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの案では、情報処理装置が提供される。情報処理装置は、各々が、複数の記憶装置のそれぞれの１ブロックの記憶領域の集合である複数のストライプの中から、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択する第１の選択手段と、該移動元のストライプ以外のストライプの中から、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択する第２の選択手段と、該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動する移動手段とを有する。
【発明の効果】
【００１１】
１態様によれば、ライトペナルティの発生を抑止することが可能になる。
【図面の簡単な説明】
【００１２】
【図１】情報処理装置の構成例を示す図である。
【図２】データの選択および移動の動作例を説明するための図である。
【図３】データの選択および移動の動作例を説明するための図である。
【図４】ライトペナルティの発生例を示す図である。
【図５】ライトペナルティの発生が抑止される場合のデータ書き込み処理を示す図である。
【図６】ファイル管理システムの構成例を示す図である。
【図７】ファイルサーバの機能構成例を示す図である。
【図８】ファイルサーバのハードウェア構成例を示す図である。
【図９】ファイル管理の構成例を示す図である。
【図１０】データ数管理テーブルの構成例を示す図である。
【図１１】データ有無管理テーブルの構成例を示す図である。
【図１２】データ格納状態を示す図である。
【図１３】データ格納に変化があった状態を示す図である。
【図１４】ハードディスク追加後のストライプ状態を示す図である。
【図１５】データ再配置状態を示す図である。
【図１６】データ再配置状態を示す図である。
【図１７】データ配置制御を示すフローチャートである。
【図１８】データ配置制御を示すフローチャートである。
【図１９】移動元ストライプ探索処理の詳細フローを示す図である。
【図２０】移動先ストライプ探索処理の詳細フローを示す図である。
【図２１】データ移動処理の詳細フローを示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態を図面を参照して説明する。図１は情報処理装置の構成例を示す図である。情報処理装置１０は、記憶装置１１−１〜１１−Ｎ、選択手段１２（第１の選択手段）、選択手段１３（第２の選択手段）および移動手段１４を備える。
【００１４】
記憶装置１１−１〜１１−Ｎには、ストライプｓ１〜ｓｎが形成されている。ストライプｓ１〜ｓｎは、各々が記憶装置１１−１〜１１−Ｎのそれぞれの１ブロックの記憶領域の集合であり、ストライプｓ１〜ｓｎ内のブロックは、データと、該データの誤り訂正符号（以下、パリティ）との格納に使用される。
【００１５】
選択手段１２は、記憶装置１１−１〜１１−Ｎそれぞれの１ブロックずつの記憶領域をまとめた複数のストライプｓ１〜ｓｎのうち、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択する。
【００１６】
選択手段１３は、移動元のストライプ以外のストライプのうち、少なくとも１つのブロックにデータが格納されており、かつ該移動元のストライプ内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを、移動先として選択する。
【００１７】
移動手段１４は、該移動元のストライプに格納されているデータを、該移動先のストライプのブロックに移動する。
図２、図３はデータの選択および移動の動作例を説明するための図である。図２はデータの移動前の状態を示し、図３はデータの移動後の状態を示している。記憶装置１１−１〜１１−５があるとし、記憶装置１１−１の記憶領域は、ブロックｂ１−１〜ｂ１−４に分けられている。
【００１８】
また、記憶装置１１−２の記憶領域は、ブロックｂ２−１〜ｂ２−４に分けられ、記憶装置１１−３の記憶領域は、ブロックｂ３−１〜ｂ３−４に分けられている。さらに、記憶装置１１−４の記憶領域は、ブロックｂ４−１〜ｂ４−４に分けられ、記憶装置１１−５の記憶領域は、ブロックｂ５−１〜ｂ５−４に分けられている。
【００１９】
一方、記憶装置１１−１〜１１−５のこれら記憶空間は、ストライプｓ１〜ｓ４で形成されており、ストライプｓ１〜ｓ４は、記憶装置１１−１〜１１−５に渡って延び、記憶装置１１−１〜１１−５それぞれのブロックを有している。
【００２０】
すなわち、ストライプｓ１は、ブロックｂ１−１、ｂ２−１、ｂ３−１、ｂ４−１、ｂ５−１を含む。また、ストライプｓ２は、ブロックｂ１−２、ｂ２−２、ｂ３−２、ｂ４−２、ｂ５−２を含む。
【００２１】
同様にして、ストライプｓ３は、ブロックｂ１−３、ｂ２−３、ｂ３−３、ｂ４−３、ｂ５−３を含み、ストライプｓ４は、ブロックｂ１−４、ｂ２−４、ｂ３−４、ｂ４−４、ｂ５−４を含む。
【００２２】
図２における、ストライプｓ１〜ｓ４のデータおよびパリティの格納状態について示すと、ストライプｓ１では、ブロックｂ２−１にデータＢ２が格納され、ブロックｂ５−１にデータＢ１が格納され、ブロックｂ３−１、ｂ４−１は空きブロックとなっている。また、データＢ２、Ｂ１から算出されたパリティｐ１がブロックｂ１−１に格納されている。
【００２３】
ストライプｓ２では、ブロックｂ２−２にデータＡ３が格納され、ブロックｂ３−２にデータＣ１が格納され、ブロックｂ４−２にデータＢ３が格納され、ブロックｂ５−２は空きブロックとなっている。また、データＡ３、Ｃ１、Ｂ３から算出されたパリティｐ２がブロックｂ１−２に格納されている。
【００２４】
ストライプｓ３では、ブロックｂ２−３にデータＣ２が格納され、ブロックｂ３−３にデータＦ１が格納され、ブロックｂ４−３にデータＦ３が格納され、ブロックｂ５−３にデータＦ２が格納されている。また、データＣ２、Ｆ１、Ｆ３、Ｆ２から算出されたパリティｐ３がブロックｂ１−３に格納されている。
【００２５】
ストライプｓ４では、ブロックｂ２−４にデータＡ１が格納され、ブロックｂ３−４にデータＡ２が格納され、ブロックｂ４−４、ｂ５−４は空きブロックとなっている。また、データＡ１、Ａ２から算出されたパリティｐ４がブロックｂ１−４に格納されている。
【００２６】
上記のように、１つの情報単位のデータは、複数のストライプに分散されて格納されている（例えば、１つの情報単位を構成するデータＡ１〜Ａ３は、ストライプｓ２、ｓ４に分散されて格納されている）。
【００２７】
また、上記では、ストライプ単位で計算されたパリティを、記憶装置１１−１にまとめて格納しているが、記憶装置１１−１〜１１−４に分散して格納してもよい。
次にデータの選択動作について説明する。図２において、選択手段１２は、ストライプｓ１〜ｓ４のうち、少なくとも１つのブロックにデータが格納され、他のブロックに該データの誤り訂正符号が格納されているストライプを、移動元として選択する。ここでは、ストライプｓ４を選択したとする。
【００２８】
また、選択手段１３は、移動元のストライプｓ４以外のストライプｓ１〜ｓ３のうち、少なくとも１つのブロックにデータが格納されており、かつ移動元のストライプｓ４内のデータが格納されているブロック数と同数以上の空きブロック数を有するストライプを移動先として選択する。
【００２９】
この例では、選択手段１２で選択された、移動元のストライプｓ４内のデータが格納されているブロック数は２であるので、空きブロック数が２以上のストライプを選択することになる。
【００３０】
ここでは、ストライプｓ１が該当する（ストライプｓ２の空きブロック数は１、ストライプｓ３は空きブロックを持たない）。したがって、選択手段１３は、ストライプｓ１をデータ移動先のストライプとして選択する。
【００３１】
次にデータが移動して、データが１つも格納されていないストライプが生成されるまでの動作について説明する。図３において、移動手段１４は、移動元のストライプｓ４に格納されているデータＡ１、Ａ２を、移動先のストライプｓ１の空きブロックに移動する。
【００３２】
図３では、ストライプｓ４のブロックｂ２−４に格納されていたデータＡ１を、ストライプｓ１のブロックｂ３−１の空きブロックに移動している。また、ストライプｓ４のブロックｂ３−４に格納されていたデータＡ２を、ストライプｓ１のブロックｂ４−１の空きブロックに移動している。
【００３３】
なお、データ移動後のストライプｓ１では、格納データに変更があったので、パリティがあらためて計算される。新たなパリティ計算結果であるパリティｐ１ａは、ブロックｂ１−１に格納されている。
【００３４】
一方、ストライプｓ４では、格納していたすべてのデータＡ１、Ａ２がストライプｓ１へ移動したので、パリティｐ４も無くなり、ブロックｂ１−４、ｂ２−４、ｂ３−４、ｂ４−４、ｂ５−４はすべて空き領域となる。このため、ストライプｓ４は、データを１つも格納していないストライプとなる。
【００３５】
次にライトペナルティの発生と、情報処理装置１０による上記の制御によって、ライトペナルティの発生が抑止されることについて説明する。
図４はライトペナルティの発生例を示す図である。データとパリティがすでに書き込まれているストライプの空き領域に、新たなデータを書き込む場合には、ライトペナルティが生じる。
【００３６】
例えば、５ブロックから構成されるストライプｓ０があって、ストライプｓ０中には、データｄ１〜ｄ３と、データｄ１〜ｄ３から算出したパリティｐｒとがすでに書き込まれているとする。このような状態で、ストライプｓ０の空きブロックに、データｅ１を書き込む場合を考える。
【００３７】
この場合、まず、パリティｐｒが読み出される。そして、パリティｐｒと書き込みデータｅ１とを用いて、新たなパリティ（パリティｐｒ１とする）を算出し、その後、データｅ１と新パリティｐｒ１とがストライプｓ０へ書き込まれることになる。
【００３８】
このように、ストライプｓ０の空きブロックにデータｅ１を書き込む場合、新たなパリティ計算をするために、ストライプｓ０に書き込み済みのパリティｐｒを一旦読み出さなければならない。
【００３９】
そして、パリティｐｒと書き込みデータｅ１とを用いて、パリティ計算を行って、データｅ１の書き込みと、新パリティｐｒ１の再書き込みとが行われることになる。
このような処理がライトペナルティである。ライトペナルティでは、パリティ算出時に、すでに格納されているパリティを読み出すオーバーヘッドが存在するため、その分、データ書き込み処理の速度が遅延することになる。
【００４０】
図５はライトペナルティの発生が抑止される場合のデータ書き込み処理を示す図である。情報処理装置１０では、図１〜図３で上述したデータの選択・移動処理を行って、データが１つも格納されていないストライプを生成する。そして、データの書き込み要求があった場合には、データが何ら格納されていないストライプにデータを書き込むようにする（データが格納されていなければ、パリティも格納されていない）。
【００４１】
例えば、図５に示すように、データが１つも格納されていないストライプｓ５があり、ストライプｓ５にデータｄ１〜ｄ３を書き込むとする。この場合、データｄ１〜ｄ３を用いてパリティ計算が行われ、ストライプｓ５の空きブロックには、データｄ１〜ｄ３と、パリティ計算結果であるパリティｐｒとが書き込まれる。
【００４２】
このように、データを格納していないストライプにデータを書き込む場合は、パリティ算出時に、書き込み済みのデータおよびパリティを読み出すといったオーバーヘッドが存在しないので、データ書き込み処理速度の遅延を抑制することができる。すなわち、ライトペナルティの発生を抑止することが可能になる。
【００４３】
以上説明したように、情報処理装置１０では、記憶装置１１−１〜１１−Ｎの１ブロックずつの記憶領域をまとめた複数のストライプに対し、ストライプ内のデータを、空き領域がある別のストライプに移動するデータ配置制御を行うこととした。
【００４４】
これにより、データが格納されていないストライプが生成され、該ストライプにデータ書き込みが行われることで、ライトペナルティの発生を抑止することが可能になり、データの書き込み処理の遅延を抑制することが可能になる。
【００４５】
次に情報処理装置１０の適用例として、ファイルサーバに適用した場合の実施の形態について以降詳しく説明する。
図６はファイル管理システムの構成例を示す図である。ファイル管理システム１は、ファイルサーバ２０およびサーバ３０を備える。ファイルサーバ２０とサーバ３０は、ＬＡＮ（Local Area Network）で接続されている。
【００４６】
ファイルサーバ２０は、ストレージ部２３を含み、ストレージ部２３にはＲＡＩＤが構築されている。ファイルサーバ２０は、ＲＡＩＤ制御と、ファイルシステム管理を一元的に行う。また、ストレージ部２３に格納されているデータをファイルとして、サーバ３０へＬＡＮ経由で提供する。
【００４７】
次にファイルサーバ２０の構成および動作を説明する前に、従来のファイルサーバの課題について説明する。ファイルサーバでは、ファイルシステム制御の実行中、しばらくすると多数のファイルを格納するようになり、ストレージ容量が足りなくなる場合がある。
【００４８】
このような場合に備えて、ファイルサーバでは、データを格納するハードディスクを増設して容量を増やす機能を備えている。
空き容量が不足している状態でハードディスクを追加するような場合、これまで使用していたハードディスクの領域にはデータを追加して記憶できる領域が少なくなっている。このため、新規の書き込みデータのほとんどは、追加されたハードディスクに記憶されていくことになる。
【００４９】
このように、従来のファイルサーバでは、ＲＡＩＤを構成するハードディスクのうち、特定のハードディスクにのみデータ書き込みのアクセスが集中してしまうおそれがあり、書き込み処理の遅延が発生してしまう。
【００５０】
一方、データ書き込みが特定のハードディスクに集中してしまうと、別の問題を引き起こすこともある。すなわち、一般的には最近作られたデータを参照する場合が多いので、最近作成されたデータを読み出す場合には、新規に追加したハードディスクのみにアクセスが集中してしまう場合がある。
【００５１】
データの読み出し時は、ＲＡＩＤを構成するすべてのハードディスクから均等にデータ読み出しが行われることが最も高速にデータを読み出せる。しかし、ディスクアクセスが集中してしまうと、高速読み出しが不可能になる。
【００５２】
例えば、データを格納する３台のハードディスクに均等にアクセスされる場合の処理時間と、１台にハードディスクに集中してアクセスされる場合の処理時間とを比べると、最大で３倍の時間がかかってしまう。
【００５３】
本技術は、このような点にも鑑みてなされたものであり、特定のハードディスクへアクセスが集中されることを回避し、データの書き込み／読み出し処理の遅延の抑制を図るものである。
【００５４】
次にファイルサーバ２０の構成について説明する。図７はファイルサーバの機能構成例を示す図である。ファイルサーバ２０は、データ配置制御部２１、記憶部２２、ストレージ部２３、ＲＡＩＤ制御部２４およびファイルシステム２５を備える。
【００５５】
データ配置制御部２１は、図１で上述した選択手段１２、１３および移動手段１４の機能を含み、データ配置制御を行う。記憶部２２は、後述のデータ数管理テーブルＴ１と、ハードディスク毎のデータ有無管理テーブルＴ２，Ｔ２ａ，Ｔ２ｂ，・・・を保持する。
【００５６】
ストレージ部２３は、ハードディスクＤ０〜Ｄｎ（図１の記憶装置１１−１〜１１−Ｎに該当）を含み、ＲＡＩＤ制御部２４は、ハードディスクＤ０〜Ｄｎに対するＲＡＩＤ制御を行う。ファイルシステム２５は、ファイル管理制御を行う。
【００５７】
図８はファイルサーバのハードウェア構成例を示す図である。ファイルサーバ２０は、プロセッサ２０１、ハードディスク制御部２０２、ストレージ部２３、ネットワーク制御部２０４、メモリ２０５、ＳＳＤ（Solid State Drive）２０６、ネットワークポート２０７、シリアルポート２０８および光学ドライブ装置２０９を備える。
【００５８】
プロセッサ２０１、ハードディスク制御部２０２、ネットワーク制御部２０４、メモリ２０５、ＳＳＤ２０６、シリアルポート２０８および光学ドライブ装置２０９は、内部バス２ａを通じて互いに接続している。
【００５９】
プロセッサ２０１は、ＣＰＵ（Central Processing Unit）であり、各種プログラムを実行してデータ配置制御およびファイルシステム制御を行う。なお、プロセッサ２０１は、図７に示したデータ配置制御部２１およびファイルシステム２５を実現する。
【００６０】
ネットワーク制御部２０４は、例えば、ネットワーク制御の専用チップであり、ネットワークポート２０７を介して、外部ネットワークとのインタフェース制御を行う。
ハードディスク制御部２０２は、例えば、ＳＡＳ（Serial Attached SCSI（Small Computer System Interface））コントローラに該当し、図７に示したＲＡＩＤ制御部２４を実現する。
【００６１】
ハードディスク制御部２０２は、プロセッサ２０１の指示にもとづき、ストレージ部２３内のハードディスクＤ０〜Ｄｎに対するデータの書き込み／読み出しの制御を行う。
メモリ２０５は、例えば、ＲＡＭ（Random Access Memory）に該当し、図７に示した記憶部２２を実現する。ＳＳＤ２０６は、制御手順格納領域を有して、ファイルサーバ２０の動作手順を記した各種のプログラムを格納する。
【００６２】
例えば、ＲＡＩＤ制御、ファイルシステム制御およびデータ配置制御などのプログラムが、制御手順格納領域に格納される。なお、これらプログラムは、プロセッサ２０１によって読み出され、メモリ２０５上に格納、展開された後に実行される。
【００６３】
ネットワークポート２０７は、ＬＡＮケーブルを介して外部端末３ａと接続し、シリアルポート２０８は、シリアルケーブルを介して外部端末３ａと接続する。ネットワークポート２０７およびシリアルポート２０８は、外部の装置と通信を行うためのインタフェースポートとなる。なお、ネットワークポート２０７には、ＬＡＮケーブルを介して図６に示したサーバ３０も接続される。光学ドライブ装置２０９は、レーザ光などを利用して、光ディスク２０９ａに記録されたデータの読み取りを行う。
【００６４】
以上のようなハードウェア構成によって、本実施の形態の処理機能を実現することができる。また、コンピュータで本実施の形態の処理機能を実現する場合、ファイルサーバ２０が有する機能の処理内容を記述したプログラムが提供される。
【００６５】
そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＤＶＤ、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ／ＲＷなどがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。なおプログラムを記録する記録媒体には、一時的な伝搬信号自体は含まれない。
【００６６】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤ−ＲＯＭなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【００６７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。また、コンピュータは、サーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムに従った処理を実行することもできる。
【００６８】
また、上記の処理機能の少なくとも一部を、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＰＬＤ（Programmable Logic Device）などの電子回路で実現することもできる。
【００６９】
次にファイルサーバ２０で行われるファイル管理の仕組みについて説明する。図９はファイル管理の構成例を示す図である。
ハードディスク等の記憶媒体にデータを管理するための方法としては、ファイルシステムを利用する方法が知られている。ファイルシステムは、一般的に、データを管理・制御するための領域と、データそのものの領域とに大別される。
【００７０】
前者はinodeと呼ばれることが多い。また、後者は、図９では、Direct blocks、Indirect blocks、Double indirect blocksとして示されている（総称する場合は、データブロックと呼ぶ）。
【００７１】
１つのデータには、少なくとも１つのinodeが割り当てられて、データが管理される。inodeを参照することで、ファイルのメタデータ（属性情報など）や、実際のデータが格納されている場所などがわかるようになっている。
【００７２】
例えば、inodeでは、データを格納したブロックの位置が、ハードディスクの番号とストライプの番号（またはハードディスク内での該当ストライプに対応するブロック番号）との組で指定されている。なお、データは、一覧表示することが多いため、inode情報は、キャッシュ上に存在していることが多い。
【００７３】
また、データを再配置する場合、データブロックの場所が変わることになる。このような場合、inodeに格納された、データブロックの位置情報が更新される。Indirect blocks、Double indirect blocksの場合は、inode自体は変更されないが、それらデータブロックを指し示している制御情報４１、４２（図中、丸印で囲んだ部分）を格納している部分が更新される。
【００７４】
制御情報４１、４２には、ハードディスクの識別子と、そのハードディスク内での位置情報が格納されている。なお、inodeおよび制御情報４１、４２がキャッシュ上に存在している状態は、inode cacheとして表現される。
【００７５】
次にデータ数管理テーブルＴ１およびデータ有無管理テーブルＴ２について説明する。図１０はデータ数管理テーブルの構成例を示す図である。データ数管理テーブルＴ１は、「ストライプＳ（ｉ）」および「ストライプ単位のデータ数」の情報が登録される。
【００７６】
「ストライプＳ（ｉ）」は、ストライプの識別情報（ストライプ番号）である。なお、ストライプ番号は、通常、ブロックのアドレスの若い方から順に番号が付けられる。
「ストライプ単位のデータ数」は、ストライプ内に格納されているデータの数である。データ数の最大値は、ＲＡＩＤを構成するハードディスクの数となる。
【００７７】
なお、データ数管理テーブルＴ１は、１つのＲＡＩＤあたりに１つ存在する。また、テーブル表現として、Ｓ（ｘ）＝ｙと書いた場合は、番号ｘのストライプには、有効なデータがｙ個格納されていることを示す。
【００７８】
図１１はデータ有無管理テーブルの構成例を示す図である。データ有無管理テーブルＴ２は、ハードディスク（ｚ）毎（番号ｚのハードディスク毎）に、「ストライプＳ（ｉ）」および「ストライプ単位のデータ有無」の情報が登録される。
【００７９】
「ストライプＳ（ｉ）」は、ストライプの識別情報（ストライプ番号）である。「ストライプ単位のデータ有無」は、ハードディスク毎のストライプ単位でのデータ有無の情報であり、データ有りの場合は“１”、データ無しの場合は“０”と表記する。
【００８０】
なお、データ有無管理テーブルＴ２は、ＲＡＩＤを構成するハードディスク毎に１つ存在する。また、テーブル表現として、Ｄz（ｘ）と書いた場合は、番号ｚのハードディスクの番号ｘのストライプを指すものとする。
【００８１】
したがって、例えば、Ｄ2（３）＝１と書いた場合、番号２のハードディスクにおける番号３のストライプには、有効なデータが格納されていることを表している。また、Ｄ2（３）＝０と書いた場合、番号２のハードディスクにおける番号３のストライプには、有効なデータが格納されていないことを表すことになる。
【００８２】
次に図１２〜図１６を用いて具体的な例を挙げながらデータ配置制御について説明する。なお、以降では、データが何ら格納されていない、すべて空きブロックで構成されるストライプに対して、データを書き込むことをストライプライト、また、このようなストライプの領域をストライプライト可能領域とも呼ぶ。
【００８３】
図１２はデータ格納状態を示す図である。データ格納初期状態を示している。ハードディスクＰ、Ｄ０〜Ｄ２がある。説明を簡単にするため、ハードディスクＰは、パリティを格納するディスクとし、ハードディスクＤ０〜Ｄ２は、データを格納するディスクとする。また、ハードディスクＰ、Ｄ０〜Ｄ２に渡って、ストライプＳ（０）〜Ｓ（ｎ−１）が形成されている。
【００８４】
以下、ストライプ毎のデータおよびパリティの格納状態について示す。ストライプＳ（０）では、ハードディスクＤ０のブロックにはデータＡ１が格納され、ハードディスクＤ１のブロックにはデータＡ２が格納され、ハードディスクＤ２のブロックにはデータＡ３が格納されている。よって、Ｓ（０）＝３である。また、データＡ１〜Ａ３から算出されたパリティＰ０がハードディスクＰのブロックに格納されている。
【００８５】
ストライプＳ（１）では、ハードディスクＤ０のブロックにはデータＡ４が格納され、ハードディスクＤ１のブロックにはデータＡ５が格納され、ハードディスクＤ２のブロックにはデータＢ０が格納されている。よって、Ｓ（１）＝３である。また、データＡ４、Ａ５、Ｂ０から算出されたパリティＰ１がハードディスクＰのブロックに格納されている。
【００８６】
ストライプＳ（２）では、ハードディスクＤ０のブロックにはデータＢ１が格納され、ハードディスクＤ１のブロックにはデータＢ２が格納され、ハードディスクＤ２のブロックにはデータＣ０が格納されている。よって、Ｓ（２）＝３である。また、データＢ１、Ｂ２、Ｃ０から算出されたパリティＰ２がハードディスクＰのブロックに格納されている。
【００８７】
図１３はデータ格納に変化があった状態を示す図である。図１２の状態からしばらくするとフラグメンテーション状態となり、図１３では、データＡ１、Ｂ１が書き換えられ、データＢ３、Ｂ４が新たに追加された状態を示している。
【００８８】
図中、更新された旧データにはｏｌｄを付加し、更新した新データにはｎｅｗを付加し、追加データにはａｄｄを付加して示している。なお、ｏｌｄが付加されている旧データのブロックは空きブロックである。
【００８９】
以下、ストライプ毎のデータおよびパリティの格納状態について示す。ストライプＳ（０）では、ハードディスクＤ１のブロックにデータＡ２が格納され、ハードディスクＤ２のブロックにデータＡ３が格納されている。よって、Ｓ（０）＝２である。また、データＡ２、Ａ３から新たなパリティ計算が行われ、算出されたパリティＰ０-1がハードディスクＰのブロックに格納されている。
【００９０】
ストライプＳ（１）の格納状態に変化はない。ストライプＳ（２）では、ハードディスクＤ１のブロックにデータＢ２が格納され、ハードディスクＤ２のブロックにデータＣ０が格納されている。よって、Ｓ（２）＝２である。また、データＢ２、Ｃ０から新たなパリティ計算が行われ、算出されたパリティＰ２-1がハードディスクＰのブロックに格納されている。
【００９１】
ストライプＳ（ｎ−２）では、ハードディスクＤ０のブロックにはデータＡ１（ｎｅｗ）が格納され、ハードディスクＤ１のブロックにはデータＢ１（ｎｅｗ）が格納され、ハードディスクＤ２のブロックにはデータＢ３（ａｄｄ）が格納されている。よって、Ｓ（ｎ−２）＝３である。また、データＡ１（ｎｅｗ）、Ｂ１（ｎｅｗ）、Ｂ３（ａｄｄ）からパリティ計算が行われ、算出されたパリティＰ（ｎ−２）がハードディスクＰのブロックに格納されている。
【００９２】
ストライプＳ（ｎ−１）では、ハードディスクＤ０のブロックにはデータＢ４（ａｄｄ）が格納されている。よって、Ｓ（ｎ−１）＝１である。また、データＢ４（ａｄｄ）からパリティ計算が行われ、算出されたパリティＰ（ｎ−１）がハードディスクＰのブロックに格納されている。
【００９３】
次に図１３に示す状態に対し、新たなハードディスクが追加されたとする。図１４はハードディスク追加後のストライプ状態を示す図である。データ配置制御部２１では、未使用のハードディスクＤ３の追加時には、既存のストライプそれぞれに、ハードディスクＤ３内のブロックを追加する（追加手段）。
【００９４】
したがって、ハードディスクＤ３が追加される前は、ストライプＳ（０）〜Ｓ（ｎ−１）の各ブロック数は４であったが、ハードディスクＤ３が追加された後は、ストライプＳ（０）〜Ｓ（ｎ−１）の各ブロック数は５となる。
【００９５】
次にハードディスク追加後のデータ移動元のストライプ選択動作について説明する。データ配置制御部２１は、既存のストライプそれぞれへのブロックの追加が行われたときに、移動元とするストライプの選択処理を開始する。
【００９６】
データ配置制御部２１では、データが格納されているストライプのうち、データが格納されているブロック数が少ないストライプを優先的に移動元ストライプとして選択する（格納されているデータ数が０個の場合は除く）。
【００９７】
図１４の場合では、データが格納されているブロック数が最も少ないストライプは、ストライプＳ（ｎ−１）である。次に少ないのがストライプＳ（０）、Ｓ（２）であり、データが格納されているブロック数が一番多いのが、ストライプＳ（１）、Ｓ（ｎ−２）である。したがって、データ配置制御部２１は、移動元ストライプとして、ストライプＳ（ｎ−１）を選択する。
【００９８】
次に移動先ストライプの選択動作について説明する。移動先ストライプの選択時、データ配置制御部２１は、データ移動後に生じる空きブロック数が少ないストライプを優先的に選択する。
【００９９】
この例では、移動元ストライプＳ（ｎ−１）のデータ数は１であり、データを格納するハードディスク数（ブロック数）は４である。
したがって、現在、ストライプ中に３（＝４−１）つのデータを格納しているストライプがあれば、そのストライプにデータを移動すれば、空きブロック数は０になる。よって、３つのデータを格納しているストライプは、この場合、データ移動後に生じる空きブロック数が最も少なくなるストライプであるといえる。
【０１００】
現在、３つのデータを格納しているストライプは、ストライプＳ（１）、Ｓ（ｎ−２）の２つがある。同一条件の移動先ストライプが複数あるときは、ストライプ番号の若番から順に選択するものとすれば、ストライプＳ（１）を選択することになる。
【０１０１】
図１５はデータ再配置状態を示す図である。データ配置制御部２１は、移動先ストライプとして、ストライプＳ（１）を選択する。その後、データ配置制御部２１は、移動元ストライプＳ（ｎ−１）のハードディスクＤ１に格納されていたデータＢ４（ａｄｄ）を移動先ストライプＳ（１）のハードディスクＤ３に移動して格納する。このとき、パリティも再計算されて、新パリティ（パリティＰ１―1とする）がストライプＳ（１）のハードディスクＰに格納される。
【０１０２】
上記のようなデータ再配置によって、ストライプＳ（ｎ−１）は、データを格納しているブロックがすべて無くなるので、ストライプライト可能領域とすることができた。
以下同様な制御が行われる。次のデータ再配置について説明すると、まず、データ配置制御部２１は、データが格納されているストライプのうち、データが格納されているブロック数が少ないストライプを優先的に移動元ストライプとして選択する（格納されているデータ数が０個の場合は除く）。
【０１０３】
図１５の段階で、データが格納されているブロック数が最も少ないストライプは、ストライプＳ（０）、Ｓ（２）である。同一条件の移動元ストライプが複数あるときは、ストライプ番号の旧番から順に選択するものとすれば、ここでは、ストライプＳ（２）を選択することになる。したがって、データ配置制御部２１は、移動元ストライプとして、ストライプＳ（２）を選択する。
【０１０４】
次に移動先ストライプの選択を行う。データ配置制御部２１は、データ移動後に生じる空きブロック数が少ないストライプを優先的に選択する。この例では、移動元ストライプＳ（２）のデータ数は２である。また、データを格納するハードディスク数（ブロック数）は４である。
【０１０５】
したがって、現在、ストライプ中に２（＝４−２）つのデータを格納しているストライプがあれば、そのストライプにデータを移動すれば、空きブロック数は０になる。よって、２つのデータを格納しているストライプは、この場合、データ移動後に生じる空きブロック数が最も少なくなるストライプであるといえる。
【０１０６】
現在、移動元ストライプのストライプＳ（２）以外で、２つのデータを格納しているストライプは、ストライプＳ（０）であるので、データ配置制御部２１は、移動先ストライプとして、ストライプＳ（０）を選択する。
【０１０７】
図１６はデータ再配置状態を示す図である。データ配置制御部２１は、移動元ストライプＳ（２）のハードディスクＤ１に格納されていたデータＢ２を、移動先ストライプＳ（０）のハードディスクＤ０に移動して格納する。
【０１０８】
さらに、データ配置制御部２１は、移動元ストライプＳ（２）のハードディスクＤ２に格納されていたデータＣ０を、移動先ストライプＳ（０）のハードディスクＤ３に移動して格納する。このとき、パリティも再計算されて、新パリティ（パリティＰ０-2とする）がストライプＳ（０）のハードディスクＰに格納される。
【０１０９】
上記のようなデータ再配置によって、ストライプＳ（２）は、データを格納しているブロックがすべて無くなるので、ストライプライト可能領域とすることができた。なお、上記では、ハードディスクを追加した場合のデータ配置制御について説明したが、ハードディスクを追加しない場合でも、本手順によるデータ配置制御が可能である。
【０１１０】
以上説明したように、ストライプに格納されるデータの選択・移動を行って、少ないデータの配置動作によって、ストライプ可能領域を効率よく生成することができるので、ライトペナルティの発生を抑止することが可能になる。
【０１１１】
また、上記のデータ配置制御により、ハードディスクが追加されたような場合であっても、特定のハードディスクへアクセスが集中されることを回避することができるので、データの書き込み／読み出し処理の遅延を抑制することが可能になる。
【０１１２】
次にデータ配置制御についてフローチャートを用いて説明する。図１７、図１８はデータ配置制御を示すフローチャートである。なお、図１７は、移動元ストライプの探索処理フローを示し、図１８は、移動先ストライプの探索処理フローを示している。
【０１１３】
〔Ｓ１〕データ配置制御部２１は、ストライプ中に存在するデータ数Ｃが少ないストライプを探す。最初は、ストライプ中のデータ数Ｃが１個のストライプを探す。なお、移動元ストライプの探索は、ストライプ番号の旧番から若番に向かって探索する。すなわち、ストライプＳ（ｎ−１）→ストライプＳ（ｎ−２）→・・・→ストライプＳ（２）→ストライプＳ（１）→ストライプＳ（０）の順に探す。
【０１１４】
〔Ｓ２〕データ配置制御部２１は、データ数管理テーブルＴ１から、Ｃに一致するデータ数のストライプを探す。
〔Ｓ３〕データ配置制御部２１は、Ｓ（ｉ）＝Ｃか否かを判断する。ｉはストライプ番号である。Ｓ（ｉ）＝Ｃの場合は、ステップＳ１１へ行き、Ｓ（ｉ）≠Ｃの場合は、ステップＳ４へ行く。なお、Ｓ（ｉ）＝Ｃの場合は、移動元ストライプが見つかったので、ステップＳ１１に行って、移動先ストライプを探す処理を行うことになる。
【０１１５】
〔Ｓ４〕データ配置制御部２１は、ストライプＳ（ｉ）がストライプ検索対象の最後であるか否かの判断を行う。
〔Ｓ５〕データ配置制御部２１は、ｉ＝０か否かを判断する。ｉ＝０の場合は、ステップＳ７へ行き、ｉ≠０の場合は、ステップＳ６へ行く。
【０１１６】
ｉ＝０の場合は、先頭のストライプＳ（０）まで探したので、全ストライプチェックの完了となる。ｉ≠０の場合は、全ストライプを探していないので、先頭に向かって探索することになる。
【０１１７】
〔Ｓ６〕データ配置制御部２１は、次のストライプを探す。ステップＳ２へ戻る。
〔Ｓ７〕データ配置制御部２１は、次にデータ数が少ないストライプを探す。例えば、最初にＣ＝１のストライプを探したら、次にＣ＝２のストライプを探す（データ数が２のストライプを探す）。このように、段階的に、データ数Ｃを増やしていく。
【０１１８】
〔Ｓ８〕データ配置制御部２１は、移動元のデータ数が大きくなりすぎたか否かの判断処理を行う。
〔Ｓ９〕データ配置制御部２１は、Ｃ≧Ｄｎ／２であるか否かを判断する。ここで、移動元ストライプに格納されるデータの数が大きくなりすぎたか否かを判断する条件式は、Ｃ≧Ｄｎ／２とする。Ｃはデータ数、Ｄｎは現在稼働するハードディスク数（ストライプ当たりのブロック数）である。
【０１１９】
データ配置制御部２１では、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプがある場合、このストライプを移動元として選択する。また、データ配置制御部２１は、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプが見つからなくなるまで、移動元とするストライプの選択を繰り返し実行する。
【０１２０】
したがって、Ｃ＜Ｄｎ／２を満たす場合は、ステップＳ２へ戻り、ストライプ探索処理を再度行う。また、Ｃ≧Ｄｎ／２を満たす場合は、移動元データ数がデータ格納に利用するブロックの半分以上であるので、この場合は、 移動させるデータは無いと判断して、移動元ストライプの探索処理は終了する。
【０１２１】
〔Ｓ１１〕データ配置制御部２１は、データ数管理テーブルＴ１から、Ｃのデータ数を移動できる移動先ストライプを探す。なお、移動先ストライプの探索は、ストライプ番号の若番から旧番に向かって探索する。すなわち、ストライプＳ（０）→ストライプＳ（１）→・・・→ストライプＳ（ｎ−２）→ストライプＳ（ｎ−１）の順に探す。
【０１２２】
〔Ｓ１２〕データ配置制御部２１は、Ｓ（ｊ）＝Ｄｎ−Ｃ−Ｘか否かを判断する。ここで、移動先ストライプと指定してよいか否かを判断する条件式は、Ｓ（ｊ）＝Ｄｎ−Ｃ−Ｘとする。ｊは移動先ストライプの番号、Ｄｎは現在稼働するハードディスク数（ストライプ当たりのブロック数）、Ｘは補正値であり、最初は補正無し（補正値＝０）である。
【０１２３】
Ｓ（ｊ）＝Ｄｎ−Ｃ−Ｘの場合はステップＳ１３へ行き、Ｓ（ｊ）≠Ｄｎ−Ｃ−Ｘの場合はステップＳ１４へ行く。
〔Ｓ１３〕データ配置制御部２１は、移動先ストライプが見つかったので、移動元ストライプ内のデータを移動先ストライプへ移動する。ステップＳ４へ戻る。なお、データ配置制御部２１は、データ移動後は、データ数管理テーブルＴ１およびデータ有無管理テーブルＴ２の登録変更も行う。
【０１２４】
〔Ｓ１４〕データ配置制御部２１は、ストライプＳ（ｊ）がストライプ検索対象の最後であるか否かの判断を行う。
〔Ｓ１５〕データ配置制御部２１は、ｊ＝ｎ−１か否かを判断する。ｊ≠ｎ−１の場合はステップＳ１６へ行き、ｊ＝ｎ−１の場合はステップＳ１７へ行く。
【０１２５】
ｊ＝ｎ−１の場合は、最後のストライプＳ（ｎ−１）まで探したので、全ストライプチェックの完了となる。ｊ≠ｎ−１の場合は、全ストライプを探していないので、最後のストライプＳ（ｎ−１）に向かって探索することになる。
【０１２６】
〔Ｓ１６〕データ配置制御部２１は、次のストライプを探す。ステップＳ１１へ戻る。
〔Ｓ１７〕データ配置制御部２１は、最後のストライプＳ（ｎ−１）まで探索したので、より空きブロック数が多い移動先ストライプを探す処理を行う。
【０１２７】
〔Ｓ１８〕データ配置制御部２１は、Ｘ≧Ｄｎ−Ｃか否かを判断する。Ｘ＜Ｄｎ−Ｃの場合はステップＳ１９へ行き、Ｘ≧Ｄｎ−Ｃの場合はステップＳ２０へ行く。
ここで、空きブロック数が多い移動先ストライプを探すための条件式は、Ｘ≧Ｄｎ−Ｃとなる。Ｘ≧Ｄｎ−Ｃを満たす場合は、ステップＳ１２で示した式が成立しないので、移動先ストライプは無い。また、Ｘ＜Ｄｎ−Ｃを満たす場合は、ステップＳ１２で示した式が成立し、データ格納可能な移動先ストライプが存在するので、移動先ストライプの探索処理を続ける。
【０１２８】
〔Ｓ１９〕データ配置制御部２１は、最初のストライプから探す。ステップＳ１１へ戻る。
〔Ｓ２０〕データ配置制御部２１は、移動元ストライプのデータを格納可能な移動先ストライプが存在しないと判断して、移動先ストライプの探索処理は終了する。
【０１２９】
このようにして、ストライプライト可能領域を増やすようなデータの起動が行われる。なお、より詳細には、データ配置制御部２１は、データ数管理テーブルＴ１やデータ有無管理テーブルＴ２の内容を更新しながら、移動元ストライプの探索処理、移動先ストライプの探索処理、およびデータ移動処理を繰り返し行うこととなる。以下、テーブルの更新も含めた、移動元ストライプ探索処理の詳細フローについて説明する。図１９は移動元ストライプ探索処理の詳細フローを示す図である。
【０１３０】
〔Ｓ３１〕データ配置制御部２１は、データ数Ｃに対し、Ｃ＝１と設定する。
〔Ｓ３２〕データ配置制御部２１は、データ数管理テーブルＴ１の登録情報をリードする。
【０１３１】
〔Ｓ３３〕データ配置制御部２１は、Ｓ（ｉ）＝＝０であるか否かを判断する。ｉは移動元ストライプ番号である。ストライプＳ（ｉ）中のブロックが、すべて空きブロックか否かを判断している。Ｓ（ｉ）＝＝０の場合は、ステップＳ３４へ行き、Ｓ（ｉ）＝＝０でない場合は、ステップＳ３５へ行く。なお、最初の探索時、ｉ＝ｎ−１である。
【０１３２】
〔Ｓ３４〕データ配置制御部２１は、ｉを１つデクリメントする。ステップＳ３２へ戻る。
〔Ｓ３５〕データ配置制御部２１は、Ｓ（ｉ）＝＝Ｃであるか否かを判断する。Ｓ（ｉ）＝＝Ｃの場合は、ステップＳ３９へ行く。Ｓ（ｉ）＝＝Ｃでない場合は、ステップＳ３６へ行く。
【０１３３】
〔Ｓ３６〕データ配置制御部２１は、ｉ＝＝０であるか否かを判断する。すなわち、先頭のストライプまで探索したか否かを判断する。ｉ＝＝０の場合は、すべてのストライプの探索をしたと認識し、ステップＳ３７へ行く。ｉ＝＝０でない場合は、ステップＳ３４へ戻り、さらに探索を行う。
【０１３４】
〔Ｓ３７〕データ配置制御部２１は、Ｃを１つインクリメントする。
〔Ｓ３８〕データ配置制御部２１は、Ｃ≧Ｄｎ／２であるか否かを判断する。Ｃ≧Ｄｎ／２の場合は、移動元のデータ数が大きくなりすぎたと認識して終了し、Ｃ＜Ｄｎ／２の場合はステップＳ３２へ戻る。
【０１３５】
〔Ｓ３９〕データ配置制御部２１は、現在探索しているストライプＳ（ｉ）が移動元ストライプと決定する。そして、移動先ストライプ探索処理へ移行する。
〔Ｓ４０〕移動先ストライプ探索処理から復帰すると、データ配置制御部２１は、移動元ストライプから移動先ストライプへのデータ移動処理へ、処理を移行する。データ移動処理から復帰すると、処理がステップＳ３２に戻る。
【０１３６】
次に移動先ストライプ探索処理の詳細フローについて説明する。図２０は移動先ストライプ探索処理の詳細フローを示す図である。
〔Ｓ４１〕データ配置制御部２１は、データ数管理テーブルＴ１の登録情報をリードする。
【０１３７】
〔Ｓ４２〕データ配置制御部２１は、Ｓ（ｊ）＝＝Ｄｎか否かを判断する。ｊは移動先ストライプ番号である。ストライプＳ（ｊ）中のブロックが、すべてデータが格納されているか否かを判断している。Ｓ（ｊ）＝＝Ｄｎの場合は、ステップＳ４３へ行き、Ｓ（ｊ）＝＝Ｄｎでない場合は、ステップＳ４４へ行く。なお、最初の探索時、ｊ＝０である。
【０１３８】
〔Ｓ４３〕データ配置制御部２１は、ｊを１つインクリメントする。ステップＳ４１へ戻る。
〔Ｓ４４〕データ配置制御部２１は、Ｓ（ｊ）＝＝Ｄｎ−Ｃ−Ｘか否かを判断する。Ｓ（ｊ）＝＝Ｄｎ−Ｃ−Ｘの場合は、データ配置制御部２１は、現在探索しているストライプＳ（ｊ）が移動先ストライプであると決定し、処理を呼び出し元に復帰させる。またＳ（ｊ）≠Ｄｎ−Ｃ−Ｘの場合は、データ配置制御部２１は処理をステップＳ４５へ進める。
【０１３９】
〔Ｓ４５〕データ配置制御部２１は、ｊ＝＝ｎ−１であるか否かを判断する。ｊ＝＝ｎ−１の場合はＸを補正して、より空きブロック数が多い移動先ストライプの探索処理を行うためにステップＳ４６へ行く。ｊ＝＝ｎ−１でない場合はステップＳ４３へ戻って探索を続ける。
【０１４０】
〔Ｓ４６〕データ配置制御部２１は、ｊ＝０とし、補正値Ｘを１つインクリメントする。
〔Ｓ４７〕データ配置制御部２１は、Ｘ≧Ｄｎ−Ｃか否かを判断する。Ｘ＜Ｄｎ−Ｃの場合はステップＳ４４へ戻る。Ｘ≧Ｄｎ−Ｃの場合は移動先ストライプが存在しないと認識して、処理を呼び出し元に復帰させずに終了する。
【０１４１】
次にデータ移動処理の詳細フローについて説明する。図２１はデータ移動処理の詳細フローを示す図である。
〔Ｓ５１〕データ配置制御部２１は、ＤL（ｉ）＝１であるか否かを判断する。Ｌはハードディスク番号、ｉは移動元ストライプ番号である。
【０１４２】
ＤL（ｉ）＝１であれば、ハードディスク番号Ｌの移動元ストライプ番号ｉに該当するブロックに、移動対象のデータが存在していることを示している。ＤL（ｉ）＝０であれば、ハードディスク番号Ｌの移動元ストライプ番号ｉに該当するブロックに、移動対象のデータが存在しないことを示している。ＤL（ｉ）＝１であればステップＳ５３へ行き、ＤL（ｉ）＝０であればステップＳ５２へ行く。
【０１４３】
〔Ｓ５２〕データ配置制御部２１は、ハードディスク番号Ｌを１つインクリメントする。ステップＳ５１へ戻る。
〔Ｓ５３〕データ配置制御部２１は、ＤM（ｊ）＝０であるか否かを判断する。Ｍはハードディスク番号、ｊは移動先ストライプ番号である。
【０１４４】
ＤM（ｊ）＝０であれば、ハードディスク番号Ｍの移動先ストライプ番号ｊに該当するブロックが、空きブロック（データの移動先ブロック）になっていることを示している。ＤM（ｊ）＝１であれば、ハードディスク番号Ｍの移動先ストライプ番号ｊに該当するブロックが、空きブロックではないことを示している。ＤM（ｊ）＝０であればステップＳ５５へ行き、ＤM（ｊ）＝１であればステップＳ５４へ行く。
【０１４５】
〔Ｓ５４〕データ配置制御部２１は、ハードディスク番号Ｍを１つインクリメントする。ステップＳ５３へ戻る。
〔Ｓ５５〕データ配置制御部２１は、ＤL（ｉ）のブロックに格納されていたデータをＤM（ｊ）の空きブロックに移動する。
【０１４６】
〔Ｓ５６〕データ配置制御部２１は、設定値の更新処理を行う。すなわち、ハードディスクＭのストライプ番号ｊのブロックにデータを移動して格納したので、ＤM（ｊ）＝１と設定する。また、ハードディスクＬのストライプ番号ｊのブロックからデータを移動して、該ブロックは空きブロックになったので、ＤL（ｉ）＝０と設定する。
【０１４７】
なお、この場合、データ配置制御部２１は、データ数管理テーブルＴ１の該当ストライプのデータ数の情報を更新する。さらに、データ有無管理テーブルＴ２の該当ストライプのデータ有無の情報を更新する。
【０１４８】
さらにまた、データ配置制御部２１は、ファイルシステムにおける移動元のストライプに格納されていたデータの格納先のブロック位置の指定を、該移動元のストライプのブロックの位置から移動先のストライプのブロックの位置に更新する（更新手段）。すなわち、inode中の、ＤL（ｉ）に格納されていたデータの格納先のブロック位置指定を、ＤM（ｊ）のブロック位置指定に設定変更する。
【０１４９】
〔Ｓ５７〕データ配置制御部２１は、ｃｉ＝０であるか否かを判断する。ｃｉは、移動元のデータ数（Ｃ）である。ｃｉ＝０ならば、移動元ストライプ内のデータ移動は完了したので、データ配置制御部２１は、処理を呼び出し元に復帰させる。ｃｉ≠０であればステップＳ５８へ行く。
【０１５０】
〔Ｓ５８〕データ配置制御部２１は、移動元ハードディスク番号Ｌおよび移動先ハードディスク番号Ｍをそれぞれ１インクリメントする。ステップＳ５１へ戻る。
以上説明したように、本実施の形態によれば、一部のブロックにのみデータが格納されたストライプ内のデータを、一部のブロックにのみデータが格納されたストライプに移動し、ストライプライト可能領域を作り出すことができる。これにより、以後、新たなデータを格納する際には、ストライプライトによる書き込みを行うことができる。その結果、ライトペナルティの発生が抑止される。
【０１５１】
また本実施の形態では、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプが、移動元として選択される。これにより、移動するデータ量を抑止し、処理の効率化を図ることができる。
【０１５２】
しかも、本実施の形態では、データが格納されているストライプのうち、データが格納されているブロック数が少ないストライプを優先的に選択される。これにより、移動するデータ量の抑止効果をさらに向上させることができ、処理の効率化が促進される。
【０１５３】
さらに、本実施の形態では、データ格納に利用するブロックのうちの半分未満のブロックにデータが格納されているストライプが見つからなくなるまで、移動元とするストライプの選択が繰り返し実行される。これにより、より多くのストライプライト可能領域を生成できる。
【０１５４】
また、本実施の形態では、データ移動後に生じる空きブロック数が少ないストライプが、移動先として優先的に選択される。これにより、より多くのストライプライト可能領域を生成できる。
【０１５５】
また、本実施の形態では、ファイルシステムにおける移動元のストライプに格納されていたデータの格納先のブロック位置の指定が、該移動元のストライプのブロックの位置から移動先のストライプのブロックの位置に更新される。これにより、ストライプ間でのデータの移動を行っても、移動されたデータに適切にアクセスすることができる。
【０１５６】
また、本実施の形態では、未使用のハードディスクを追加時に、既存のストライプそれぞれに、該未使用のハードディスク内のブロックが追加され、既存のストライプそれぞれへのブロックの追加が行われたときに、移動元とするストライプの選択処理が開始される。そして移動元として選択されたストライプ内のデータが移動され、ストライプライト可能領域が生成される。これにより、その後のデータ書き込みが、増設されたハードディスクに集中することが抑止され、データアクセス効率が向上する。
【０１５７】
なお、上記の実施の形態では、ストレージ部２３を複数のハードディスクで構成しているが、ハードディスクに代えてＳＳＤなどの他の記憶媒体を使用することもできる。
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。
【符号の説明】
【０１５８】
１０  情報処理装置
１１−１〜１１−Ｎ  記憶装置
１２、１３  選択手段
１４  移動手段
ｓ１〜ｓｎ  ストライプ
【図１】
2013196276.tif 000003
【図２】
2013196276.tif 000004
【図３】
2013196276.tif 000005
【図４】
2013196276.tif 000006
【図５】
2013196276.tif 000007
【図６】
2013196276.tif 000008
【図７】
2013196276.tif 000009
【図８】
2013196276.tif 000010
【図９】
2013196276.tif 000011
【図１０】
2013196276.tif 000012
【図１１】
2013196276.tif 000013
【図１２】
2013196276.tif 000014
【図１３】
2013196276.tif 000015
【図１４】
2013196276.tif 000016
【図１５】
2013196276.tif 000017
【図１６】
2013196276.tif 000018
【図１７】
2013196276.tif 000019
【図１８】
2013196276.tif 000020
【図１９】
2013196276.tif 000021
【図２０】
2013196276.tif 000022
【図２１】
2013196276.tif 000023