(57)【要約】【課題】異容量ストレージ装置を混載したディスクアレイ装置において、速度を損なわずに容量利用率を向上させる。【解決手段】ホスト装置からの元データを複数のストライプデータに分割し、複数のストレージ装置に分散させて格納し、管理している（データ管理部：ＣＰＵとメモリで構成される）。ここで、複数のストレージ装置のうち、少なくとも１つの容量が他のストレージ装置の容量とは異なっている。そして、データ管理部は、複数のストレージ装置のそれぞれの容量に応じて、ストライプデータのサイズを決定し、各ストレージ装置には同一サイズのストライプデータを格納するように制御する。また、データ管理部は、複数のストレージ装置のそれぞれに格納されるストライプデータ１つずつから構成されるデータ集合をチャンクとして管理する。このとき、元データは、チャンクの集合によって構成される。以上の内容はＲＡＩＤ０でもＲＡＩＤ５でも同様である。【選択図】図１
2010282281.tif 000002
【特許請求の範囲】
【請求項１】
ホスト装置から元データを受信する受信部と、
前記元データを複数のストライプデータに分割し、複数のストレージ装置に分散させて格納するデータ管理部と、を備え、
前記複数のストレージ装置のうち、少なくとも１つの容量が他のストレージ装置の容量とは異なり、
前記データ管理部は、前記複数のストレージ装置のそれぞれの容量に応じて、前記ストライプデータのサイズを決定し、各ストレージ装置には同一サイズのストライプデータを格納するように制御することを特徴とするディスクアレイ装置。
【請求項２】
請求項１において、
前記データ管理部は、前記複数のストレージ装置のそれぞれに格納されるストライプデータ１つずつから構成されるデータ集合をチャンクとして管理し、
前記元データは、前記チャンクの集合によって構成されることを特徴とするディスクアレイ装置。
【請求項３】
請求項２において、
前記受信部が前記ホスト装置からアクセス要求を受信したとき、
前記データ管理部は、
前記アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）を前記チャンクのサイズで除算することにより、前記要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを計算し、
前記要求ＬＢＡと前記先頭チャンクと前記先頭チャンクに含まれるストライプデータのサイズの情報から前記先頭チャンクの開始位置から前記要求ＬＢＡまでの距離であるオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定し、
前記先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報と前記オフセットから前記アクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定することを特徴とするディスクアレイ装置。
【請求項４】
請求項１において、
前記データ管理部は、前記ストライプデータの集合をチャンクとして管理し、対象のチャンクが何番目のチャンクに相当するかの情報からパリティ格納を担当するストレージ装置（パリティ担当ストレージ装置）を決定し、前記パリティ担当ストレージ装置以外のストレージ装置のストライプデータからパリティを生成し、前記パリティ担当ストレージ装置には前記パリティのみを格納し、前記パリティ担当ストレージ装置以外のストレージ装置にはそれらの容量に応じて決定されたサイズの前記ストライプデータを格納するように制御することを特徴とするディスクアレイ装置。
【請求項５】
請求項４において、
前記複数のストレージ装置のそれぞれが１回ずつ前記パリティ担当ストレージ装置となった場合の単位を１サイクルとすると、前記データ管理部は、１サイクルに含まれる全てのチャンクのパリティ以外のストライプデータの合計サイズが各サイクル間で互いに等しく構成されるように管理することを特徴とするディスクアレイ装置。
【請求項６】
請求項５において、
前記受信部が前記ホスト装置からアクセス要求を受信したとき、
前記データ管理部は、
前記アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）を前記１サイクルに含まれる全チャンク内のストライプデータの合計サイズで除算することにより、前記要求ＬＢＡの位置が何番目のサイクルに該当するかを計算し、
前記該当サイクルの先頭から前記要求ＬＢＡまでの距離である第１のオフセットを計算し、
前記第１のオフセットと前記該当サイクルに含まれる各チャンクのサイズ情報から前記要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを特定し、
前記要求ＬＢＡと前記先頭チャンクと前記先頭チャンクに含まれるストライプデータのサイズの情報から前記先頭チャンクの開始位置から前記要求ＬＢＡまでの距離である第２のオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定し、
前記先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報と、前記アクセス開始ストレージ装置の情報と、当該アクセス開始ストレージ装置のストライプデータサイズと、当該アクセス開始ストレージ装置が前記パリティ担当ストレージ装置となった回数の情報と、から前記アクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定することを特徴とするディスクアレイ装置。
【請求項７】
請求項１において、
前記複数のストレージ装置のうち少なくとも１つのストレージ装置（被代替ストレージ装置）を、それより容量の大きい代替ストレージ装置と交換する場合、
前記データ管理部は、前記被代替ストレージ装置のデータを前記代替ストレージ装置に格納することを特徴とするディスクアレイ装置。
【請求項８】
請求項７において、
前記データ管理部は、前記被代替ストレージ装置以外のストレージ装置に格納されるデータから前記被代替ストレージ装置のデータを復元し、当該復元データを前記代替ストレージ装置に格納することを特徴とするディスクアレイ装置。
【請求項９】
請求項７において、
前記被代替ストレージ装置以外のストレージ装置（現存ストレージ装置）で前記代替ストレージ装置よりも容量が小さいものがある場合、前記データ管理部は、当該容量の小さい現存ストレージ装置のデータを順次前記代替ストレージ装置にコピーし、前記被代替ストレージ装置より容量が大きく、容量に関して直近の現存ストレージ装置に前記被代替ストレージ装置のデータを格納することを特徴とするディスクアレイ装置。
【請求項１０】
複数のストレージ装置が接続され、受信部とデータ管理部を含むディスクアレイ装置の制御方法であって、
前記複数のストレージ装置のうち、少なくとも１つの容量が他のストレージ装置の容量とは異なり、
前記制御方法は、
前記受信部がホスト装置から元データを受信する受信ステップと、
前記データ管理部が、複数のストライプデータに分割し、複数のストレージ装置に分散させて格納する格納ステップと、を備え、
前記格納ステップにおいて、前記データ管理部は、前記複数のストレージ装置のそれぞれの容量に応じて、前記ストライプデータのサイズを決定し、各ストレージ装置には同一サイズのストライプデータを格納するように制御することを特徴とする制御方法。
【請求項１１】
コンピュータを請求項１に記載のディスクアレイ装置として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はディスクアレイ装置、及びその制御方法、並びにプログラムに関し、例えば、複数台のストレージ装置によって仮想ストレージを構成するディスクアレイ装置に関するものである。
【背景技術】
【０００２】
近年デジタルデータの増大とＨＤＤの容量増加が進んでいる。デジタルデータの増大はデータ保護の重要性を増し、一方のＨＤＤ容量増加は増大するデジタルデータの確保を可能にしつつも、故障時の損失を増している。
【０００３】
このような状況において、家庭内でもテラバイト単位のストレージ装置が保有されるようになり、そのメンテナンスを容易にする目的で、従来大規模サーバに利用されていたデジタルデータ保護を適用することが一般的になってきた。このようなデジタルデータ保護方法の代表がＲＡＩＤ（Redundant Arrays of Inexpensive Disks）であり、例えば、非特許文献１はＲＡＩＤについて開示している。
【０００４】
ＲＡＩＤは何れのバリエーションも全てのディスクの容量が同容量であることを前提としたシステムである。すなわち、ＲＡＩＤにおいてディスク故障時にはシステム構成時に利用した容量と同容量のディスクを用意することが望ましい。
【０００５】
ところが、昨今の目まぐるしいディスク容量の増加により、ディスク故障時にシステム構成時と同容量のディスクを取得することは困難もしくはビット単価的に不利であることが多くなってきている。
【０００６】
従って、ディスク故障時にはシステム全体を再構築したり、大容量ディスクの一部を使用不可として小容量ディスクとして代替したりすることが増え、時間的損失もしくは金銭的損失が発生している。このような問題に対処するため、例えば特許文献１及び２に記載されているように、異容量のストレージ装置で構成しても、容量利用率を損なわずにディスクアレイを構築する方法が考えられている。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−９９３９１号公報
【特許文献２】特開平０８−６３２９８号公報
【非特許文献】
【０００８】
【非特許文献１】A case for redundant arrays of inexpensive disks (RAID). [SIGMOD '88.]
【発明の概要】
【発明が解決しようとする課題】
【０００９】
しかしながら、上述の特許文献１及び２の何れに従ったとしても、従来ＲＡＩＤに比べてディスクの同時稼働率が低下し、性能が劣化するという問題がある。例えば、特許文献１の技術によれば、２台以上の小容量ディスクを連結し、１台の大容量ディスクとして扱うため、データが格納されていない領域を担当しているディスクは利用されないため、ディスクの同時稼働率の低下が生じている。
【００１０】
また、特許文献２の技術では、最小容量ディスクがデータ格納可能である間は全てのディスクが同時稼動するが、データを蓄えるに従ってディスクの同時稼働率が徐々に低下していくという問題がある。
【００１１】
さらに、特許文献１及び２の何れにおいても、各ディスクが担当するストライプサイズは一定となっており、これも速度低下の要因となっている。なぜなら、ＲＡＩＤのストレージ装置として一般的に利用されるハードディスク装置は大容量のほうがより高速に読書きできる特徴を有しているため、一定データ長（チャンク）の読書きにおいて、小容量ディスクの低速な読書き速度が障壁となり、大容量ディスクの速度性能を発揮できなくなるためである。すなわち、従来技術は容量利用率向上のために、ＲＡＩＤの特徴であるディスク同時稼動による高速性を損なっている。
【００１２】
本発明はこのような状況に鑑みてなされたものであり、異容量のストレージ装置（ディスク装置）が接続されたディスクアレイ装置の容量利用率を、高速性を損なわずに向上させるものである。
【課題を解決するための手段】
【００１３】
上記課題を解決するために、本発明によるディスクアレイ装置では、ホスト装置からの元データを複数のストライプデータに分割し、複数のストレージ装置に分散させて格納し、管理している（データ管理部：ＣＰＵとメモリで構成される）。ここで、複数のストレージ装置のうち、少なくとも１つの容量が他のストレージ装置の容量とは異なっている。そして、データ管理部は、複数のストレージ装置のそれぞれの容量に応じて、ストライプデータのサイズを決定し、各ストレージ装置には同一サイズのストライプデータを格納するように制御する。また、データ管理部は、複数のストレージ装置のそれぞれに格納されるストライプデータ１つずつから構成されるデータ集合をチャンクとして管理する。このとき、元データは、チャンクの集合によって構成される。以上の内容はＲＡＩＤ０でもＲＡＩＤ５でも同様である。
【００１４】
ここで、ホスト装置からアクセス要求を受信したとき（ＲＡＩＤ０の場合）、データ管理部は、まず、アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）をチャンクのサイズで除算することにより、要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを計算する。次に、データ管理部は、要求ＬＢＡと先頭チャンクと先頭チャンクに含まれるストライプデータのサイズの情報から先頭チャンクの開始位置から要求ＬＢＡまでの距離であるオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定する。そして、データ管理部は、先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報とオフセットからアクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定する。
【００１５】
ＲＡＩＤ５の場合、データ管理部は、ストライプデータの集合をチャンクとして管理し、対象のチャンクが何番目のチャンクに相当するかの情報からパリティ格納を担当するストレージ装置（パリティ担当ストレージ装置）を決定し、パリティ担当ストレージ装置以外のストレージ装置のストライプデータからパリティを生成し、パリティ担当ストレージ装置にはパリティのみを格納し、パリティ担当ストレージ装置以外のストレージ装置にはそれらの容量に応じて決定されたサイズのストライプデータを格納するように制御する。このとき、複数のストレージ装置のそれぞれが１回ずつパリティ担当ストレージ装置となった場合の単位を１サイクルとすると、データ管理部は、１サイクルに含まれる全てのチャンクのパリティ以外のストライプデータの合計サイズが各サイクル間で互いに等しく構成されるように管理する。
【００１６】
ホスト装置からアクセス要求を受信したとき（ＲＡＩＤ５の場合）、データ管理部は、まず、アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）を１サイクルに含まれる全チャンク内のストライプデータの合計サイズで除算することにより、前記要求ＬＢＡの位置が何番目のサイクルに該当するかを計算する。次に、データ管理部は、該当サイクルの先頭から要求ＬＢＡまでの距離である第１のオフセットを計算する。そして、データ管理部は、第１のオフセットと該当サイクルに含まれる各チャンクのサイズ情報から要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを特定する。さらに、データ管理部は、要求ＬＢＡと先頭チャンクと先頭チャンクに含まれるストライプデータのサイズの情報から先頭チャンクの開始位置から要求ＬＢＡまでの距離である第２のオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定する。最後に、データ管理部は、先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報と、アクセス開始ストレージ装置の情報と、当該アクセス開始ストレージ装置のストライプデータサイズと、当該アクセス開始ストレージ装置が前記パリティ担当ストレージ装置となった回数の情報と、からアクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定する。
【００１７】
さらに、複数のストレージ装置のうち少なくとも１つのストレージ装置（被代替ストレージ装置：例えば、故障したストレージ装置）を、それより容量の大きい代替ストレージ装置と交換する場合、データ管理部は、被代替ストレージ装置のデータを代替ストレージ装置に格納する。この場合、データ管理部は、被代替ストレージ装置以外のストレージ装置に格納されるデータから被代替ストレージ装置（故障ストレージ装置）のデータを復元し、当該復元データを代替ストレージ装置に格納する。
【００１８】
また、被代替ストレージ装置以外のストレージ装置（現存ストレージ装置）で代替ストレージ装置よりも容量が小さいものがある場合、データ管理部は、当該容量の小さい現存ストレージ装置のデータを順次代替ストレージ装置にコピーし、被代替ストレージ装置より容量が大きく、容量に関して直近の現存ストレージ装置に被代替ストレージ装置のデータを格納する。
さらなる本発明の特徴は、以下本発明を実施するための最良の形態および添付図面によって明らかになるものである。
【発明の効果】
【００１９】
本発明によれば、異容量のストレージ装置（ディスク装置）が接続されたディスクアレイ装置の容量利用率を、高速性を損なわずに向上させることができるようになる。
【図面の簡単な説明】
【００２０】
【図１】本発明の第１の実施形態によるディスクアレイ装置の概略構成を示す図である。
【図２】第１の実施形態において、ストレージ装置の実ディスク空間とディスクアレイ装置が構築する仮想ディスク空間の対応関係を示す図である。
【図３】第１の実施形態によるＬＢＡ変換処理（概要）を説明するためのフローチャートである。
【図４】第１の実施形態において、先頭チャンクの特定処理を説明するためのフローチャートである。
【図５】第１の実施形態において、アクセスを開始するストレージ装置の特定処理を説明するためのフローチャートである。
【図６】第１の実施形態において、ストレージ装置におけるアクセス開始ＬＢＡの特定処理を説明するためのフローチャートである。
【図７】第２の実施形態によるディスクアレイ装置の概略構成を示す図である。
【図８】第２の実施形態において、ストレージ装置の実ディスク空間とディスクアレイ装置が構築する仮想ディスク空間の対応関係を示す図である。
【図９】第２の実施形態において、先頭チャンクの特定処理を説明するためのフローチャートである。
【図１０】第２の実施形態において、ストレージ装置におけるアクセス開始ＬＢＡの特定処理を説明するためのフローチャートである。
【図１１】第２の実施形態において、ディスクアレイ装置へのデータ格納処理を説明するためのフローチャートである。
【図１２】第２の実施形態において、ストレージ装置が故障した際に実行されるデータ復元処理を説明するためのフローチャートである。
【図１３】ディスクアレイ装置の適用例を示す図である。
【発明を実施するための形態】
【００２１】
本発明は、ディスクアレイ装置に接続されたストレージ装置の容量利用率を向上させるための技術に関する。
以下、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではないことに注意すべきである。また、各図において共通の構成については同一の参照番号が付されている。
【００２２】
（１）第１の実施形態
第１の実施形態は、ＲＡＩＤ０を用いるディスクアレイ装置に関する。
＜ディスクアレイ装置の構成＞
図１は、本発明の第１の実施形態によるディスクアレイ装置１の概略構成を示す図である。図１に示されるように、ディスクアレイ装置１は、ホスト装置３と通信を行うためのホスト・インタフェース１１と、データを一時格納するためのバッファ（バッファメモリ：キャッシュメモリを含む）１２と、ディスクアレイ中でのデータ管理を行うためのデータ管理部１３と、ストレージ装置２を接続するための、複数のストレージ・インタフェース１４（図中では４つ）と、これらの構成要素を接続し、データ及び命令等を伝送するための通信バス１５と、を備えている。
【００２３】
ホスト・インタフェース１１は、Universal Serial BusやIEEE 1394などの実効転送速度が５００Ｍｂｐｓ程度の帯域を有する通信インタフェースでも構わないが、望ましくはGigabit EthernetやFibre Channel等、数Ｇｂｐｓ程度の転送速度を有する通信インタフェースであることが望ましい。なぜなら、大規模ストレージ装置として広く利用されているハードディスク装置は１Ｇｂｐｓ程度の転送速度を有しており、また近年普及が進むソリッドステートディスク装置においては２Ｇｂｐｓ近い読込速度を有するものもある。このとき、ホスト・インタフェース１１の転送速度が低速であると、ボトルネックとなり本発明の速度劣化の低減効果が発揮できなくなってしまうからである。
【００２４】
バッファ１２は、Syncronous Dynamic Random Access Memoryなどの高速な揮発性メモリである。本発明においては、バッファ１２は、ホスト装置３から一定量のデータを一時格納し、ストレージ・インタフェース１４に接続された各ストレージ装置２に分割配置するのに十分な量が蓄積された時点で、データ管理部１３により読み出され、各ストレージ装置２に格納される。
【００２５】
データ管理部１３はメモリとＣＰＵによって構成されている。ＣＰＵが、メモリに格納された各管理プログラムを実行することで、ホスト装置３へ転送するデータの復元および、ホスト装置３より受け取ったデータを分割してストレージ・インタフェース１４に接続されたストレージ装置２に格納するように制御している。
【００２６】
データ管理部１３は、実行する機能として、ストレージ・インタフェース１４に接続された、各ストレージ装置２の情報を管理するための構成ドライブ管理機能１３１と、各ストレージ装置２のデータ格納単位（ストライプ２５）のサイズを管理するストライプサイズ管理機能１３２と、ディスクアレイ装置１が管理する仮想ストレージ装置２０のデータ格納単位（チャンク）を管理するチャンク管理機能１３３を含んでいる。
【００２７】
構成ドライブ管理機能１３１は、ストレージ・インタフェース１４に接続されているストレージ装置２の台数および各ストレージ装置２の容量を管理する機能である。より具体的には、構成ドライブ管理機能１３１は、各ストレージ装置２が接続されたときにプロパティ情報を読み込んできて各ストレージ装置２の容量情報を取得し、メモリ内の例えばテーブル上にストレージ装置２の識別情報と対応させて格納する。
【００２８】
ストライプサイズ管理機能１３２は、構成ドライブ管理機能１３１が管理するストレージ装置２の台数と容量情報、及びユーザから与えられるチャンクサイズ（デフォルトでも良い）より、各ストレージ装置２に格納するストライプ２５のサイズを決定する機能を有している。ストライプサイズは、以下の数式によって与えられる。
Ｓｉ  ＝  Ｓｃ×（Ｃｉ／Ｃ）    ・・・（１）
ここで、Ｓｉは、ｉ番目のストレージ・インタフェース１４に接続されたストレージ装置２に対するストライプサイズを示している。また、Ｓｃは、ユーザにより与えられるチャンクサイズを示している。そして、Ｃｉはｉ番目のストレージ・インタフェース１４に接続されたストレージ装置２の容量を示し、Ｃはストレージ・インタフェース１４に接続された全てのストレージ装置２の総容量を示している。なお、以降Ｓｉをｉ番目のストライプサイズと呼ぶこととする。
【００２９】
チャンク管理機能１３３は、データ格納の指示を受けたときに、バッファ１２中のチャンクをストライプ２５に分割して、ストレージ装置２に格納する。また、チャンク管理機能１３３は、データ読み出しの指示を受けたときに、ホスト装置３からの読み出し要求に含まれるＬＢＡ（Logical Blocking Address）から適切なストレージ装置２およびストレージ装置２中のアクセス開始ＬＢＡを選択する機能を有している。
【００３０】
ストレージ・インタフェース１４は、例えばSerial AT AttachmentやInformation Versatile Disk for Removable usage、AT Attachment Packet Interfaceなどを代表とするストレージ装置向けのインタフェースで構成されている。
【００３１】
＜データ分散格納方法＞
図２は、本発明の第１の実施形態によるデータ分散格納方法について説明するための図である。図２では、一点鎖線で区切られた上半分が実ディスクにおけるデータ格納状態（実ディスク空間２００）を示し、下半分がホスト装置３から利用可能な仮想ストレージにおけるデータ格納状態（仮想ディスク空間２０１）を示している。
【００３２】
実ディスク空間２００では４台のストレージ装置２が接続されており、ストレージ・インタフェース１４の番号が若い順に小容量のストレージ装置２が接続されていることを仮定している。ここで、本発明は必ずしも４台のみでしか構成できないわけではなく、３台以上であれば何台でも適用可能であるし、また順序が必ずしも容量の昇順あるいは降順に接続されていなくても適用可能であることに注意するべきである。
【００３３】
チャンクは、ストライプ２５に分割されて４台のディスクに分散配置されている。ここで、各チャンクに付与されているチャンクＩＤ２７（０，１，２，・・・）は説明を簡単化するために便宜上割り当てたもので、決して必須の構成要素ではないことに注意するべきである。
【００３４】
既に説明したように、各ストライプ２５のサイズは各ストレージ装置２の容量によって決定され、容量が小さいストレージ装置２ほど小さなストライプ２５が割り当てられる。この特徴により、従来ＲＡＩＤを用いたディスクアレイ装置が有していた小容量ディスクの容量枯渇による、大容量ディスクの利用率低下を防止することができる。
【００３５】
次に、仮想ディスク空間２０１について説明する。ホスト装置３は、ディスクアレイ装置１に何台のストレージ装置２が接続されているかに関係なく、あくまで１台のストレージ（仮想ストレージ）に対してアクセスするように制御される。
【００３６】
図２においては、実ディスク空間２００と仮想ディスク空間２０１におけるストライプ２５の対応が、図中のストライプ２５に振られたアルファベットで示されている。実ディスク空間２００においてストレージ装置２をまたがって割り当てられていたチャンクＩＤ２７に対応するそれぞれのデータは、仮想ディスク空間２０１においては連続的に配置され、それに伴ってストライプ２５も昇順に整列される。
【００３７】
＜アクセス要求処理＞
続いて、ホスト装置３は仮想ストレージにおけるＬＢＡを用いてディスクアレイ装置１へとアクセス要求を発行した場合の処理について説明する。図３は、ホスト装置３からアクセス要求を受信したディスクアレイ装置１の全体処理、つまり仮想ＬＢＡ（仮想ディスク空間でのＬＢＡ）を実ＬＢＡ（実ディスク空間でのＬＢＡ）に変換するまでの処理を説明するためのフローチャート（Ｓ３０）である。
【００３８】
まず、ディスクアレイ装置１は、チャンク管理機能１３３を用いて、ホスト装置３から指示された仮想ＬＢＡに基づいて、先頭チャンクを特定する（Ｓ４０）。つまり、当該仮想ＬＢＡが仮想ディスク空間におけるどのチャンクに含まれているのか特定される。
【００３９】
次に、チャンク管理機能１３３は、Ｓ４０で特定した先頭チャンクのチャンクＩＤ２７を基にアクセスを開始するストレージ装置２を特定する（Ｓ５０）。
【００４０】
最後に、チャンク管理機能１３３は、Ｓ５０で特定したストレージ装置２上におけるアクセス開始ＬＢＡ（実ＬＢＡ）を特定する（Ｓ６０）。
【００４１】
上記処理手順により、ディスクアレイ装置１は、ホスト装置３からの要求ＬＢＡを適切なストレージ装置２の実ＬＢＡへの変換を実現することができる。以下、各手順Ｓ４０、Ｓ５０、及びＳ６０について詳細に説明する。
【００４２】
＜先頭チャンクの特定処理（Ｓ４０）の詳細＞
図４は、先頭チャンクＩＤ２７（先頭チャンクの位置）の特定処理（Ｓ４０）の詳細を説明するためのフローチャートである。先頭チャンクの位置（チャンクＩＤ２７）は、要求ＬＢＡをチャンクサイズで除算することで求まる。すなわち、小数点以下を切り上げる関数をＲＵ、チャンクＩＤ２７をｈ（＝ｈ：０，１，２，・・・）で表せば、式（２）のようになる。式（２）をフローチャートで表したのが図４である。
ｈ  ＝  ＲＵ（ＬＢＡ／Ｓｃ）    ・・・（２）
【００４３】
＜アクセス開始ストレージ装置特定処理（Ｓ５０）の詳細＞
図５は、アクセス開始対象となるストレージ装置２の特定処理（Ｓ５０）の詳細を説明するためのフローチャートである。アクセスを開始するストレージ装置２は、要求ＬＢＡ（仮想ディスク空間での仮想ＬＢＡ）とＳ４０で特定した先頭チャンクまでのチャンクサイズの総和の差分から、ストライプサイズを逐次減算していくことにより特定することができる。この演算手順を示したのが図５のフローチャートである。以降、要求ＬＢＡと先頭チャンクまでのチャンクサイズの総和の差分をオフセットＯｔと呼ぶこととする。
【００４４】
まず、チャンク管理機能１３３は、次に示す式（３）を用いてオフセットＯｔを計算する（Ｓ５２）。つまり、これにより、先頭チャンクのＬＢＡから要求されたＬＢＡまでの距離が求まる（図２参照）。
Ｏｔ  ＝  ＬＢＡ−Ｓｃ×ｈ    ・・・（３）
【００４５】
そして、チャンク管理機能１３３は、オフセットＯｔからストライプサイズ管理機能１３２が管理する、各ストレージ装置２のストライプサイズを減算していく（Ｓ５３からＳ５６）。そして、チャンク管理機能１３３は、減算結果が負になるのを検知して、アクセス開始ストレージ装置２を特定する（Ｓ５７）。以下詳細に説明する。
【００４６】
まず、チャンク管理機能１３３は、担当ディスク番号ｉを１とし（Ｓ５３）、オフセットＯｔとｉ番目のストライプサイズＳｉを比較する（Ｓ５４）。
オフセットＯｔがｉ番目のストライプサイズＳｉよりも小さい場合（Ｓ５４でＹｅｓの場合）、チャンク管理機能１３３は、ｉ番目のストレージ装置２をアクセス開始ストレージ装置２として特定する（Ｓ５７）。そのときのオフセットＯｔをオフセットＯｆとする。
【００４７】
一方、オフセットＯｔがｉ番目のストライプサイズＳｉよりも大きい場合（Ｓ５４でＮｏの場合）、チャンク管理機能１３３は、オフセットＯｔよりｉ番目のストライプサイズＳｉを減算し、新しいオフセットＯｎｉとする（Ｓ５５）。
【００４８】
そして、チャンク管理機能１３３は、ｉに１を加え（Ｓ５６）、新しいｉとＯｎｉを基にストライプサイズＳｉとの比較からやり直し（Ｓ５４へ遷移）、最終的にオフセットＯｆを演算する。なお、アクセス開始ストレージ装置２特定処理（Ｓ５０）で求められたオフセットＯｆは実ＬＢＡ特定処理（Ｓ６０）でも使用するため、バッファ１２に格納される。
【００４９】
＜実ＬＢＡの特定処理（Ｓ６０）の詳細＞
図６は、ストレージ装置２上において実際にアクセスを開始するＬＢＡ（実ＬＢＡ）の特定処理（Ｓ６０）の詳細を説明するためのフローチャートである。
【００５０】
チャンク管理機能１３３は、ストレージ装置特定処理（Ｓ５０）において取得したオフセットＯｆ（Ｏｔからストライプサイズ減算済みのオフセット）とｉ番目のストライプサイズＳｉおよびチャンクＩＤ２７（＝ｈ）を用いれば、開始実ＬＢＡは単に以下の式（４）によって特定できる。
開始ＬＢＡ  ＝  ｈ×Ｓｉ  ＋  Ｏｆ    ・・・（４）
この式（４）の計算手順を示したのが図６のフローチャートである。
【００５１】
以降、ストライプサイズ管理機能１３２は、ｉ番目のストレージ装置２から順番に各ストライプを出力すれば、ホスト装置３からの仮想ディスク空間２０１へのアクセスを実現できる。
【００５２】
なお、以上のＬＢＡ変換手順によれば、仮想ＬＢＡ空間と実ＬＢＡ空間の対応を表形式などで記憶するなどする必要がないため、メモリを潤沢に有しない装置であっても十分に高速性を損なわずに容量利用効率を向上させることができる。ただし、メモリ等のハードウェアリソースが充分にある場合には、上述の対応表を設けることにより、処理をより高速化することが可能となる。
【００５３】
（２）第２の実施形態
第１の実施様態ではストレージ装置２の故障に対する耐性を有していない。そこで、本実施形態においては、ＲＡＩＤ５を用い、ディスクアレイ装置１による耐故障性を実現する。
【００５４】
＜ディスクアレイ装置の構成＞
図７は、本発明の第２の実施形態によるディスクアレイ装置の概略構成を示す図である。ディスクアレイ装置１は、ホスト装置３と通信するためのホスト・インタフェース１１と、データを一時格納するためのバッファ（バッファメモリ：キャッシュメモリを含む）１２と、ディスクアレイ装置１中でのデータ管理を行うためのデータ管理部１３と、ストレージ装置２を接続するための、複数のストレージ・インタフェース１４（図中では４つ）と、これらの構成要素を接続し、データや命令等を伝送するための通信バス１５と、を備えている。
【００５５】
パリティ管理機能１３４は、チャンクを構成するストライプ２５のうち何れかが失われても、残りのストライプ２５から失われたストライプ２５を復元するためのパリティ２６を生成し、ストライプ２５とパリティ２６から失われたストライプ２５を復元するための機能を有している。パリティ２６は、一般的に各ストライプ２５の排他的論理和を取ることで生成される。本実施形態においても排他的論理和を利用するが、ストライプ２５は等サイズではないため、ストライプ２５のサイズを統一する処理を必要とする。具体的には、最大ストライプ２５より小さいサイズのストライプ２５の上位に０を適宜追加し、最大ストライプ２５と同一サイズにした上で排他的論理和を取りパリティ２６を生成する。例えば、一方が０１で他方が０１１０であった場合、前者を０００１としてサイズを共通化する。
【００５６】
ここで、複数の候補の中で最大を選出する関数をｍａｘとして表せば、パリティ２６のサイズＳｐは下記の式（５）によって与えられる。
Ｓｐ  ＝  Ｓｃ×（ｍａｘ（Ｃｉ）／Ｃ）  ＝  ｍａｘ（Ｓｉ）    ・・・（５）
すなわち、最大容量を有するストレージ装置２が担当するストライプサイズとパリティサイズは等しくなる。
【００５７】
チャンク管理機能１３３は、データ格納時には、パリティ２６を格納するストレージ装置２を決定し、データ格納時には、バッファ中のチャンクをストライプ２５に分割して、ストレージ装置２に格納する。一方、データ読出し時には、チャンク管理機能１３３は、ストライプ２５を結合してチャンクを生成し、データ復元時にはストライプ２５およびパリティ２６からチャンクを復元するする。さらに、チャンク管理機能１３３は、ホスト装置３の要求に含まれるＬＢＡ（Logical Blocking Address）から適切なストレージ装置２およびストレージ装置２中のアクセス開始ＬＢＡ（実ＬＢＡ）を選択する機能を有している。
【００５８】
＜データ分散格納方法＞
図８は、第２の実施形態によるデータ分散格納方法を説明するための図である。本実施形態においても、実ディスク空間２００では４台のストレージ装置２が接続されており、ストレージ・インタフェース１４の番号が若い順に小容量のストレージ装置２が接続されていることを仮定している。
【００５９】
第２の実施様態においては、チャンクはストライプ２５とパリティ２６として４台のディスクに分割されて配置されている。図８からも分かるように、第２の実施形態による各チャンクのサイズは、第１の実施形態とは異なり、等しくなっていない。ただし、１サイクル（パリティが全てのストレージ装置２に配置されたとき）分のチャンクの総サイズは、互いに等しい。つまり、図８の例に従えば、チャンクＩＤが０から３までのチャンクサイズの総量は、以降のサイクル（例えば、チャンクＩＤが４から７まで）のチャンクサイズの総量に等しい。
【００６０】
パリティ２６を格納するストレージ装置２（パリティドライブ）は、チャンクＩＤ２７（＝ｈ：０，１，２，・・・）と、ディスクアレイ装置１に接続されたディスク台数（＝ｄ）と、余剰演算子（＝％）とを用いて計算されるｉ（パリティドライブ番号）によって決定される。
ｉ＝  （ｈ％ｄ）  ＋  １    ・・・（６）
【００６１】
第２の実施様態においては、第１の実施様態と異なり、パリティ２６が存在する。パリティサイズＳｐは前述したとおり、ディスクアレイ装置１を構成するストレージ装置２の中で最も大容量のディスク容量によって決定される。そのためパリティを格納するドライブが変わるたびにチャンクサイズＳｃが変化する。ｉ番目のストレージ装置２がパリティ２６を格納するときのチャンクサイズをＳｃｉとすると、Ｓｃｉは式（７）のように表される。なお、Ｓｉはｉ番目のストレージ装置２のストライプサイズを示している。
Ｓｃｉ＝Σ（Ｓｋ）  −  Ｓｉ  （ｋ＝１．．．ｄ）    ・・・（７）
以降、このＳｃｉをｉ番目のチャンクサイズと呼ぶ。
【００６２】
第２の実施様態においてもチャンクＩＤ２７は説明のため便宜的に振られている数値であり、ホスト装置３の要求に含まれるＬＢＡ（仮想ＬＢＡ）から計算する必要がある。この計算方法は仮想ディスク空間２０１の説明にて後述する。
【００６３】
図８を参照し、仮想ディスク空間２０１について説明すると、ホスト装置３は、ディスクアレイ装置１に何台のストレージ装置２が接続されているかに関係なく、あくまで１台のストレージ（仮想ストレージ）に対してアクセスするように制御される。
【００６４】
実ディスク空間２００と仮想ディスク空間２０１における、ストライプ２５の対応は、図８のストライプ２５に振られたアルファベットで示されている。
【００６５】
＜アクセス要求処理＞
ホスト装置３からアクセス要求を受信したディスクアレイ装置１の全体処理、つまり仮想ＬＢＡ（仮想ディスク空間でのＬＢＡ）を実ＬＢＡ（実ディスク空間でのＬＢＡ）に変換するまでの処理は、図３（Ｓ３０）と同様である。
【００６６】
ホスト装置３に対しては、パリティ２６の存在は隠蔽され、実データの分割であるストライプ２５のみアクセスが可能である。しかしながら、実ディスク空間２００にはパリティ２６が存在しているため、ディスクアレイ装置１へのアクセスにおいては、これを考慮したＬＢＡ変換処理（Ｓ３０）が必要となる。よって、Ｓ４０及びＳ６０の各処理は以下のように実行される。なお、ストレージ装置２の特定処理（Ｓ５０）は、第１の実施形態における処理（図５）と同様である。
【００６７】
＜先頭チャンク特定処理（Ｓ４０）の詳細＞
図９は、第２の実施形態による先頭チャンク特定処理の詳細を説明するためのフローチャートである。既に説明したように、第２の実施様態においては、チャンクサイズＳｃは一定でない。そのため、第１の実施様態のようなチャンクサイズによるＬＢＡ除算ではチャンクＩＤ２７（チャックの位置）を特定できない。そこで、以下のような処理が実行される。
【００６８】
チャンク管理機能１３３は、チャンクサイズ（＝Ｓｃ）の総計（＝ＳＣ：１サイクル分）で仮想ＬＢＡを除算し、仮想ＬＢＡの位置をディスク台数（＝ｄ）の精度（分解能）で特定する。チャンクサイズの総計（＝ＳＣ）は、チャンクサイズ（＝Ｓｃｉ）とストレージ装置２の台数（＝ｄ）を用いれば、式（８）のように表される。まず、式（８）に従って、チャンクサイズ総計ＳＣが演算される（Ｓ４０１）。
ＳＣ＝  ΣＳｃｉ  （ｉ＝１．．．ｄ）    ・・・（８）
【００６９】
Ｓ４０１で求めたＳＣを用いれば、仮チャンクＩＤ（＝ｈ’）は式（９）のように表わすことができる。この式（９）に従って、仮チャンクＩＤ、即ち、仮想ＬＢＡのおおよその位置が特定される（Ｓ４０２）。
ｈ’  ＝  ＲＵ（ＬＢＡ／ＳＣ）    ・・・（９）
【００７０】
そして、チャンク管理機能１３３は、チャンクサイズの総計（＝ＳＣ）と仮チャンクＩＤ（＝ｈ’）の積を要求ＬＢＡから減算した結果をオフセットＯｘとする（Ｓ４０３）。
【００７１】
以降、チャンク管理機能１３３は、各チャンクサイズＳｃｉをオフセットＯｘから逐次減算し、チャンクＩＤ２７（＝ｈ）、即ちＬＢＡが含まれるチャンクの位置（先頭チャンク）を以下のように算出する。
【００７２】
チャンク管理機能１３３は、まず、変数ｉを１とし（Ｓ４０４）、オフセットＯｘをｉ番目のチャンクサイズＳｃｉと比較する（Ｓ４０５）。オフセットＯｘがｉ番目のチャンクサイズＳｃｉより小さい場合（Ｓ４０５でＹｅｓの場合）、チャンク管理機能１３３は、式（１０）に示されるように、ステップＳ４０３で求めた仮チャンクＩＤ（＝ｈ’）にストレージ装置台数（＝ｄ）を乗算し、（ｉ−１）を加えたものを先頭チャンクＩＤ２７（＝ｈ）とする（Ｓ４０８）。なお、この場合のオフセットＯｘをオフセットＯｔと表すこととする。
ｈ  ＝  ｈ’×ｄ  ＋  （ｉ−１）    ・・・（１０）
【００７３】
一方、オフセットＯｘがｉ番目のチャンクサイズＳｃｉより大きい場合（Ｓ４０７でＮｏの場合）、チャンク管理機能１３３は、オフセットＯｘからチャンクサイズＳｃｉを減算し、減算結果を新しいオフセットＯｘｎｉとする（Ｓ４０６）。
【００７４】
そして、チャンク管理機能１３３は、ｉに１を加え（Ｓ４０７）、新しいｉと新しいオフセットＯｘｎｉを基に、オフセットＯｘｎｉとチャンクサイズＳｃｉの比較からやり直す（Ｓ４０５に遷移）。
【００７５】
以上のような先頭チャンク特定処理（Ｓ４０）は、第１の実施様態におけるアクセス開始ストレージ装置特定処理（Ｓ５０）と同様のアルゴリズムとなっている。よって、ソフトウェアあるいは演算回路の再利用が可能であるため、ＲＡＩＤ０からＲＡＩＤ５を再構成する場合でも省コスト化を図ることが可能となる。
【００７６】
＜実ＬＢＡの特定処理（Ｓ６０）の詳細＞
図１０は、第２の実施様態におけるアクセス開始ＬＢＡ（実ＬＢＡ）の特定処理（Ｓ６０）の詳細を説明するためのフローチャートである。
【００７７】
アクセス開始ＬＢＡは、ストライプ（＝Ｓｉ）及びチャンクＩＤ２７（＝ｈ）を用いれば、以下の式（１１）のように表わされる。
開始ＬＢＡ＝ＲＵ（ｈ／ｄ）×（（ｄ−１）×Ｓｉ＋Ｓｐ）＋ｒｅ    ・・・（１１）
ここで、ｒｅはパリティ２６を考慮するための補正項であり、特定されたストレージ装置２がパリティ２６を担当する回（チャンク）についてはパリティサイズを、パリティ２６を担当しない回（チャンク）についてはストライプサイズを適切回数分足し合わせた値となっている。
Ｓ６０１からＳ６０３までによって、Ｌ＝ＲＵ（ｈ／ｄ）×（（ｄ−１）×Ｓｉ＋Ｓｐ）が演算される。
【００７８】
以下、ｒｅの求め方をＳ６０４からＳ６１０の処理に従って詳細に説明する。
まず、チャンク管理機能１３３は、チャンクＩＤ２７（＝ｈ）とディスク台数（＝ｄ）の余剰（＝ｃ）を計算する（Ｓ６０４）。
【００７９】
また、チャンク管理機能１３３は、補正項ｒｅを０に、変数ｉを１に設定し（Ｓ６０５）、ｉがディスク装置の番号と等しいか、すなわちパリティを担当する回かどうかについてチェックする（Ｓ６０６）。
【００８０】
ｉがストレージ装置番号と等しい場合（Ｓ６０６でＹｅｓの場合）、チャンク管理機能１３３は、ｒｅにパリティサイズＳｐを加算する（Ｓ６０７）。一方、ｉがストレージ装置番号と等しくない場合（Ｓ６０６でＮｏの場合）、チャンク管理機能１３３は、ｒｅにストライプサイズＳを加算する（Ｓ６０８）。
【００８１】
そして、チャンク管理機能１３３は、ｒｅ更新後、ｉに１を加え（Ｓ６０９）、ｃとｉを比較する（Ｓ６１０）。ｃとｉが等しければ（Ｓ６１０でＹｅｓ）、チャンク管理機能１３３は、上記Ｌにｒｅを加算して実ＬＢＡとし、処理を終了させる。一方、ｃとｉが等しくない場合（Ｓ６１０でＮｏの場合）は、チャンク管理機能１３３は、ｉとディスク装置番号の比較処理（Ｓ６０６）からやり直す。
【００８２】
以降は、第１の実施様態と同様に、ｉ番目のストレージ装置２から順番にローテーションすれば、ホスト装置３は仮想ディスク空間にアクセスすることが可能である。なお、メモリを潤沢に有する場合には、上記処理をより高速化するために要求ＬＢＡに対する担当ストレージ装置２と実ＬＢＡを表形式で記憶するなどしても構わない。
【００８３】
＜データ格納処理＞
図１１は、ホスト装置３からデータ書き込み要求があった場合のデータの格納処理（Ｓ１１０）を説明するためのフローチャートである。
【００８４】
まず、ディスクアレイ装置１はＬＢＡ変換処理（Ｓ３０）を用いて、アクセスを開始するストレージ装置２とストレージ装置２におけるアクセス開始ＬＢＡ（実ＬＢＡ）を特定する。
【００８５】
そして、チャンク管理機能１３３は、ホスト装置３から送られてくるデータをｉ番目のチャンクサイズＳｃｉを上回るまでバッファ１２に蓄積する（Ｓ１１２及び１１３）。Ｓｃｉに到達した時点（Ｓ１１３でＹｅｓの場合）で、チャンク管理機能１３３は、バッファ中のデータをストライプ２５に分割する（Ｓ１１４）。
【００８６】
続いて、パリティ管理機能１３４が、分割されたストライプ２５に基づいて、パリティ２６を生成する（Ｓ１１５）。そして、チャンク管理機能１３３は、ｉ番目のストレージ装置２にＳ１１５で生成したパリティ２６を、他のストレージ装置２に対応するストライプ２５を、それぞれ格納する（Ｓ１１６）。
【００８７】
格納の後、パリティ２６担当ストレージ装置（ドライブ）２を変更するため、チャンク管理機能１３３は、ｉに１を加えてｉを更新する（Ｓ１１７）。このとき、ｉがディスク台数（本実施形態では、４）を超えた場合、チャンク管理機能１３３は、ｉを１に戻す（Ｓ１１８及び１１９）。
【００８８】
チャンク管理機能１３３は、上記処理をホスト装置３からのデータ格納要求が終了するまで繰り返すことで、データ格納処理を完了させる（Ｓ１１１０及びＳ１１１１）。
【００８９】
＜データ復元処理＞
図１２は、ストレージ装置２の故障に対するデータ復元処理を説明するためのフローチャートである。データ復元処理は、代替として挿入されたストレージ装置ｒの性能をできるだけ発揮し、システム全体の性能を向上させるための処理である。これを実現するため、挿入されたストレージ装置ｒの容量に応じて異なる復帰処理が実行される。ここでは、「故障」を例に挙げているが、ストレージ装置が故障していない場合に単に交換する場合も含まれるものとする。
【００９０】
まず、ディスクアレイ装置１は、構成ドライブ管理機能１３１を用いて、故障したストレージ装置ｂと挿入された代替ストレージ装置ｒの容量を比較する（Ｓ１２２）。代替ストレージ装置ｒの容量が故障ストレージ装置ｂの容量より小さい場合（Ｓ１２２でＮｏの場合）、構成ドライブ管理機能１３１は、データの復元が不可能であると判断し、データを復元せずに処理を終了する（Ｓ１２３及びＳ１２１５）。
【００９１】
一方、代替ストレージ装置ｒの容量が故障ストレージ装置ｂの容量より大きい場合（Ｓ１２２でＹｅｓの場合）、構成ドライブ管理機能１３１は、ｉ＝１に設定し（Ｓ１２４）、故障したストレージ装置ｂのストレージ装置ｂ＋ｉ（故障したストレージ装置の次に容量が小さいストレージ装置２）との容量を比較する（Ｓ１２５）。代替ストレージ装置ｒの容量がストレージ装置ｂ＋ｉの容量より大きい場合（Ｓ１２５でＹｅｓの場合）、構成ドライブ管理機能１３１は、ｂ＋ｉがストレージ装置の台数に等しくない場合（Ｓ１２６でＮｏの場合）、ｉに１を加え（Ｓ１２７）、代替ストレージ装置ｒとストレージ装置ｂ＋ｉ（次に容量が小さいストレージ装置２）の容量を比較する（Ｓ１２５）。ｂ＋ｉがストレージ装置台数と等しい、すなわち代替ストレージ装置ｒがディスクアレイ装置１を構成するストレージ装置２の中で最大の場合（Ｓ１２６でＹｅｓの場合）は、処理はＳ１２８に遷移し、ｉに１が加えられる。
【００９２】
代替ストレージ装置ｒよりも容量の大きいストレージ装置２が存在する場合、構成ドライブ管理機能１３１は、故障ストレージ装置の番号ｂがｂ＋ｉ−１に等しいか判断する。等しい場合、つまり代替ストレージ装置ｒよりも容量の小さい現存ストレージ装置がない場合には、処理はＳ１２１４に移行する。ｂがｂ＋ｉ−１に等しくない場合（ｂ＜ｂ＋ｉ−１の場合）、つまり、代替ストレージ装置ｒは最大容量のストレージ装置ではないが、それより小さい容量の現存ストレージ装置がある場合、処理はＳ１２１０に移行する。
【００９３】
代替ストレージ装置ｒは最大容量のストレージ装置ではないが、それより小さい容量の現存ストレージ装置がある場合、あるいは代替ストレージ装置ｒが最も大容量であることが判明した場合、構成ドライブ管理機能１３１は、最後に比較したストレージ装置（ストレージ装置番号＝ｂ＋ｉ−１）の内容を代替ストレージ装置２に複製する（Ｓ１２１０）。
【００９４】
その後、構成ドライブ管理機能１３１は、最後に比較したストレージ装置に、最後に比較したストレージ装置より１つ小容量のストレージ装置の内容を複製していき、この操作を最初に比較したストレージ装置２まで繰り返す。具体的には、ストレージ装置ｂ＋ｉ−１を新しい代替ストレージ装置ｒとした上で、ｉを１減算し（Ｓ１２１２）、ｉが１になるまで（代替ストレージ装置ｒへのストレージ装置ｂ＋ｉ−１の複製）を繰り返す（Ｓ１２１０、Ｓ１２１１、Ｓ１２１２及びＳ１２１３）。
【００９５】
最後に、構成ドライブ管理機能１３１は、代替ストレージ装置ｒとして選出されたストレージ装置に、故障ストレージ装置ｂの内容を復元し、データ復元処理を完了する（Ｓ１２１４及びＳ１２１５）。
【００９６】
以上のデータ復元手処理は、復元後もストライプサイズＳｉの順位とストレージ装置２の容量順位が等しくなる点を特徴としている。その結果、大容量ストレージ装置２が大容量のデータを保持するようになり、性能が最適化される。さらに言えば、ストレージ装置２にハードディスク装置が用いられている場合は、大容量のものが一般に高速であるため、リードライト性能も最適化される。
【００９７】
（３）ＬＢＡ変換処理の具体例
以下、第２の実施形態に従って、データアクセスに際するＬＢＡ変換処理の具体例について説明する。
図１３は、ディスクアレイ装置１とストレージ装置２の接続構成の一例を示す図である。ディスクアレイ装置１には４台の外付けストレージ装置２ａ、２ｂ、２ｃ及び２ｄがＵＳＢインタフェース１４で接続されている。外付けストレージ装置２の種類は、単一のストレージ装置で構成されているものでも良いし、複数のストレージ装置で構成されているものたとえばディスクアレイ装置１であっても良い。
【００９８】
ストレージ装置２ａ、２ｂ、２ｃ及び２ｄの容量は、それぞれ２００ＧＢ、４００ＧＢ、６００ＧＢ及び２ＴＢ（＝２０００ＧＢ）とし、ユーザ指定のチャンクサイズＳｃは１２８ｋＢとする。本具体例においては、このストレージ装置２で構成されたディスクアレイ装置１の仮想ディスク空間において、ＬＢＡ10,000,000番からデータアクセスする際のＬＢＡ変換手順について説明する。
【００９９】
まず、各ストレージ装置２が格納するストライプサイズＳｉおよびＳｐを、ストライプサイズ管理機能１３２を用いて下記の通り計算する。
Ｓ１：  ８ｋＢ（１２８ｋＢ×２００／３２００）
Ｓ２：  １６ｋＢ（１２８ｋＢ×４００／３２００）
Ｓ３：  ２４ｋＢ（１２８ｋＢ×６００／３２００）
Ｓ４：  ８０ｋＢ（１２８ｋＢ×２０００／３２００）
Ｓｐ：  ８０ｋＢ（＝Ｓ４）
ここで、計算機上におけるキロ接頭辞は１０２４倍を表すことに注意すべきである。
【０１００】
＜アクセス開始チャンクの特定処理（Ｓ４０）＞
先頭チャンク特定処理に従ってアクセス開始チャンクが特定される（図９）。チャンクサイズＳｃｉおよび総チャンクサイズＳＣは下記の通りである（Ｓ４０１）。
Ｓｃ１：  ２００ｋＢ
Ｓｃ２：  １９２ｋＢ
Ｓｃ３：  １８４ｋＢ
Ｓｃ４：  １２８ｋＢ
ＳＣ：  ７０４ｋＢ
【０１０１】
上記ＳＣと要求ＬＢＡおよびディスク台数からより、仮チャンクＩＤ（＝ｈ’）は、次の通り計算される（Ｓ４０２）。
ｈ’＝ＲＵ（１０００００００／（７０４×１０２４））＝１３
除算に総チャンクサイズを用いているため、ｈ’の精度（解像度）はｄ、すなわち４倍程度であることに注意するべきである。
【０１０２】
また、アクセス開始チャンクＩＤ（＝ｈ）特定のためのオフセットＯｘは、次のように求められる。
Ｏｘ＝１０００００００−（１３×７０４×１０２４）＝６２８３５２
【０１０３】
以降Ｓｃ１から順にオフセットＯｔ（Ｏｎ）と比較し、減算していく（Ｓ４０５、Ｓ４０６及びＳ４０７）。最終的に求められたオフセットをＯｆとする。
６２８３５２−２００×１０２４＝４２３５５２    （Ｏｘ−Ｓｃ１＝Ｏｘｎ１）
４２３５５２−１９２×１０２４＝２２６９４４    （Ｏｘｎ１−Ｓｃ２＝Ｏｘｎ２）
２２６９４４−１８４×１０２４＝３８５２８      （Ｏｘｎ２−Ｓｃ３＝Ｏｘｎ３）
３８５２８＜１２８×１０２４    （Ｏｎ３とＳｃ４の比較の結果、３８５２８＝Ｏｔ）
【０１０４】
したがって、アクセス開始チャンクＩＤ（＝ｈ）は、次のように求まる（Ｓ４０８）。
ｈ＝ｈ’×ｄ＋ｉ−１＝１３×４＋４−１＝５５
【０１０５】
＜アクセス開始ストレージ装置の特定処理（Ｓ６０）＞
アクセス開始ストレージ装置の特定には、オフセットＯｔより、ストライプサイズＳｉを順に比較し、減算を行う（Ｓ５４、Ｓ５５及びＳ５６）。
３８５２８−８×１０２４    （Ｏｔ−Ｓ１＝Ｏｎ１）
３０３３６−１６×１０２４    （Ｏｎ１−Ｓ２＝Ｏｎ２）
１３９５２＜２４×１０２４    （Ｏｎ２とＳ３の比較、１３９５２＝Ｏｆ）
従って、アクセス開始ストレージ装置の番号ｉが３であることが特定される。
【０１０６】
＜アクセス開始ＬＢＡの特定＞
アクセス開始ＬＢＡ特定処理に従って、アクセス開始ＬＢＡが特定される(図１０）。
まず、ストライプサイズＳ３とチャンクＩＤ（＝ｈ）およびディスク台数（＝ｄ）を用いて、次のように開始ＬＢＡ−ｒｅ＝Ｌを計算する（Ｓ６０１乃至Ｓ６０３）
開始ＬＢＡ−ｒｅ＝ＲＵ（ｈ／ｄ）×（（ｄ−１）×Ｓｉ＋Ｓｐ）＝２０２３４２４
【０１０７】
次にＳ５４で求まったオフセットＯｆを用いてｒｅを計算する。
本具体例におけるチャンクＩＤは５５であるから、ディスク台数による余剰は３である。また、３番目のストレージ装置２ｃ（図１３）のパリティ担当回は３回目であるから、仮想ＬＢＡ空間から実ＬＢＡ空間への射影において、２度データを格納し、１度パリティを格納している。すなわち、ｒｅは次のように求めることができる。
ｒｅ＝Ｏｆ＋２×Ｓ３＋Ｓｐ
＝１３９５２＋２×２４×１０２４＋８０×１０２４
＝１４５０２４
【０１０８】
従って、ストレージ装置２ｃにおけるアクセス開始ＬＢＡは次のようになる。
開始ＬＢＡ＝２０２３４２４＋１４５０２４＝２１６８４４８
【０１０９】
以降、各ストレージ装置のパリティ担当回をスキップしながら、それぞれストライプを読み出し、連結して出力することによりホスト装置３からの仮想ディスク空間へのデータアクセスを実現する。
【０１１０】
なお、実際のストレージ装置２へのアクセスはバイト単位ではなく、ブロックあるいはセクタと呼ばれる大きな単位で行われることが一般的である。その場合においても、本アルゴリズムの基本単位がバイトからブロック、セクタに変更するだけでそのまま継続して実施することが可能であり、本発明の適用において障害になることはない。
【０１１１】
（４）故障復帰処理の具体例
以下、第２の実施形態に従って、故障復帰処理の具体例について説明する。故障復帰処理におけるディスクアレイ装置１とストレージ装置の構成も図１３と同様であるものとする。以降、ディスクアレイ装置１を構成するドライブのうち２番目に容量の小さいストレージ装置２ｂ（４００ＧＢ）の故障に際して挿入される代替ストレージ装置（図示せず）の容量に応じた操作をそれぞれ説明する。
【０１１２】
ディスクアレイ装置１は構成ドライブ管理機能１３１を用いて現存しているストレージ装置２ａ、２ｃ及び２ｄ、及び故障ストレージ装置２ｂと、代替ストレージ装置との容量を比較する（Ｓ１２２）。
【０１１３】
＜故障ストレージ装置２ｂ（４００ＧＢ）未満の代替ストレージ装置が挿入された場合＞
構成ドライブ管理機能１３１は、ディスクアレイ装置１を復元できないと判断し、復元処理を中止する（Ｓ１２３及びＳ１２１３）。
【０１１４】
＜故障ストレージ装置２ｂ（４００ＧＢ）以上、ストレージ装置２ｃ（６００ＧＢ）未満の場合＞
パリティ管理機能１３４は、現存ストレージ装置２ａ、２ｃ及び２ｄに格納されたパリティおよびデータ情報を基に、代替ストレージ装置上に故障ストレージ装置２ｂの内容を復元する。
【０１１５】
＜ストレージ装置２ｃ（６００ＧＢ）以上ストレージ装置２ｄ（２ＴＢ）未満の代替ストレージ装置が挿入された場合＞
構成ドライブ管理機能１３１は、現存ストレージ装置２ｃの内容を代替ストレージ装置へとコピーする。これは、ストレージ装置２の容量の大小とストライプサイズＳｉの大小の整合性を確保するための処理であり、ディスクアレイ装置１の性能を最適化する効果がある。
【０１１６】
コピーの後、パリティ管理機能１３４は、現存ストレージ装置２ａ及び２ｄと代替ストレージ装置（２ｃと同一の内容が記録されている）に格納されたパリティおよびデータ情報を基に、ストレージ装置２ｃ上に故障ストレージ装置２ｂの内容を復元する。
【０１１７】
＜ストレージ装置２ｄ（２ＴＢ）以上の代替ストレージ装置が挿入された場合＞
この場合もストレージ装置２の容量関係とストライプサイズＳｉの関係の整合性を保つために、現存ストレージ装置の複製が行われる。
【０１１８】
まず、構成ドライブ管理機能１３１は、現存ストレージ装置２ｄの内容を代替ストレージ装置にコピーする。コピーの後、構成ドライブ管理機能１３１は、現存ストレージ装置２ｃの内容を現存ストレージ装置２ｄにコピーする。このコピー処理（２ｃ→２ｄ）は必ずしも先のコピー処理（２ｄ→代替ストレージ装置）が終了する必要はなく、十分な通信バス１５を備えたディスクアレイ装置１ならば、平行して２つのコピー処理を行ってもよい。この並行処理を行うことで、データ復元手順にかかる時間を短縮することができる。
【０１１９】
両コピーが終了した時点で、パリティ管理機能１３４は、現存ストレージ装置２ａ及び２ｄ（内容は２ｃ）と代替ストレージ装置（内容は２ｄ）のパリティおよびデータ情報を用いて、現存ストレージ装置２ｃ上に故障ストレージ装置２ｂを復元する。
【０１２０】
以上の操作により、性能を最適化しながら、異容量ストレージ装置によって構成されるデータ復元機能を有するディスクアレイ装置１を提供することができる。
【０１２１】
（５）まとめ
各実施形態によるディスクアレイ装置は、データ管理部を用いて、データを複数のストライプデータに分割し、複数のストレージ装置に分散させて格納し、管理している。ここで、複数のストレージ装置のうち、少なくとも１つの容量が他のストレージ装置の容量とは異なっている。そして、データ管理部は、複数のストレージ装置のそれぞれの容量に応じて、ストライプデータのサイズを決定し、各ストレージ装置には同一サイズのストライプデータを格納するように制御する（図２及び８参照）。このようにすることにより、最小容量のストレージ装置に影響されずに、各ストレージ装置の容量を効率よく利用することが可能となる。つまり、ストレージ装置の容量の選択が自由になるので、ディスクアレイ装置とストレージ装置とから構成されるシステム（ストレージシステム）を構築する際のコストを抑えることが可能となる。
【０１２２】
ホスト装置からアクセス要求を受信したとき（ＲＡＩＤ０の場合）、データ管理部は、まず、アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）をチャンクのサイズで除算することにより、要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを計算する。次に、データ管理部は、要求ＬＢＡと先頭チャンクと先頭チャンクに含まれるストライプデータのサイズの情報から先頭チャンクの開始位置から要求ＬＢＡまでの距離であるオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定する。そして、データ管理部は、先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報とオフセットからアクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定する。このようにすることにより、各ストレージ装置においてストライプサイズが異なっていても、高速に所望のデータにアクセスすることが可能となる。
【０１２３】
ＲＡＩＤ５の場合、データ管理部は、ストライプデータの集合をチャンクとして管理し、対象のチャンクが何番目のチャンクに相当するかの情報からパリティ格納を担当するストレージ装置（パリティ担当ストレージ装置）を決定し、パリティ担当ストレージ装置以外のストレージ装置のストライプデータからパリティ（最大容量のストレージ装置におけるストライプデータに等しいサイズにする）を生成し、パリティ担当ストレージ装置にはパリティのみを格納し、パリティ担当ストレージ装置以外のストレージ装置にはそれらの容量に応じて決定されたサイズのストライプデータを格納するように制御する。このようにすることにより、ＲＡＩＤ５に対応しながら、最小容量のストレージ装置に影響されずに、各ストレージ装置の容量を効率よく利用することが可能となる。
【０１２４】
このとき、複数のストレージ装置のそれぞれが１回ずつパリティ担当ストレージ装置となった場合の単位を１サイクルとすると、データ管理部は、１サイクルに含まれる全てのチャンクのパリティ以外のストライプデータの合計サイズが各サイクル間で互いに等しく構成されるように管理する。このようにデータを管理することにより、高速なアクセス性を実現することができるようになる。
【０１２５】
より具体的に述べると、ホスト装置からアクセス要求を受信したとき（ＲＡＩＤ５の場合）、データ管理部は、まず、アクセス要求に含まれる要求ＬＢＡ（仮想ディスク空間でのＬＢＡ）を１サイクルに含まれる全チャンク内のストライプデータの合計サイズで除算することにより、前記要求ＬＢＡの位置が何番目のサイクルに該当するかを計算する。次に、データ管理部は、該当サイクルの先頭から要求ＬＢＡまでの距離である第１のオフセットを計算する。そして、データ管理部は、第１のオフセットと該当サイクルに含まれる各チャンクのサイズ情報から要求ＬＢＡの位置が含まれるチャンクである先頭チャンクを特定する。さらに、データ管理部は、要求ＬＢＡと先頭チャンクと先頭チャンクに含まれるストライプデータのサイズの情報から先頭チャンクの開始位置から要求ＬＢＡまでの距離である第２のオフセットを計算してアクセスを開始すべきストレージ装置（アクセス開始ストレージ装置）を特定する。最後に、データ管理部は、先頭チャンクが何番目のチャンクかを示す先頭チャンク位置情報と、アクセス開始ストレージ装置の情報と、当該アクセス開始ストレージ装置のストライプデータサイズと、当該アクセス開始ストレージ装置が前記パリティ担当ストレージ装置となった回数の情報と、からアクセス開始ストレージ装置におけるアクセス開始ＬＢＡ（実ディスク空間でのＬＢＡ）を特定する。以上のような演算によってアクセス開始ＬＢＡが特定されるので、複雑なアルゴリズムを使用することなく、所望のアクセス性能を実現することができるようになる。
【０１２６】
また、複数のストレージ装置のうち少なくとも１つのストレージ装置（被代替ストレージ装置：例えば、故障したストレージ装置）を、それより容量の大きい代替ストレージ装置と交換する場合、データ管理部は、被代替ストレージ装置のデータを代替ストレージ装置に格納する。この場合、データ管理部は、被代替ストレージ装置以外のストレージ装置に格納されるデータから被代替ストレージ装置（故障ストレージ装置）のデータを復元し、当該復元データを代替ストレージ装置に格納する。また、被代替ストレージ装置以外のストレージ装置（現存ストレージ装置）で代替ストレージ装置よりも容量が小さいものがある場合、データ管理部は、当該容量の小さい現存ストレージ装置のデータを順次代替ストレージ装置にコピーし、被代替ストレージ装置より容量が大きく、容量に関して直近の現存ストレージ装置に被代替ストレージ装置のデータを格納する。このようにすることにより、代替ストレージ装置の容量を最大限に活用しつつ、故障ストレージ装置を交換することができる。つまり、代替ストレージ装置よりも容量の小さい現存ストレージ装置があるにもかかわらず、非代替ストレージ装置のデータを格納するだけでは、代替ストレージ装置に多くの空き領域（以後使われない空き領域）が存在してしまう。そこで、代替ストレージ装置よりも少ない容量の現存ストレージ装置が存在する場合には、非代替ストレージ装置よりも容量が大きい現存ストレージ装置の中で最小の容量を有する現存ストレージ装置に非代替ストレージ装置のデータを格納させる。当該現存ストレージ装置のデータは、代わりに他の容量の大きい現存ストレージ装置或いは代替ストレージ装置に格納することによって、ストレージ装置の容量を効率よく使用することができる。
【０１２７】
なお、本発明は、実施形態の機能を実現するソフトウェアのプログラムコードによっても実現できる。この場合、プログラムコードを記録した記憶媒体をシステム或は装置に提供し、そのシステム或は装置のコンピュータ（又はＣＰＵやＭＰＵ）が記憶媒体に格納されたプログラムコードを読み出す。この場合、記憶媒体から読み出されたプログラムコード自体が前述した実施形態の機能を実現することになり、そのプログラムコード自体、及びそれを記憶した記憶媒体は本発明を構成することになる。このようなプログラムコードを供給するための記憶媒体としては、例えば、フレキシブルディスク、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、ハードディスク、光ディスク、光磁気ディスク、ＣＤ−Ｒ、磁気テープ、不揮発性のメモリカード、ＲＯＭなどが用いられる。
【０１２８】
また、プログラムコードの指示に基づき、コンピュータ上で稼動しているＯＳ（オペレーティングシステム）などが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。さらに、記憶媒体から読み出されたプログラムコードが、コンピュータ上のメモリに書きこまれた後、そのプログラムコードの指示に基づき、コンピュータのＣＰＵなどが実際の処理の一部又は全部を行い、その処理によって前述した実施の形態の機能が実現されるようにしてもよい。
【０１２９】
また、実施の形態の機能を実現するソフトウェアのプログラムコードを、ネットワークを介して配信することにより、それをシステム又は装置のハードディスクやメモリ等の記憶装置又はＣＤ-ＲＷ、ＣＤ-Ｒ等の記憶媒体に格納し、使用時にそのシステム又は装置のコンピュータ(又はＣＰＵやＭＰＵ)が当該記憶装置や当該記憶媒体に格納されたプログラムコードを読み出して実行するようにしても良い。
【符号の説明】
【０１３０】
１：  ディスクアレイ装置
２：  ストレージ装置
３：  ホスト装置
２０：  仮想ストレージ
２５：  ストライプ
２６：  パリティ
【図１】
2010282281.tif 000003
【図２】
2010282281.tif 000004
【図３】
2010282281.tif 000005
【図４】
2010282281.tif 000006
【図５】
2010282281.tif 000007
【図６】
2010282281.tif 000008
【図７】
2010282281.tif 000009
【図８】
2010282281.tif 000010
【図９】
2010282281.tif 000011
【図１０】
2010282281.tif 000012
【図１１】
2010282281.tif 000013
【図１２】
2010282281.tif 000014
【図１３】
2010282281.tif 000015