(57)【特許請求の範囲】
【請求項１】
複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するデータ格納装置。
【請求項２】
同一内容のデータブロックを重複させる度合いである多重度を冗長グループごとに設定することを特徴とする請求項１記載のデータ格納装置。
【請求項３】
距離情報に基づいて信頼性のレベルを冗長グループごとに設定することを特徴とする請求項１記載のデータ格納装置。
【請求項４】
複数の記憶装置にデータを格納するデータ格納手段と、上記記憶装置のデータを読み出す読み出し手段とを備えたデータ格納装置のデータ管理方法において、
上記データ格納手段が、上記複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するデータ格納ステップと、
上記読み出し手段が、上記複数の記憶装置に分散して格納されたデータを上記所定数の記憶装置ごとに１又は複数のデータブロック単位で読み出す読み出しステップとを備えたデータ管理方法。
【請求項５】
複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するデータ格納手段としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
この発明はデータの冗長多重度に合わせて複数の２次記憶装置のグループを作成し、データを各グループに書き込むデータ格納装置、データ管理方法及びプログラムに関するものである。
【０００２】
【従来の技術】
近年、２次記憶装置（以下、ディスクと称する）の大容量化が進み、ディスクからデータを高速に転送する手法やディスクの高信頼性が求められている。これらの要求に答えるための手法の１つとして、ディスクアレイ装置がある。このディスクアレイ装置には、いくつかのデータ管理方法が提案されている。
【０００３】
ディスクアレイ装置のデータ管理方法の１つにミラーリングがある。このミラーリングは、ＲＡＩＤ１（ＲＡＩＤ：Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆＩｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）とも呼ばれる。その概要は、２つのディスクに同一のデータを書き込むことによってディスクの信頼性を向上させるものである。
【０００４】
図２７はミラーリングを用いたデータ格納例を示す図である。図において、＃Ｄ１〜＃Ｄ４がそれぞれ物理ディスクを表しており、Ｂ１〜Ｂ２４は物理ディスク＃Ｄ１〜＃Ｄ４に格納されるデータを示している。ここで、物理ディスク＃Ｄ１と物理ディスク＃Ｄ２、物理ディスク＃Ｄ３と物理ディスク＃Ｄ４が対をなしている。これら物理ディスクの対が１つの論理ディスクを構成する。対となる物理ディスクには同一のデータが書き込まれる。つまり、物理ディスク＃Ｄ１と物理ディスク＃Ｄ２にはデータＢ１〜Ｂ１２が格納され、物理ディスク＃Ｄ３と物理ディスク＃Ｄ４にはデータＢ１３〜Ｂ２４が格納される。
【０００５】
このように構成して、物理ディスク＃Ｄ１に障害が発生した時には物理ディスク＃Ｄ２にアクセスし、反対に物理ディスク＃Ｄ２に障害が発生すると物理ディスク＃Ｄ１にアクセスするように動作する。これによって、対となる物理ディスクが同時に故障しない限りはデータアクセスが可能である。
【０００６】
上述したミラーリングには、データ転送時に各物理ディスクの負荷が均等になるように、データを転送するディスクを選択してディスクの全体的なデータ転送性能を向上させる負荷分散機能を有するものがある。具体的に説明すると、ミラーリング構成をとる論理ディスクに対してデータ転送要求が発行された場合に、要求されたデータが物理ディスクから転送されてくる待ち時間の間に、次のデータ転送要求を物理ディスク対の他方に対して発行するものである。
これにより、データ転送が同時平行に行われるため、データの転送効率が向上する。
【０００７】
以上のように、ミラーリングは同一のデータを２つのディスクに格納する手法であり、ディスクの高信頼性、高速転送を実現する。
【０００８】
また、通常のミラーリングのようにディスクの対を作り、元データ、複製データを格納する以外の方法も提案されている。例えば、特開平６−１８７１０１号公報には元データの複製を複数のディスクに格納する従来のデータ格納装置（ディスクアレイ）が開示されている。
【０００９】
図２８は、上述した特開平６−１８７１０１号公報に開示される従来のディスクアレイによるデータ格納例を示す図であり、（ａ）は各ディスクの複製を他の全てのディスクに対して配置した例を示し、（ｂ）は元データの複製を２台以上の複製用のディスクに分けて格納した例を示している。
【００１０】
次に概要について説明する。
図２８（ａ）、（ｂ）のデータ管理方法では、ディスクに格納されたデータを転送する時に、各ディスクから並列にデータを転送するため、高速な転送が実現できる。また、特定のディスクにデータ転送要求が集中した場合にも他のディスクに負荷を分散させることが可能である。さらに、ディスクに故障が発生してデータをバックアップする際に、複数のディスクから並列にデータを転送してスペアディスクに書き込むことができる。このため、通常のミラーリングシステムと比較して、障害復旧、バックアップが速いといった利点もある。
【００１１】
【発明が解決しようとする課題】
従来のデータ格納装置は以上のように構成されているので、ミラーリング構成において、どのディスク同士を対として、元データや複製データの書き込みを行うかを十分に考慮しないと、システム全体としての信頼性を最大限に引き出すことができないという課題があった。
【００１２】
上記課題を具体的に説明すると、例えば図２７のミラーリング構成において、物理ディスク＃Ｄ１と物理ディスク＃Ｄ２が同一のマシンに置かれていた場合を考える。このとき、マシンレベルで障害が発生すると、物理ディスク＃Ｄ１と物理ディスク＃Ｄ２に同時にアクセスができなくなってしまう。
これについては、図２８（ｂ）に示すデータ管理方法においても、同様のことが言える。つまり、このようなミラーリング構成では、ディスク障害以外の障害には耐えることができない。
【００１３】
また、通常のミラーリングでは、元データを格納するディスクとその複製データを格納するディスクに同時に障害が起こらない限り、全てのデータにアクセス可能である。つまり、通常Ｎ台のディスクで構成されるミラーリングシステムでは最大Ｎ／２台のディスクが故障しても動作する。
しかしながら、図２８（ａ）に示す例では、任意の２台のディスクに障害が発生するとアクセスできなくなるデータが必ず発生してしまうという課題がある。
【００１４】
さらに、図２８（ｂ）の構成においては、ディスクの本数によっては必ずしもデータの配置が均等にならないため、データ転送時に各ディスクにかかる負荷が均等にならないという課題がある。
【００１５】
このように、従来のデータ転送時に負荷分散を行うミラーリング構成においては、ディスクが故障していなければ、各ディスクからデータ転送量が均等化するようにデータ転送ディスクの選択が行われる。しかしながら、ディスクに故障が発生すると、故障ディスクと対を組む物理ディスクのデータ転送量が増大してしまう。このため、そのディスクのデータ転送時間がボトルネックとなり、システム全体のスループットの低下につながるという課題があった。
【００１６】
この発明は上記のような課題を解決するためになされたもので、複数のディスクを用意し、各ディスクに格納するデータ量及び各ディスクからのデータ転送量を均等化することで、システム全体のスループットの低下を最小限に抑えることができるデータ格納装置、データ管理方法及びプログラムを得ることを目的とする。
【００１７】
また、この発明は、ディスク間の距離情報を元に同時に障害が起こりにくいディスク同士をグループ化し、各グループに同一のデータを書き込んでミラーリングを行うことで、システム内に保持されたデータの信頼性を向上させることができるデータ格納装置、データ管理方法及びプログラムを得ることを目的とする。
【００１８】
さらに、この発明は、ディスクの多重冗長構成を構築するデータ格納装置、データ管理方法及びプログラムを得ることを目的とする。
【００２１】
【課題を解決するための手段】
この発明に係るデータ格納装置は、複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するものである。
【００２９】
この発明に係るデータ格納装置は、同一内容のデータブロックを重複させる度合いである多重度を冗長グループごとに設定するものである。
【００３０】
この発明に係るデータ格納装置は、距離情報に基づいて信頼性のレベルを冗長グループごとに設定するものである。
【００３１】
この発明に係るデータ管理方法は、複数の記憶装置にデータを格納するデータ格納手段と、上記記憶装置のデータを読み出す読み出し手段とを備えたデータ格納装置のデータ管理方法において、上記データ格納手段が、上記複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するデータ格納ステップと、上記読み出し手段が、上記複数の記憶装置に分散して格納されたデータを上記所定数の記憶装置ごとに１又は複数のデータブロック単位で読み出す読み出しステップとを備えるものである。
【００３３】
この発明に係るプログラムは、複数の記憶装置の各記憶装置間における相互作用の指標である距離情報として、上記各記憶装置間の接続経路に応じて決定される上記接続経路の故障率から上記各記憶装置の接続経路の稼働率を求め、上記距離情報を用いて接続経路の故障により同時にアクセス不能となりにくい記憶装置同士をまとめた冗長グループを構成し、データを上記複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、上記冗長グループ内の各記憶装置に同一内容の上記データブロックを重複して格納するデータ格納手段としてコンピュータを機能させるものである。
【００３６】
【発明の実施の形態】
以下、この発明の実施の一形態を説明する。
実施の形態１．
図１はこの発明の実施の形態１によるデータ格納装置の構成例を示す図である。図において、１はネットワーク２を介してｎ台のノードマシン３−１〜３−ｎと接続するホストマシン（データ格納装置）であって、実施の形態１によるデータ格納を実現するプログラムを実行するコンピュータ装置である。２はホストマシン１とノードマシンを接続するネットワークで、インターネットやイントラネットなどの通信インフラが考えられる。３−１〜３−ｎはノードマシンであって、２次記憶装置であるディスクを有するコンピュータ装置である。これらホストマシン１、ネットワーク２及びノードマシン３−１〜３−ｎによって、全体的に１つのシステムが構成される。ここで、ホストマシン１とノードマシン３−１〜３−ｎとを接続する媒体としては、ネットワーク２に限られず、バスを用いて接続して並列システムを構成してもよい。また、ノードマシン３としては、Ｉ／Ｏ制御装置やＳＣＳＩなどでも構わない。
【００３７】
図２は図１中のホストマシンの構成を示す図である。図において、４は主記憶装置であって、オペレーティングシステム５、データ転送制御部（読み出し手段）６、ファイルブロック管理部（データ格納手段）７、通信制御部８及びノードマシン管理部（データ格納手段）９などの機能を実現するソフトウェアが格納されている。また、主記憶装置４に格納されるオペレーティングシステム５によってホストマシン１のハードウェア全体が制御される。１０はホストマシン１を構成するコンピュータ装置の中央演算処理装置（データ格納手段、読み出し手段）で、主記憶装置４内の各ソフトウェアを実行する。１１はネットワークアダプタであって、ホストマシン１によるネットワーク２への接続を制御する。１２ａは主記憶装置４と中央演算処理装置１０とを接続するシステムバスで、１２ｂはネットワークアダプタ１１やディスクコントローラ１４、及び、他のデバイスを接続するＰＣＩバスである。１３はバス結合装置であって、システムバス１２ａとＰＣＩバス１２ｂを結合する。１４はディスク装置（記憶装置）１５，１６を制御するディスクコントローラ１４である。
【００３８】
ここで、データ転送制御部６、ファイルブロック管理部７、通信制御部８、及びノードマシン管理部９としては、上述ではソフトウェアで実現する例を示したが、ファームウェアとしても良いし、上記機能を実現するハードウェアとして構成してもよい。また、ソフトウェアとファームウェアとハードウェアの組み合わせでもよい。
【００３９】
図３はこの発明の実施の形態１よるデータ格納装置の各ソフトウェアの関係を示す図である。図において、７ａは主記憶装置４に格納されるファイルブロック管理テーブルであって、データ転送時に各ディスクから転送するファイルブロックであるリードブロックを特定する情報を格納する。９ａはノードマシン管理テーブルで、ノードマシンの管理に関する情報を格納する。また、ノードマシン３−１〜３−ｎは、オペレーティングシステム１７、通信制御部１８及びディスクアクセス制御部１９の機能を実現するソフトウェアを実行し、２次記憶装置として複数のディスク装置（記憶装置）２０を有するものとする。
【００４０】
図４は図３中のノードマシン管理テーブルの構成を示す図である。図において、２１はノードマシン管理テーブル９ａを構成する情報の１つであるノードマシン管理情報であって、各ノードマシンを特定する情報としてノードマシン番号２１ａ、ＩＰアドレス２１ｂ、ポート番号２１ｃが設定される。ノードマシン管理部９は、このノードマシン管理情報２１を元にして各ノードマシンに接続するディスクを特定するディスク情報２２を取得し、ディスク情報２２におけるディスク番号２２ａ、ノードマシン番号２２ｂの設定を行う。２２はノードマシンに接続するディスクを特定するディスク情報で、ディスクを特定するディスク番号２２ａ、各ノードマシンを特定するノードマシン番号及びその冗長グループを特定する冗長グループ番号２２ｃから構成される。２３は階層情報であって、各ノードマシンに接続されたディスクの階層関係を特定する下位階層情報２３ａ及び上位階層情報２３ｂから構成される。２４は距離情報で、２つのノードマシン間で同時にアクセス不能となる可能性を示す指標である。つまり、距離情報２４は、ディスク間の相互作用を示す指標であると言える。
【００４１】
次に初期設定時における階層情報２３の設定例について説明する。
図５は実施の形態１によるデータ格納装置を構成するディスクの階層関係の一例を示す図である。図において、＃Ｄ１〜＃Ｄ８はデータ格納装置を構成するディスクである。また、符号２５−１，２５−２，２６−１，２６−２を付した枠で囲まれたディスクは、各ノードマシンに接続されたディスクであることを表している。さらに、符号２５，２６を付した枠で囲まれたディスクは、同一のフロアに存在するノードマシンに接続されたディスクであることを表している。また、２７は実施の形態１によるデータ格納装置を構成するシステム全体を表している。このようにシステムの全体を表すものをルートと呼ぶこととする。また、ノードマシン、フロアのように、ディスクを分類する枠をフレームと呼ぶこととする。つまり、ディスクの階層関係においてノードマシン、フロアを指す用語として、ノードマシンフレーム２５−１、ノードマシンフレーム２５−２、フロアフレーム２５を用いる。
【００４２】
ここで、ノードマシンフレーム２５−１に属するディスクは＃Ｄ１，＃Ｄ２であり、フロアフレーム２５に属するディスクは＃Ｄ１〜＃Ｄ４である。また、ルート２７に属するディスクはシステム内の全てのディスクであり、＃Ｄ１〜＃Ｄ８となる。つまり、このようなフレーム同士には、階層関係が存在する。図５の例では、ノードマシンフレーム２５−１に属するディスクは＃Ｄ１，＃Ｄ２であり、フロアフレーム２５に属するディスクは、ノードマシンフレーム２５−１，２５−２に属するディスクである。また、ルート２７に属するディスクは、フロアフレーム２５，２６に属するディスクでもある。
【００４３】
具体的に説明すると、ディスク＃Ｄ１に対して、上位階層はディスク＃Ｄ１が属する、ノードマシンフレーム２５−１であり、ノードマシンフレーム２５−１の上位階層はノードマシンフレーム２５−１が属するフロアフレーム２５であり、フロアフレーム２５の上位階層はルート２７となる。
【００４４】
図４の例では、下位階層情報２３ａがディスク＃Ｄ１であり、その上位階層情報２３ｂはノードマシンフレーム２５−１となる。同様にディスク＃Ｄ２を下位階層情報２３ａとすると、その上位階層情報２３ｂはノードマシンフレーム２５−１となる。以下、他の全てのディスクを下位階層情報２３ａとして、その上位階層情報２３ｂを設定する。
【００４５】
また、ノードマシンフレーム２５−１を下位階層情報２３ａとすると、その上位階層情報２３ｂはフロアフレーム２５となる。同様にノードマシンフレーム２５−２を下位階層情報２３ａとすると、その上位階層情報２３ｂはフロアフレーム２５となる。以下、他の全てのノードマシンフレームを下位階層情報とし、上位階層情報２３ｂを設定する。
【００４６】
さらに、フロアフレーム２５，２６を下位階層情報２３ａとすると、その上位階層情報２３ｂはルート２７となる。
【００４７】
ノードマシン管理部９は、以上のような階層関係を階層情報２３としてノードマシン管理テーブル９ａに設定する。この階層情報２３を用いることで、各ディスクからルートまでの階層関係が決定される。
【００４８】
ここで、本発明のデータ格納装置において、ディスクを分類する時のフレームは自由に設定して良い。図５では、ノードマシン、フロアのフレームを設定したが、例えば地域のような更に大きなフレームを追加したり、バスのように更に小さなフレームを追加したりすることも任意に行って良い。つまり、階層情報は１階層からＮ階層まで任意に設定することが可能である。
【００４９】
図６は実施の形態１によるデータ格納装置を構成するディスクの階層関係の他例を示す図である。図６に示すように、同一階層において複数のフレームに属するディスク、ノードマシンがあってもよい。つまり、ノードマシンフレーム２６−１はフロアフレーム２５，２６の両方に属しており、このノードマシンフレーム２６−１を下位階層情報２３ａとすると、上位階層情報２３ｂはフロアフレーム２５，２６の両方が設定されることになる。
【００５０】
一般的に低い階層で同一のフレームに属するディスクは、システム障害時に同時にアクセス不能となる可能性が高い。例えば、図５に示すように、フロアフレーム２５に対応するフロアで災害が発生すると、ディスク＃Ｄ１，＃Ｄ２，＃Ｄ３，＃Ｄ４のディスクへのアクセスが不能となる。また、ノードマシンフレーム２５−１に対応するノードマシンが故障した時にも、ディスク＃Ｄ１，＃Ｄ２へのアクセスが不能となる。
【００５１】
つまり、ノードマシンフレーム２５−１のような低い階層に分類されるディスク＃Ｄ１，＃Ｄ２は、ノードマシンフレーム２５−１が属するフロアフレーム２５のような上位階層のフレームで障害が発生してもアクセスが同時に不能となる。反対に、ディスク＃Ｄ１とディスク＃Ｄ８のような組み合わせであれば、２つのディスクが同時にアクセス不能となる可能性が低い。
【００５２】
また、階層構造のルートにホストマシン１を置くことによって、ホストマシン１から見た階層構造を構築することができる。例えば、図５で示された階層構造を有するシステムにおいて、フロアフレーム２５に対応するフロアにホストマシン１を設置した場合を考える。
【００５３】
図７は上述のように配置したホストマシンから見たシステムの階層構造を示す図である。図において、＃ＨＤ１，＃ＨＤ２はホストマシン１に接続されたディスクであり、ホストマシンフレーム２９に属する。２８は階層構造の最上位階層に対応するホストマシン階層、２９はホストマシン１に接続されたディスクであることを示すホストマシンフレームである。
【００５４】
図７に示すように、フロアフレーム２５に対応するフロアに設置されたホストマシン１を中心に階層構造を構築すると、ノードマシンフレーム２５−１，２５−２及びフロアフレーム２６は、ホストマシン階層２８を上位階層とする同一階層のフレームとして分類される。このようにシステムの階層構造を考慮することで、階層構造のルートに設置するものによってそれを中心としたシステムの階層構造を築くことができる。
【００５５】
次に初期設定時における距離情報２４の設定例について説明する。
ここで、距離情報は同時にアクセス不能となりやすいディスク同士においては値が小さくなり、同時にアクセス不能となりにくいディスク同士においては値が大きくなるように設定される。
【００５６】
階層情報２３を用いて距離情報２４を設定する手順について説明する。
階層情報２３を用いた場合、２つのディスクが低い階層で同一のフレームに属するならば、距離情報２４は小さくなる。逆に、低い階層で同一のフレームに属さず、高い階層で同一のフレームに属するならば、距離情報２４は大きくなる。
【００５７】
つまり、階層情報２３と距離情報２４の関係から、ディスク間の距離情報２４が小さい２つのディスクは、同時にアクセス不能となる可能性が高く、逆にディスク間の距離情報が大きい２つのディスクは、同時にアクセス不能となる可能性が低いと決定することができる。
【００５８】
ここで、階層情報２３の設定時に、図７に示すようにルートにホストマシン１を置いた場合を挙げると、階層情報２３と距離情報２４の関係から、ディスク間の距離情報２４が小さい２つのディスクは、ホストマシン１から見て同時にアクセス不能となる可能性が高いと判断することができる。一方、逆にディスク間の距離情報２４が大きい２つのディスクは、ホストマシン１から見て同時にアクセス不能となる可能性が低いと判断される。また、ホストマシン１に接続するディスクと、ホストマシン以外に設置されたディスクとの距離情報２４は、全距離情報の中で最大の値をとる。従って、ホストマシン１から見て、同時にアクセス不能となる可能性が最も低いということになる。
【００５９】
次に動作について説明する。
図８は実施の形態１によるデータ格納装置の動作を示すフロー図であり、この図に沿って階層情報２３を用いて距離情報２４を設定する動作について説明する。また、具体例として、図５中のディスク＃Ｄ１とディスク＃Ｄ３との間の距離情報２４を設定する場合についても併せて説明する。
【００６０】
先ず、ノードマシン管理部９は、システム全体の階層情報２３を調べてシステムの最大の階層数を取得する（ステップＳＴ１）。ここで、最大の階層数とは、ルートまでの階層数が最も多いディスクのルートまでの階層数である。この値は、距離情報２４の最大値として使用する。図５の例では、ディスク＃Ｄ１〜＃Ｄ８からルートまでの階層数は、全て等しく４段である。
【００６１】
次に、ノードマシン管理部９は、全てのディスクの組み合わせに対して距離情報２４の設定が完了しているか否かを判定する（ステップＳＴ２）。このとき、全てのディスクの組み合わせに対して設定が完了していなければ、ノードマシン管理部９は、ディスク間の距離情報２４の設定が完了していない２つのディスクを選択して、その距離情報２４の値に最大値（階層の段数）を設定する（ステップＳＴ３）。一方、全てのディスクの組み合わせに対して設定が完了していれば、ノードマシン管理部９は処理を終了する。図５の例では、ディスク＃Ｄ１とディスク＃Ｄ３との間の距離情報２４の設定が完了していないので、その値として最大の階層数４が設定される。
【００６２】
ステップＳＴ３において距離情報２４に最大値（階層の段数）が設定した２つのディスクに対して、ノードマシン管理部９は、各ディスクからルートまでの階層情報２３を調べる（ステップＳＴ４）。図５の例では、ノードマシン管理部９によってディスク＃Ｄ１からルートまで、及び、ディスク＃Ｄ３からルートまでの階層情報が求められる。これにより、ディスク＃Ｄ１の階層情報として、ディスク＃Ｄ１→ノードマシンフレーム２５−１→フロアフレーム２５→ルートが求められる。また、ディスク＃Ｄ３の階層情報として、ディスク＃Ｄ３→ノードマシンフレーム２５−２→フロアフレーム２５→ルートが求められる。
【００６３】
次に、ステップＳＴ４で調べた階層情報２３を用いて、ノードマシン管理部９は、ルートからディスク方向へ階層情報２３をたどりながら、選択した２つのディスクの各階層情報２３が共通する部分を有するか否かを判定する（ステップＳＴ５）。具体的に説明すると、ノードマシン管理部９は、先ず、選択した２つのディスクの最上位階層の階層情報２３を比較する。ここで、階層情報２３が異なる場合は、２つのディスクの距離情報２４の設定を終了し、ステップＳＴ２の処理に戻る。図５の例では、先ず、ディスク＃Ｄ１，＃Ｄ３の階層情報２３のうち、最上位の情報が比較される。
【００６４】
一方、階層情報２３が等しい場合には、ノードマシン管理部９は、２つのディスクの距離情報２４の値を１減少させる（ステップＳＴ６）。図５の例では、階層情報２３のうち、最上位の情報がディスク＃Ｄ１，＃Ｄ３どちらもルートで等しいと判定される。これにより、これらの距離情報２４の値が４から１減じられて３となる。
【００６５】
続いて、ノードマシン管理部９は、ルートからディスク方向へ階層情報２３をたどりながら、当該２つのディスクの各階層情報２３をさらに取得し（ステップＳＴ７）、ステップＳＴ５の処理に戻って各階層情報２３が共通する部分を有するか否かを判定する。図５の例では、ディスク＃Ｄ１，＃Ｄ３の階層情報２３を１つディスク方向へたどり、再度比較すると、これらはフロアフレーム２５に属する部分で共通する。このため、ディスク＃Ｄ１，＃Ｄ３の距離情報２４の値は２となる。
【００６６】
さらに、ノードマシン管理部９は、上述した操作を２つのディスクの階層情報２３における共通部分がなくなるまで、階層情報２３をディスク方向へ下げる手順を繰り返し、２つのディスク間の距離情報２４を設定する。図５の例では、階層情報を１つディスク方向へたどり、再比較を行うと、ディスク＃Ｄ１，＃Ｄ３の階層情報２３は、ノードマシン２５−１，２５−２で異なる。これにより、ディスク＃Ｄ１とディスク＃Ｄ３との間の距離情報２４の値は、２が設定される。
【００６７】
以上の操作を全てのディスク同士に適用することによって、階層情報２３を元にして距離情報２４を設定することができる。
【００６８】
また、図６に示すディスク＃Ｄ５，＃Ｄ６のように、複数のフレームにまたがって存在するディスクの距離情報２４を設定する場合を考える。この場合、図８のステップＳＴ４でディスク＃Ｄ５，＃Ｄ６からルートまでの階層情報２３を求める際に全ての組み合わせの階層情報２３を求める。つまり、図６に示すディスク＃Ｄ５からルートまでの階層情報２３は、ディスク＃Ｄ５→ノードマシンフレーム２６−１→フロアフレーム２５→ルートと、ディスク＃Ｄ５→ノードマシンフレーム２６−１→フロアフレーム２６→ルートの２つの組み合わせからなる。
【００６９】
ここで、ディスク＃Ｄ５と他のディスクとの距離情報２４を設定する時は、ディスク＃Ｄ５からルートまでの上記２種類の階層情報を使用して、距離情報２４の値が大きくなる方を使用する。例えば、ディスク＃Ｄ１とディスク＃Ｄ５との間の距離情報２４を求める場合、ディスク＃Ｄ５の階層情報２３としてフロアフレーム２５を経由する方を用いると、距離情報２４の値は２となる。一方、フロアフレーム２６を経由する方を用いると、距離情報２４の値は３となる。このため、ディスク＃Ｄ１とディスク＃Ｄ５との間の距離情報２４の値は３に設定される。
【００７０】
次に、距離情報２４を設定する他の方法について説明する。
ここでは、階層情報２３を用いずに、ディスクの故障率を元にして稼働率を算出し、これを距離情報２４として設定する方法を説明する。
図９は実施の形態１によるデータ格納装置の構成とディスクの階層関係における故障率とを示す図である。図において、３０−１，３０−２はノードマシンであって、ルータ３１−１を経由してホストマシン３２に接続されており、ノードマシン３０−３，３０−４がルータ３１−２を経由してホストマシン３２に接続されている。ここで、ホストマシン３２は、図１中のホストマシン１と同一構成を有するものとする。また、ディスク＃Ｄ１，＃Ｄ２はノードマシン３０−１に接続している。Ｂ１はディスク＃Ｄ１とノードマシン３０−１との間の故障率を示しており、Ｂ２はディスク＃Ｄ２とノードマシン３０−１との間の故障率を示している。同様に、ディスク＃Ｄ３〜＃Ｄ８に対しても接続しているノードマシンとの間の故障率Ｂ３〜Ｂ８が設定される。
【００７１】
また、Ｂ９はノードマシン３０−１とルータ３１−１との間の故障率である。同様にしてノードマシン３０−２，３０−３，３０−４に対しても接続されているルータとの間の故障率Ｂ９〜Ｂ１２が設定される。さらに、Ｂ１３はルータ３１−１とホストマシン３２との間の故障率であり、Ｂ１４はルータ３１−２とホストマシン３２との間の故障率である。
【００７２】
ノードマシン管理部９は、ホストマシン３２から２つのディスクのどちらかへのアクセス経路が稼動している状態を稼動状態として稼働率を算出し、当該稼働率を２つのディスクの距離情報２４として設定する。ここで、稼働率は、稼働率＝（１−故障率）で規定される。従って、ディスク＃Ｄ１とノードマシン３０−１との間の稼働率は、（１−Ｂ１）となる。また、ルータ３１−１からディスク＃Ｄ１のように経路が１つしかない場合の稼働率は、（１−Ｂ１）（１−Ｂ９）となる。さらに、ディスク＃Ｄ１，＃Ｄ２が同時に故障する確率はＢ１＊Ｂ２となる。このため、ノードマシン３０−１からディスク＃Ｄ１，＃Ｄ２のどちらかへのアクセス経路が稼動している状態の稼働率は、（１−Ｂ１＊Ｂ２）となる。
【００７３】
次に図９に示すディスク＃Ｄ１，＃Ｄ５の距離情報２４を設定する場合について説明する。このとき、ホストマシン３２からディスク＃Ｄ１まで稼働率は、（１−Ｂ１）（１−Ｂ９）（１−Ｂ１３）となる。一方、ホストマシン３２からディスク＃Ｄ５までの稼働率は、（１−Ｂ５）（１−Ｂ１１）（１−Ｂ１４）となる。
【００７４】
ここで、ホストマシン３２からディスク＃Ｄ１，＃Ｄ５のどちらかへのアクセス経路が確立している状態の稼働率を算出すると、｛１−｛１−（１−Ｂ１）（１−Ｂ９）（１−Ｂ１３）｝｛１−（１−Ｂ５）（１−Ｂ１１）（１−Ｂ１４）｝｝となる。この値がディスク＃Ｄ１と＃Ｄ５の距離情報２４として設定される。
【００７５】
また、次の例として、ディスク＃Ｄ１，＃Ｄ３の距離情報２４を設定する場合について説明する。このとき、ディスク＃Ｄ１とディスク＃Ｄ３とでは、ルータ３１−１まで異なる経路をとり、ルータ３１−１からホストマシン３２までは共通の経路をとる。
この例では、先ず、ルータ３１−１から見て、ディスク＃Ｄ１，＃Ｄ３のどちらかへのアクセス経路が確立している状態の稼働率を算出する。図９を参照すると、この稼働率は、｛１−｛１−（１−Ｂ１）（１−Ｂ９）｝｛１−（１−Ｂ３）（１−Ｂ１０）｝｝となる。
【００７６】
この値とルータ３１−１からホストマシン３２までの稼働率を用いて、ホストマシン３２からディスク＃Ｄ１，＃Ｄ３のどちらかへのアクセス経路が確立している状態の稼働率を求めると、｛１−｛１−（１−Ｂ１）（１−Ｂ９）｝｛１−（１−Ｂ３）（１−Ｂ１０）｝｝（１−Ｂ１３）となる。この値がディスク＃Ｄ１，＃Ｄ３の距離情報２４として設定される。
【００７７】
同様に全てのディスク同士の故障率を求めることによって、距離情報２４を設定することができる。
【００７８】
また、図１０は実施の形態１によるデータ格納装置の他の構成とディスクの階層関係における故障率とを示す図である。図１０に示すように、システムによっては、ディスクからホストマシンまで、複数の経路を持つ場合もある。ここで、図１０は、図９に示す構成にノードマシン３０−３とルータ３１−１との経路が追加され、故障率はＢ１５である。また、ノードマシン３０−２とルータ３１−２との経路も追加され、故障率Ｂ１６である。このような場合でもホストマシン３２から２つのディスクへの稼働率を算出し、当該稼働率を２つのディスクの距離情報２４として設定することができる。
【００７９】
次に初期設定時の冗長グループの作成について説明する。
ここで、冗長グループとは、同一のデータが格納されるディスクの集合であり、同時にアクセス不能となりにくいディスク同士を組み合わせたものである。
先ず、冗長グループを作成する一例として、距離情報２４を元にしてディスクを組み合わせる方法について説明する。
【００８０】
この場合、ノードマシン管理部９は、各冗長グループ内のディスク数をデータの多重度によって決定する。つまり、Ｍ（Ｍ；２以上の整数）多重のデータ冗長構成をとるシステムでは、Ｍ個のディスクを１つの冗長グループとして組み合わせる。
【００８１】
具体的に説明すると、ノードマシン管理部９は、ある１つの冗長グループの組み合わせを作成した時に、当該冗長グループ内でディスク間の距離情報２４が最大となる値を求める。この値を任意に組み合わせた各冗長グループ内においても求めて、この中で距離情報２４が最小となる値を求める。そして、ノードマシン管理部９は、全ての冗長グループの組み合わせに対して上記距離情報２４が最小となる値を求め、これらのうち最も大きい値を有する冗長グループの組み合わせを選択する。
【００８２】
例えば、図５に示す構成で、多重度２の冗長グループの組み合わせを作成する場合を考える。この場合、ノードマシン管理部９が｛＃Ｄ１，＃Ｄ５｝，｛＃Ｄ２，＃Ｄ６｝，｛＃Ｄ３，＃Ｄ７｝，｛＃Ｄ４，＃Ｄ８｝のような冗長グループの組み合わせを選択すると、各冗長グループ内で距離情報２４の最大値が３となる。このため、その中での最小値も３となる。図５に示す構造を有するシステムでは、この最小値が全ての冗長グループの組み合わせの中で最大の値となる。従って、このシステムの多重度２における冗長グループの組み合わせとして上記組み合わせが選択される。
【００８３】
同様に、各冗長グループ内のディスクの数をＭに増やすことで、Ｍ多重の冗長構成を構築することができる。
【００８４】
また、全ての冗長グループ内に、距離情報２４がＮ以上のディスクの組み合わせを１つ以上持たせることにより、Ｎ−１階層以下で障害が発生した場合にも動作するシステムを構築することができる。
【００８５】
さらに、冗長グループごとにデータの多重度を変更してもよい。つまり、ある冗長グループのデータの多重度はＭ多重であり、他の冗長グループのデータの多重度はＮ多重などという冗長構成も可能である。
【００８６】
なお、上記では、冗長グループを作成する時に階層情報２３から求めた距離情報２４を使用する例を示したが、各ディスク間の物理的な距離を基にして求められるディスク間の距離を使用して冗長グループの組み合わせを求めるようにしてもよい。
【００８７】
ここで、物理的な距離を基に求められるディスク間の距離を使用して、冗長グループを作成する手順について説明する。
ノードマシン管理部９は、ある１つの冗長グループの組み合わせを作成すると、当該冗長グループ内でディスク間の物理的な距離が最大となる値を求める。この値を任意に組み合わせた各冗長グループ内においても求めて、この中で最小となる値を求める。そして、ノードマシン管理部９は、全ての冗長グループの組み合わせに対して、この最小となる値を求め、これらのうち最も大きい値を有する冗長グループの組み合わせを選択する。
【００８８】
図１１は同一フロアに設置されたディスクの物理的な位置関係を示す図である。例えば、ディスク＃Ｄ１とディスク＃Ｄ２はフロア内で近い位置に設置されたディスクであり、ディスク＃Ｄ３とディスク＃Ｄ７はフロア内で遠い位置に配置されたディスクであることを示している。ノードマシン管理部９は、例えば図１１に示されるような平面上に配置されたディスク集合に対して、ディスク間の物理的な位置情報を基にして求めたディスク間の距離を使用し、冗長グループを作成する。
【００８９】
図１１に示す条件で、多重２の冗長グループを作成する場合を考える。この場合、ノードマシン管理部９が｛＃Ｄ１，＃Ｄ８｝，｛＃Ｄ２，＃Ｄ７｝，｛＃Ｄ３，＃Ｄ５｝，｛＃Ｄ４，＃Ｄ６｝のような冗長グループの組み合わせを選択すると、各冗長グループ内で距離の最大値を求める。次に、ノードマシン管理部９は、その中での最小値を求めると、ディスク＃Ｄ４とディスク＃Ｄ６の距離の値となる。この値は、全冗長グループの組み合わせに対して求めた中においても、最大の値となる。このため、作成された冗長グループの組み合わせが、図１１に示す構成を有するシステムの多重度２における冗長グループとして選択されることとなる。
【００９０】
同様に、各冗長グループ内のディスク数をＭに増やすことで、Ｍ多重のデータ冗長構成を構築することもできる。
【００９１】
また、図１１の例において、冗長グループごとにデータの多重度を変更することも可能である。つまり、ある冗長グループのデータの多重度はＭ多重であり、他の冗長グループのデータの多重度はＮ多重などという冗長構成も可能である。
【００９２】
次に実施の形態１によるデータ格納装置の各ディスクへのデータ書き込み動作について説明する。
図１２は実施の形態１によるデータ格納装置のデータ書き込み動作を示すフロー図であり、この図に沿って書き込み動作の一例を説明する。
中央演算処理装置１０からのデータ書き込み命令は、上位アプリケーションよりファイルブロック管理部７に対して発行される（ステップＳＴ１ａ）。これにより、ファイルブロック管理部７は、ノードマシン管理部９に問い合わせて、冗長グループ番号２２ｃを取得する（ステップＳＴ２ａ）。
【００９３】
次に、ファイルブロック管理部７は、書き込みデータをブロック単位に分割する（ステップＳＴ３ａ）。続いて、ファイルブロック管理部７は、冗長グループに全てのデータブロックの書き込みが完了したか否かを判定する（ステップＳＴ４ａ）。このとき、全てのデータブロックの書き込みが完了していれば、データ書き込み動作を終了する。一方、全てのデータブロックの書き込みが完了していない場合は、ステップＳＴ５ａの処理に移行する。
【００９４】
ステップＳＴ５ａにおいて、ファイルブロック管理部７は、冗長グループ番号２２ｃを参照して、冗長グループにブロックが均等に配置されるように、書き込む冗長グループを選択する。このあと、ファイルブロック管理部７は、同一の冗長グループ内のディスクに対して、ディスクの先頭から順次、同一のブロックを書き込み、全てのブロックに対して実行する（ステップＳＴ６ａ）。
【００９５】
ここで、ノードマシン３−１〜３−ｎへの実際のデータ書き込み処理は、ファイルブロック管理部７が通信制御部８、オペレーティングシステム５、ネットワーク２、オペレーティングシステム１７、通信制御部１８を介して、ディスクアクセス制御部１９にディスクへの書き込み命令を発行することで実行される。
【００９６】
図１３は図１２に示す書き込みフローで各ディスクに書き込まれたブロックの格納図を示す図である。図において、符号３３−１，３３−２，３３−３，３３−４を付した枠で囲まれたディスクは同一の冗長グループを表している。図１３に示すように、各冗長グループ内のディスクには、均等なデータ量でデータが格納されている。
【００９７】
また、図１３ではデータの多重度が２である例を示したが、冗長グループのディスクの数をＭにすることで、Ｍ多重の冗長構成を構築することもできる。
【００９８】
なお、データブロックを書き込むグループの決定法としては、ハッシュ分散を用いてもよく、ラウンドロビンに行われてもよい。
【００９９】
次に、各ディスクのリードブロック番号７ａ−２を設定する動作について説明する。
図１４は図３中のファイルブロック管理テーブルの内部構成を示す図である。図において、７ａ−１は各ディスクを特定するディスク番号である。７ａ−２はリードブロック番号であって、データ転送時に各ディスクから転送するファイルブロックであるリードブロックを特定する。
【０１００】
ファイルブロック管理部７は、データ書き込み時にファイルブロック管理テーブル７ａの更新を行う。ここで、ファイルブロック管理部７は、データ転送時に各ディスクから転送するファイルブロックをリードブロックとして予め決定しておき、これを特定する情報をファイルブロック管理テーブル７ａにリードブロック番号７ａ−２として保持する。
【０１０１】
図１５は実施の形態１のデータ格納装置によるデータ書き込み時に設定するリードブロック番号を示す図である。図１５に示すように、ファイルブロック管理部７は、冗長グループ３３−１，３３−２，３３−３，３３−４からブロックの転送を行うにあたり、同一の冗長グループ３３−１，３３−２，３３−３，３３−４に属する各ディスクにおいて重複したブロックにアクセスしないように、リードブロック番号７ａ−２を決定する。例えば、冗長グループ３３−１に属するディスク＃Ｄ１に対して、ファイルブロック管理部７は、符号３４−１を付した枠で囲まれたデータブロックを特定する情報をリードブロック番号７ａ−２として設定する。このとき、ディスク＃Ｄ５に対してはディスク＃Ｄ１と重複しない、符号３４−２を付した枠で囲まれたデータブロックを特定する情報が、リードブロック番号７ａ−２として指定される。以下、他の冗長グループ３３−２〜３３−４についても同様である。
【０１０２】
また、Ｍ多重構成を持つ冗長グループに対しては、冗長グループ内のあるディスクの全ブロック数をＮとすると、各ディスクはＮ／Ｍ個の連続したブロックをリードブロックとして設定する。
【０１０３】
次にデータ転送時の動作について説明する。
図１６は実施の形態１によるデータ格納装置のデータ転送動作を示すフロー図である。
先ず、上位アプリケーションよりデータ転送制御部６にデータの転送命令を発行する（ステップＳＴ１ｂ）。これにより、データ転送制御部６は、転送データ情報をファイルブロック管理部７へ渡す。
【０１０４】
ファイルブロック管理部７では、ファイルブロック管理テーブル７ａを参照して、転送ブロックがリードブロック番号７ａ−２となっているディスクを探索する（ステップＳＴ２ｂ）。このあと、ファイルブロック管理部７は、該当するディスクのディスク番号７ａ−１及びリードブロック番号７ａ−２をデータ転送制御部６に返信する。
【０１０５】
次に、データ転送制御部６は、ファイルブロック管理部７から返信されたディスク番号７ａ−１及びリードブロック番号７ａ−２を元にして、ディスクアクセス制御部１９にブロック転送命令を発行する（ステップＳＴ３ｂ）。
【０１０６】
ここで、実施の形態１のデータ格納装置によるディスク故障時の動作を説明する。
ディスクの故障が検出されると、故障したディスクのディスク番号がノードマシン管理部９に渡される。続いて、ノードマシン管理部９は、故障ディスクのディスク番号２２ａ、及び、故障ディスクが属する冗長グループ番号２２ｃをファイルブロック管理部７に送出する。
これによって、ファイルブロック管理部７は、ノードマシン管理部９から受け取った冗長グループ番号２２ｃを元にして、その冗長グループに属するディスクのリードブロック番号７ａ−２を書き換える。
【０１０７】
以下に、ファイルブロック管理部７によるリードブロック番号の書き換え動作について詳細に説明する。
図１７は実施の形態１のデータ格納装置によってディスク故障時に設定したリードブロック番号を示す図である。図１７の例では、ディスク＃Ｄ７、＃Ｄ８が故障したことを表している。
先ず、ファイルブロック管理部７は、ディスク＃Ｄ７が故障したため、ディスク＃Ｄ７と同一の冗長グループに属するディスク＃Ｄ２とにおけるリードブロック番号７ａ−２の書き換えを行う。この書き換えを行うにあたり、ファイルブロック管理部７は、冗長グループ内で動作可能なディスクに負荷が均等にかかるようにリードブロック番号７ａ−２を設定する。つまり、冗長グループ３３−２では、動作可能なディスクがディスク＃Ｄ２の１台である。このため、ディスク＃Ｄ２では、冗長グループの全データがリードブロック番号７ａ−２として設定される。次に、ディスク＃Ｄ７は動作不可能なディスクであるため、リードブロック番号７ａ−２の設定を空にする。同様に、冗長グループ３３−３に属するディスク＃Ｄ３，＃Ｄ８に対して、リードブロック番号７ａ−２の書き換えを行う。
【０１０８】
次にディスク増設時における動作の一例を説明する。
ディスクの増設時には、ノードマシン管理部９が増設ディスクの情報登録作業を行う。このとき、ノードマシン管理部９は、ノードマシン管理テーブル９ａのディスク情報２２に対して増設ディスクに関する設定欄を追加し、ディスク番号２２ａの割り当てやノードマシン番号２２ｂの設定を行う。さらに、増設ディスクをいずれかの冗長グループに分類し、冗長グループ番号２２ｃを設定する。続いて、ノードマシン管理部９は、増設ディスクと他のディスクとの距離情報２４を設定する。
【０１０９】
増設ディスクの情報登録作業が完了すると、ノードマシン管理部９は、増設ディスクの冗長グループ番号２２ｃをファイルブロック管理部９に渡す。ファイルブロック管理部９では、追加ディスクが属する冗長グループのディスク負荷が均等になるように、リードブロック番号７ａ−２の書き換えを行う。
【０１１０】
以上のように、この実施の形態１によれば、データを同一データ量ごとの複数のデータブロックに分割して、該データブロック単位で複数のディスク装置に同一ブロック数ずつ分散配置させると共に、所定数のディスク装置（冗長グループ）ごとに同一内容のデータブロックを重複して格納し、複数のディスク装置に分散して格納されたデータを冗長グループごとに１又は複数のデータブロック単位で読み出すので、各ディスク装置のデータ量が均等になるようにデータが格納されると共に、データ転送時の各ディスク装置からのデータ転送量が均等になることから、システム全体のスループットの低下を最小限に抑えることができる。また、各データブロックを冗長グループごとにシーケンシャルに格納することで、データ転送処理を行う際、冗長グループ内のどのディスクからデータを転送するかを決定するにあたり、特別な計算が不要であることから全てのデータをディスクの先頭から順次転送するような処理において高速に動作させることができる。
【０１１１】
また、この実施の形態１によれば、システムの階層関係からディスク間の距離情報を定義し、当該距離情報を元にして各ディスクをグループ化するので、システムの特定階層における障害に対応することができる。
【０１１２】
さらに、この実施の形態１によれば、システムの特定の部分を中心とした冗長構成を構築することができる。
【０１１３】
さらに、この実施の形態１によれば、ディスクの冗長グループを作成し、冗長グループ単位でデータの多重度を設定するので、特定のディスク、特定の冗長グループに対するデータの多重度の変更を適宜行うことができる。
【０１１４】
さらに、この実施の形態１によれば、冗長グループ内にディスクを追加し、データの多重度を上げることによって、システムの信頼性を向上させることができると共に、データ転送を高速化することができる。
【０１１５】
さらに、この実施の形態１によれば、並列システムにおいて、データの転送性能の悪いディスクを持つ冗長グループに新たなディスクを追加することによって、並列システム全体のスループットを向上させることができる。
【０１１６】
実施の形態２．
この実施の形態２では、冗長グループを作成する手順、及び、各冗長グループへデータブロックを書き込む手順が上記実施の形態１と異なる。例えば、データの多重度がＭの時、１つのブロックを書き込むディスク数はＭであり、あるディスクの複製ブロックを全て同一のＭ本のディスクが保持するのではなく、２＊（Ｍ−１）本のディスクに分散して格納する。
【０１１７】
この実施の形態２によるデータ格納装置の基本的なハードウェア構成は、上記実施の形態１と同様である。また、冗長グループも上記実施の形態１と同様にして距離情報が大きいディスクの組み合わせて作成される。ここで、上記実施の形態１と異なる点としては、ディスクごとに冗長グループが存在することにある。つまり、この実施の形態２では、Ｎ個のディスクが存在する場合、Ｎ個の冗長グループが存在することになる。なお、冗長グループの構成において、オリジナルデータを書き込むディスクを元ディスク、元ディスクの複製を書き込むディスクを複製ディスクと呼ぶこととする。
【０１１８】
次に動作について説明する。
図１８は実施の形態２によるデータ格納装置の動作を示すフロー図であり、この図及び図５に示すディスクの階層関係の一例を用いてデータの多重度２の冗長グループ作成動作を説明する。
先ず、ノードマシン管理部９は、全てのディスクに対して冗長グループの割り当てが完了しているか否かを判定する（ステップＳＴ１ｃ）。このとき、全てのディスクに対する冗長グループの割り当てが完了していれば、処理を終了する。一方、全てのディスクに対する冗長グループの割り当てが完了していなければ、ノードマシン管理部９は、冗長グループの割り当てが完了していない任意のディスクを１つの元ディスクとして選択する（ステップＳＴ２ｃ）。ここで、図５の例では、ディスク＃Ｄ１が選択されたものとする。
【０１１９】
次に、ノードマシン管理部９は、データの多重度Ｍの場合、元ディスクと複製ディスクの数の和が２＊（Ｍ−１）＋１個になるまで、元ディスクの冗長グループを作成する。具体的には、ノードマシン管理部９が元ディスクの冗長グループを作成するにあたり、複製ディスク数が２＊（Ｍ−１）個になっているか否かを常に判定する（ステップＳＴ３ｃ）。このとき、複製ディスクの数が２＊（Ｍ−１）個になっていれば、ステップＳＴ１ｃの処理に戻って上述した動作を繰り返す。一方、複製ディスクの数が２＊（Ｍ−１）個になっていなければ、ステップＳＴ４ｃの処理に移行する。図５の例では、データの多重度が２であるため、ノードマシン管理部９は、元ディスクと複製ディスクの和が３個になるまで、ディスク＃Ｄ１の冗長グループを作成する。
【０１２０】
ステップＳＴ４ｃにおいて、ノードマシン管理部９は、元ディスクと最も距離情報の大きいディスクを選択する。図５の例では、ディスク＃Ｄ１と最も距離情報の大きいディスクはディスク＃Ｄ５〜＃Ｄ８となる。
【０１２１】
ここで、ノードマシン管理部９は、元ディスクと最も距離情報の大きいディスクとして選択されたディスクが複数存在するか否かを判定する（ステップＳＴ５ｃ）。このとき、選択されたディスクが１つであれば、ノードマシン管理部９は、ステップＳＴ１５ｃに進んで当該ディスクを元ディスクの冗長グループとすると共に、選択されたディスクの冗長グループにも元ディスクを追加する。
【０１２２】
一方、選択されたディスクが複数存在する場合、ノードマシン管理部９は、元ディスクの複製ディスクと最も距離情報の大きいディスクを再選択する（ステップＳＴ６ｃ）。図５の例では、現在ディスク＃Ｄ１の複製ディスクが存在しないため、ステップＳＴ６ｃにおいて再選択された後でも変わらず、ディスク＃Ｄ５〜＃Ｄ８が選択される。
【０１２３】
続いて、ノードマシン管理部９は、ステップＳＴ６ｃにて再度選択されたディスクが複数存在するか否かを判定する（ステップＳＴ７ｃ）。このとき、選択されたディスクが１つであれば、ノードマシン管理部９は、ステップＳＴ１５ｃの処理に進む。一方、選択されたディスクが複数存在する場合、ノードマシン管理部９は、選択されたディスクの中で割り当てられている複製ディスクが最も少ないディスクを選択する（ステップＳＴ８ｃ）。図５の例では、ディスク＃Ｄ５〜＃Ｄ８には複製ディスクが割り当てられていないため、いずれも割り当てられた複製ディスクの数が０となり、再びディスク＃Ｄ５〜＃Ｄ８が選択される。
【０１２４】
このあと、ノードマシン管理部９は、ステップＳＴ８ｃにて選択されたディスクが複数存在するか否かを判定する（ステップＳＴ９ｃ）。このとき、選択されたディスクが１つであれば、ノードマシン管理部９は、ステップＳＴ１５ｃの処理に進む。一方、選択されたディスクが複数存在する場合、ノードマシン管理部９は、選択されたディスクの上位階層で複製ディスクの割り当てが最も少ない上位階層を選択し、その上位階層に含まれるディスクを選択する（ステップＳＴ１０ｃ）。図５の例では、ディスク＃Ｄ５〜＃Ｄ８の上位階層であるノードマシンフレーム２６−１とノードマシンフレーム２６−２に割り当てられた複製ディスクの数が比較される。
【０１２５】
ここで、ノードマシンフレーム２６−１の複製ディスクの数は、ディスク＃Ｄ５，＃Ｄ６に割り当てられた複製ディスクの数となる。また、ノードマシンフレーム２６−２の複製ディスクの数は、ディスク＃Ｄ７，＃Ｄ８に割り当てられた複製ディスクの数となる。図５の例では、ディスク＃Ｄ５〜＃Ｄ８には複製ディスクが割り当てられていない。このため、ノードマシンフレーム２６−１，２６−２に割り当てられた複製ディスクの数は、いずれも０になる。従って、ステップＳＴ１０ｃにおいても、ディスク＃Ｄ５〜＃Ｄ８が選択される。
【０１２６】
続いて、ノードマシン管理部９は、ステップＳＴ１０ｃにて選択されたディスクが複数存在するか否かを判定する（ステップＳＴ１１ｃ）。このとき、選択されたディスクが１つであれば、ノードマシン管理部９は、ステップＳＴ１５ｃの処理に進む。
【０１２７】
一方、選択されたディスクが複数存在する場合、ノードマシン管理部９は、ディスクを選択すべき階層を１つ上げて、ディスクを選択すべき上位階層があるか否かを判定する（ステップＳＴ１２ｃ）。このとき、ディスクを選択すべき上位階層がある場合は、ステップＳＴ１０ｃの処理に戻って、ノードマシン管理部９は、当該上位階層において複製ディスクの割り当てられた個数の比較を行う。図５の例では、ノードマシンフレーム２６−１，２６−２の上位階層はフロアフレーム２６で等しい。このため、当該上位階層においても割り当てられた複製ディスク数は等しくなり、ディスク＃Ｄ５〜＃Ｄ８が選択される。
【０１２８】
このあと、ステップＳＴ１１ｃにおいてさらに複数のディスクが存在すると判定されると、ノードマシン管理部９は、ステップＳＴ１２ｃに進んでさらに上位階層を１つ上げて、当該上位階層において複製ディスクの割り当てられた個数の比較を行う。この動作をステップＳＴ１２ｃにて上位階層がないと判定されるまで繰り返す。
【０１２９】
また、ステップＳＴ１２ｃにおいて、ディスクを選択すべき上位階層がないと判定されると、ノードマシン管理部９は、ステップＳＴ１３ｃに進んで、ステップＳＴ１０ｃにて選択されたディスクが複数存在するか否かを判定する。このとき、選択されたディスクが１つであれば、ノードマシン管理部９は、ステップＳＴ１５ｃの処理に進む。一方、選択されたディスクが複数存在する場合、ノードマシン管理部９は、選択された複数のディスクから任意のディスクを選択する（ステップＳＴ１４ｃ）。このあと、ステップＳＴ１５ｃの処理に移行する。
【０１３０】
図５の例では、最上位階層まで複製ディスクの個数が等しくなる。このため、ステップＳＴ１４ｃにてディスク＃Ｄ５〜＃Ｄ８のうちから任意のディスクが選択される。ここで、ディスク＃Ｄ５が選択されると、ステップＳＴ１５ｃにおいて、ディスク＃Ｄ１の冗長グループとしてディスク＃Ｄ５が設定され、これに応じてディスク＃Ｄ５の冗長グループとしてディスク＃Ｄ１が設定される。
【０１３１】
図１９は図５中の階層関係に対して作成した冗長グループの対応表を示す図である。ここで、データ多重度２に対応する冗長グループは、上述した図１８のフローによって作成したものである。
【０１３２】
次に、データの多重度がＭ（Ｍ；２以上の整数）のディスク冗長構成をとるシステムにおいて、冗長グループを設定する動作について説明する。
先ず、上述した図１８のフローによって、全ての元ディスクに対して多重度２のディスク冗長構成をとる冗長グループの設定を行う。次に、データの多重度を増加させると共に、全ての元ディスクに対して、冗長グループ数を増加させていく。
【０１３３】
例えば、データ多重度３のディスク冗長構成をとる場合、ディスク＃Ｄ１の冗長グループは、データ多重度２におけるディスク＃Ｄ１の冗長グループのメンバであるディスク＃Ｄ５とディスク＃Ｄ７の冗長グループのメンバを新たにディスク＃Ｄ１の冗長グループとして加える。
【０１３４】
つまり、データ多重度２において、ディスク＃Ｄ５の冗長グループは、ディスク＃Ｄ１，＃Ｄ４である。また、ディスク＃Ｄ７の冗長グループは、ディスク＃Ｄ１，＃Ｄ３である。このため、データ多重度３のシステムにおいては、ディスク＃Ｄ１の冗長グループは｛＃Ｄ３，＃Ｄ４，＃Ｄ５，＃Ｄ７｝となる。
【０１３５】
同様に他の元ディスクに対して、冗長グループを決定すると、図１９に示す多重度３の冗長グループが設定される。データの多重度を１上げるごとに同様の手順で全ての元ディスクの冗長グループ数を増加させていくことで、多重度Ｍのディスク冗長構成をとるシステムにおいて冗長グループを設定することができる。
【０１３６】
また、この実施の形態２においても、データは冗長グループ単位にデータ量が均等になるように書込まれる。
【０１３７】
次に実施の形態２におけるデータ書き込み動作について説明する。
図２０は実施の形態２のデータ格納装置によるデータ書き込み動作を示すフロー図であり、この図に沿って図１９に示す冗長グループ構成を有するディスクに対するデータ書き込み動作について説明する。
先ず、ファイルブロック管理部７は、データ書き込みを行う冗長グループの順序を決定する（ステップＳＴ１ｄ）。具体的に説明すると、ファイルブロック管理部７は、最初に任意の元ディスクを選択する。例えば、図５の構成で図１９の多重度２の場合の冗長グループ設定がなされているシステムにおいて、ディスク＃Ｄ１が選択されたものとする。この次に、ファイルブロック管理部７は、ディスク＃Ｄ１の冗長グループの中で距離情報の最も大きいものを１つ選択する。上記システムでは、ディスク＃Ｄ１の冗長グループはディスク＃Ｄ５，＃Ｄ７であり、どちらも距離情報が等しい。このため、どちらを選択しても良い。ここでは、例としてディスク＃Ｄ５を選択する。
【０１３８】
続いて、ファイルブロック管理部７は、ディスク＃Ｄ５の冗長グループの中で距離情報の最も大きいものを選択する。つまり、ディスク＃Ｄ５の冗長グループに属するディスク＃Ｄ１，＃Ｄ４のいずれかが選択される。ここでは、ディスク＃Ｄ１がすでに選択されているため、ディスク＃Ｄ４が選択される。以下、全てのディスクに対して同様の操作を繰り返す。これにより、ファイルブロック管理部７は、データブロックの書き込みをディスク＃Ｄ１，ディスク＃Ｄ５，ディスク＃Ｄ４，ディスク＃Ｄ８，ディスク＃Ｄ２，ディスク＃Ｄ６，ディスク＃Ｄ３，ディスク＃Ｄ７の順序で行うことを決定する。
【０１３９】
次に、ファイルブロック管理部７は、書き込みデータをブロック単位に分割する（ステップＳＴ２ｄ）。続いて、ファイルブロック管理部７は、冗長グループに全てのデータブロックの書き込みが完了したか否かを判定する（ステップＳＴ３ｄ）。このとき、全てのデータブロックの書き込みが完了していれば、データ書き込み動作を終了する。一方、全てのデータブロックの書き込みが完了していない場合は、ステップＳＴ４ｄの処理に移行する。
【０１４０】
ステップＳＴ４ｄにおいて、ファイルブロック管理部７は、上述のようにして決定した書き込み順序に従って、先ず元ディスクに対してデータブロックの書き込みを行う。このあと、ファイルブロック管理部７は、データ多重度がＭ（Ｍ；２以上の整数）であれば、元ディスクに書込んだデータブロックと同一のデータブロックを、当該元ディスクが属する冗長グループの（Ｍ−１）個の複製ディスクに対して書き込む。具体的に説明すると、ファイルブロック管理部７は、（Ｍ−１）個の複製ディスクにデータブロックを書き込んだか否かを判定しながら、当該冗長グループにおいて元ディスクを除く２＊（Ｍ−１）個のディスクから複製ディスクを選択してデータブロックを書き込む（ステップＳＴ５ｄ）。このとき、（Ｍ−１）個の複製ディスクにデータブロックを書き込んでいれば、ステップＳＴ２ｄの処理に戻って、上述した操作を繰り返す。
【０１４１】
一方、（Ｍ−１）個の複製ディスクにデータブロックを書き込んでいないと、ファイルブロック管理部７は、既にブロックを書き込んだディスクを除いて、元ディスクから最も距離情報の大きいディスクを選択する（ステップＳＴ６ｄ）。
【０１４２】
このあと、ファイルブロック管理部７は、ステップＳＴ６ｄにて選択したディスクが複数存在するか否かを判定する（ステップＳＴ７ｄ）。このとき、選択したディスクが複数存在しなければ、ファイルブロック管理部７は、ステップＳＴ１１ｄの処理に進んで選択したディスクにデータブロックの書き込みを行い、ステップＳＴ５ｄの処理に戻る。
【０１４３】
一方、選択したディスクが複数存在する場合、ファイルブロック管理部７は、選択したディスクの中で書き込まれたデータブロック数（書き込みブロック数）が最も少ないディスクを選択する（ステップＳＴ８ｄ）。つまり、各ディスクにブロックが均等に書込まれるようにディスクを選択する。
【０１４４】
続いて、ファイルブロック管理部７は、ステップＳＴ８ｄにて選択したディスクが複数存在するか否かを判定する（ステップＳＴ９ｄ）。このとき、選択したディスクが複数存在しなければ、ファイルブロック管理部７は、ステップＳＴ１１ｄの処理に進む。一方、選択したディスクが複数存在する場合、ファイルブロック管理部７は、ステップＳＴ８ｄにて選択した複数のディスクのうち任意のディスクを１つ選択する（ステップＳＴ１０ｄ）。
【０１４５】
このあと、ファイルブロック管理部７は、ステップＳＴ１１ｄに進み、ステップＳＴ１０ｄにて選択したディスクに対してデータブロックを書き込む。この動作を繰り返して、（Ｍ−１）個の複製ディスクに複製データブロックの書き込みを行う。
【０１４６】
図２１は図１９の多重度２に対応する冗長グループ設定がなされているシステムのデータブロック格納例を示す図である。ここで、図２１におけるデータブロック格納は、上述した図２０のフローによって行ったものである。
【０１４７】
ファイルブロック管理部７は、データ書き込み時にファイルブロック管理テーブル７ａの更新を行い、リードブロック番号７ａ−２の設定を行う。このとき、元ディスクとして書き込みを行ったブロックを各ディスクのリードブロックとして設定する。
【０１４８】
図２２は図２１の構成にリードブロックを設定した場合を示す図である。図において、丸記号で囲まれたデータブロックがリードブロックとして設定されることを示している。例えば、ディスク＃Ｄ１では｛Ｂ１、Ｂ９、Ｂ１７｝がリードブロックに設定される。図２２に示すように、オリジナルデータを構成するデータブロックＢ１〜Ｂ２４が各ディスクのリードブロックとしてそれぞれ割り当てられる。
【０１４９】
また、この実施の形態２のデータ格納装置によるデータ転送時の動作は、上記実施の形態１と同様に図１６のフローで行われる。これにより、重複する説明を省略する。
【０１５０】
次に実施の形態２におけるディスク故障時の動作について説明する。
先ず、ディスクの故障が検出されると、上記実施の形態１と同様にして、ノードマシン管理９によってノードマシン管理テーブル９ａの修正が行われる。
このあと、ファイルブロック管理部７は、ファイルブロック管理テーブル７ａの修正を行う。このファイルブロック管理テーブル７ａの修正動作を詳細に説明する。
【０１５１】
図２３は図２１の構成でディスク故障時に設定されるリードブロック番号を示す図である。図において、ディスク＃Ｄ２に縦線が付されているのは、当該ディスク＃Ｄ２が故障したことを示している。また、図２２の場合と同様に、丸記号で囲まれたデータブロックがリードブロックである。図２３では、ディスク＃Ｄ２故障時に、ファイルブロック管理テーブル７ａの修正を行った後、リードブロックとなるブロックを丸記号で囲んでいる。例えば、ディスク＃Ｄ２の故障前、ディスク＃Ｄ８のリードブロックは、図２２に示すように｛Ｂ６、Ｂ１４、Ｂ２２｝であった。しかしながら、ディスク＃Ｄ２故障後では、ディスク＃Ｄ８のリードブロックは、図２３に示すように｛Ｂ５、Ｂ６、Ｂ１３、Ｂ２１｝となる。
【０１５２】
図２４は実施の形態２のデータ格納装置によるディスク故障時の動作を示すフロー図であり、この図、図２２及び図２３を用いて詳細に説明する。
先ず、ファイルブロック管理部７は、ファイルブロック管理テーブル７ａを修正するにあたり、ノードマシン管理部９から対象となるディスク総数、故障ディスクのディスク番号を取得する（ステップＳＴ１ｅ）。図２３の例では、故障ディスクのディスク番号は＃Ｄ２であり、ディスク総数は７となる。
【０１５３】
次に、ファイルブロック管理部７は、ファイルブロック管理テーブル７ａを参照して、故障ディスクのリードブロック番号７ａ−２を取得する（ステップＳＴ２ｅ）。図２３の例では、ファイルブロック管理部７が故障ディスク＃Ｄ２のリードブロック番号｛Ｂ５、Ｂ１３、Ｂ２１｝を取得する。
【０１５４】
続いて、ファイルブロック管理部７は、オリジナルデータを構成する全てのデータブロックがいずれかのディスクのリードブロックとして割り当てられているか否かを判定する（ステップＳＴ３ｅ）。このとき、全てのブロックがいずれかのディスクに割り当てられていれば、ファイルブロック管理部７は、処理を終了する。
【０１５５】
一方、割り当てられていないブロックが存在する場合、ファイルブロック管理部７は、いずれのディスクにも割り当てられていないリードブロックの複製を有するディスクを選択する（ステップＳＴ４ｅ）。具体的に説明すると、ファイルブロック管理部７は、故障ディスクのリードブロック番号７ａ−２の複製を格納するディスクを選択する。図２３の例では、ディスク＃Ｄ２のリードブロック番号７ａ−２の複製を格納するディスクは、ディスク＃Ｄ８である。このため、ファイルブロック管理部７は、ディスク＃Ｄ８を選択してリードブロック番号７ａ−２の再割り当てを行うこととなる。
【０１５６】
次に、ファイルブロック管理部７は、ステップＳＴ４ｅにて選択されたディスクに新しく割り当てるリードブロック数を求める（ステップＳＴ５ｅ）。ここでは、下記式（１）によって新しく割り当てるブロック数を求める。
Ｎｅｗ＿Ｂ＝ｃｅｉｌ（Ｒｅｍ＿Ｂ／（Ｒｅｍ＿Ｄ＋１））    ・・・（１）ただし、Ｎｅｗ＿Ｂは新しく割り当てるブロック数であり、Ｒｅｍ＿Ｂは割り当ての決まっていないブロック数、Ｒｅｍ＿Ｄはリードブロックが再割り当てされていないディスク数を示している。また、ｃｅｉｌ（  ）は小数点以下切上げを意味する。
【０１５７】
ここで、オリジナルデータを構成するブロックのうち、現在どのディスクにもリードブロックとして割り当てられていないブロックを、他のディスクに均等に割り当てるには、選択されたディスクに対して、最低いくつのブロックを新たに割り当てればよいかを求めなければならない。上記式（１）は、この新しく割り当てるブロック数を決定するための数式である。
【０１５８】
図２３の例では、ディスク＃Ｄ８については、Ｎｅｗ＿Ｂ＝ｃｅｉｌ（３／（７−１＋１））＝１となり、新たに１つのリードブロックを割り当てる必要がある。つまり、現在割り当てられている３個のリードブロックに新たに１個のリードブロックが加えられ、再割り当て後のリードブロックは合計４個となる。
【０１５９】
次に、ファイルブロック管理部７は、現在どのディスクにも割り当てられていないリードブロックを全て選択し、これらリードブロックと、ステップＳＴ４ｅで選択したディスクに現在割り当てられているリードブロックとから、ステップＳＴ５ｅにて求めた新たに割り当てるべきリードブロック数分のブロックを選択する（ステップＳＴ６ｅ）。図２３の例では、ディスク＃Ｄ８に新たに設定するリードブロックとして、現在どのディスクにもリードブロックとして割り当てられていない｛Ｂ５、Ｂ１３、Ｂ２１｝と、現在ディスク＃Ｄ８にリードブロックとして割り当てられている｛Ｂ６、Ｂ１４、Ｂ２２｝とから、新しく割り当てるブロックの数、即ち、１個のリードブロックが選択される。
【０１６０】
従って、ディスク＃Ｄ８に新たに設定されるリードブロックは、｛Ｂ５、Ｂ６、Ｂ１３、Ｂ２１｝となる。この情報を元にして、ファイルブロック管理部７は、ファイルブロック管理テーブル７ａのリードブロック番号７ａ−２の書き換えを行う（ステップＳＴ７ｅ）。
【０１６１】
このあと、ファイルブロック管理部７は、ステップＳＴ３ｅの処理に戻って同様にディスク＃Ｄ４，＃Ｄ５についても新しいリードブロック番号を求め、ファイルブロック管理テーブル７ａの書き換えを行う。
【０１６２】
以上の動作によって、ディスク＃Ｄ２の故障後に各ディスクのリードブロックは、図２３のように再設定される。
【０１６３】
なお、図２３の例ではデータの多重度が２であるが、同様の手順でデータの多重度Ｍの場合でも実現することができる。
【０１６４】
さらに、この実施の形態２によるデータ格納装置において上位階層で障害が発生した場合の動作について説明する。
図２５は図５の構成のシステムを実施の形態２の手順に基づいてデータを分散配置させたディスク格納例を示す図であり、ノードマシンフレーム２５−１に障害が発生してディスク＃Ｄ１，＃Ｄ２のデータアクセスができない状況を示している。
【０１６５】
図２５に示すように、複数のディスクに同時に障害が発生した場合にも図２４で示すフローでリードブロック番号７ａ−２の再配置を行うことで、各ディスクの負荷が均等に分散されている。
【０１６６】
また、図２５において、データの多重度は２であるが、データの多重度Ｍにおいても同様の手順で実現することができる。
【０１６７】
以上のように、この実施の形態２によれば、いずれかのディスクがデータ読み出し不可となると、該ディスクから読み出されるべきデータブロック群を、これと同一内容のデータブロック群を分散して格納する他の複数のディスクから均等に読み出すので、ディスク故障時には故障したディスクのリードブロックが非故障のディスクに均等に設定されることから、ディスク故障時に特定のディスクがボトルネックとなって並列システム全体におけるスループットが低下するという不具合が発生しない。また、複数のディスクに障害が発生した時にも同様の効果が得られる。
【０１６８】
また、この実施の形態２によれば、ディスク間に距離情報を定義し、同時に故障が起こりにくいディスク同士で冗長グループを構成しディスクの複製を作成することで、上位階層での障害発生時にもデータへのアクセスが可能な並列システムを提供することができる。
【０１６９】
なお、上記実施の形態２において、ホストマシンのディスクを含めてグループ化を行い、ホストマシンにデータを配置しても良い。
【０１７０】
実施の形態３．
この実施の形態３は、上記実施の形態２に対してデータの格納が異なる。つまり、実施の形態３では各ディスクを２つのパーティションに分割してデータの書き込みを行うものである。
【０１７１】
図２６はこの発明の実施の形態３によるデータ格納装置のブロック格納例を示す図である。図において、１つのディスクを表す円筒形状中に付した境界線によって分けられる各部分は、当該ディスクのパーティションを示している。このように、実施の形態３では、リードブロックに設定されているブロック（図中、丸記号で囲まれたデータ）と、他のディスクの複製データとを異なるパーティションに格納する。
【０１７２】
ここで、実施の形態３によるファイルブロック管理部７は、各ディスクにデータブロックを書き込むにあたり、リードブロックに設定されているブロックと他のディスクの複製データとを交互に異なるパーティションに書き込む。これ以外の動作は、上記実施の形態と同様である。
【０１７３】
以上のように、この実施の形態３によれば、ブロックをシーケンシャルにアクセスし、データ転送を行う時に、各ディスクから転送するデータが特定のパーティションにまとまって配置されていることから、各ディスクからブロックを高速に転送することができると共に、ブロックデータ転送性能の劣化が少ない。また、大量データのシーケンシャルアクセスに対してシーク回数を少なくすることができる。
【０１７４】
また、図２６の例ではデータの多重度が２であるが、データの多重度Ｍの場合も同様に実現することができる。
【０１７５】
さらに、上記実施の形態３において、ホストマシンのディスクも含めてグループ化を行い、ホストマシンにデータを配置しても良い。
【０１７６】
なお、上記実施の形態１から３において、距離情報に基づいて信頼性のレベルを冗長グループごとに設定するようにしてもよい。つまり、冗長グループを設定するにあたり、バスレベル、マシンレベル、地域レベルなどに分類してそれぞれ異なる信頼性レベルを有するように、これらを構成するディスクを選択する。このようにすることで、各冗長グループにて異なる信頼性レベルで障害に対応することができる。
【０１７７】
【発明の効果】
以上のように、この発明によれば、データを同一データ量ごとの複数のデータブロックに分割して、該データブロック単位で複数の記憶装置に同一ブロック数ずつ分散配置させると共に、所定数の記憶装置ごとに同一内容のデータブロックを重複して格納し、複数の記憶装置に分散して格納されたデータを所定数の記憶装置ごとに１又は複数のデータブロック単位で読み出すので、各記憶装置のデータ量が均等になるようにデータが格納されると共に、データ転送時の各記憶装置からのデータ転送量が均等になることから、装置全体のスループットの低下を最小限に抑えることができるという効果がある。また、各データブロックを冗長グループごとにシーケンシャルに格納することで、データ転送処理を行う際、冗長グループ内のどの記憶装置からデータを転送するかを決定するにあたり、特別な計算が不要であることから、全てのデータを記憶装置の先頭から順次転送するような処理において高速に動作させることができるという効果がある。
【０１７８】
この発明によれば、複数の記憶装置の各記憶装置間における相互作用の指標である距離情報を用いて、相互作用の小さい記憶装置同士をまとめた冗長グループを構成し、データを複数の記憶装置に分散して格納するにあたり、該データを同一データ量ごとの複数のデータブロックに分割し、冗長グループ内の各記憶装置に同一内容のデータブロックを重複して格納し、複数の記憶装置に分散して格納されたデータを冗長グループごとに１又は複数のデータブロック単位で読み出すので、各記憶装置のデータ量が均等になるようにデータが格納されると共に、データ転送時の各記憶装置からのデータ転送量が均等になることから、装置全体のスループットの低下を最小限に抑えることができるという効果がある。また、記憶装置間の特定の相互作用による障害に柔軟に対応する信頼性の高いデータ格納装置を提供することができるという効果がある。
【０１７９】
この発明によれば、複数の記憶装置に対してラウンドロビンでデータブロックを格納するので、各記憶装置のデータ量が均等になるようにデータを格納することができるという効果がある。
【０１８０】
この発明によれば、ハッシュ分散を用いてデータブロックを格納すべき記憶装置を決定するので、各記憶装置のデータ量が均等になるようにデータを格納することができるという効果がある。
【０１８１】
この発明によれば、各記憶装置から一度に読み出される複数のデータブロックをそれぞれの記憶領域内で隣接して配置するので、各記憶装置からデータブロックを高速に転送することができると共に、データブロックの転送性能の劣化が少ないという効果がある。また、大量データのシーケンシャルアクセスに対してシーク回数を少なくすることができるという効果がある。
【０１８２】
この発明によれば、いずれかの記憶装置がデータ読み出し不可となると、該記憶装置から読み出されるべきデータブロック群を、これと同一内容のデータブロック群を分散して格納する他の複数の記憶装置から均等に読み出すので、故障した記憶装置から読み出すべきデータブロックが非故障の記憶装置から均等に読み出されることから、故障時に特定の記憶装置がボトルネックとなって装置全体におけるスループットが低下するという不具合を抑制することができるという効果がある。
【０１８３】
この発明によれば、複数の記憶装置が構成する階層構造に基づいて距離情報を求めるので、記憶装置の特定階層における障害に柔軟に対応することができるという効果がある。また、装置の特定の部分を中心とした冗長構成を構築することができるという効果もある。
【０１８４】
この発明によれば、各記憶装置が配置される位置情報に基づいて距離情報を求めるので、記憶装置の位置関係に起因する障害に柔軟に対応することができるという効果がある。
【０１８５】
この発明によれば、各記憶装置間の接続経路に応じて決定される故障率に基づいて距離情報を求めるので、記憶装置の接続関係に起因する障害に柔軟に対応することができるという効果がある。
【０１８６】
この発明によれば、同一内容のデータブロックを重複させる度合いである多重度を冗長グループごとに設定するので、装置の信頼性を向上させることができると共に、データ転送を高速化することができるという効果がある。
【０１８７】
この発明によれば、距離情報に基づいて信頼性のレベルを冗長グループごとに設定するので、冗長グループごとに異なる信頼性レベルで障害に対応することができるという効果がある。
【図面の簡単な説明】
【図１】  この発明の実施の形態１によるデータ格納装置の構成例を示す図である。
【図２】  図１中のホストマシンの構成を示す図である。
【図３】  この発明の実施の形態１よるデータ格納装置の各ソフトウェアの関係を示す図である。
【図４】  図３中のノードマシン管理テーブルの構成を示す図である。
【図５】  実施の形態１によるデータ格納装置を構成するディスクの階層関係の一例を示す図である。
【図６】  実施の形態１によるデータ格納装置を構成するディスクの階層関係の他例を示す図である。
【図７】  ホストマシンから見たシステムの階層構造を示す図である。
【図８】  実施の形態１によるデータ格納装置の動作を示すフロー図である。
【図９】  実施の形態１によるデータ格納装置の構成とディスクの階層関係における故障率とを示す図である。
【図１０】  実施の形態１によるデータ格納装置の他の構成とディスクの階層関係における故障率とを示す図である。
【図１１】  同一フロアに設置されたディスクの物理的な位置関係を示す図である。
【図１２】  実施の形態１によるデータ格納装置のデータ書き込み動作を示すフロー図である。
【図１３】  図１２に示す書き込みフローで各ディスクに書き込まれたブロックの格納図を示す図である。
【図１４】  図３中のファイルブロック管理テーブルの内部構成を示す図である。
【図１５】  実施の形態１のデータ格納装置によるデータ書き込み時に設定するリードブロック番号を示す図である。
【図１６】  実施の形態１によるデータ格納装置のデータ転送動作を示すフロー図である。
【図１７】  実施の形態１のデータ格納装置によってディスク故障時に設定したリードブロック番号を示す図である。
【図１８】  実施の形態２によるデータ格納装置の動作を示すフロー図である。
【図１９】  図５中の階層関係に対して作成した冗長グループの対応表を示す図である。
【図２０】  実施の形態２のデータ格納装置によるデータ書き込み動作を示すフロー図である。
【図２１】  図１９の多重度２に対応する冗長グループ設定がなされているシステムのデータブロック格納例を示す図である。
【図２２】  図２１の構成にリードブロックを設定した場合を示す図である。
【図２３】  図２１の構成でディスク故障時に設定されるリードブロック番号を示す図である。
【図２４】  実施の形態２のデータ格納装置によるディスク故障時の動作を示すフロー図である。
【図２５】  図５の構成のシステムを実施の形態２の手順に基づいてデータを分散配置させたディスク格納例を示す図である。
【図２６】  この発明の実施の形態３によるデータ格納装置のブロック格納例を示す図である。
【図２７】  ミラーリングを用いたデータ格納例を示す図である。
【図２８】  従来のディスクアレイによるデータ格納例を示す図である。
【符号の説明】
１  ホストマシン（データ格納装置）、２  ネットワーク、３−１〜３−ｎ  ノードマシン、４  主記憶装置、５  オペレーティングシステム、６  データ転送制御部（読み出し手段）、７  ファイルブロック管理部（データ格納手段）、７ａ  ファイルブロック管理テーブル、７ａ−１  ディスク番号、７ａ−２  リードブロック番号、８  通信制御部、９  ノードマシン管理部（データ格納手段）、９ａ  ノードマシン管理テーブル、１０  中央演算処理装置（データ格納手段、読み出し手段）、１１  ネットワークアダプタ、１２ａ  システムバス、１２ｂ  ＰＣＩバス、１３  バス結合装置、１４  ディスクコントローラ、１５，１６  ディスク装置（記憶装置）、１７  オペレーティングシステム、１８  通信制御部、１９  ディスクアクセス制御部、２０  ディスク装置（記憶装置）、２１  ノードマシン管理情報、２１ａ  ノードマシン番号、２１ｂ  ＩＰアドレス、２１ｃ  ポート番号、２２  ディスク情報、２２ａ  ディスク番号、２２ｂノードマシン番号、２３  階層情報、２３ａ  下位階層情報、２３ｂ  上位階層情報、２４  距離情報、２５，２６  フロアフレーム、２５−１，２５−２，２６，２６−１，２６−２  ノードマシンフレーム、２７  システム全体、２８ホストマシン階層、２９  ホストマシンフレーム、３０−１，３０−２，３０−３，３０−４  ノードマシン、３１−１，３１−２  ルータ、３２  ホストマシン、３３−１，３３−２，３３−３，３３−４  冗長グループ。
【図１】
0004259800.tif 000002
【図２】
0004259800.tif 000003
【図３】
0004259800.tif 000004
【図４】
0004259800.tif 000005
【図５】
0004259800.tif 000006
【図６】
0004259800.tif 000007
【図７】
0004259800.tif 000008
【図８】
0004259800.tif 000009
【図９】
0004259800.tif 000010
【図１０】
0004259800.tif 000011
【図１１】
0004259800.tif 000012
【図１２】
0004259800.tif 000013
【図１３】
0004259800.tif 000014
【図１４】
0004259800.tif 000015
【図１５】
0004259800.tif 000016
【図１６】
0004259800.tif 000017
【図１７】
0004259800.tif 000018
【図１８】
0004259800.tif 000019
【図１９】
0004259800.tif 000020
【図２０】
0004259800.tif 000021
【図２１】
0004259800.tif 000022
【図２２】
0004259800.tif 000023
【図２３】
0004259800.tif 000024
【図２４】
0004259800.tif 000025
【図２５】
0004259800.tif 000026
【図２６】
0004259800.tif 000027
【図２７】
0004259800.tif 000028
【図２８】
0004259800.tif 000029