(57)【要約】【課題】プライマリストレージのようにアクセス頻度の低いデータを分類して記録することが困難なストレージに対しても低コストで消費電力を低減したストレージ装置を提供する。【解決手段】ストレージを構成する記憶媒体間のデータの冗長性を利用し、冗長分のデータを記録する記憶媒体を停止する。そして、データの読み出しは他の記憶媒体のみで行う。また、データの更新は、停止した記憶媒体より高速かつ省電力な記憶媒体を配置し、そちらに記録する。更新データは停止した記憶媒体を再起動した際にまとめて反映する。【選択図】図１
2012014313.tif 000002
【特許請求の範囲】
【請求項１】
冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、
前記記憶媒体よりも高速にアクセス可能であり、前記複数の記憶媒体のうち停止中の記憶媒体へデータ書き込み要求のあった際に、前記冗長データの一時的な記録先として使用する不揮発性記憶媒体と、
データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせ、記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す制御部と、
を備えることを特徴とするストレージ装置。
【請求項２】
さらに、前記制御部は、前記読み込み要求を受けたデータに対応する冗長データが前記不揮発性記憶媒体に記録されておらず、冗長データを格納した記録媒体が停止している場合には、前記複数の記憶媒体のうち、動作中の記憶媒体から冗長データに相当するデータを読み出す、請求項１のストレージ装置。
【請求項３】
前記複数の記憶媒体のうち、冗長データの格納先として使用される記憶媒体は、前記ストレージ装置の起動時から停止しており、
前記制御部が、前記冗長データの格納先として使用されている記憶媒体を起動した際に、前記不揮発性記憶媒体に記録された前記冗長データを前記冗長データの格納先として使用されている記憶媒体に複写する請求項１又は２のストレージ装置。
【請求項４】
前記制御部が、前記不揮発性記憶媒体の記録領域が不足した際に、前記冗長データの格納先として使用されている記憶媒体を起動し、前記複写後のデータを前記不揮発性記憶媒体から消去する請求項３のストレージ装置。
【請求項５】
前記制御部は、前記不揮発性記憶媒体のデータが前記冗長データの格納先として使用されている記憶媒体に複写が必要か否かをテーブルにより管理し、前記不揮発性記憶媒体の記録領域が不足した場合には前記不揮発性記憶媒体から複写が必要ないデータを消去する請求項４のストレージ装置。
【請求項６】
前記テーブルは前記不揮発性記憶媒体に記録されている請求項５のストレージ装置。
【請求項７】
前記制御部が、前記冗長データの複写後に前記冗長データの格納先として使用されている記憶媒体を停止する請求項３から６いずれか一に記載のストレージ装置。
【請求項８】
前記不揮発性記憶媒体に代えて、前記ストレージ装置の電源オフ時にも前記ストレージ装置に常時接続された電源によりデータの保持が可能なメモリを備えた請求項１から７いずれか一に記載のストレージ装置。
【請求項９】
冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、
前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、
を備えるストレージ装置の制御方法であって、
前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する工程と、
データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる工程と、
前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す工程と、
を含むことを特徴とするストレージ装置の制御方法。
【請求項１０】
冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、
前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、
を備えるストレージ装置を制御するコンピュータに実行させるプログラムであって、
前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する処理と、
データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる処理と、
前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す処理と、
を前記コンピュータに実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置、その制御方法及びプログラムに関する。特に、冗長性を持つアレイを構成する記憶装置の一部を停止するストレージ装置に関する。
【背景技術】
【０００２】
昨今の情報通信技術の進化とその適用分野の拡大に伴い、情報処理システムにおいて扱われるデータ量、及びそのデータに対する即時性に対する要求が年々高まっている。そのため、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）に代表されるデータを格納するストレージに対して、大容量のデータを短時間で処理が出来るようにアクセス性能の高速化が図られている。
【０００３】
また、ストレージを含めた多数の情報通信機器がデータセンターに集約され、大規模なシステムとして運用されている。このようなデータセンターでは、設置場所の広さに比例した運用費用が必要である。そのため、システム全体の運用コストの削減を目的としてストレージ装置の高密度化が図られている。
【０００４】
一方、ストレージを含めた情報通信機器に対する省電力化への要求が拡大している。その第一の理由は、データセンター等の消費電力及び発熱の制約である。ストレージの消費電力の増加により、システム運用時の電気料金が増加する。また、情報通信機器を納めるラックは、全体で許容可能な消費電力の上限が定められており、ラック全体の消費電力の上限を超えた場合には別のラックに分離する必要がある。このような分離は、装置及び機器の設置コスト増につながる。また、消費電力の増加は多くの場合発熱量の増加につながり、空調コストの増加を招く。従って、ストレージを含めた各装置の消費電力の低減が必要となる。第二の理由は、環境負荷に対する社会的要求の増加である。情報通信機器を利用する企業に対して、環境負荷の低減が求められる。このような状況下では、情報通信機器についても、電力消費量の削減を通じて環境への負荷を低減することが要求される。
【０００５】
このような背景の下、ストレージに対する省電力化を目的とした各種の技術が存在する。その具体例として、ＭＡＩＤ（Ｍａｓｓｉｖｅ  Ａｒｒａｙ  ｏｆ  Ｉｄｌｅ  Ｄｉｓｋｓ）が挙げられる。ＭＡＩＤは主にＨＤＤを用いたストレージに対して適用される。電源が投入されたＨＤＤは、アクセスの無い間もデータを記録した円盤を内部で回転させ続けるため多くの電力を消費する。ＭＡＩＤでは、ストレージ内でアクセスが無い、又はアクセスの頻度が低いＨＤＤを停止することで消費電力を抑える。しかし、停止したＨＤＤに格納されたデータに対してアクセスする際には、ＨＤＤの電源を投入して起動完了を待つ必要があるためアクセス性能は大きく低下してしまう。そこで、ＭＡＩＤではアクセス予定のないデータ、或いはアクセス頻度が低いデータを格納したＨＤＤに限定し、その動作を停止することで性能低下を抑えている。
【０００６】
また、ストレージを構成する記憶媒体として、消費電力が元々低い記憶媒体を使用することで省電力化が実現できる。近年、ストレージを構成する記憶媒体として主に使われているＨＤＤに代わり、フラッシュメモリを用いたＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）の普及が始まっている。ＳＳＤはＨＤＤに比べてアクセス性能が高く、物理的な可動部分を持たないため、アクセスの有無に関わらず電力の消費が少ない。そのため、ＨＤＤからＳＳＤにそのまま置き換えるだけでストレージの省電力化が達成できる。
【０００７】
さらに、特許文献１に複数の記憶媒体を有するストレージ装置において、ディスクのミラー構成を維持しながら、システムの消費電力を監視して所定の値を超えた場合にはミラーリング構成の片側のディスクの動作を停止し、その間は不揮発性メモリにデータを記録することによってシステム全体の消費電力を低減するディスクアレイシステムが開示されている。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】特開２００９−１８７４５０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００９】
以下の分析は、本発明の観点からなされたものである。
【００１０】
上述のように、ＭＡＩＤはアクセス頻度の低いストレージに着目した技術である。一方、システム上には、頻繁にアクセスされるデータを格納したストレージ、つまりプライマリストレージが存在する。このような、プライマリストレージには特に高いアクセス性能が求められる。従って、プライマリストレージには高回転のＨＤＤが用いられるのが通常である。しかし、高回転のＨＤＤは高性能である反面、消費電力及び発熱が通常のＨＤＤより大きい。そのため、通常のＨＤＤと比較し、システムにおける電力や発熱の制約がより厳しくなる。つまり、プライマリストレージは電力及び発熱の制約を伴う高密度化という側面においては、特に厳しい要件を持つ。
【００１１】
このようなプライマリストレージに対して、ＭＡＩＤを用いた省電力化の効果は限定的である。そもそも、ＭＡＩＤではアクセスが行われない、又はアクセス頻度の低いＨＤＤを停止することで省電力化を図っている。これに対してプライマリストレージは、頻繁にアクセスされるデータを格納することを目的としている。よって、プライマリストレージにはＭＡＩＤによる停止対象のＨＤＤが存在せず、省電力化の効果は得られない。
【００１２】
一方、ＳＳＤをＨＤＤの代わりに記憶媒体として採用する場合、省電力化と同時にストレージ全体のアクセス性能の向上が達成できる。またアクセス性能の向上により、装置の台数自体が削減され、システムの高密度化が期待できる。そのため、ＨＤＤを全てＳＳＤに置き換えれば、高性能化、高密度化、省電力化の全てにおいて有効である。しかし、これは、コスト的な理由により現実的ではない。ＳＳＤはＨＤＤに比べて記憶容量が小さく、高価であるためＨＤＤと同容量のＳＳＤへの置き換えに要するコストが非常に大きいためである。
【００１３】
以上のように、プライマリストレージのように頻繁にアクセスがあり、高いアクセス性能が求められ、かつ消費電力が大きいストレージに対する低消費電力化が必要である。
【００１４】
以上のとおり、従来技術には、解決すべき問題点が存在する。
【００１５】
本発明の一側面において、高性能かつ消費電力を抑えたストレージ装置、その制御方法及びプログラムが、望まれる。
【課題を解決するための手段】
【００１６】
本発明の第１の視点によれば、冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能であり、前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求のあった際に、前記冗長データの一時的な記録先として使用する不揮発性記憶媒体と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせ、記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す制御部と、を備えるストレージ装置が提供される。
【００１７】
本発明の第２の視点によれば、冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、を備えるストレージ装置の制御方法であって、前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する工程と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる工程と、前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す工程と、を含むストレージ装置の制御方法が提供される。
【００１８】
本発明の第３の視点によれば、冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、を備えるストレージ装置を制御するコンピュータに実行させるプログラムであって、前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する処理と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる処理と、前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す処理と、を前記コンピュータに実行させるプログラムが提供される。
【発明の効果】
【００１９】
本発明の各視点によれば、記憶媒体の動作を一部停止し、不揮発性メモリをキャッシュとして使うことで、アクセス性能が高く、消費電力を抑えたストレージ装置を提供することができる。
【図面の簡単な説明】
【００２０】
【図１】本発明の概要を説明するための図である。
【図２】本発明の実施形態に係るストレージ装置を含むシステム全体の構成を示す図である。
【図３】本発明の第１の実施形態に係るストレージ装置全体のブロック図である。
【図４】図３のアクセス要求処理部２１の構成を示すブロック図である。
【図５】図３におけるコマンド実行部２６の構成を示すブロック図である。
【図６】アクセス要求管理テーブルの内容を示す図である。
【図７】コマンド管理テーブルの内容を示す図である。
【図８】キャッシュ管理テーブルの内容を示す図である。
【図９】図３のストレージ装置全体の動作を示すフローチャートである。
【図１０】図５のコマンド制御実行部２６１のデータ読み込み処理を示すフローチャートである。
【図１１】図５のコマンド制御実行部２６１のデータ書き込み処理を示すフローチャートである。
【図１２】図５のコマンド制御実行部２６１が不揮発キャッシュ２４に空き領域を確保する処理を示したフローチャートである。
【図１３】図５のコマンド制御実行部２６１が不揮発キャッシュ２４の更新データを記憶媒体に反映する処理を示したフローチャートである。
【図１４】第２の実施形態におけるＨＤＤのアドレス空間内の領域について示した図である。
【図１５】第２の実施形態におけるホストからのアクセス要求の順序を示した図である。
【発明を実施するための形態】
【００２１】
はじめに、図１を用いて本発明の概要について説明する。上述のとおり、プライマリストレージに対してＭＡＩＤの適用、及びＳＳＤ等の省電力な記憶媒体への置き換えは、非常に困難である。また、複数の記憶媒体を持つストレージでは記憶媒体に対する耐障害性を確保するために、ＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙｓ  ｏｆ  Ｉｎｅｘｐｅｎｓｉｖｅ  Ｄｉｓｋｓ）を始めとした、複数の記憶媒体間でデータの冗長性を有する構成が採用される。このようなストレージでは、データ本体とデータに対するパリティ情報、又はミラー（複製）がそれぞれ異なる記憶媒体に記録される。これは、複数の記憶媒体間で冗長構成を取るストレージからデータを読み出す場合、冗長データを格納した記憶媒体へのアクセスは不要であることを意味する。そのため、目的とするデータを格納した記憶媒体にアクセス可能であれば、前述の冗長データを格納した記憶媒体が停止した状態でも、データの読み込みは可能である。
【００２２】
一方、前述のストレージに対してデータの書き込みを行う場合には、データ本体と共にデータに対するパリティ、ミラー等の冗長データの更新が必要である。つまり、データ本体を格納した記憶媒体、及び冗長データを格納した記憶媒体の両方への書き込みが必要である。しかし、更新された冗長データを別の記憶媒体に一時的に記録することができれば、冗長データを記録した記憶媒体へのアクセスを行わずに書き込み処理が可能となる。
【００２３】
そこで、本発明では、複数記憶媒体間の冗長構成を取るストレージにおいて、パリティ、ミラー等の冗長データを格納する記憶媒体を停止した状態で運用する。その際、停止した記憶媒体に格納するデータは、ストレージを構成する記憶媒体より高速かつ省電力な別の種類の記憶媒体に一時的に格納する。この一時的に記憶媒体に格納されたデータは、その空き容量が不足する迄の任意の時期に、元の格納先である記憶媒体を起動して、更新が反映される。
【００２４】
具体的には更新されたデータ及びデータに対応するアドレスを一時的に記録する記憶媒体（以下、不揮発キャッシュ）として、ＳＳＤのような高性能かつ省電力な媒体を採用する。そして、読み込みアクセスの対象データが不揮発キャッシュ上に存在する場合、そのデータを読み出し、不揮発キャッシュに記録したデータは冗長データを記録した記憶媒体にアクセス可能な時に書き込む。
【００２５】
このように、ストレージの中で主に使われる記憶媒体とは別に、不揮発キャッシュを用いることで、記憶媒体のうち停止可能な記憶媒体を停止させ、省電力化を実現する。また、不揮発キャッシュに高性能な媒体を採用し、ストレージに対する読み込み要求の際には、最初に不揮発キャッシュにデータの存在を確認し、データが存在すれば、その不揮発キャッシュのデータを用いることで、ストレージ全体の性能を向上させる。
【００２６】
［第１の実施形態］
次に、本発明の第１の実施形態について、図面を用いてより詳細に説明する。図２は、本発明の実施形態に係るストレージ装置を含むシステム全体の構成を示す図である。本システムは、データにアクセスするホストと、複数の記憶媒体から構成されるストレージ２と、これらを接続するネットワーク３から構成されている。ネットワークに接続するホストは１台に限定されず、複数のホストがストレージ２にアクセス可能である。また、ネットワーク３は、ストレージ２に対して複数のホストが接続可能な形態のみならず、ホストとストレージ２を直接接続する構成でも良い。
【００２７】
続いて、ストレージ２の構成について図３を参照して説明を行う。図３は本発明の一実施形態に係るストレージ装置の構成を示したブロック図である。ストレージ２は、アクセス要求処理部２１と、記憶媒体２２と、冗長データ記憶媒体２３と、不揮発キャッシュ２４と、記憶媒体電源制御部２５と、コマンド実行部２６から構成される。
【００２８】
アクセス要求処理部２１は、ホスト１からのアクセス要求を受け取り、その要求に応じたコマンドを生成する。さらに、アクセス要求処理部２１は、読み込んだ冗長データから元のデータの復元を行う。逆に、書き込みデータから冗長データ記憶媒体２３に格納するための冗長データの生成を行う機能も有する。
【００２９】
次に、アクセス要求処理部２１の構成について詳細に説明する。図４は、アクセス要求処理部２１の内部構成のブロック図である。アクセス要求処理部２１は、アクセス解釈部２１１と、アクセス要求情報格納部２１２と、データ復元部２１３と、冗長データ生成部２１４から構成される。
【００３０】
アクセス解釈部２１１は、ホスト１からのアクセス要求を受け取り、その要求に応じて記憶媒体２２及び冗長データ記憶媒体２３に対するコマンドを生成する。アクセス解釈部２１１は、生成したコマンドをコマンド実行部２６に通知すると共に、コマンドの管理情報をアクセス要求情報格納部２１２において記録する。また、生成したコマンドがＷｒｉｔｅコマンドである場合、書き込み対象となるデータをコマンド実行部２６に渡す。その後、コマンド実行部２６から、Ｒｅａｄコマンドで読み出されたデータ、又はＷｒｉｔｅコマンドに対する完了通知を受理すれば、読み出されたデータ又は書き込み要求に対する完了通知を対応する要求元であるホスト１に返す。
【００３１】
さらに、アクセス解釈部２１１は、ホスト１からのアクセス要求が完了すると任意のタイミングで、アクセス要求情報格納部２１２に記録された、該当するアクセス要求の管理情報を削除する。アクセス要求情報格納部２１２は、アクセス解釈部２１１が受け取ったアクセス要求、及びアクセス解釈部２１１が生成したコマンドとの対応をアクセス要求管理テーブル（図６参照）により管理する。
【００３２】
データ復元部２１３は、冗長データ記憶媒体２３から読み出した冗長データについて、他の記憶媒体２２及び冗長データ記憶媒体２３から読み出したデータと合わせて、冗長データに対応するデータ本体を生成する。
【００３３】
冗長データ生成部２１４は、ストレージ２に対する書き込みデータから冗長データ記憶媒体２３に記録するための冗長データを生成する。
【００３４】
続いて、ストレージ２に含まれる記憶媒体について説明する。記憶媒体２２はストレージ２に書き込まれたデータを恒久的に記録する。記憶媒体２２は、コマンド実行部２６からのコマンドによりデータのＲｅａｄ又はＷｒｉｔｅアクセスを行う。また、コマンド実行部２６の指示により動作状態及び停止状態の切り替えが可能である。
【００３５】
冗長データ記憶媒体２３は、記憶媒体２２に格納されたデータに対するパリティ、又はミラー（複製）等の冗長データを恒久的に記録する。冗長データ記憶媒体２３は、記憶媒体２２と同様に、コマンドによりデータのＲｅａｄ又はＷｒｉｔｅアクセスを行い、動作状態及び停止状態の切り替えが可能である。
【００３６】
不揮発キャッシュ２４は、記憶媒体２２及び冗長データ記憶媒体２３よりもアクセス性能が高く、ホスト１から受理したデータを停止状態の記憶媒体２２又は冗長データ記憶媒体２３に書き込む前に一時的に保存する。つまり、不揮発キャッシュ２４は、記憶媒体２２又は冗長データ記憶媒体２３に書き込むべきデータをこれらの記憶媒体が停止している間、更新されたデータを保持する役割を持つ。また、不揮発キャッシュ２４は停止状態の記憶媒体２２又は冗長データ記憶媒体２３に書き込まれるデータを保持するだけでなく、記憶媒体２２及び冗長データ記憶媒体２３のデータを一時的にキャッシュとして利用することで、ストレージ２に対する読み込み要求、書き込み要求の処理性能を高める。
【００３７】
なお、記憶媒体電源制御部２５により、記憶媒体２２及び冗長データ記憶媒体２３の動作又は停止を記録し、電源を制御することでこれらの記録媒体の動作状態と停止状態が切り替えられる。以上が、記憶媒体についての説明である。
【００３８】
次に、コマンド実行部２６について説明する。コマンド実行部２６は、アクセス要求処理部２１からＲｅａｄコマンド又はＷｒｉｔｅコマンドを受け取る。そのコマンドが、Ｒｅａｄコマンドの場合には、不揮発キャッシュ２４に要求されたデータが記録されているか確認し、記録されている場合には不揮発キャッシュ２４から該当するアドレスのデータを読み込み、そのデータをアクセス要求処理部２１に返す。一方、不揮発キャッシュ２４に要求されたデータが存在しなかった場合は、記憶媒体２２又は冗長データ記憶媒体２３から当該データ又は当該データに対応する冗長データの読み込みをする。Ｗｒｉｔｅコマンドの場合には、記憶媒体２２が停止している場合は書き込みデータ本体を不揮発キャッシュ２４に書き込みし、記憶媒体２２が動作状態に遷移するまで書き込みデータの保持をする。同様に、冗長データ記憶媒体２３が停止している場合には、冗長データ生成部２１４で生成した冗長データを不揮発キャッシュ２４に書き込み、冗長データ記憶媒体２３が動作状態に遷移するまで冗長データを保持する。
【００３９】
コマンド実行部２６は、不揮発キャッシュ２４でデータ本体の保持をしている場合、任意のタイミングで記憶媒体２２を停止状態から動作状態に切り替え、不揮発キャッシュ２４で保持する書き込みデータを記憶媒体２２に書き込む。同様に、不揮発キャッシュ２４で書き込みデータに対する冗長データの保持をしている場合、任意のタイミングで冗長データ記憶媒体２３を停止状態から動作状態に切り替え、不揮発キャッシュ２４で保持する冗長データを冗長データ記憶媒体２３に書き込む。
【００４０】
また、コマンド実行部２６は、不揮発キャッシュ２４を介さず、記憶媒体２２及び冗長データ記憶媒体２３に発行したコマンドが完了した場合、又は、不揮発キャッシュ２４に対する読み込み又は書き込みが完了するとアクセス要求処理部２１に対しＲｅａｄコマンドの場合は読み出されたデータ、Ｗｒｉｔｅコマンドの場合は書き込み完了の通知を行う。
【００４１】
次に、コマンド実行部２６について詳細に説明する。図５は、コマンド実行部２６の内部構成のブロック図である。コマンド実行部２６は、コマンド実行制御部２６１と、コマンド管理情報格納部２６２と、データ更新制御部２６３から構成される。
【００４２】
コマンド実行制御部２６１は、アクセス要求処理部２１からＲｅａｄコマンド又はＷｒｉｔｅコマンドを受理し、コマンド管理情報格納部２６２にアクセスコマンドの実行管理に必要な情報を格納する。また、受理したコマンドがＲｅａｄコマンドである場合、不揮発キャッシュ２４、記憶媒体２２、又は冗長データ記憶媒体２３から対象データを読み出す。受理したコマンドがＷｒｉｔｅコマンドである場合は、記憶媒体電源制御部２５からデータの書き込み先の記憶媒体２２又は冗長データ記憶媒体２３の動作状態を取得し、これらが動作中であれば書き込みデータ又はその冗長データを記憶媒体２２又は冗長データ記憶媒体２３に直接書き込む。一方、書き込み先の記憶媒体２２又は冗長データ記憶媒体２３が停止した状態である場合には、不揮発キャッシュ２４に書き込みデータ又はその冗長データを一時的に格納する。また、不揮発キャッシュ２４に記録されており、記憶媒体２２及び冗長データ記憶媒体２３に格納されていない書き込みデータが存在すれば、データ更新制御部２６３の指示により、記憶媒体２２及び冗長データ記憶媒体２３にデータの書き込みを行う。記憶媒体２２、冗長データ記憶媒体２３又は不揮発キャッシュ２４へのアクセスが完了したコマンドは、Ｒｅａｄコマンドであればデータを、Ｗｒｉｔｅコマンドであれば完了通知をアクセス要求処理部２１に返す。
【００４３】
コマンド管理情報格納部２６２には、アクセス要求処理部２１から受理したコマンドの管理をするコマンド管理テーブルが記録されている（図７参照）。
【００４４】
データ更新制御部２６３は不揮発キャッシュ２４の状態を監視し、不揮発キャッシュ２４の更新データを格納する領域の空き容量が不足した場合、又は予め定められた時間や一定間隔経過といった条件で、記憶媒体電源制御部２５を通じて記憶媒体２２若しくは冗長データ記憶媒体２３を動作状態に切り替え、不揮発キャッシュ２４の更新データを書き込めるようにする。さらに、更新データが格納されるべき記憶媒体２２若しくは冗長データ記憶媒体２３が動作状態になると、コマンド実行制御部２６１に対して不揮発キャッシュ２４上の更新データを記憶媒体２２若しくは冗長データ記憶媒体２３に書き込みを求める要求を行う。
【００４５】
ここで、ストレージ２で用いる各種のテーブルについて説明する。図６は、前述のアクセス要求管理テーブルの内容を示す図である。アクセス要求管理テーブルは、ホスト１からの各アクセス要求に付随する情報を保持する。アクセス要求に付随する情報として、アクセス要求毎に付与する固有のＩＤと、読み込み要求であるか書き込み要求であるかのアクセス種別（図６ではＲ／Ｗと表現する）と、ストレージ２全体におけるアドレス空間内での先頭ブロックのアドレスと、アクセス長、アクセス要求の要求元ホストと、アクセス要求を処理するためにコマンド実行部２６に対して処理を依頼したコマンドに付加され、１個以上の各記憶媒体に対するアクセスコマンドのＩＤ（以下コマンドＩＤ）を記録する。アクセス要求管理テーブルは、ホスト１からの各アクセス要求に付随する情報が必要になる際に、アクセス解釈部２１１が参照する。
【００４６】
次に、コマンド管理テーブルについて説明する。図７は、コマンド管理テーブルの内容を示す図である。コマンド管理テーブルでは、アクセス要求処理部２１から処理を依頼されたコマンドを処理するため、記憶媒体２２、冗長データ記憶媒体２３又は不揮発キャッシュ２４に対して発行されるコマンドに付随する情報を保持する。コマンドに付随する情報としては、記憶媒体に対する各アクセスコマンドをアクセス要求管理テーブルにおいて識別するために用いるＩＤと、読み込み要求であるか書き込み要求であるかのアクセス種別（図７ではＲ／Ｗと表現する）と、コマンドを発行するアクセス先を指し示すＩＤと、アクセス先の先頭ブロックのアドレスと、アクセス長と、Ｗｒｉｔｅコマンドについては記憶媒体２２に書き込まれるデータ、又は冗長データ記憶媒体２３に書き込まれる冗長データを格納する。
【００４７】
続いて、不揮発キャッシュ管理テーブルについて説明する。図８は、不揮発キャッシュ管理テーブルの内容を示す図である。不揮発キャッシュ管理テーブルは、不揮発キャッシュ２４又はコマンド実行部２６で管理され、不揮発キャッシュ２４に格納された記憶媒体２２及び冗長データ記憶媒体２３を更新するためのデータ、又は更新済みのデータを管理するために必要な情報を保持するテーブルである。管理に必要な情報として、データが更新済みであるため不揮発キャッシュ２４上から追い出される際に記憶媒体２２及び冗長データ記憶媒体２３に対する更新処理が必要であるかを表すｄｉｒｔｙフラグ（１の場合は更新が必要）と、データの先頭ブロックのアドレスと、アクセス長と、不揮発キャッシュ２４上のデータの格納先の先頭ブロックのアドレスを格納する。また記憶媒体２２、冗長データ記憶媒体２３に対して既に更新が完了しているデータについては読み出し処理時にキャッシュとして利用する。
【００４８】
次に、図面を参照して本実施形態に係るストレージ装置の動作について説明する。図９は、ホスト１からストレージ２へアクセス要求が行われた際のストレージ２全体の動作について示している。
【００４９】
ステップＳ１０１において、アクセス解釈部２１１はホスト１からのアクセス要求を解釈し、記憶媒体２２、若しくは冗長データ記憶媒体２３に対するアクセスコマンド（Ｒｅａｄコマンド又はＷｒｉｔｅコマンド）を生成する。
【００５０】
ステップＳ１０２では、ステップＳ１０１で生成したコマンドが冗長データ記憶媒体２３に対する書き込みコマンドか否か判断する。書き込みコマンドでなければ、ステップＳ１０４に遷移する。書き込みコマンドである場合は、ステップＳ１０３に遷移する。
【００５１】
ステップＳ１０３では、アクセス解釈部２１１は冗長データ生成部２１４を用いて、ステップＳ１０１で受理した書き込みデータから冗長データ記憶媒体２３に実際に書き込む冗長データを生成する。
【００５２】
ステップＳ１０４では、アクセス解釈部２１１が、ステップＳ１０１で受理したアクセス要求の管理情報と生成したコマンドの対応情報をアクセス要求情報格納部２１２に格納する。このとき格納する情報は、図６のアクセス要求管理テーブルで示す内容である。また、アクセス解釈部２１１はコマンド実行部２６に対してステップＳ１０１で生成したコマンドの処理を要求する。コマンドがＷｒｉｔｅコマンドである場合は、書き込み対象のデータをコマンド実行部２６に渡す。
【００５３】
ステップＳ１０５においては、コマンド実行制御部２６１は、ステップＳ１０４でコマンド実行部２６に渡されたコマンドを受理し、そのコマンドの管理情報をコマンド管理情報格納部２６２にコマンド管理テーブルの形式で記録する。
【００５４】
ステップＳ１０６では、コマンド実行制御部２６１が受け取ったコマンドがＷｒｉｔｅコマンドの場合にはステップＳ１１１に遷移し、ＷｒｉｔｅコマンドでなければステップＳ１０７に遷移する。
【００５５】
ステップＳ１０７では、コマンド実行制御部２６１が受理したコマンドがＲｅａｄコマンドなので、Ｒｅａｄコマンドに対するアクセス処理を実行する。この時、コマンド実行制御部２６１は、Ｒｅａｄコマンドの処理を記憶媒体２２、冗長データ記憶媒体２３又は不揮発キャッシュ２４に対して実行する。
【００５６】
続いて、ステップＳ１０８において、コマンド実行制御部２６１は、発行したＲｅａｄコマンドの処理が完了すると、その読み込み結果をアクセス要求処理部２１に渡す。また、コマンド実行制御部２６１は、コマンド管理情報格納部２６２に記録された前述のＲｅａｄコマンドの管理情報を任意のタイミングで削除する。
【００５７】
ステップＳ１０９では、ステップＳ１０７、Ｓ１０８で完了したＲｅａｄコマンドが記憶媒体２２に対するコマンドである場合には、ステップＳ１１３に遷移する。また、ステップＳ１０７、Ｓ１０８で完了したＲｅａｄコマンドが冗長データ記憶媒体２３に対するコマンドである場合には、ステップＳ１１０に遷移する。
【００５８】
ステップＳ１１０では、アクセス要求処理部２１のデータ復元部２１３が、ステップＳ１０８で受理した読み込み結果の冗長データからストレージ２に対して読み込み要求をしたデータの復元をする。
【００５９】
続いて、ステップＳ１１１では、コマンド実行制御部２６１が受理したコマンドがＷｒｉｔｅコマンドである場合、コマンド実行制御部２６１はＷｒｉｔｅコマンドに対するアクセス処理を実行して記憶媒体２２、冗長データ記憶媒体２３、又は不揮発キャッシュ２４にデータを格納する。また、コマンド実行制御部２６１は、ステップＳ１１１で書き込みデータの格納が完了すると、書き込み処理の完了をアクセス要求処理部２１に通知する。
【００６０】
ステップＳ１１２では、コマンド実行制御部２６１が、コマンド管理情報格納部２６２に記録された前述のＷｒｉｔｅコマンド管理情報を任意のタイミングで削除する。
【００６１】
ステップＳ１１３では、アクセス解釈部２１１は、コマンド実行制御部２６１から読み込みの結果又は書き込みの完了通知を受理し、アクセス要求管理テーブルからコマンド結果に対応した要求元を探す。アクセス解釈部２１１は該当するアクセス要求の要求元であるホスト１に対して、Ｒｅａｄアクセス要求の結果であるデータ又はＷｒｉｔｅアクセス要求の完了通知を通知する。アクセス解釈部２１１はホスト１へのコマンドの結果又は完了の通知処理を完了すると、アクセス要求情報格納部２１２に格納された当該コマンドの管理情報を任意のタイミングで削除する。
【００６２】
以上のステップＳ１０１からＳ１１３までが、ホスト１からストレージ２へアクセス要求が行われた際のストレージ２全体の処理である。
【００６３】
次に、図１０を用いて前述のステップＳ１０７における手順の説明を行う。
【００６４】
ステップＳ２０１では、コマンド実行制御部２６１が、アクセス要求処理部２１から受理したＲｅａｄコマンドを不揮発キャッシュ２４に発行し、Ｒｅａｄ先のデータが存在するか否か問い合わせる。
【００６５】
ステップＳ２０２において、不揮発キャッシュ２４は、不揮発キャッシュ管理テーブルを参照してＲｅａｄ先のデータが存在するか確認する。不揮発キャッシュ２４にＲｅａｄコマンドのアクセス先のデータが存在した場合は、ステップＳ２０３に遷移する。存在しない場合には、ステップＳ２０４に遷移する。
【００６６】
ステップＳ２０３では、コマンド実行制御部２６１が不揮発キャッシュ２４からデータを受け取り、ステップＳ１０７の処理を終了する。
【００６７】
ステップＳ２０４では、不揮発キャッシュ２４にＲｅａｄコマンドのアクセス先のデータが存在しなかった場合であるので、コマンド実行制御部２６１はＲｅａｄコマンドのアクセス先に応じて記憶媒体２２、若しくは冗長データ記憶媒体２３にＲｅａｄコマンドを発行する。
【００６８】
ステップＳ２０５では、コマンド実行制御部２６１が、ステップＳ２０４で発行した記憶媒体２２又は冗長データ記憶媒体２３に対するＲｅａｄコマンドの結果を受理する。また、必要に応じてＲｅａｄコマンドの結果又は冗長データを不揮発キャッシュ２４に格納し、不揮発キャッシュ管理テーブルを更新する。ただし、不揮発キャッシュ２４へのＲｅａｄコマンドの結果の記録は任意の処理である。
【００６９】
以上のステップＳ２０１からステップＳ２０５までの処理を行い、コマンド実行制御部２６１のＲｅａｄコマンドに対する処理を行うステップＳ１０７の処理が完了する。
【００７０】
次に、図１１を用いて前述のステップＳ１１１における手順の説明を行う。
【００７１】
ステップＳ３０１では、コマンド実行制御部２６１が、記憶媒体電源制御部２５を通じて書き込み先の記憶媒体２２又は冗長データ記憶媒体２３の動作状態を取得する。
【００７２】
ステップＳ３０２において、Ｗｒｉｔｅコマンドのアクセス先が停止中か否か判断する。Ｗｒｉｔｅコマンドのアクセス先記憶媒体２２、若しくは冗長データ記憶媒体２３が動作中であった場合にはステップＳ３０３に遷移する。Ｗｒｉｔｅコマンドのアクセス先記憶媒体２２、若しくは冗長データ記憶媒体２３が停止中であった場合には、ステップＳ３０４に遷移する。
【００７３】
ステップＳ３０３では、コマンド実行制御部２６１はＷｒｉｔｅコマンドを書き込み先の記憶媒体２２又は冗長データ記憶媒体２３に発行して処理を終了する。
【００７４】
ステップＳ３０４では、コマンド実行制御部２６１がアクセス要求処理部２１から受理した書き込みデータを格納するための利用可能な領域が不揮発キャッシュ２４に存在するか問い合わせる。
【００７５】
ステップＳ３０５では、問い合わせの結果不揮発キャッシュ２４上に空き領域が存在しなかった場合にはステップＳ３０６に遷移する。一方、空き領域が存在した場合にはステップＳ３０７に遷移する。
【００７６】
ステップＳ３０６では、コマンド実行制御部２６１がアクセス要求処理部２１から受理した書き込みデータを不揮発キャッシュ２４に書き込むために利用可能な領域が確保されるまで、Ｗｒｉｔｅコマンドの処理を待機させる。また、空き容量が不足していることをデータ更新制御部２６３に通知する。待機終了後はステップＳ３０５の判定から処理を再開する。
【００７７】
ステップＳ３０７では、コマンド実行制御部２６１が不揮発キャッシュ２４にＷｒｉｔｅコマンドを発行し、書き込みデータを書き込んで処理を終了する。
【００７８】
以上のステップＳ３０１からステップＳ３０７までの処理を行い、コマンド実行制御部２６１のＷｒｉｔｅコマンドに対する処理を行うステップＳ１１１の処理が完了する。
【００７９】
次に、図１２を参照してデータ更新制御部２６３が不揮発キャッシュ２４の容量不足を解消する手順を説明する。データ更新制御部２６３では、不揮発キャッシュ２４に保持された読み込みデータを破棄、又は書き込みデータを記憶媒体２２若しくは冗長データ記憶媒体２３に書き込むことで、不揮発キャッシュ２４の容量不足を解消する。
【００８０】
ステップＳ４０１において、データ更新制御部２６３が、不揮発キャッシュ管理テーブルのｄｉｒｔｙフラグが０、つまり更新の反映が不要なデータから任意の１個を選択して消去する。
【００８１】
ステップＳ４０２では、その消去が成功したかを判断し、成功すればＳ４０３に遷移し、失敗すればステップ４０４に遷移する。
【００８２】
ステップＳ４０３では、不揮発キャッシュ２４の空き容量が十分か否かを判断する。不揮発キャッシュ２４の空き容量が十分であれば、データ更新制御部２６３は容量不足の解消処理を終了する。不揮発キャッシュ２４の空き容量が不足している場合には、ステップＳ４０１の処理に戻って不揮発キャッシュ２４の容量不足の解消処理を続行する。
【００８３】
ステップＳ４０４では、データ更新制御部２６３が不揮発キャッシュ管理テーブルのｄｉｒｔｙフラグが１、つまり更新を記憶媒体２２又は冗長データ記憶媒体２３に反映する必要があるデータから任意の１つを選択してコマンド実行制御部２６１に更新反映の実行を指示する。
【００８４】
ステップＳ４０５では、コマンド実行制御部２６１は、記憶媒体電源制御部２５を通じてステップＳ４０４で選択したデータの格納先である記憶媒体２２又は冗長データ記憶媒体２３の動作状態を取得する。
【００８５】
ステップＳ４０６では、選択したデータの格納先である記憶媒体２２又は冗長データ記憶媒体２３が停止中か否か判断する。停止中であれば、ステップＳ４０７の処理を実行する。動作中であれば、コマンド実行制御部２６１はステップＳ４０８以降の処理を実行する。
【００８６】
ステップＳ４０７においては、コマンド実行制御部２６１が記憶媒体電源制御部２５を通じて格納先の記憶媒体２２又は冗長データ記憶媒体２３を動作状態に切り替える。
【００８７】
ステップＳ４０８では、コマンド実行制御部２６１が、ステップＳ４０４で指示されたＷｒｉｔｅコマンドの実行を完了した後、不揮発キャッシュ２４に一時的に保持されていたＷｒｉｔｅコマンドのデータを消去する。
【００８８】
ステップＳ４０９では、不揮発キャッシュ２４の空き容量が不足しているか否か判断する。不足していると判断した場合には、ステップＳ４０４に戻り、不揮発キャッシュ２４の容量不足の解消処理を続行する。空き容量は十分であると判断した場合にはステップＳ４１０に遷移する。
【００８９】
ステップＳ４１０では、コマンド実行制御部２６１が記憶媒体電源制御部２５を通じて記憶媒体２２及び冗長データ記憶媒体２３からデータの読み込みに必要な冗長性が失われない範囲で、単体又は複数の任意の記憶媒体を停止する。このとき記憶媒体２２及び冗長データ記憶媒体２３から停止する記憶媒体の選択は、必ずしもステップＳ４０１の実行以前に停止していた記憶媒体と同一でなくてもよい。
【００９０】
以上のステップＳ４０１からＳ４１０までの処理を行い、データ更新制御部２６３が、不揮発キャッシュ２４に格納された読み込みデータを破棄、又は書き込みデータを記憶媒体２２若しくは冗長データ記憶媒体２３に書き込むことで不揮発キャッシュ２４の容量不足を解消する処理が完了する。
【００９１】
次に、図１３を参照して、データ更新制御部２６３が、不揮発キャッシュ２４に記録された書き込みデータを記憶媒体２２若しくは冗長データ記憶媒体２３に書き込むことで、一定時間の経過、若しくは、ストレージ２の負荷等の条件によって不揮発キャッシュ上に一時的に保持した更新データを反映する手順について説明する。
【００９２】
ステップＳ５０１において、データ更新制御部２６３が不揮発キャッシュ管理テーブルのｄｉｒｔｙフラグが１、つまり更新を記憶媒体２２又は冗長データ記憶媒体２３に反映する必要があるデータから任意の１つを選択してコマンド実行制御部２６１に更新反映を指示する。
【００９３】
ステップＳ５０２では、コマンド実行制御部２６１が、記憶媒体電源制御部２５を通じてステップＳ５０１で選択したデータの格納先である記憶媒体２２又は冗長データ記憶媒体２３の動作状態を取得する。
【００９４】
ステップＳ５０３では、データの格納先である記憶媒体が停止中か否かを判断する。停止中であれば、ステップＳ５０４を実行する。動作中であれば、ステップＳ５０５に遷移する。
【００９５】
ステップＳ５０４では、コマンド実行制御部２６１が記憶媒体電源制御部２５を通じて格納先の記憶媒体２２又は冗長データ記憶媒体２３を動作状態に切り替える。
【００９６】
ステップＳ５０５では、コマンド実行制御部２６１が、ステップＳ５０１で指示されたＷｒｉｔｅコマンドの実行を完了した後、不揮発キャッシュ２４に一時的に保持していたＷｒｉｔｅコマンドのデータを消去する。
【００９７】
ステップＳ５０６では、不揮発キャッシュ２４に不揮発キャッシュ管理テーブル上のｄｉｒｔｙフラグがセットされたデータが存在、つまり未更新のデータが存在しているか判断する。存在していれば、ステップＳ５０１の処理に戻って不揮発キャッシュ２４上の書き込みデータの更新反映処理を続行する。存在していなければ、ステップＳ５０７に遷移する。
【００９８】
ステップＳ５０７では、コマンド実行制御部２６１が記憶媒体電源制御部２５を通じて記憶媒体２２及び冗長データ記憶媒体２３からデータの読み込みに必要な冗長性が失われない範囲で、単体又は複数の任意の記憶媒体を停止する。このとき記憶媒体２２及び冗長データ記憶媒体２３からの停止する記憶媒体の選択は、必ずしもステップＳ５０１の実行以前に停止していた記憶媒体と同一でなくてもよい。
【００９９】
以上のステップＳ５０１からステップＳ５０７までの処理を行い、データ更新制御部２６３による記憶媒体２２若しくは冗長データ記憶媒体２３への不揮発キャッシュ２４の書き込みデータの更新反映処理が完了する。
【０１００】
なお、記憶媒体２２及び冗長データ記憶媒体２３を各１台で示しているが、これらはストレージ２全体でデータの冗長性が満たされる範囲で２台以上の記憶媒体２２及び冗長データ記憶媒体２３を有する構成であっても良い。
【０１０１】
上述のような構成で、冗長データを格納する記憶媒体を停止することにより、ストレージ全体の消費電力を低減することができる。また、ＭＡＩＤによる消費電力削減とは異なり、複数記憶媒体からなるアレイのうち、パリティ、ミラーのような冗長データを持つ記憶媒体を停止する。そのため、ストレージ上のデータ配置によらず一定の消費電力削減効果を持つ。さらに、停止した記憶媒体に格納されたデータにアクセスを行う必要はなく、ＭＡＩＤとは異なり停止した記憶媒体に記録したデータにアクセスを行う際に、記憶媒体への電源投入からアクセスが可能になるまでの待ち時間による性能面のペナルティを発生させることがない。
【０１０２】
加えて、不揮発キャッシュの追加によりアクセス性能が向上する。Ｒｅａｄアクセスでは不揮発キャッシュ上に読み込み対象のデータが存在する場合、記憶媒体の代わりに不揮発キャッシュからデータを読み出すことで性能が向上する。一方、Ｗｒｉｔｅアクセスでは、パリティ、ミラー等の冗長データを格納する記憶媒体に対する更新を不揮発キャッシュに対して記録する。そのため、不揮発キャッシュに格納された更新データはストレージに対するアクセスの処理とは非同期で処理が可能である。結果、記憶媒体に対して直接書き込みを行う場合と比べて性能が向上する。
【０１０３】
［第２の実施形態］
続いて、記憶媒体２２及び冗長データ記憶媒体２３に対する媒体としてＨＤＤを想定し、より具体的な動作を説明する。ストレージ２の記憶媒体２２及び冗長データ記憶媒体２３は、それぞれ１台ずつのＨＤＤからなるＲＡＩＤ１のアレイで構成されている。記憶媒体２２及び冗長データ記憶媒体２３には、ブロック単位でアドレスが０から順番に割り当てられたＨＤＤを一例として考える。
【０１０４】
記憶媒体２２に対応するＨＤＤをＨＤＤ−Ａ、冗長データ記憶媒体２３に対応するＨＤＤをＨＤＤ−Ｂと、それぞれ定義すると、ＨＤＤ−Ａ及びＨＤＤ−ＢによってＲＡＩＤ１のアレイが構成され、ホスト１に対してストレージ２が提供するアドレス空間は、ＨＤＤ−Ａのアドレス空間に一致する。ＲＡＩＤ１では同じ内容のデータを、ＲＡＩＤ１を構築するすべてのＨＤＤに書き込むためである。つまり、ホストがアドレスＸからアドレスＹのブロックにアクセスする場合、アクセス先はＨＤＤ−Ａ及びＨＤＤ−ＢのアドレスＸからアドレスＹのブロックに一致する。
【０１０５】
ＨＤＤ−ＡとＨＤＤ−Ｂは互いにミラーの関係であり、ＨＤＤ−Ｂを停止した状態でストレージ２を運用する。従って、ＨＤＤ−Ｂを停止した状態であっても、全てのデータはＨＤＤ−Ａからの読み出しが可能である。
【０１０６】
不揮発キャッシュ２４は、初期状態ではデータが格納されていないものとする。また不揮発キャッシュ２４は最大でＨＤＤ−Ａ及びＨＤＤ−Ｂの３００ブロック分のデータを同時に格納可能であるとする。
【０１０７】
ここでは、図１４に示す領域ＡからＤまでの４つの領域を定義し、それらに対して読み込み及び書き込みを行った場合の動作を説明する。なお、ホスト１からストレージ２に対するアクセス要求は図１５に示した順序で行うものとする。
【０１０８】
最初に、領域Ａに対する書き込み動作を説明する。ストレージ２のアクセス要求処理部２１がホスト１からの領域Ａに対する書き込み要求を受け取ると、ＨＤＤ−Ａ及びＨＤＤ−Ｂに対するＷｒｉｔｅコマンドを生成する。領域Ａに対する書き込み処理は、ＨＤＤ−Ａ及びＨＤＤ−Ｂに対して図１１のステップＳ３０１からステップＳ３０７までの手順で実行する。
【０１０９】
ＨＤＤ−Ａに対する処理に着目すると、ＨＤＤ−Ａは既に動作状態であるため、領域Ａに対する更新データは直接ＨＤＤ−Ａに書き込まれる。一方、ＨＤＤ−Ａに対するミラーであるＨＤＤ−Ｂは停止中であるため、不揮発キャッシュ２４にＨＤＤ−Ａと同一の更新データが記録される。初期状態では不揮発キャッシュ２４に格納されたデータは存在しないため、３００ブロックの空き領域が存在する。よって、領域Ａに対する１００ブロック分の更新データを格納可能であるため、ＨＤＤ−Ｂの領域Ａに対する更新データを不揮発キャッシュ２４に格納する。
【０１１０】
次に、領域Ａに対するデータの読み込みを行う際の動作を示す。この場合には、領域Ａに対する書き込み要求の場合と同様に、ＨＤＤ−Ａ又はＨＤＤ−Ｂの領域Ａに対するＲｅａｄコマンドが生成される。領域Ａは前述の書き込み処理で更新されているため、ＨＤＤ−Ａ上の領域Ａ、及び不揮発キャッシュ２４上に記録されたＨＤＤ−Ｂの領域Ａに対する更新データのみが有効である。図１０のＲｅａｄコマンド処理では、不揮発キャッシュ２４上にデータが存在する場合には不揮発キャッシュ２４上のデータを優先的に読み込む。そのため不揮発キャッシュ２４上の領域Ａに対する更新データが読み出されて、ホスト１に対して結果として返される。
【０１１１】
次に、領域Ｂに対する読み込み処理を行う場合、領域Ｂのデータは不揮発キャッシュ２４上には格納されていない。そのため、ＨＤＤ−Ａ又はＨＤＤ−Ｂ上の領域Ｂからデータの読み込みをする必要がある。しかし、ＨＤＤ−Ｂは停止状態であるため、領域ＢのデータはＨＤＤ−Ａから読み込まれることになる。このように、読み込み要求を受けたデータが不揮発キャッシュ２４には記録されておらず、冗長データを記憶した媒体が停止している場合であっても、その冗長データが動作中の記憶媒体から読み込み可能であれば動作中の記憶媒体から冗長データに相当するデータの読み込みを行い、必要なデータの復元を行う。
【０１１２】
次に、領域Ｂからの読み込み処理が終了した段階で、時刻ｔ１における更新データの反映処理を行う場合の手順を示す。更新データの反映処理は図１３に示した手順に従って行われる。不揮発キャッシュ２４には、停止したＨＤＤ−Ｂに対する領域Ａの更新データのみが記録された状態である。データ更新制御部２６３によって停止したＨＤＤ−Ｂの領域Ａに対する更新処理要求がコマンド実行制御部２６１に対して行われる。コマンド実行制御部２６１は、停止したＨＤＤ−Ｂの電源を、記憶媒体電源制御部２５を通じて動作状態になるようにする。ＨＤＤ−Ｂが動作状態に切り替わった後に、コマンド実行制御部２６１は不揮発キャッシュ２４上の更新データをＨＤＤ−Ｂ上の領域Ａに書き込む。書き込みが完了すると、コマンド実行制御部２６１は不揮発キャッシュ２４上の領域Ａの更新データのｄｉｒｔｙフラグを０にリセットし、他に不揮発キャッシュ２４上に更新データは存在しないため、ＨＤＤ−Ｂの電源を、記憶媒体電源制御部２５を通じて停止状態に戻す。
【０１１３】
また、領域Ｂ、領域Ｃに対する書き込み要求は、前述の領域Ａに対する書き込みと同様の手順で行われる。このとき領域Ｂ、領域Ｃに対する更新データはそれぞれ１００ブロック分である。
【０１１４】
時刻ｔ１の時点で不揮発キャッシュ２４に格納されたデータの容量は領域Ａの１００ブロック分のデータのみであるため、停止中のＨＤＤ−Ｂに対する領域Ｂ、領域Ｃの更新データを格納すると不揮発キャッシュ２４全体で格納されるデータの容量の合計は１００＋１００＋１００＝３００ブロック分である。つまり、領域Ｃに対するアクセス要求が完了した時点で不揮発キャッシュ２４の空き容量は存在しない。このような状態において、領域Ｄに対する書き込み要求の処理手順について述べる。
【０１１５】
領域Ｃに対する書き込み処理の時点で、不揮発キャッシュ２４の空き容量は存在しないので、不揮発キャッシュ２４にＨＤＤ−Ｂの領域Ｄに対する更新データを格納するためには、不揮発キャッシュ２４に空き領域を作る必要がある。この時、領域Ｄに対する書き込み処理は図１１のステップＳ３０６で示されたとおり、不揮発キャッシュ２４に必要な空き領域が確保されるまでの間、待機させられる。不揮発キャッシュ２４上に領域Ｄの更新データを確保するのに必要な空き領域を確保する処理は図１２の処理手順で行われる。
【０１１６】
空き領域の確保処理では図１２のステップＳ４０１で示される通り、データ更新制御部２６３が不揮発キャッシュ管理テーブルを参照して不揮発キャッシュ２４上のｄｉｒｔｙフラグが０、つまりＨＤＤ−Ａ及びＨＤＤ−Ｂに対する更新処理が不要なデータを選択する。前述の条件に該当するデータは、図１５における時刻ｔ１でＨＤＤ−Ｂに対する更新の反映が行われた領域Ａのデータのみである。不揮発キャッシュ２４に格納された領域Ａのデータは、ＨＤＤ−Ａ及びＨＤＤ−Ｂに格納されたデータと同一であるため、不揮発キャッシュ２４上及び不揮発キャッシュ管理テーブルから消去が可能である。
【０１１７】
領域Ａのデータを消去した時点で、空き容量は１００ブロックに増加する。しかし、領域Ｄの更新データを格納するためには図１４に示した通り２００ブロック分の空き領域が必要である。そこで、図１２のステップＳ４０４以降で示すように、不揮発キャッシュ２４上のｄｉｒｔｙフラグが１、つまりＨＤＤ−Ａ及びＨＤＤ−Ｂに対する更新処理が必要なデータについて、更新を反映させた後、消去することで不揮発キャッシュ２４の空き領域を確保する。不揮発キャッシュ２４に格納された更新処理が必要なデータとして、ＨＤＤ−Ｂの領域Ｂ、領域Ｃに対する更新データが格納されている。
【０１１８】
次に、領域Ｂのデータについて更新を反映する場合の動作を示す。データ更新制御部２６３によって停止したＨＤＤ−Ｂの領域Ｂに対する更新処理要求がコマンド実行制御部２６１に対して行われる。コマンド実行制御部２６１は、停止したＨＤＤ−Ｂの電源を、記憶媒体電源制御部２５を通じて動作状態になるようにする。その後、コマンド実行制御部２６１は不揮発キャッシュ２４上の更新データをＨＤＤ−Ｂ上の領域Ｂに書き込む。書き込みが完了すると、コマンド実行制御部２６１は不揮発キャッシュ２４、及び不揮発キャッシュ管理テーブルの領域Ｂのデータを消去する。領域Ｂのデータを消去したことで、不揮発キャッシュ２４の空き領域は１００＋１００＝２００ブロック分に増加して、領域Ｄの更新データを格納するために必要な容量を満たす。よって、他の不揮発キャッシュ２４上のデータは消去せずに、ＨＤＤ−Ｂの電源を、記憶媒体電源制御部２５を通じて停止状態とし、不揮発キャッシュ２４に必要な空き領域を確保する処理を終了する。
【０１１９】
必要な空き領域が不揮発キャッシュ２４上に確保された後の領域Ｄに対する書き込み処理は、領域Ａ、Ｂ及びＣに対する書き込み処理と同様の手順である。以上のようにして、図１５に示した各アクセス処理が完了する。
【０１２０】
この間、ストレージ２のＨＤＤ−Ａは動作状態である一方で、ＨＤＤ−Ｂは不揮発キャッシュの更新データの反映をして、不揮発キャッシュの空き容量を確保する処理の間を除いて常に停止状態のまま運用されている。
【０１２１】
なお、不揮発キャッシュ２４としてＳＳＤの使用が想定できる。このＳＳＤは、記憶媒体２２、及び冗長データ記憶媒体２３で使用しているＨＤＤより消費電力が小さい。そのため、ＨＤＤ−Ｂを原則、停止状態で運用することで、ストレージ２の消費電力の削減が実現できる。
【０１２２】
また、領域Ａに対する読み込み処理では、ＨＤＤ−Ａ及びＨＤＤ−Ｂよりアクセス性能の高い不揮発キャッシュ２４をキャッシュとして利用することで、アクセス性能の向上が実現される。不揮発キャッシュはあくまで、ＨＤＤ−Ａ及びＨＤＤ−Ｂに格納すべきデータの一時的な保存先として使用するものであるから、その容量はＨＤＤ−Ａ及びＨＤＤ−Ｂと比較して小さいもので良く、ＨＤＤとＳＳＤのコスト差を考えれば、不揮発キャッシュの容量は小さいものを使用することが前提となる。また、ストレージ装置に対する読み込み要求に対してアクセス性能の高いＳＳＤをキャッシュとして使うことで読み出し性能が向上することは上述の通りであるが、さらに加えて、書き込み性能も向上する。それは、本来であれば、ＨＤＤの任意のアドレスにランダムに書き込まれるデータが、ＨＤＤより高速かつランダムアクセスが高速な不揮発キャッシュに書き込まれることに起因する。なお、ＨＤＤ−Ａに対してミラーリングされたＨＤＤ−Ｂのみの動作を停止させる場合について説明したが、冗長データを記録する媒体が複数存在する場合であっても、不揮発キャッシュは複数個必要としない。それは、不揮発キャッシュ管理テーブルによって情報を一元管理していることを理由とする。また、本実施形態ではＲＡＩＤ１のミラーリングされたＨＤＤを想定して説明したが、ＲＡＩＤ４又は５のような、パリティデータをもつアレイに対しても冗長性の維持が可能な限りそのようなＨＤＤの動作を停止することができる。
【０１２３】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
【０１２４】
（付記１）冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能であり、前記複数の記憶媒体のうち停止中の記憶媒体へデータ書き込み要求のあった際に、前記冗長データの一時的な記録先として使用する不揮発性記憶媒体と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせ、記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す制御部と、を備えるストレージ装置。
【０１２５】
（付記２）さらに、前記制御部は、前記読み込み要求を受けたデータに対応する冗長データが前記不揮発性記憶媒体に記録されておらず、冗長データを格納した記録媒体が停止している場合には、前記複数の記憶媒体のうち、動作中の記憶媒体から冗長データに相当するデータを読み出すストレージ装置。
【０１２６】
（付記３）前記複数の記憶媒体のうち、冗長データの格納先として使用される記憶媒体は、前記ストレージ装置の起動時から停止しており、前記制御部が、前記冗長データの格納先として使用されている記憶媒体を起動した際に、前記不揮発性記憶媒体に記録された前記冗長データを前記冗長データの格納先として使用されている記憶媒体に複写するストレージ装置。
【０１２７】
（付記４）前記制御部が、前記不揮発性記憶媒体の記録領域が不足した際に、前記冗長データの格納先として使用されている記憶媒体を起動し、前記複写後のデータを前記不揮発性記憶媒体から消去するストレージ装置。
【０１２８】
（付記５）前記制御部は、前記不揮発性記憶媒体のデータが前記冗長データの格納先として使用されている記憶媒体に複写が必要か否かをテーブルにより管理し、前記不揮発性記憶媒体の記録領域が不足した場合には前記不揮発性記憶媒体から複写が必要ないデータを消去するストレージ装置。
【０１２９】
（付記６）前記テーブルは前記不揮発性記憶媒体に記録されているストレージ装置。
【０１３０】
（付記７）前記制御部が、前記冗長データの複写後に前記冗長データの格納先として使用されている記憶媒体を停止するストレージ装置。
【０１３１】
（付記８）前記不揮発性記憶媒体に代えて、前記ストレージ装置の電源オフ時にも前記ストレージ装置に常時接続された電源によりデータの保持が可能なメモリを備えたストレージ装置。
【０１３２】
（付記９）冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、を備えるストレージ装置の制御方法であって、前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する工程と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる工程と、前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す工程と、を含むストレージ装置の制御方法。
【０１３３】
（付記１０）さらに、前記読み込み要求を受けたデータに対応する冗長データが前記不揮発性記憶媒体に記録されておらず、冗長データを格納した記録媒体が停止している場合には、前記複数の記憶媒体のうち、動作中の記憶媒体から冗長データに相当するデータを読み出す工程を含むストレージ装置の制御方法。
【０１３４】
（付記１１）前記ストレージ装置の起動時から停止している前記冗長データの格納先として使用されている記憶媒体を起動する工程と、前記冗長データの格納先として使用されている記憶媒体の起動後に、前記不揮発性記憶媒体に記録された前記冗長データを前記冗長データの格納先として使用されている記憶媒体に複写する工程と、を含むストレージ装置の制御方法。
【０１３５】
（付記１２）さらに、前記不揮発性記憶媒体の記録領域が不足した際に、前記冗長データの格納先として使用されている記憶媒体を起動する工程と、前記複写後のデータを前記不揮発性記憶媒体から消去する工程と、を含むストレージ装置の制御方法。
【０１３６】
（付記１３）前記複写後のデータを前記不揮発性記憶媒体から消去する工程は、前記不揮発性記憶媒体のデータが前記冗長データの格納先として使用されている記憶媒体に複写が必要か否かを管理するテーブルに基づき、前記不揮発性記憶媒体の記録領域が不足した場合には前記不揮発性記憶媒体から複写が必要ないデータを消去するストレージ装置の制御方法。
【０１３７】
（付記１４）前記冗長データの複写後に前記冗長データの格納先として使用されている記憶媒体を停止する工程を含むストレージ装置の制御方法。
【０１３８】
（付記１５）冗長データを含むデータの格納先として使用され、それぞれ独立して停止状態にすることが可能な複数の記憶媒体と、前記記憶媒体よりも高速にアクセス可能な不揮発性記憶媒体と、を備えるストレージ装置を制御するコンピュータに実行させるプログラムであって、前記複数の記憶媒体のうち停止中の記憶媒体へのデータ書き込み要求に対しては、前記冗長データを前記不揮発性記憶媒体に記録する処理と、データ読み込み要求時、前記読み込み要求を受けたデータに対応する冗長データの有無を前記不揮発性記憶媒体に問い合わせる処理と、前記冗長データが記録されていれば、前記不揮発性記憶媒体から前記冗長データを読み出す処理と、を前記コンピュータに実行させるプログラム。
【０１３９】
（付記１６）さらに、前記読み込み要求を受けたデータに対応する冗長データが前記不揮発性記憶媒体に記録されておらず、冗長データを格納した記録媒体が停止している場合には、前記複数の記憶媒体のうち、動作中の記憶媒体から冗長データに相当するデータを読み出す処理を実行するプログラム。
【０１４０】
（付記１７）前記ストレージ装置の起動時から停止している前記冗長データの格納先として使用されている記憶媒体を起動する処理と、前記冗長データの格納先として使用されている記憶媒体の起動後に、前記不揮発性記憶媒体に記録された前記冗長データを前記冗長データの格納先として使用されている記憶媒体に複写する処理と、を実行するプログラム。
【０１４１】
（付記１８）さらに、前記不揮発性記憶媒体の記録領域が不足した際に、前記冗長データの格納先として使用されている記憶媒体を起動する処理と、前記複写後のデータを前記不揮発性記憶媒体から消去する処理と、を実行するプログラム。
【０１４２】
（付記１９）前記複写後のデータを前記不揮発性記憶媒体から消去する処理は、前記不揮発性記憶媒体のデータが前記冗長データの格納先として使用されている記憶媒体に複写が必要か否かを管理するテーブルに基づき、前記不揮発性記憶媒体の記録領域が不足した場合には前記不揮発性記憶媒体から複写が必要ないデータを消去するプログラム。
【０１４３】
（付記２０）前記冗長データの複写後に前記冗長データの格納先として使用されている記憶媒体を停止する処理を含むプログラム。
【０１４４】
なお、上記の特許文献等の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態の変更・調整が可能である。また、本発明の請求の範囲の枠内において種々の開示要素の多様な組み合わせないし選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。例えば、不揮発キャッシュの代わりにストレージ装置に常時接続された電源から特定の媒体のみに電源を供給し、その内容を保持するようなものであってもよい。
【符号の説明】
【０１４５】
１、１ａ  ホスト
２  ストレージ
３  ネットワーク
２１  アクセス要求処理部
２２  記憶媒体
２３  冗長データ記憶媒体
２４  不揮発キャッシュ
２５  記憶媒体電源制御部
２６  コマンド実行部
２１１  アクセス解釈部
２１２  アクセス要求情報格納部
２１３  データ復元部
２１４  冗長データ生成部
２６１  コマンド実行制御部
２６２  コマンド管理情報格納部
２６３  データ更新制御部
【図１】
2012014313.tif 000003
【図２】
2012014313.tif 000004
【図３】
2012014313.tif 000005
【図４】
2012014313.tif 000006
【図５】
2012014313.tif 000007
【図６】
2012014313.tif 000008
【図７】
2012014313.tif 000009
【図８】
2012014313.tif 000010
【図９】
2012014313.tif 000011
【図１０】
2012014313.tif 000012
【図１１】
2012014313.tif 000013
【図１２】
2012014313.tif 000014
【図１３】
2012014313.tif 000015
【図１４】
2012014313.tif 000016
【図１５】
2012014313.tif 000017