(57)【要約】【課題】本発明の課題は、高い信頼性を確保しつつ、処理性能を損なうことのないストレージサブシステムを提案することである。【解決手段】本発明は、ハードディスクドライブを含むストレージデバイスと、ホストコンピュータから送信される所定のアクセスコマンドに応答して、ハードディスクドライブに対するアクセスを制御するコントローラとを備えるストレージサブシステムである。ストレージサブシステムは、ホストコンピュータから送信される書き込み要求に応答して、当該書き込み要求に伴うデータをそのパリティとともにハードディスクドライブに格納する一方、当該書き込み要求に対する応答とは独立に、ハードディスクドライブに格納したデータの正当性を検証し、データの異常があれば、異常とされたデータを修復する。【選択図】図１
2010033287.tif 000002
【特許請求の範囲】
【請求項１】
１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、
前記ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、前記ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムであって、
前記コントローラは、前記ホストコンピュータから送信される書き込みコマンドに応答して、前記書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、前記データセグメント及び前記計算した少なくとも１つのパリティからなるデータセットを前記仮想デバイスにおける記憶領域にストライピング方式で格納し、
前記コントローラは、前記仮想デバイスにおける記憶領域から前記データセットを読み出して、前記読み出したデータセット内のデータセグメントに基づいて少なくとも１つの検証用パリティを計算し、前記計算された少なくとも１つの検証用パリティと前記読み出したデータセット内の少なくとも１つのパリティとに基づいて、前記少なくとも１つのパリティの整合性に異常があるか否かを判断する、パリティチェック処理を行う
ことを特徴とするストレージサブシステム。
【請求項２】
請求項１記載のストレージサブシステムであって、
前記コントローラは、前記パリティチェック処理を、前記書き込みコマンドに対する応答とは独立に行うことを特徴とするストレージサブシステム。
【請求項３】
請求項１記載のストレージサブシステムであって、
前記コントローラは、前記パリティチェック処理を、前記ホスト装置から送信される読み込みコマンドに応答して、行うことを特徴とするストレージサブシステム。
【請求項４】
請求項１記載のストレージサブシステムであって、
前記コントローラは、前記少なくとも１つのパリティの整合性に異常があると判断する場合に、前記読み出したデータセット内の少なくとも１つのパリティに基づいて、前記データセット内の異常なデータセグメントを特定することを特徴とするストレージサブシステム。
【請求項５】
請求項４記載のストレージサブシステムであって、
前記データセットは、第１パリティ及び第２パリティを含み、
前記コントローラは、前記第１パリティの整合性及び前記第２パリティの整合性の双方に異常があると判断する場合に、前記第１パリティ及び前記第２パリティに基づいて、前記データセット内の異常なデータセグメントを特定し、前記特定した異常なデータセグメントを修復する、
ことを特徴とするストレージサブシステム。
【請求項６】
請求項１記載のストレージサブシステムであって、
前記コントローラは、前記仮想デバイスにおける記憶領域に格納されたデータセグメントに更新があったか否かを管理する更新データ管理テーブルを備え、
前記コントローラは、前記更新データ管理テーブルに基づいて、特定の記憶領域に格納されたデータセグメントに更新があったと判断する場合に、前記パリティチェック処理を行うために、前記特定の記憶領域に格納されたデータセグメントを含むデータセットを前記仮想デバイスから読み出すことを特徴とするストレージサブシステム。
【請求項７】
請求項６記載のストレージサブシステムであって、
前記コントローラは、前記書き込みコマンドに応答して、前記データセットを前記仮想デバイスにおける記憶領域に書き込んだ時点で、前記記憶領域に対応する前記更新データ管理テーブルのセルの値をオンにセットし
前記コントローラは、前記更新データ管理テーブルの各セルの値をチェックし、前記パリティチェック処理をすべき記憶領域を特定する、
ことを特徴とするストレージサブシステム。
【請求項８】
請求項１記載のストレージサブシステムであって、
前記コントローラは、前記仮想デバイスに対するデータ検証モードを定義するためのデータ検証モード定義テーブルを備える、
ことを特徴とするストレージサブシステム。
【請求項９】
請求項８記載のストレージサブシステムであって、
前記コントローラは、前記データ検証モード定義テーブルにおいて前記仮想デバイスに対して特定のデータ検証モードが設定されている場合に、前記書き込みコマンドに応答して、前記書き込みコマンドに伴うデータセグメントをキャッシュした後、前記データセグメントに基づく前記データセットを前記仮想デバイスにおける記憶領域にストライピング方式で格納するとともに、前記格納したデータセット内の前記データセグメントを前記仮想デバイスにおける記憶領域から読み出し、前記キャッシュしたデータセグメントと前記読み出したデータセグメントとに基づいて、前記仮想デバイスにおける記憶領域に格納されたデータセグメントの正当性を検証する、
ことを特徴とするストレージサブシステム。
【請求項１０】
１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、
前記ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、前記ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムであって、
前記コントローラは、前記ホストコンピュータから送信される書き込みコマンドに応答して、前記書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、前記データセグメント及び前記計算した少なくとも１つのパリティからなるデータセットを前記仮想デバイスにおける記憶領域にストライピング方式で格納し、
前記コントローラは、前記書き込みコマンドが指定するアクセス対象に第１のデータ検証モードが設定されている場合に、前記書き込みコマンドに対する応答時に、前記仮想デバイスにおける記憶領域に格納されたデータセグメントを検証する第１のデータ検証処理を行い、前記書き込みコマンドが指定するアクセス対象に第２のデータ検証モードが設定されている場合に、前記書き込みコマンドに対する応答とは独立に、前記仮想デバイスにおける記憶領域に格納されたデータセグメントを検証する第２のデータ検証処理を行う、
ことを特徴とするストレージサブシステム。
【請求項１１】
請求項１０記載のストレージサブシステムであって、
前記コントローラは、前記第１のデータ検証処理において、前記書き込みコマンドに応答して、前記書き込みコマンドに伴うデータセグメントをキャッシュした後、前記データセグメントに基づく前記データセットを前記仮想デバイスにおける記憶領域にストライピング方式で格納するとともに、前記格納したデータセット内の前記データセグメントを前記仮想デバイスにおける記憶領域から読み出し、前記キャッシュしたデータセグメントと前記読み出したデータセグメントとに基づいて、前記仮想デバイスにおける記憶領域に格納されたデータセグメントの正当性を検証する、
ことを特徴とするストレージサブシステム。
【請求項１２】
請求項１０記載のストレージサブシステムであって、
前記コントローラは、前記第２のデータ検証処理において、前記書き込みコマンドによって指定されるアクセス先に第２のデータ検証モードが設定されている場合に、前記仮想デバイスにおける記憶領域にストライピング方式で格納されたデータセットを読み出して、前記読み出したデータセット内のデータセグメントに基づいて少なくとも１つの検証用パリティを計算し、前記計算された少なくとも１つの検証用パリティと前記読み出したデータセット内の少なくとも１つのパリティとに基づいて、前記仮想デバイスにおける記憶領域に格納されたデータセグメントの正当性を検証する、
ことを特徴とするストレージサブシステム。
【請求項１３】
請求項１０記載のストレージサブシステムであって、
前記コントローラは、前記ホストコンピュータから送信される読み出しコマンドに応答して、前記第２のデータ検証処理を行う、ことを特徴とするストレージサブシステム。
【請求項１４】
請求項１０記載のストレージサブシステムであって、
前記コントローラは、前記書き込みコマンドがシーケンシャルアクセスパターンを示すと判断する場合に、前記第１のデータ検証処理を行う、ことを特徴とするストレージサブシステム。
【請求項１５】
請求項１０記載のストレージサブシステムであって、
前記コントローラは、前記仮想デバイスを形成する複数のハードディスクドライブのそれぞれに対する障害情報を管理する障害管理テーブルを備え、
前記コントローラは、前記障害管理テーブルに従い、前記複数のハードディスクドライブにおいて発生する障害が所定の許容値を超える場合に、前記第１のデータ検証処理を行う、ことを特徴とするストレージサブシステム。
【請求項１６】
１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、前記ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、前記ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムにおけるデータ検証方法であって、
前記データ検証方法は、
前記コントローラが、前記ホストコンピュータから送信される書き込みコマンドを受信するステップと、
前記コントローラが、前記受信した書き込みコマンドに応答して、前記書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、前記データセグメント及び前記計算した少なくとも１つのパリティからなるデータセットを前記仮想デバイスにおける記憶領域にストライピング方式で格納するステップと、を含み、さらに、
前記コントローラが、前記書き込みコマンドに対する応答とは独立に、前記仮想デバイスにおける記憶領域から前記データセットを読み出して、前記読み出したデータセット内のデータセグメントに基づいて少なくとも１つの検証用パリティを計算し、前記計算された少なくとも１つの検証用パリティと前記読み出したデータセット内の少なくとも１つのパリティとに基づいて、前記少なくとも１つのパリティの整合性に異常があるか否かを判断する、パリティチェック処理を行うステップを含む、
ことを特徴とするストレージサブシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージサブシステムに関し、特に、ストレージサブシステムのハードディスクドライブに書き込まれたデータを検証する技術に関する。
【背景技術】
【０００２】
ＳＡＴＡ形式のハードディスクドライブ（以下、「ＳＡＴＡドライブ」という。）は、その製造工程での部品・材料選択や加工精度、評価期間等に対する配慮を犠牲にすることで、大容量、低価格化を図っている。従って、ＳＡＴＡドライブは、ＳＡＳ形式のハードディスクドライブ（以下、「ＳＡＳドライブ」という。）やＦｉｂｒｅ  Ｃｈａｎｎｅｌ形式のハードディスクドライブ（以下、「ＦＣドライブ」という。）に比べて、書き込み時エラー（例えば、「書き込み忘れ」や「不正位置への書き込み」等）の発生確率が高く、一般に、高い信頼性が要求されるストレージ製品への適用は向いていないと考えられている。一方で、ストレージ製品の大容量、低価格化を実現するためには、ＳＡＴＡドライブに対する信頼性の向上を図る必要がある。
【０００３】
このため、例えば、下記特許文献１に示されるように、ＳＡＴＡドライブを用いたストレージサブシステムの信頼性の向上を図るための技術が提案されている。即ち、特許文献１には、ストレージ装置のコントローラが、上位装置からの書き込み要求に応答してハードディスクドライブにデータを書き込むとともに、当該書き込んだデータを直ちに読み出して、当該読み出したデータと書き込み要求に従うキャッシュされたデータとを比較することによって、ハードディスクドライブに書き込んだデータの正当性を検証する技術が開示されている。
【特許文献１】特開２００７−１２８５２７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記特許文献１においては、データの書き込みとともに、データの読み出しによる検証を行っているため、高い信頼性を確保することができる反面、コントローラやＳＡＴＡドライブに対する負荷が高く、処理性能の面で十分ではなかった。このため、かかるストレージサブシステムは、高い信頼性が重視するユーザに対しては、その要求に十分に応えることができるが、高い処理性能を重視するユーザに対しては、その要求に十分に応えているとはいえなかった。一方で、情報システムの発展に伴うデータ容量の膨張により、大容量かつ低価格のストレージサブシステムが望まれている。
【０００５】
そこで、本発明は、大容量かつ低価格のストレージサブシステムを提供することを目的とする。
【０００６】
より具体的には、本発明の目的は、ＳＡＴＡドライブのような信頼性の比較的低いハードディスクドライブを用いた場合であっても、信頼性を確保しつつ、処理性能を損なうことのない、ストレージサブシステムを提案することを目的とする。
【課題を解決するための手段】
【０００７】
上記課題を解決するため、本発明は、ホストコンピュータから送信される書き込み要求に応答して、当該書き込み要求に伴うデータをそのパリティとともにハードディスクドライブに格納する一方、当該書き込み要求に対する応答とは独立に、当該ハードディスクドライブに格納したデータの正当性を検証するストレージサブシステムである。
【０００８】
即ち、ある観点によれば、本発明は、１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、当該ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、当該ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムである。当該コントローラは、当該ホストコンピュータから送信される書き込みコマンドに応答して、当該書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、当該データセグメント及び当該計算した少なくとも１つのパリティからなるデータセットを当該仮想デバイスにおける記憶領域にストライピング方式で格納する。また、当該コントローラは、当該仮想デバイスにおける記憶領域から当該データセットを読み出して、当該読み出したデータセット内のデータセグメントに基づいて少なくとも１つの検証用パリティを計算し、当該計算された少なくとも１つの検証用パリティと当該読み出したデータセット内の少なくとも１つのパリティとに基づいて、当該少なくとも１つのパリティの整合性に異常があるか否かを判断する、パリティチェック処理を行う。
【０００９】
また、別の観点によれば、本発明は、１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、当該ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、当該ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムである。当該コントローラは、当該ホストコンピュータから送信される書き込みコマンドに応答して、当該書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、当該データセグメント及び当該計算した少なくとも１つのパリティからなるデータセットを当該仮想デバイスにおける記憶領域にストライピング方式で格納する。また、当該コントローラは、当該書き込みコマンドが指定するアクセス対象に第１のデータ検証モードが設定されている場合に、当該書き込みコマンドに対する応答時に、当該仮想デバイスにおける記憶領域に格納されたデータセグメントを検証する第１のデータ検証処理を行い、当該書き込みコマンドが指定するアクセス対象に第２のデータ検証モードが設定されている場合に、当該書き込みコマンドに対する応答とは独立に、当該仮想デバイスにおける記憶領域に格納されたデータセグメントを検証する第２のデータ検証処理を行う。
【００１０】
さらに、別の観点によれば、本発明は、１つ又はそれ以上のハードディスクドライブに基づいて１つ又はそれ以上の仮想デバイスが形成されたストレージデバイスと、当該ストレージデバイスを接続し、ホストコンピュータから送信される所定のアクセスコマンドに応答して、当該ストレージデバイスの対応する仮想デバイスに対するアクセスを制御するコントローラと、を備えるストレージサブシステムにおけるデータ検証方法である、当該データ検証方法は、当該コントローラが、当該ホストコンピュータから送信される書き込みコマンドを受信するステップと、当該コントローラが、当該受信した書き込みコマンドに応答して、当該書き込みコマンドに伴うデータセグメントに基づいて少なくとも１つのパリティを計算し、当該データセグメント及び当該計算した少なくとも１つのパリティからなるデータセットを当該仮想デバイスにおける記憶領域にストライピング方式で格納するステップと、を含み、さらに、当該コントローラが、当該書き込みコマンドに対する応答とは独立に、当該仮想デバイスにおける記憶領域から当該データセットを読み出して、当該読み出したデータセット内のデータセグメントに基づいて少なくとも１つの検証用パリティを計算し、当該計算された少なくとも１つの検証用パリティと当該読み出したデータセット内の少なくとも１つのパリティとに基づいて、当該少なくとも１つのパリティの整合性に異常があるか否かを判断する、パリティチェック処理を行うステップを含む。
【発明の効果】
【００１１】
本発明によれば、信頼性を確保しつつ、高い処理性能を有するストレージ装置が提供されることになる。
【００１２】
本発明の他の技術的特徴及び利点は、添付した図面を参照して説明される以下の実施形態のより明らかにされる。
【発明を実施するための最良の形態】
【００１３】
本発明は、ホストコンピュータから送信される書き込み要求に応答して、当該書き込み要求に伴うデータをそのパリティとともに、ＲＡＩＤ制御の下、ハードディスクドライブに格納する一方、当該書き込み要求に対する応答とは独立に、例えば、バックグラウンドで、或いは読み出し要求に応答する時点で、当該ハードディスクドライブに格納したデータの正当性を検証するストレージサブシステムである。
【００１４】
次に、本発明の実施の形態について、図面を参照しつつ説明する。
【００１５】
図１は、本発明の一実施形態に係るストレージサブシステムの全体構成を説明するための図である。同図に示すストレージサブシステム１は、ネットワーク２Ａを介してホストコンピュータ３に接続され、コンピュータシステムを形成している。ストレージサブシステム１はまた、管理用ネットワーク２Ｂを介して管理装置４に接続されている。
【００１６】
ネットワーク２Ａは、例えば、ＬＡＮ、インターネット、又はＳＡＮ（Storage Area Network）のいずれかを用いることができ、典型的には、ネットワークスイッチやハブ等を含んで構成される。本実施形態では、ネットワーク２Ａは、ファイバーチャネルプロトコルを用いたＳＡＮ（ＦＣ−ＳＡＮ）で構成され、管理用ネットワーク２Ｂは、ＴＣＰ／ＩＰベースのＬＡＮで構成されているものとする。
【００１７】
ホストコンピュータ３は、プロセッサと、メインメモリと、通信インターフェースと、ローカル入出力装置等のハードウェア資源を備えるとともに、デバイスドライバやオペレーティングシステム（ＯＳ）、アプリケーションプログラム等のソフトウェア資源を備える（図示せず）。これによって、ホストコンピュータ３は、プロセッサの制御の下、各種のアプリケーションプログラムを実行して、ハードウェア資源との協働作用により、ストレージサブシステム１にアクセスしながら、所望の処理を遂行する。
【００１８】
ストレージサブシステム１は、データストレージサービスをホストコンピュータ３に提供するストレージ装置である。ストレージサブシステム１は、データを記憶する記憶媒体を含むストレージデバイス１１と、これを制御するコントローラ１２とを備える。ストレージデバイス１１とコントローラ１２とは、ディスクチャネルを介して接続される。コントローラ１２の内部ハードウェア構成は二重化されており、コントローラ１２は、ストレージデバイス１１に対して２つのチャネル（コネクションパス）を介してアクセスすることができる。
【００１９】
ストレージデバイス１１は、１つ以上のドライブユニット１１０を含んで構成される。ドライブユニット１１０は、例えばハードディスクドライブ１１１及び当該ハードディスクドライブ１１１の駆動を制御する制御回路１１２からなる。ハードディスクドライブ１１１は、例えば、ドライブユニット１１０の筐体に嵌装されることにより、実装される。ハードディスクドライブ１１１に代えて、フラッシュメモリ等のソリッドステート装置（ＳＳＤ）が用いられてもよい。コントローラ１２における二重化パス構成に対応して、制御回路１１２もまた二重化されている。ハードディスクドライブ１１１は、例えば、ＳＡＴＡドライブが採用される。ただし、これは、ＳＡＳドライブやＦＣドライブを排除する意味ではない。また、以下のスイッチデバイス１３を用いることにより、さまざまな形式のドライブを混在させることができる。ストレージデバイス１１は、ディスクアレイと呼ばれることもある。
【００２０】
ドライブユニット１１０は、典型的には、スイッチデバイス（エクスパンダ）１３を介して、コントローラ１２に接続される。複数のスイッチデバイス１３を用いることで、複数のドライブユニット１１０をさまざまな形態で接続することができる。本実施形態では、縦列に接続された複数のスイッチデバイス１３のそれぞれにドライブユニット１１０が接続されている。つまり、コントローラ１２は、その配下に属する縦列接続された１つ又はそれ以上のスイッチデバイス１３を介してドライブユニット１１０にアクセスする。従って、スイッチデバイス１３を縦列に追加接続することにより、ドライブユニット１１０を容易に増設することができ、これによって、ストレージサブシステム１の記憶容量を容易に拡張することができる。
【００２１】
ドライブユニット１１０内のハードディスクドライブ１１１は、典型的には、所定のＲＡＩＤ構成（例えばＲＡＩＤ６）に基づいてＲＡＩＤグループを構成し、ＲＡＩＤ制御の下、アクセスされる。ＲＡＩＤ制御は、例えば、コントローラ１２に実装された既知のＲＡＩＤコントローラ乃至はＲＡＩＤエンジン（図示せず）により行われる。ＲＡＩＤグループは、１つのドライブユニット１１０内のハードディスクドライブ１１１のみで構成されても良いし、複数のドライブユニット１１０に亘るハードディスクドライブ１１１で構成されても良い。同一のＲＡＩＤグループに属するハードディスクドライブ１１１は、１つの仮想的な論理デバイス（仮想デバイス）として扱われる。
【００２２】
コントローラ１２は、ストレージサブシステム１全体を制御するシステムコンポーネントであり、その主たる役割は、ホストコンピュータ３からのＩ／Ｏアクセス要求（Ｉ／Ｏコマンド）に基づいて、ストレージデバイス１１に対するＩ／Ｏ処理を実行することである。また、本実施形態のコントローラ１２は、ハードディスクドライブ１１１に書き込んだデータの正当性を同期／非同期で検証する。コントローラ１２は、管理装置４からの各種の要求に基づいて、ストレージサブシステム１の管理に関わる処理を実行する。
【００２３】
上述したように、本実施形態では、コントローラ１２内のコンポーネントは、耐障害性の観点から、二重化されている。以下では、二重化された個々のコントローラ１２を指すときは、「コントローラ１２０」というものとする。
【００２４】
各コントローラ１２０は、ホストインターフェース（ホストＩ／Ｆ）１２１、データコントローラ１２２、ドライブインターフェース（ドライブＩ／Ｆ）１２３、プロセッサ１２４、メモリユニット１２５、ＬＡＮインターフェース１２６を含む。コントローラ１２０同士は、相互に通信可能なようにバス１２７で接続される。
【００２５】
ホストインターフェース１２１は、ネットワーク２Ａを介してホストコンピュータ３を接続するためのインターフェースであり、ホストコンピュータ３との間の所定のプロトコルに従ったデータ通信を制御する。ホストインターフェース１２１は、ホストコンピュータ３からの例えば書き込み要求（書き込みコマンド）を受信すると、データコントローラ１２２を介して、メモリユニット１２５に当該書き込みコマンド及びこれに従うデータを書き込む。ホストインターフェース１２１は、チャネルアダプタやフロントエンドインターフェースと呼ばれることもある。
【００２６】
データコントローラ１２２は、コントローラ１２０内のコンポーネント間のインターフェースであり、コンポーネント間のデータの送受を制御する。
【００２７】
ドライブインターフェース１２３は、ドライブユニット１１０を接続するためのインターフェースであり、ホストコンピュータ３からのＩ／Ｏコマンドに従って、ドライブユニット１１０との間の所定のプロトコルに従ったデータ通信を制御する。すなわち、プロセッサ１２４は、メモリユニット１２５を周期的にチェックし、メモリユニット１２５上にホストコンピュータ３からのＩ／Ｏコマンドに従うデータを見つけると、ディスクアダプタ１２３を使用して、ドライブユニット１１０にアクセスする。
【００２８】
より具体的には、ドライブインターフェース１２３は、例えば、メモリユニット１２５上に書き込みコマンドに従うデータを見つけると、当該書き込みコマンドが指定するメモリユニット１２５上のデータをストレージデバイス１１（すなわち、ハードディスクドライブ１１１の所定の記憶領域）にデステージングするため、ストレージデバイス１１に対してアクセスを行う。また、ドライブインターフェース１２３は、メモリユニット１２５上に読み出しコマンドを見つけると、当該読み出しコマンドが指定するストレージデバイス１１上のデータをメモリユニット１２５上にステージングするため、ストレージデバイス１１に対してアクセスを行う。ドライブインターフェース１２３は、ディスクアダプタやバックエンドインターフェースと呼ばれることもある。
【００２９】
プロセッサ１２４は、メモリユニット１２５上にロードされた各種の制御プログラムを実行して、コントローラ１２０（すなわちストレージサブシステム１）全体の動作を司る。プロセッサ１２４は、マルチコアタイプのプロセッサであってもよい。
【００３０】
メモリユニット１２５は、プロセッサ１２４のメインメモリとして機能するとともに、チャネルアダプタ１２１及びドライブインターフェース１２３のキャッシュメモリとして機能する。メモリユニット１２５は、例えば、ＤＲＡＭ等の揮発性メモリで構成され、あるいは、フラッシュメモリ等の不揮発性メモリで構成される。メモリユニット１２５は、例えば、図２に示すように、ストレージサブシステム１自体のシステム構成情報を記憶する。システム構成情報は、ストレージサブシステム１の稼働に必要な情報であり、例えば、論理ボリューム構成情報やＲＡＩＤ構成情報等を含む。同図に示す例では、メモリユニット１２５は、ドライブ管理テーブル３００、論理ユニット管理テーブル４００、更新データ管理テーブル５００、データ検証モード定義テーブル６００、及びドライブ障害管理テーブル８００をシステム構成情報の一部として保持している。システム構成情報は、例えば、ストレージサブシステム１に電源が投入されると、プロセッサ１２４の制御の下、イニシャルシーケンスに従ってハードディスクドライブ１１１の特定の記憶領域から読み出され、メモリユニット１２５の所定の領域にロードされる。
【００３１】
ＬＡＮインターフェース１２６は、ＬＡＮを介して管理装置４を接続するためのインターフェース回路である。ＬＡＮインターフェースは、例えば、ＴＣＰ／ＩＰ及びイーサネット（登録商標）に従ったネットワークボードを採用することができる。
【００３２】
管理装置４は、システム管理者がストレージサブシステム１全体を管理するための端末装置であり、典型的には、管理プログラムを実装した汎用コンピュータで構成される。管理装置４は、サービスプロセッサ（ＳＶＰ）と呼ばれることもある。同図では、管理装置４は、管理用ネットワーク２Ｂを介してストレージ装置１の外側に設けられているが、この構成に限らず、ストレージサブシステム１の内部に設けられるようにしてもかまわない。あるいは、管理装置４と同等の機能を含むように、コントローラ１２が構成されてもよい。
【００３３】
システム管理者は、管理装置４によって提供されるユーザインターフェースを介して、コントローラ１２に指示を与え、これによって、ストレージサブシステム１のシステム構成情報を取得して、参照したり、システム構成情報を設定・変更したりすることができる。例えば、システム管理者は、管理装置４を操作して、ハードディスクドライブの増設に併せて、論理ボリュームや仮想ボリュームを設定し、また、ＲＡＩＤ構成を設定することができる。典型的には、管理装置４は、一方のコントローラ１２０に対して設定を指示すると、当該設定は、バス１２７を介して他方のコントローラ１２０に送信され、反映される。
【００３４】
図３は、本発明の一実施形態に係るコントローラ１２におけるドライブ管理テーブル３００の一例を示す図である。
【００３５】
ドライブ管理テーブル３００は、ドライブユニット１１０内に収容されるハードディスクドライブ１１１を管理するためのテーブルである。同図に示すように、ドライブ管理テーブル３００は、ユニット番号３０１、ドライブ番号３０２、ドライブ容量３０３、及びＲＡＩＤグループ３０４の各欄を含む。
【００３６】
ユニット番号３０１は、ドライブユニット１１０のそれぞれを一意に識別するための番号であり、ドライブ番号３０２は、ドライブユニット１１０内に収容されたハードディスクドライブ１１１のそれぞれを一意に識別するための番号である。ドライブ容量３０３は、当該ハードディスクドライブ１１１が有する仕様上の記憶容量である。ＲＡＩＤグループ番号３０４は、当該ハードディスクドライブ１１１が属するＲＡＩＤグループの番号である。１つのＲＡＩＤグループは、仮想的な１つのデバイス（仮想デバイス）としてみなすことができる。ＲＡＩＤグループのそれぞれには、１つ又はそれ以上の論理ユニットが形成される。
【００３７】
図４は、本発明の一実施形態に係るコントローラ１２における論理ユニット管理テーブル４００の一例を示す図である。
【００３８】
論理ユニット管理テーブル４００は、ＲＡＩＤグループのそれぞれに形成される論理ユニットを管理するためのテーブルである。同図に示すように、論理ユニット管理テーブル４００は、ＲＡＩＤグループ番号４０１、ＲＡＩＤレベル４０２、ホスト論理ユニット番号（ＨＬＵＮ）４０３、論理ユニット番号４０４、及び論理ユニットサイズ４０４の各欄を含む。
【００３９】
ＲＡＩＤグループ番号４０１は、ＲＡＩＤグループのそれぞれを一意に識別するための番号である。ＲＡＩＤグループ番号４０１は、図３に示したドライブ管理テーブルのＲＡＩＤグループ番号３０４に対応する。ＲＡＩＤレベル４０２は、当該ＲＡＩＤグループのＲＡＩＤレベル（ＲＡＩＤ構成）を示す。例えば、ＲＡＩＤグループ＃０は、ＲＡＩＤ６（８Ｄ＋２Ｐ）で構成されている。ホスト論理ユニット番号４０３は、ホストコンピュータ３が使用する論理ユニットの番号である。論理ユニット番号４０４は、ストレージデバイス１１内の論理ユニット（以下、「内部論理ユニット」ということもある。）のそれぞれを一意に識別するための番号である。例えば、ホストコンピュータ３が使用する論理ユニット＃３２は、ＲＡＩＤグループ＃０に形成された内部論理ユニット＃０に関連付けられている。論理ユニットサイズ４０４は、当該論理ユニットの記憶容量を示す。
【００４０】
図５は、本発明の一実施形態に係るコントローラ１２における更新データ管理テーブル５００の一例を示す図である。
【００４１】
更新データ管理テーブル５００は、ハードディスクドライブ１１１上の特定の記憶領域に格納されたデータが更新されたか否かを管理するためのテーブルであり、典型的には、ビットマップ構造のテーブルである。更新データ管理テーブル５００は、例えば所定数の記憶領域を１つのブロック領域（管理領域）として、当該ブロック領域のそれぞれにセル（ビット）を対応付けることで、ブロック領域ごとにデータの更新があったか否かを判定するために用いられる。典型的には、連続する４つの記憶領域を１ブロック領域としている。１つのブロック領域内のいずれかの記憶領域に対してデータの更新があれば、当該ブロック領域に対応する更新データ管理テーブル５００のセルの値は「１」（セルのフラグがオン）にセットされる。
【００４２】
図６は、本発明の一実施形態に係るコントローラ１２におけるデータ検証モード定義テーブル６００の一例を示す図である。
【００４３】
データ検証モード定義テーブル６００は、ハードディスクドライブ１１１に格納されたデータに対する検証処理をいずれのデータ検証モードで行うかを定義するテーブルである。データ検証処理は、さまざまな区分対象に従って行うことができる。
【００４４】
即ち、同図（Ａ）に示すデータ検証モード定義テーブルは、ＲＡＩＤグループ単位でデータ検証モードを指定したテーブルであり、ＲＡＩＤグループ番号６０１及びデータ検証モード６０２の各欄を含む。本実施形態では、データ検証モード６０２として、ライト／コンペアモード、パリティチェックモード、及び通常モードが用意されている。同図（Ａ）に示す例によれば、ＲＡＩＤグループ＃０は、ライト／コンペアモードが指定され、ＲＡＩＤグループ＃１は、パリティチェックモードが指定されている。また、ＲＡＩＤグループ＃３は、通常モードが指定されている。
【００４５】
また、同図（Ｂ）に示すデータ検証モード定義テーブル６００は、論理ユニット単位でデータ検証モード６０２を指定しており、同図（Ｃ）に示すデータ検証モード定義テーブル６００は、筐体単位でデータ検証モード６０２を指定している。
【００４６】
システム管理者は、ストレージサブシステムの運用に先立ち、管理装置４を介して、データ検証モード定義テーブル６００の内容を定義する。図７は、管理装置４のユーザインターフェース上のデータ検証モード定義ウィンドウを示している。システム管理者は、データ検証モード定義ウィンドウ７００の区分メニュー７０１において、データ検証モードを適用する対象を選択する。システム管理者は、データ検証モード定義フィールド７０２の各エントリについてデータ検証モードを選択した後、適用ボタン７０３を選択する。これを受けて、管理装置３は、設定された内容を含むコントローラ１２に通知し、コントローラ１２は、データ検証モード定義テーブル６００を更新する。
【００４７】
以下の説明では、ＲＡＩＤグループ単位でデータ検証モードを指定したデータ検証モード定義テーブル６００で説明されている。
【００４８】
図８は、本発明の一実施形態に係るコントローラ１２におけるドライブ障害管理テーブルテーブル８００の一例を示す図である。
【００４９】
ドライブ障害管理テーブル８００は、ハードディスクライブ１１１のそれぞれの障害発生状況を管理するためのテーブルである。同図に示すように、ドライブ障害管理テーブル８００は、エラー項目８０１及び現在値８０２からなる複数のエントリ８０３を含む。エラー項目８０１は、例えば、Ｓ.Ｍ.Ａ.Ｒ.Ｔ.情報、遅延応答回数、タイムアウト発生回数、コレクタブルエラー回数、アンコレクタブルエラー発生回数、ハードウェアエラー発生回数、プロトコルエラー発生回数、及びチェックコードエラー発生回数等がある。コントローラ１２は、ハードディスクドライブ１１１に対するアクセスによって、又はハードディスクドライブ１１１からのエラー報告によって、これらのエラー項目８０１に関する障害情報を収集し、ドライブ障害管理テーブル８００を更新して、障害発生の頻度を監視する。エラー項目８０１のそれぞれには、許容値が与えられており（図示せず）、コントローラ１２は、ドライブ障害管理テーブル８００におけるいずれかのエントリの現在値が許容値を超えた場合、障害が多発する傾向にあるハードディスクドライブ１１１であると認識する。
【００５０】
図９は、本発明の一実施形態に係るストレージデバイスにおけるＲＡＩＤ構成を説明するための図である。
【００５１】
上述したように、本実施形態では、複数のハードディスクドライブ１１１は、１つ又は複数のＲＡＩＤグループ（仮想デバイス）を形成し、それらは、典型的には、ＲＡＩＤ６で構成される。ＲＡＩＤ６は、書き込みコマンドに伴うデータを同一のＲＡＩＤグループを構成する複数のハードディスクドライブ１１１に書き込む際に、２つの誤り訂正符号データ乃至はパリティデータ（以下、「パリティ」という。）を併せて分散配置（分散ストライピング）しながら書き込む技術である。本実施形態のＲＡＩＤグループは、ＲＡＩＤ６で構成されているものとするが、パリティを利用する他のＲＡＩＤレベル、例えば、ＲＡＩＤ４やＲＡＩＤ５で構成されてもよい。
【００５２】
同図に示す例では、データセグメントＤ１〜Ｄ４の書き込みを要求する書き込みコマンドに対し、第１パリティＰ１及び第２パリティＰ２が計算され、データセグメントＤ１〜Ｄ４並びに第１パリティＰ１及び第２パリティＰ２が複数のハードディスクドライブに分散して格納されている。このようなデータセグメントとこれらのパリティからなるデータセットを、ここでは、パリティグループと呼ぶことにする。また、データセグメントＤ１からデータセグメントＤ１_ Newへの更新に対して、当該データセグメントＤ１が属するパリティグループにおいて、第１パリティＰ１_New及び第２パリティＰ２_Newが再計算されることになる。
【００５３】
また、ハードディスクドライブ１１１に格納されたデータの検証は、検証すべきデータセグメントを含むパリティグループをハードディスクドライブ１１１から読み出し、当該読み出したパリティグループにおけるデータセグメントＤ１〜Ｄ４に基づいて第１パリティＰ１及び第２パリティＰ２を再計算し、当該読み出された第１パリティＰ１及び第２パリティＰ２と再計算した第１パリティＰ１及び第２パリティＰ２とを比較することによって、行われる。
【００５４】
図１０は、本発明の一実施形態に係るコントローラ１２によるライト／コンペア処理を説明するための概念図である。ライト／コンペア処理は、書き込みコマンドによるデータの書き込み時に、書き込み前後のデータを比較することにより、データの正当性を検証する処理である。ライト／コンペア処理は、本発明のデータ検証技術の一部に組み込むことができる。本実施形態では、コントローラ１２は、データ検証モードがパリティチェックモードに設定されていない場合に、ライト／コンペア処理によるデータ検証を行う。
【００５５】
即ち、同図に示すように、ストレージサブシステム１のコントローラ１２は、ホストコンピュータ３から書き込みコマンドを受信すると（図中(1)）、当該書き込みコマンドに伴うデータをメモリユニット１２４のキャッシュ領域に書き込む（図中(2)）。コントローラ１２は、典型的には、データをキャッシュした時点で、ホストコンピュータ３に書き込み完了応答を送信する。次に、コントローラ１２は、キャッシュしたデータを、ＲＡＩＤ制御の下、ハードディスクドライブ１１１の所定の記憶領域に格納するとともに（図中(3)）、たった今格納したデータをハードディスクドライブ１１１から読み出す（図中(4)）。そして、コントローラ１２は、キャッシュされているデータと読み出したデータとを比較し、両者が一致しているか否かを判断する（図中(5)）。この結果、両データが一致していないと判断する場合、コントローラ１２は、データ書き込み失敗応答をホストコンピュータ３に送信する。
【００５６】
図１１は、本発明の一実施形態に係るコントローラ１２によるパリティチェック処理を説明するための概念図である。コントローラ１２は、ホスト装置３からの書き込み要求とは独立に、例えば、Ｉ／Ｏ処理のバックグラウンドで、或いは、読み出し要求に対する読み出し処理に先立って、パリティチェック処理を実行する。コントローラ１２は、データ検証モードがパリティチェックモードに設定されている場合に、パリティチェック処理によるデータ検証を行う。パリティチェック処理の対象となるデータは、更新データ管理テーブル５００においてオンになっているセルに対応するブロック領域に格納されたデータセグメントである。
【００５７】
同図に示すように、パリティチェック処理の対象となるデータセグメントは、コントローラ１２によりハードディスクドライブ１１１から読み出される。この場合、ＲＡＩＤ制御の下で、当該データセグメントを含むパリティグループが読み出されることになる。ハードディスクドライブ１１１から読み出されたパリティグループは、メモリユニット１２５に書き込まれる。そして、読み出されたパリティグループに含まれるデータセグメントに基づいて、第１パリティ及び第２パリティが再計算され、読み出された第１パリティ及び第２パリティとそれぞれ比較される。この結果、第１パリティ同士及び第２パリティ同士の双方とも一致しない場合には、いずれかのデータセグメントに異常があることになるため、いずれかのパリティを用いて、異常とされたデータセグメント（つまり、当該異常とされたデータセグメントを格納したハードディスクドライブ１１１）を特定する。
【００５８】
図１２は、本発明の一実施形態に係るコントローラ１２によるデータ書き込み処理を説明するためのフローチャートである。
【００５９】
コントローラ１２は、ホストコンピュータ３から送信された書き込みコマンドを受信すると、当該書き込みコマンドに伴うデータをキャッシュする（ＳＴＥＰ１２０１）。より具体的には、ホストインターフェース１２１が、ホストコンピュータ３から送信された書き込みコマンドを受信するとデータコントローラ１２２を介してメモリユニット１２５の所定のキャッシュ領域に当該書き込みコマンド及びこれに伴うデータを書き込む。
【００６０】
書き込みコマンド及びデータがメモリユニット１２５に書き込まれると、コントローラ１２は、データ検証モード定義テーブル６００を参照して、データ検証モードがパリティチェックモードに設定されているか否かを判断する（ＳＴＥＰ１２０２）。具体的には、当該書き込みコマンドによりアクセス先（アクセス対象）として指定される論理ユニットを形成するＲＡＩＤグループが、ライト／コンペアモードであるか、又はパリティチェックモードであるかが判断される。
【００６１】
コントローラ１２は、アクセス先のＲＡＩＤグループについてのデータ検証モードがパリティチェックモードでないと判断する場合には（ＳＴＥＰ１２０３のＮｏ）、ライト／コンペア処理を実行する（ＳＴＥＰ１２０４）。ライト／コンペア処理の詳細については、図１４を用いて説明される。
【００６２】
これに対して、コントローラ１２は、アクセス先の論理ユニットを形成するＲＡＩＤグループがパリティチェックモードであると判断する場合には（ＳＴＥＰ１２０３のＹｅｓ）、続いて、所定の付加的条件に従って、分岐判断を行う（ＳＴＥＰ１２０３〜ＳＴＥＰ１２０６）。本実施形態において、所定の付加的条件を設定することは、よりきめの細かいシステム制御が可能になる点で、好ましいが、これらは必須のものでなく、必要に応じて適宜設定されうるものである。所定の付加的条件の判断結果に従い、コントローラ１２は、パリティチェックモードの下であっても、ライト／コンペア処理を実行することになる。具体的には、コントローラ１２は、まず、当該ＲＡＩＤグループがＲＡＩＤ６で構成されているか否かを判断する（ＳＴＥＰ１２０４）。コントローラ１２は、当該ＲＡＩＤグループがＲＡＩＤ６で構成されていないと判断する場合には（ＳＴＥＰ１２０４のＮｏ）、ライト／コンペア処理を実行する（ＳＴＥＰ１２０４）。一方、コントローラ１２は、当該ＲＡＩＤグループがＲＡＩＤ６で構成されていると判断する場合には（ＳＴＥＰ１２０４のＹｅｓ）、次に、当該書き込みコマンドがシーケンシャルアクセスパターンを示すか否かを判断する（ＳＴＥＰ１２０５）。
【００６３】
図１３は、本発明の一実施形態に係るコントローラ１２によるアクセスパターン判定処理を説明するためのフローチャートである。アクセスパターン判定処理は、一連の書き込みコマンドがシーケンシャルアクセスとしてみなすことができるか、又はランダムアクセスとしてみなすべきかを判定する処理である。
【００６４】
アクセスパターン判定処理において、コントローラ１２は、最新の書き込みコマンドにより指定されるアドレスが、前回の書き込みコマンドによって指定されるアドレスから所定の範囲内にあるか否かを判断する（ＳＴＥＰ１３０１）。コントローラ１２は、最新の書き込みコマンドにより指定されるアドレスが、前回の書き込みコマンドにより指定されるアドレスから所定の範囲内にないと判断する場合には（ＳＴＥＰ１３０１のＮｏ）、カウンタの値を「０」にリセットするとともに（ＳＴＥＰ１３０２）、当該書き込みコマンドは、ランダムアクセスであると判定する（ＳＴＥＰ１３０３）。
【００６５】
これに対して、コントローラ１２は、最新の書き込みコマンドにより指定されるアドレスが、前回の書き込みコマンドにより指定されるアドレスから所定の範囲内にあると判断する場合には（ＳＴＥＰ１３０１のＮｏ）、カウンタの値を１つインクリメントして（ＳＴＥＰ１３０４）、当該カウンタ値が規定値に到達したか否かを判断する（ＳＴＥＰ１３０５）。コントローラ１２は、当該カウンタ値が規定値に到達していると判断する場合には（ＳＴＥＰ１３０５のＹｅｓ）、当該書き込みコマンドは、シーケンシャルアクセスであると判定する（ＳＴＥＰ１３０６）。一方、コントローラ１２は、当該カウンタ値が規定値に到達していないと判断する場合には（ＳＴＥＰ１３０５のＮｏ）、次の書き込みコマンドを待って、アクセスパターンを判定することになる。
【００６６】
このように、コントローラ１２は、一連の書き込みコマンドによって指定されるアドレスにある程度の連続性が見られる場合には、シーケンシャルアクセスが行われていると判断する。
【００６７】
図１２に戻り、コントローラ１２は、当該書き込みコマンド要求がシーケンシャルアクセスでないと判断する場合には（ＳＴＥＰ１２０５のＮｏ）、ライト／コンペア処理を実行する（ＳＴＥＰ１２０４）。一方、コントローラ１２は、当該書き込みコマンドがシーケンシャルアクセスであると判断する場合には（ＳＴＥＰ１２０５のＹｅｓ）、続いて、当該書き込みコマンドによって指定される書き込み先のハードディスクドライブ１１１において障害の発生が多発傾向にあるか否かを判断する（ＳＴＥＰ１２０６）。即ち、コントローラ１２は、図８に示したドライブ障害管理テーブル８００を参照し、エラー項目８０１のいずれかが所定の閾値を超えているか否かを判断する。
【００６８】
この結果、コントローラ１２は、障害の発生が多発傾向にあると判断する場合（ＳＴＥＰ１２０６のＹｅｓ）、ライト／コンペア処理を実行する（ＳＴＥＰ１２０４）。これは、ハードディスクドライブ１１１において障害の発生が多発傾向にあるため、処理性能を低下させてでも、信頼性の確保を重視するためである。
【００６９】
コントローラ１２は、障害の発生が多発傾向にないと判断する場合（ＳＴＥＰ１２０６のＮｏ）、当該書き込みコマンドに対して、書き込み完了応答をホストコンピュータ３に送信する（ＳＴＥＰ１２０７）。この場合、書き込みコマンドに伴うデータは、まだ、ハードディスクドライブ１１１に格納されていないが、本実施形態では、レスポンス性能の観点から、当該データがキャッシュ領域に書き込まれた時点で、書き込み完了応答をホストコンピュータ３に送信している。キャッシュ領域に書き込まれたデータは、所定のタイミングで、ハードディスクドライブ１１１に書き込まれる（デステージングされる）ことになる。
【００７０】
そして、コントローラ１２は、当該書き込みコマンドによって指定されるハードディスクドライブ１１１上の記憶領域に対応する、更新データ管理テーブル５００におけるビットを「１」に設定する（ＳＴＥＰ１２０８）。コントローラ１２は、このように更新される更新データ管理テーブル５００を参照して、書き込み処理とは独立に、パリティチェック処理を実行する。
【００７１】
図１４は、本発明の一実施形態に係るコントローラ１２によるライト／コンペア処理を説明するためのフローチャートである。
【００７２】
同図に示すように、ライト／コンペア処理において、コントローラ１２は、まず、キャッシュ領域に書き込まれたデータを、ＲＡＩＤ制御の下、ハードディスクドライブ１１１の所定の記憶領域に格納する（ＳＴＥＰ１４０１）。つまり、ＲＡＩＤ６であれば、データセグメント及び２つのパリティからなるパリティグループがハードディスクドライブ１１１にストライピング方式で格納されることになる。続いて、コントローラ１２は、たった今格納したデータをハードディスクドライブ１１１から読み出して、メモリユニット１２４のワーク領域に書き込む（ＳＴＥＰ１４０２）。
【００７３】
コントローラ１２は、次に、キャッシュ領域に書き込まれたデータと、ハードディスクドライブ１１１から読み出されたデータとを比較し（ＳＴＥＰ１４０３）、両方のデータが一致しているか否かを判断する（ＳＴＥＰ１４０４）。
【００７４】
コントローラ１２は、当該比較の結果、両方のデータが一致していると判断する場合には（ＳＴＥＰ１４０４のＹｅｓ）、書き込み完了応答をホストコンピュータ３に送信する（ＳＴＥＰ１４０５）。一方、コントローラ１２は、当該比較の結果、両者の内容が一致していないと判断する場合には（ＳＴＥＰ１４０４のＮｏ）、書き込み失敗応答をホストコンピュータ３に送信する（ＳＴＥＰ１４０６）。ホストコンピュータ３は、書き込み失敗応答を受信した場合には、再度、書き込み要求をコントローラ１２に送信する。
【００７５】
なお、両方のデータが一致していないと判断される場合でも、キャッシュ領域には依然としてデータが残っているため、コントローラ１２は、直ちに書き込み失敗応答をホストコンピュータ３に送信するのではなく、キャッシュ領域のデータを、再度、ハードディスクドライブ１１１の所定の記憶領域に書き込み、読み出して、比較するようにしてもよい。コントローラ１２は、所定の回数だけリトライしても、両方のデータが一致しない場合に、書き込み失敗応答をホストコンピュータ３に送信する。
【００７６】
図１５は、本発明の一実施形態に係るコントローラ１２による更新データチェック処理を説明するためのフローチャートである。更新データチェック処理は、書き込み要求に対する通常の書き込み処理とは独立に、例えば、バックグラウンドで実行される。これによって、ストレージサブシステム１に多量の書き込み要求が発生し、一時的にシステム負荷が高くなった場合でも、書き込み処理にシステム資源を集中させることができ、処理性能の劣化を抑えることができる。
【００７７】
同図を参照して、コントローラ１２は、ハードディスクドライブ１１１上に更新されたデータがあるか否かをチェックするに先立ち、ポインタが更新データ管理テーブル４００の先頭セルを示すように、ポインタの値を初期化する（ＳＴＥＰ１５０１）。
【００７８】
コントローラ１２は、ポインタが示す更新データ管理テーブル４００のセルの値が「１」であるか否かを判断し（ＳＴＥＰ１５０２）、当該セルの値が「１」でなければ（ＳＴＥＰ１５０２のＮｏ）、ポインタの値を１つインクリメントする（ＳＴＥＰ１５０３）。
【００７９】
一方、コントローラ１２は、ポインタが示す更新データ管理テーブル４００のセルの値が「１」であると判断する場合には（ＳＴＥＰ１５０２のＹｅｓ）、パリティチェック処理の実行に移る（ＳＴＥＰ１５０４）。パリティチェック処理の詳細については、図１７を用いて説明される。パリティチェック処理により、データの正当性が検証された場合には、対応するセルの値は「０」にリセットされる。
【００８０】
図１６は、更新データチェック処理における更新データ管理テーブル４００の内容が遷移する様子を示している。まず、更新データ管理テーブル４００の内容は、同図（Ａ）に示す状態であるとする。コントローラ１２は、ポインタの値に従って、更新データ管理テーブル４００を走査して、値が「１」のセルを探す（同図（Ｂ））。値が「１」のセルは、対応するブロック領域のデータが更新されていることを示している。コントローラ１２は、値が「１」であるセルを見つけると、パリティチェック処理を実行し、その結果、データが正当であると判断したならば、セルの値を「０」にリセットし、走査を継続する（同図（Ｃ））。コントローラ１２は、当該走査が更新データ管理テーブル４００の最後のセルまで到達したら先頭のセルに戻る。このようにして、コントローラ１２は、Ｉ／Ｏ処理とは独立に、更新されたデータであって、まだ、パリティチェックが行われていないデータの有無をチェックし、そのようなデータがあれば、パリティチェック処理を実行して、当該データの正当性を検証する。
【００８１】
図１７は、本発明の一実施形態に係るコントローラ１２によるパリティチェック処理を説明するためのフローチャートである。
【００８２】
同図を参照して、コントローラ１２は、該当セルに対応するブロック領域内のデータが属するパリティグループ（つまりデータセグメント及びこれらのパリティからなるデータセット）をハードディスクドライブから読み出す（ＳＴＥＰ１７０１）。読み出されたパリティグループは、メモリユニット１２４のワーク領域に書き込まれる。
【００８３】
続いて、コントローラ１２は、パリティグループに属するデータセグメントに基づいて検証用の第１パリティ及び第２パリティを再計算し（ＳＴＥＰ１７０２）、読み出したパリティグループの第１パリティ及び第２パリティと再計算した検証用第１パリティ及び検証用第２パリティとをそれぞれ比較して、パリティの整合性をチェックする（ＳＴＥＰ１７０３）。つまり、第１パリティと検証用第１パリティとの間の整合性、及び第２パリティと検証用第２パリティとの間の整合性がチェックされる。
【００８４】
この結果、コントローラ１２は、第１パリティに整合性がなく（ＳＴＥＰ１７０４のＮｏ）、第２パリティにも整合性がないと判断する場合（ＳＴＥＰ１７０８のＮｏ）、パリティグループに属するデータセグメントに矛盾はなく、データは正当であるといえるので、該当セルの値を「０」にリセットする（ＳＴＥＰ１７１５）。
【００８５】
これに対して、コントローラ１２は、第１パリティの整合性に異常があるが（ＳＴＥＰ１７０４のＹｅｓ）、第２パリティの整合性に異常はないと判断する場合（ＳＴＥＰ１７０５のＮｏ）、読み出した第１パリティのみに異常があることになるため、第1パリティを修復し（ＳＴＥＰ１７０６）、当該修復した第１パリティを用いてパリティグループを再作成する（ＳＴＥＰ１７０７）。そして、コントローラ１２は、再作成したパリティグループを、ハードディスクドライブ１１１に格納し（ＳＴＥＰ１７１４）、該当セルの値を「０」にリセットする（ＳＴＥＰ１７１５）。
【００８６】
また、コントローラ１２は、第１パリティの整合性に異常がないが（ＳＴＥＰ１７０４のＮｏ）、第２パリティの整合性に異常はあると判断する場合（ＳＴＥＰ１７０８のＹｅｓ）、読み出した第２パリティのみに異常があることになるため、第２パリティを修復し（ＳＴＥＰ１７０９）、当該修復した第２パリティを用いてパリティグループを再作成する（ＳＴＥＰ１７１０）。そして、コントローラ１２は、再作成したパリティグループを、ハードディスクドライブ１１１に格納し（ＳＴＥＰ１７１４）、該当セルの値を「０」にリセットする（ＳＴＥＰ１７１５）。
【００８７】
また、コントローラ１２は、第１パリティの整合性に異常があり（ＳＴＥＰ１７０４のＹｅｓ）、第２パリティの整合性にも異常があると判断する場合（ＳＴＥＰ１７０５のＹｅｓ）、読み出した第１パリティ及び第２パリティの双方に異常があることになるため、以下に示すように、データセグメントの修復を行う。
【００８８】
即ち、コントローラ１２は、読み出した第１パリティ及び第２パリティの双方の整合性に異常があると判断する場合、パリティグループ内のデータセグメント及び２つのパリティを用いて、異常があるデータセグメント（つまり、書き込みエラーのあったハードディスクドライブ１１１）を特定する（ＳＴＥＰ１７１１）。具体的には、異常があるデータセグメントは、第１パリティ及び第２パリティを算出した式を用いた２元連立方程式を解くことによって、特定される。
【００８９】
異常があるデータセグメントが特定されると、次に、コントローラ１２は、少なくとも一方のパリティを用いて、異常があるデータセグメントを修復する（ＳＴＥＰ１７１２）。具体的には、書き込みエラーのあったハードディスクドライブ１１１に格納されるべき新たなデータセグメントが、パリティを用いて再現される。コントローラ１２は、修復したデータセグメントを含む新たなパリティグループを作成し（ＳＴＥＰ１７１３）、これをハードディスクドライブ１１１に格納する（ＳＴＥＰ１７１４）。そして、コントローラ１２は、該当セルの値を「０」にリセットする（ＳＴＥＰ１７０１５）。
【００９０】
このように、第１パリティ及び第２パリティを用いて、書き込みエラーがあったハードディスクドライブ１１１を特定でき、当該エラーがあったハードディスクドライブ１１１に格納されるべきデータセグメントに修復できるので、信頼性がさらに向上することになる。
【００９１】
なお、上述したデータ修復は、書き込みエラーがあったハードディスクドライブ１１１が１台（パリティグループにおいて異常があったデータセグメントが１つ）である場合を前提にしている。ただし、２台のハードディスクドライブ１１１に同時に書き込みエラーが発生することは極めて希であり、当業者は、上記のデータ修復は、実用的に十分に耐えうるものであることを理解するであろう。
【００９２】
図１８は、本発明の一実施形態に係るコントローラ１２による読み出し処理を説明するためのフローチャートである。
【００９３】
コントローラ１２は、ホストコンピュータ３から送信された読み出しコマンドを受信すると、当該読み出しコマンドをメモリユニット１２５のキャッシュ領域に書き込む（ＳＴＥＰ１８０１）。
【００９４】
読み出しコマンドがメモリユニット１２５に書き込まれると、コントローラ１２は、次に、データ検証モード定義テーブル６００を参照し、データ検証モード６０２がパリティチェックモードに設定されているか否かを判断する（ＳＴＥＰ１８０２）。具体的には、当該読み込みコマンドによってアクセス先として指定される論理ユニットを形成するＲＡＩＤグループが、ライト／コンペアモードであるか、又はパリティチェックモードであるかが判断される。
【００９５】
コントローラ１２は、アクセス先のＲＡＩＤグループについてのデータ検証モードがパリティチェックモードに設定されていないと判断する場合（ＳＴＥＰ１８０２のＮｏ）、通常の読み出し処理と同様に、読み出しコマンドが指定するハードディスクドライブ１１１上の記憶領域からデータを読み出して（ＳＴＥＰ１８０６）、当該読み出したデータを、読み出しコマンドに対する応答として、ホストコンピュータ３に送信する（ＳＴＥＰ１８０７）。
【００９６】
これに対して、コントローラ１２は、データ検証モード６０２がパリティチェックモードに設定されていると判断する場合（ＳＴＥＰ１８０２のＹｅｓ）、更新データ管理テーブル５００を参照し（ＳＴＥＰ１８０３）、読み出しコマンドによって指定されるハードディスクドライブ１１１上の記憶領域を含むブロック領域に格納されたデータが検証済みであるか否かを判断する（ＳＴＥＰ１８０４）。つまり、読み出しコマンドによって指定されるハードディスクドライブ１１１上の記憶領域を含むブロック領域に対応する更新データ管理テーブル５００のセルの値が「０」であるか否かが判断される。
【００９７】
コントローラ１２は、データ検証済みでないと判断する場合（ＳＴＥＰ１８０４のＮｏ）、上述したパリティチェック処理を行う（ＳＴＥＰ１８０５）。この結果、コントローラ１２は、データの正当性を確認した場合には、読み出しコマンドが指定するハードディスクドライブ１１１上の記憶領域からデータを読み出す（ＳＴＥＰ１８０６）。ただし、パリティチェック処理において、ハードディスクドライブ１１１上の記憶領域から既にデータが読み出されているため、処理性能の観点から、コントローラ１２は、再度のデータ読み出しを省略しても良い。
【００９８】
一方、コントローラ１２は、データ検証済みであると判断する場合（ＳＴＥＰ１８０４のＹｅｓ）、パリティチェック処理をせずに、読み出しコマンドが指定するハードディスクドライブ１１１上の記憶領域からデータを読み出す（ＳＴＥＰ１８０６）。
【００９９】
そして、コントローラ１２は、当該読み出したデータを、読み出しコマンドに対する応答として、ホストコンピュータ３に送信する（ＳＴＥＰ１８０７）。
【０１００】
また、上述の読み出し処理の変形例として、データ検証モードに信頼性オプションが導入されてもよい。信頼性オプションとは、読み出しコマンドによる応答時に、パリティチェック処理を実行する割合である。図１９は、本例のデータ検証モード定義テーブル６００’を示している。同図に示すように、本例のデータ検証モード定義テーブル６００’は、信頼性オプション６０３を含んでいる。同図は、アクセス対象をＲＡＩＤグループとするデータ検証モード定義テーブル６００’の例であるが、アクセス対象を論理ユニットやドライブユニット（筐体）とするデータ検証モード定義テーブル６００’も同様に理解される。システム管理者は、管理装置４を操作して、信頼性オプション６０３に任意の値を設定することができる。コントローラ１２は、信頼性オプション６０３が５０％に設定されたＲＡＩＤグループ＃４に対しては、読み出しコマンドの応答２回に１回の割合で、パリティチェック処理を実行する。コントローラ１２は、例えば、メモリユニット１２５のワーク領域に読み出しコマンドの履歴情報を保持する。
【０１０１】
図２０は、本例の読み出し処理を説明するためのフローチャートである。同図は、ＳＴＥＰ２００３の判定処理が追加されている点を除いて、図１８に示したフローチャートと同じである。即ち、コントローラ１２は、データ検証モード６０２がパリティチェックモードに設定されていると判断する場合（ＳＴＥＰ２００２のＹｅｓ）、さらに、信頼性オプション６０３が設定されているか否かを判断する（ＳＴＥＰ２００３）。コントローラ１２は、信頼性オプション６０３が設定されており、信頼性オプション６０３に示される割合を満たすと判断する場合には（ＳＴＥＰ２００３）、ＳＴＥＰ２００４以降の処理に移行する。ＳＴＥＰ２００４以降の処理については、上述したＳＴＥＰ１８０３以降の処理と同様であるため、説明を省略する。
【０１０２】
以上のように、本実施形態によれば、書き込み要求に対する応答とは独立に、ハードディスクドライブに格納されたデータの検証を行っているので、信頼性の要求に応えつつ、高い処理性能を有するストレージサブシステムが提供されることになる。
【０１０３】
また、本実施形態によれば、データ検証によってデータの異常が発見された場合であっても、パリティを用いて異常とされたデータを修復することができる。このため、書き込み要求の都度、データ検証を行わなくても、従来のデータ検証手法と同等の信頼性が確保される。従って、単体では信頼性が低いＳＡＴＡドライブであっても、高信頼性が要求されるストレージサブシステムに採用することができ、製造コストを低く抑えることができるようになる。
【０１０４】
特に、ＳＡＴＡドライブは、コスト等の観点から、アーカイブに用いられることが多い。このアーカイブにおいては、データの書き込みパターンが、一般に、シーケンシャルアクセスになりやすい。従って、データの書き込みパターンがランダムアクセスの場合に比べて、パリティの読み出しによるオーバーヘッドが少ないため、シーケンシャルアクセスによるデータの書き込み時のデータ検証に特に有効である。
【０１０５】
上記実施形態は、本発明を説明するための例示であり、本発明を上記実施形態にのみ限定する趣旨ではない。本発明は、その要旨を逸脱しない限り、さまざまな形態で実施することができる。例えば、上記実施形態では、各種プログラムの処理をシーケンシャルに説明したが、特にこれにこだわるものではない。従って、処理結果に矛盾が生じない限り、処理の順序を入れ替えまたは並行動作するように構成しても良い。
【産業上の利用可能性】
【０１０６】
本発明は、パリティを用いてデータの信頼性を保証するストレージサブシステムに広く適用することができる。
【図面の簡単な説明】
【０１０７】
【図１】本発明の一実施形態に係るストレージサブシステムの全体構成を説明するための図である。
【図２】本発明の一実施形態に係るコントローラのメモリユニットの内容の一例を示す図である。
【図３】本発明の一実施形態に係るコントローラにおけるドライブ管理テーブルの一例を示す図である。
【図４】本発明の一実施形態に係るコントローラにおける論理ユニット管理テーブルの一例を示す図である。
【図５】本発明の一実施形態に係るコントローラにおける更新データ管理テーブルの一例を示す図である。
【図６】本発明の一実施形態に係るコントローラにおけるデータ検証モード定義テーブルの一例を示す図である。
【図７】本発明の一実施形態に係るコントローラにおけるドライブ障害管理テーブルテーブルの一例を示す図である。
【図８】本発明の一実施形態に係る管理装置のユーザインターフェースに表示されたデータ検証モード定義ウィンドウの一例を示す図である。
【図９】本発明の一実施形態に係るストレージデバイスにおけるＲＡＩＤ構成を説明するための図である。
【図１０】本発明の一実施形態に係るコントローラによるライト／コンペア処理を説明するための概念図である。
【図１１】本発明の一実施形態に係るコントローラによるパリティチェック処理を説明するための概念図である。
【図１２】本発明の一実施形態に係るコントローラによるデータ書き込み処理を説明するためのフローチャートである。
【図１３】本発明の一実施形態に係るコントローラによるアクセスパターン判定処理を説明するためのフローチャートである。
【図１４】本発明の一実施形態に係るコントローラによるライト／コンペア処理を説明するためのフローチャートである。
【図１５】本発明の一実施形態に係るコントローラによる更新データチェック処理を説明するためのフローチャートである。
【図１６】本発明の一実施形態に係るコントローラにおける更新データ管理テーブルの内容が遷移する様子を示す図である。
【図１７】本発明の一実施形態に係るコントローラによるパリティチェック処理を説明するためのフローチャートである。
【図１８】本発明の一実施形態に係るコントローラによる読み出し処理を説明するためのフローチャートである。
【図１９】本発明の一実施形態に係るコントローラにおけるデータ検証モード定義テーブルの一例を示す図である。
【図２０】本発明の一実施形態に係るコントローラによる読み出し処理を説明するためのフローチャートである。
【符号の説明】
【０１０８】
１…ストレージサブシステム
２…ネットワーク
３…ホストコンピュータ
４…管理装置
１１…ストレージデバイス
１１０…ドライブユニット
１１１…ハードディスクドライブ
１１２…制御回路
１２…コントローラ
１２１…ホストインターフェース
１２２…データコントローラ
１２３…ドライブインターフェース
１２４…プロセッサ
１２５…メモリユニット
１２６…ＬＡＮインターフェース
１２７…内部バス
【図１】
2010033287.tif 000003
【図２】
2010033287.tif 000004
【図３】
2010033287.tif 000005
【図４】
2010033287.tif 000006
【図５】
2010033287.tif 000007
【図６】
2010033287.tif 000008
【図７】
2010033287.tif 000009
【図８】
2010033287.tif 000010
【図９】
2010033287.tif 000011
【図１０】
2010033287.tif 000012
【図１１】
2010033287.tif 000013
【図１２】
2010033287.tif 000014
【図１３】
2010033287.tif 000015
【図１４】
2010033287.tif 000016
【図１５】
2010033287.tif 000017
【図１６】
2010033287.tif 000018
【図１７】
2010033287.tif 000019
【図１８】
2010033287.tif 000020
【図１９】
2010033287.tif 000021
【図２０】
2010033287.tif 000022