(57)【要約】【課題】本発明に係るストレージシステムのコントローラは、処理速度を低下させずに、旧RAIDグループから新RAIDグループへ拡張させる。【解決手段】変換部は、未変換領域Ａ２からデータを読出し、新RAID構成に基づくデータに変換し、新RAIDグループの記憶領域Ａ３に書き込む。アドレス管理部は、フラッシュメモリに退避されている先頭アドレスＰｓと、変換済領域Ａ２の最新の最終アドレスＰｅとが一致した場合に、フラッシュメモリに退避されている先頭アドレスＰｓ及び最終アドレスＰｅを更新させる。停電が発生した場合、変換済領域Ａ２内のデータが正しいか否か検査される。変換部は、フラッシュメモリから先頭アドレスＰｓ及び最終アドレスＰｅを読み出して、変換処理を再開する。【選択図】図１
2010066832.tif 000002
【特許請求の範囲】
【請求項１】
複数の記憶装置へのデータ入出力を制御する記憶制御装置であって、
旧RAIDグループを構成する複数の旧記憶装置に、少なくとも一つ以上の新記憶装置を加えることにより生成される新RAIDグループと、
前記旧RAIDグループから読み出される旧RAID構成のデータを、前記新RAIDグループに対応する新RAID構成のデータに変換して、前記新RAIDグループを構成する前記各旧記憶装置及び前記新記憶装置に記憶させるための変換処理を実行する、変換部であって、前記新RAIDグループの記憶領域のうち、前記新RAID構成のデータに未だ変換されていない旧RAID構成のデータが記憶されている第１領域の先頭アドレスと、前記新RAID構成のデータが記憶されている第２領域の最終アドレスとを、第１メモリに記憶させる変換部と、
所定時点における、前記先頭アドレス及び前記最終アドレスを、前記第１メモリから第２メモリにコピーさせる、アドレス管理部と、を備え、
前記変換部は、所定の障害が検出された場合に、前記第２メモリに記憶されている、前記先頭アドレス及び前記最終アドレスに基づいて、前記所定時点から前記変換処理を再開する、記憶制御装置。
【請求項２】
前記所定時点とは、最新の前記最終アドレスが、前記第２メモリに記憶されている前記先頭アドレスに一致した場合である、請求項１に記載の記憶制御装置。
【請求項３】
前記新RAIDグループの記憶領域には、前記第１領域と前記第２領域との間に位置して、前記新RAID構成のデータに変換されて前記第２領域に記憶されているデータの、変換前のデータを記憶する第３領域が存在し、
前記変換部は、前記変換処理を再開する場合に、前記第３領域に記憶されているデータを利用する、請求項１または請求項２に記載の記憶制御装置。
【請求項４】
前記新RAID構成のデータを前記第３領域に書き込む前に、その新RAID構成のデータによって上書きされるデータが、前記各旧記憶装置または前記新記憶装置の所定位置に記憶されているか否かを確認し、前記上書きされるデータが前記所定位置に記憶されている場合に、前記新RAID構成のデータが前記第３領域に書き込まれる、請求項３に記載の記憶制御装置。
【請求項５】
前記変換処理では、前記旧RAIDグループから前記旧RAID構成のデータを読み出して前記第１メモリに記憶させる処理と、前記第１メモリに記憶された前記旧RAID構成のデータを前記新RAID構成のデータに変換して前記各旧記憶装置及び前記新記憶装置に書き込む処理とがそれぞれ非同期で実行される、請求項１〜請求項４のいずれかに記載の記憶制御装置。
【請求項６】
前記変換部が前記変換処理を再開する場合に、前記第２領域に記憶されている前記新RAID構成のデータの正誤を検査する検査部と、前記検査部により誤ったデータであると判定された場合には、前記旧RAIDグループに記憶されている旧RAID構成のデータを用いて、前記誤ったデータを修復する修復部とを備える請求項１〜請求項５のいずれかに記載の記憶制御装置。
【請求項７】
前記新RAID構成のデータ及び前記旧RAID構成のデータは、その論理アドレスを示す論理アドレス情報を備えており、
前記検査部は、前記第２領域から読み出されるデータから前記論理アドレス情報を抽出し、前記データの読出し先アドレスと前記論理アドレス情報に示される論理アドレスとを比較し、前記読出し先アドレスと前記論理アドレスとが一致する場合に前記第２領域の前記読出し先アドレスには正しいデータが記憶されていると判定し、前記読出し先アドレスと前記論理アドレスとが不一致の場合に、前記第２領域の前記読出し先アドレスには誤ったデータが記憶されていると判定する、請求項６に記載の記憶制御装置。
【請求項８】
前記修復部は、前記読出し先アドレスに記憶されるべきデータを、前記第３領域から読み出して前記読出し先アドレスにコピーさせる、請求項７に記載の記憶制御装置。
【請求項９】
前記第３領域から読み出されるデータに設定されている前記論理アドレス情報に基づいて、そのデータが正しいデータであると判定された場合に、前記修復部は、その正しいと判定されたデータを前記誤ったデータの格納先にコピーさせる、請求項８に記載の記憶制御装置。
【請求項１０】
前記アドレス管理部は、前記変換処理の開始前に、前記新RAIDグループを特定するためのデータと、前記新記憶装置を特定するためのデータとを、前記第２メモリに予め記憶させる、請求項１〜請求項９のいずれかに記載の記憶制御装置。
【請求項１１】
前記第１メモリは揮発性メモリであり、前記第２メモリは不揮発性メモリである、請求項１〜請求項１０のいずれかに記載の記憶制御装置。
【請求項１２】
前記所定の障害は、前記第１メモリの記憶内容が失われる障害である、請求項１〜請求項１１のいずれかに記載の記憶制御装置。
【請求項１３】
前記各旧記憶装置及び前記新記憶装置と通信を行う第２通信インターフェースと、
管理端末と通信を行う第３通信インターフェースと、
少なくとも前記変換部と前記アドレス管理部とを実現する制御部と、
を備え、
前記各旧記憶装置及び前記新記憶装置から生成される記憶領域内には、新RAIDグループの記憶領域のうち、前記新RAID構成のデータに未だ変換されていない旧RAID構成のデータが記憶されている第１領域と、前記新RAID構成のデータが記憶されている第２領域と、前記第１領域と前記第２領域との間に位置して、前記新RAID構成のデータに変換されて前記第２領域に記憶されているデータの、変換前のデータを記憶する第３領域とが存在しており、
前記制御部は、
前記管理端末から前記第３通信インターフェースを介して、前記旧RAIDグループを構成する複数の旧記憶装置に前記新記憶装置を加えて前記新たなRAIDグループを生成する旨が指示された場合に、
揮発性の前記第１メモリ上に、前記先頭アドレス及び前記最終アドレスを管理するための管理テーブルを作成し、
前記作成された管理テーブルを不揮発性の前記第２メモリにコピーし、
前記旧RAID構成のデータのうち、前記新RAID構成のデータに変換すべき変換対象データを決定し、
前記変換対象データにより上書きされるデータが前記各旧記憶装置または前記新記憶装置の所定位置に記憶されているか否かを確認し、
前記上書きされるデータが前記所定位置に記憶されている場合に、前記変換対象データを前記第１領域から読み出して前記第１メモリに記憶させ、
前記第１メモリに記憶された前記変換対象データと前記新RAID構成とに基づいて、前記RAID構成に対応する新パリティを算出し、
前記変換対象データを前記第３領域に書き込む前に、前記第１メモリ上の前記管理テーブル内の、前記先頭アドレス及び前記最終アドレスを更新し、
前記第１メモリ内の前記管理テーブルに記憶されている前記最終アドレスと、前記第２メモリ内の前記管理テーブルに記憶されている先頭アドレスとが一致する場合に、前記第１メモリ内の前記管理テーブルに記憶されている、前記先頭アドレス及び前記最終アドレスを、前記第２メモリに転送して前記第２メモリ内の前記管理テーブルを更新させ、
前記変換対象データに、その格納先の論理アドレスを示す論理アドレス情報を付加して、
前記論理アドレス情報の付加された前記変換対象データを、前記第２通信インターフェースを介して前記各旧記憶装置及び前記新記憶装置に送信して、前記第３領域に書き込ませ、
未変換の前記旧RAID構成のデータが全て前記新RAID構成のデータに変換されて、前記各旧記憶装置及び前記新記憶装置から生成される記憶領域内に書き込まれた場合に、前記第３通信インターフェースを介して前記管理端末に処理完了を通知し、
前記管理端末に前記処理完了を通知する前に、前記第１メモリの記憶内容が失われる障害が発生した場合、その障害発生を検出し、
前記障害発生が検出された場合、前記新RAID構成のデータを前記第２領域から読み出して前記第１メモリに記憶させ、
前記第１メモリに記憶された前記新RAID構成のデータに付加されている前記論理アドレス情報に基づいて、そのデータが誤ったデータか否かを判定し、
誤ったデータであると判定された場合、前記第３領域から修復用データを読出し、
前記修復用データに付加されている論理アドレス情報に基づいて前記修復用データが正しいデータであるか否かを判定し、
前記修復用データが正しいデータであると判定された場合に、前記修復用データで前記誤ったデータを上書きして修復処理を行い、
前記修復処理の完了後に、前記第２メモリに記憶されている前記管理テーブルを前記第１メモリにコピーして、前記第１メモリ上に管理テーブルを再構築し、
変換処理の続きを再開させる、
かつ、前記第１メモリにデータを読み出す処理と前記第１メモリから前記各旧記憶装置または前記新記憶装置にデータを書き込む処理とは非同期で実行される、
請求項６に記載の記憶制御装置。
【請求項１４】
複数の記憶装置を備えるRAIDグループに新記憶装置を追加することにより、RAIDグループを拡張させる方法であって、
旧RAIDグループを構成する複数の旧記憶装置に少なくとも一つ以上の新記憶装置を加えることにより、新RAIDグループを生成させる旨の指示を、受信するステップと、
前記指示が受信された場合に、前記旧RAIDグループから読み出される旧RAID構成のデータを、前記新RAIDグループに対応する新RAID構成のデータに変換して、前記新RAIDグループを構成する前記各旧記憶装置及び前記新記憶装置に記憶させる、変換処理を実施させるためのステップと、
前記新RAIDグループの記憶領域のうち、前記新RAID構成のデータに未だ変換されていない旧RAID構成のデータが記憶されている第１領域の先頭アドレスと、前記新RAID構成のデータが記憶されている第２領域の最終アドレスとを、揮発性の第１メモリに記憶させるステップと、
最新の前記最終アドレスが、第２メモリに記憶されている前記先頭アドレスに一致した場合、前記先頭アドレス及び前記最終アドレスを、前記第１メモリから前記第２メモリに退避させるステップと、
所定の障害が検出された場合、前記第２メモリに記憶されている前記先頭アドレス及び前記最終アドレスに基づいて、前記所定時点から前記変換処理を再開させるためのステップと、
をそれぞれ実行する、RAIDグループの拡張方法。
【請求項１５】
前記変換処理では、前記新RAID構成のデータを前記第２領域に書き込む前に、その新RAID構成のデータによって上書きされるデータが、前記各旧記憶装置または前記新記憶装置の所定位置に記憶されているか否かを事前に確認し、前記上書きされるデータが前記所定位置に記憶されている場合に、前記新RAID構成のデータを前記第２領域に書き込む、請求項１４に記載のRAIDグループの拡張方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶制御装置及びRAIDグループの拡張方法に関する。
【背景技術】
【０００２】
記憶制御装置は、複数のディスクドライブによってRAID（Redundant Array of Independent Disks）グループを構成し、各ディスクドライブの有する物理的記憶領域を用いて、RAID０−６等のRAID構成を生成する。RAIDグループの有する仮想化された物理的記憶領域には、一つまたは複数の論理ボリュームを生成可能である。論理ボリューム（LU：（Logical Unit）は、ホストコンピュータ（以下、ホスト）に提供され、ユーザデータが記憶される。
【０００３】
ユーザは、将来の使用容量をある程度予測して、RAIDグループの記憶容量等を決定することが多い。しかし、近年では、管理すべきデータ量が大幅に増大しているため、ユーザの最初の予測を超える記憶容量が必要とされることは、決して珍しくない。
【０００４】
RAIDグループの記憶容量が足りなくなった場合の一つの対策として、そのRAIDグループに新たなディスクドライブを追加し、新ディスクドライブを含めた全ディスクドライブで、再ストライピングする方法が知られている。
【特許文献１】特開２００７−３２３２５１号公報
【特許文献２】特開２００７−３２３２５２号公報
【特許文献３】特開２００８−００３８５７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
従来技術では、既存のRAIDグループを構成するディスクドライブを再利用して、より記憶容量の大きな新たなRAIDグループを生成させると共に、RAIDグループの拡張中におけるユーザデータを保護するという観点が含まれていない。また、従来技術には、ユーザデータを保護しつつ、より速やかにRAIDグループを拡張させるための構成も開示されていない。
【０００６】
本発明は上述の問題点に鑑みてなされたもので、その目的は、旧記憶装置に新記憶装置を追加して、より記憶容量の大きい新RAIDグループを生成する場合に、旧RAIDグループに記憶されている旧RAID構成のデータを消失することなく、かつ、比較的速やかに変換処理を完了させることができる、記憶制御装置及びRAIDグループの拡張方法を提供することにある。本発明のさらなる目的は、後述する実施形態の記載から明らかになるであろう。
【課題を解決するための手段】
【０００７】
上記課題を解決すべく、本発明の一つの観点に従う記憶制御装置は、旧RAIDグループを構成する複数の旧記憶装置を再利用し、各旧記憶装置に新たな記憶装置を追加することにより新RAIDグループを構成する。変換部は、旧RAIDグループから読み出される旧RAID構成のデータを、新RAIDグループに対応する新RAID構成のデータに変換して、新RAIDグループを構成する各旧記憶装置及び新記憶装置に記憶させるための変換処理を実行する。さらに、変換部は、新RAIDグループの記憶領域のうち、新RAID構成のデータに未だ変換されていない旧RAID構成のデータが記憶されている第１領域の先頭アドレスと、新RAID構成のデータが記憶されている第２領域の最終アドレスとを、第１メモリに記憶させる。アドレス管理部は、所定時点における、先頭アドレス及び最終アドレスを、第１メモリから第２メモリにコピーさせる。そして、変換部は、所定の障害が検出された場合に、第２メモリに記憶されている、先頭アドレス及び最終アドレスに基づいて、所定時点から変換処理を再開する。
【０００８】
所定時点とは、最新の最終アドレスが、第２メモリに記憶されている先頭アドレスに一致した場合として設定可能である。例えば、第１メモリは揮発性メモリであり、第２メモリは不揮発性メモリである、例えば、所定の障害は、第１メモリの記憶内容が失われる障害である。
【０００９】
新RAIDグループの記憶領域には、第１領域と第２領域との間に位置して、新RAID構成のデータに変換されて第２領域に記憶されているデータの、変換前のデータを記憶する第３領域が存在し、変換部は、変換処理を再開する場合に、第３領域に記憶されているデータを利用することもできる。
【００１０】
新RAID構成のデータを第２領域に書き込む前に、その新RAID構成のデータによって上書きされるデータが、各旧記憶装置または新記憶装置の所定位置に記憶されているか否かを確認し、上書きされるデータが所定位置に記憶されている場合に、新RAID構成のデータが第３領域に書き込まれる構成でもよい。
【００１１】
変換処理では、旧RAIDグループから旧RAID構成のデータを読み出して第１メモリに記憶させる処理と、第１メモリに記憶された旧RAID構成のデータを新RAID構成のデータに変換して各旧記憶装置及び新記憶装置に書き込む処理とを、それぞれ非同期で実行可能である。
【００１２】
変換部が変換処理を再開する場合に、第２領域に記憶されている新RAID構成のデータの正誤を検査する検査部と、検査部により誤ったデータであると判定された場合には、旧RAIDグループに記憶されている旧RAID構成のデータを用いて、誤ったデータを修復する修復部と、を設けてもよい。
【００１３】
新RAID構成のデータ及び旧RAID構成のデータは、その論理アドレスを示す論理アドレス情報を備えてもよい。検査部は、第２領域から読み出されるデータから論理アドレス情報を抽出し、データの読出し先アドレスと論理アドレス情報に示される論理アドレスとを比較し、読出し先アドレスと論理アドレスとが一致する場合に第２領域の読出し先アドレスには正しいデータが記憶されていると判定し、読出し先アドレスと論理アドレスとが不一致の場合に、第２領域の読出し先アドレスには誤ったデータが記憶されていると判定できる。さらに、修復部は、読出し先アドレスに記憶されるべきデータを、第３領域から読み出して読出し先アドレスにコピーさせることができる。
【００１４】
本発明の構成要素は、その全部または一部をコンピュータプログラムとして構成できる場合がある。このコンピュータプログラムは、記録媒体に固定して譲渡等することができるほかに、インターネット等の通信ネットワークを介して伝送することもできる。また、本発明の観点は、明示されている組合せ以外にも適宜組み合わせて可能であり、そのような組合せも本発明の範囲に含まれる。
【発明を実施するための最良の形態】
【００１５】
以下、図面に基づき、本発明の実施の形態を説明する。図１は、本実施形態の全体概念を示す説明図である。より詳細な構成例は、後述の実施例で明らかにされる。図１に示す記憶制御装置１は、例えば、複数のディスクドライブ２と、キャッシュメモリ３と、フラッシュメモリ４と、変換部５と、アドレス管理部６と、検査部７と、修復部８とを備えている。
【００１６】
ディスクドライブ２は「記憶装置」に該当する。便宜上、「ディスクドライブ」と呼ぶが、記録メディアの形状や形式は特に問わない。例えば、例えば、ハードディスクドライブ、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス、磁気テープデバイス、フレキシブルディスクデバイス等の、データを読み書き可能な種々の記憶装置を、本発明は利用可能である。ハードディスクドライブを用いる場合、例えば、FC（Fibre Channel）ディスク、SCSI（Small Computer System Interface）ディスク、SATAディスク、ATA（AT Attachment）ディスク、SAS（Serial Attached SCSI）ディスク等を用いることができる。半導体メモリデバイスを用いる場合、例えば、フラッシュメモリ、FeRAM（Ferroelectric Random Access Memory）、MRAM（MagnetoresistiveRandom Access Memory）、相変化メモリ（Ovonic Unified Memory）、RRAM（Resistance RAM）」等の種々のメモリデバイスを利用可能である。
【００１７】
各ディスクドライブ２の記憶領域の構成を説明する。ディスクドライブ２（HD１−HD３）が既存ディスクドライブ２であって、以前から使用されているとする。既存のディスクドライブ２（HD１−HD３）は、旧RAIDグループを構成しており、旧RAID構成に基づくデータが記憶されている。
【００１８】
本実施例では、既存のディスクドライブ２（HD１−HD３）に新たなディスクドライブ２（HD４）を追加し、これら新旧の全ディスクドライブ（HD１−HD４）を用いて、新RAIDグループを生成する。新ディスクドライブ２（HD４）のサイズ分だけ、新RAIDグループの記憶容量は、旧RAIDグループの記憶容量よりも大きくなる。
【００１９】
ここでは、新RAID構成に基づくデータに変換されていない、旧RAID構成に基づくデータのみが記憶されている領域を未変換領域Ａ１と呼ぶ。新RAID構成に基づくデータのみが記憶されている領域を変換済領域Ａ２と呼ぶ。未変換領域Ａ１は、再ストライピングが実施されていない記憶領域であり、「第１領域」に該当する。変換済領域Ａ２は、再ストライピングの終了した記憶領域であり、「第２領域」に該当する。
【００２０】
変換済領域Ａ２と未変換領域Ａ１との間には、「第３領域」としてのフリー領域Ａ３が存在する。フリー領域Ａ３は、再ストライピングの終了した、再ストライピング前のデータが残っている記憶領域である。つまり、フリー領域Ａ３は、変換済領域Ａ２に同一データの存在する、旧RAID構成に基づく記憶領域である。フリー領域Ａ３に位置するデータは、新RAID構成のデータに変換済のため（再ストライピング済のため）、別のデータを上書きすることができる。従って、ここではフリー領域と呼ぶ。
【００２１】
換言すれば、変換済領域Ａ２に記憶されているデータのうち一部のデータは、フリー領域Ａ３にも記憶されている。従って、フリー領域Ａ３を、変換済領域Ａ２内の所定データを二重管理するための二重管理領域であると考えることもできる。
【００２２】
キャッシュメモリ３内の管理データMDには、RAIDグループを特定するためのグループ番号やRAID構成を特定するための構成情報のほかに、変換済領域Ａ２の最終アドレスＰｅと、未変換領域Ａ１の先頭アドレスＰｓとが記憶されている。
【００２３】
「第１メモリ」としてのキャッシュメモリ３は、比較的高速にアクセス可能な揮発性メモリとして構成されている、キャッシュメモリ（図中、CM）３は、ディスクドライブ２から読み出されるユーザデータUD１,UD２や、RAIDグループ拡張のために使用される管理データＭＤ等を記憶する。
【００２４】
本実施例では、キャッシュメモリ３へのデータの読出しと、キャッシュメモリ３から各ディスクドライブ２へのデータ書込みとは、非同期で行われる。キャッシュメモリ３と各ディスクドライブ２との間では、シーケンシャルなデータ転送が行われる。キャッシュメモリ３は、ディスクドライブ２からデータを先読み（prefetch）する。新RAID構成の１ストライプ列を構成するデータが揃った時点で、その各ストライプのデータは、対応する各ディスクドライブ２に転送されて書き込まれる。
【００２５】
「第２メモリ」としてのフラッシュメモリ４は、例えば、不揮発性メモリとして構成される。フラッシュメモリ４には、キャッシュメモリ３に記憶されている管理データMDが、所定のタイミングで記憶される。
【００２６】
変換部５は、旧RAIDグループからストライプ列単位でデータを読み出し、読み出したデータのアドレスを、新たなRAID構成に対応するアドレスに変換して、新RAIDグループの記憶領域に書き戻す。ここで、ストライプとは、ストライピングのために使用される、所定サイズの１ディスクドライブ分のデータを意味する。ストライプの横一列分のデータ（全ストライプ分のデータ）を、ストライプ列と呼ぶ。
【００２７】
変換部５は、例えば、パリティ生成部５Ａと、アドレス情報付加部５Ｂと、上書き確認部５Cとを備える。図中、アドレス情報を「LA」と表示する。パリティ生成部５Ａは、ストライプ列のデータについて、パリティを算出する。
【００２８】
アドレス情報付加部５Ｂは、各ストライプのデータついて、そのデータの格納先を示す論理アドレスを付加する。例えば、１ストライプのデータサイズを５２０バイトとすると、そのうちの５１２バイトにはデータが記憶され、残りの８バイトに保証コードが記憶される。保証コードは、論理アドレスを示すアドレス情報と、LRC（Longitudinal Redundancy Check）とを含んでいる。説明の便宜上、５１２バイトの論理ブロック毎に付加される８バイトの保証コードのうち、論理アドレス情報（LA）に着目して説明する。
【００２９】
上書き確認部５Cは、新RAID構成に基づくストライプ列に変換されたデータを、各ディスクドライブ２に書き込む前に、そのデータによって上書きされる旧データが、各ディスクドライブ２内の所定位置に格納されているか否かを確認する。つまり、上書き確認部５Cは、上書きされる旧データが、デステージ済みか否かを判定する。デステージ済みの場合、変換部５は、新RAID構成に従うデータを各ディスクドライブ２に書き込む。
【００３０】
変換部５は、新RAID構成に従うデータを各ディスクドライブ２に書き込む際に、キャッシュメモリ３内の管理データMDに含まれている、最終アドレスＰｅ及び先頭アドレスＰｓを更新させる。つまり、変換部５は、ユーザデータを実際に各ディスクドライブ２に書き込むよりも前に、キャッシュメモリ３内の管理データMDを更新させる。キャッシュメモリ３には、最新の、最終アドレス及び先頭アドレスが記憶される。
【００３１】
アドレス管理部６は、所定タイミングが到来した場合に、キャッシュメモリ３内の管理データMDをフラッシュメモリ４内に退避させる。所定タイミングとは、キャッシュメモリ３に記憶されている最終アドレスＰｅが、フラッシュメモリ４に記憶されている先頭アドレスに一致する場合である。即ち、最新の変換済領域Ａ２が、前回の退避時におけるフリー領域Ａ３の終端に到達した時点（または、Ａ１の先頭に差し掛かった時点）で、各アドレスＰｅ,Ｐｓをフラッシュメモリ４に退避させる。
【００３２】
本実施形態では、変換処理の最中に停電等が発生して、キャッシュメモリ３内の管理データMDやユーザデータUD１,UD２が消失した場合に、フラッシュメモリ４内の管理データMDとフリー領域Ａ３に記憶されているデータとに基づいて、前回退避時の、変換済領域Ａ２の最終アドレスから変換処理を再開させる。
【００３３】
検査部７は、変換済領域Ａ２内に書き込まれているデータが正しいか否かを検査するためのものである。検査部７は、変換済領域Ａ２からユーザデータUD２を読み出し、キャッシュメモリ３に記憶させる。検査部７は、ユーザデータUD２に付加されている論理アドレス情報を抽出する。
【００３４】
検査部７は、そのユーザデータUD２の読出し先アドレスと、論理アドレス情報から得られるアドレスとが一致するか否かを判定する。両方のアドレスが一致する場合、そのユーザデータUD２は正しいと判定できる。両方のアドレスが不一致の場合、そのユーザデータUD２は誤っていると判定できる。
【００３５】
例えば、キャッシュメモリ３内のユーザデータUD１をディスクドライブ２に書込むよりも前に停電等が発生し、そのユーザデータUD１が失われた場合を想定できる。この場合、変換済領域Ａ２内に、未変換のデータが記憶されたままのストライプが生じる。そこで、検査部７は、変換処理を再開する前に、論理アドレスに基づいて、変換領域Ａ２内のデータが正しいか否かを検査する。なお、変換領域Ａ２のみならず、フリー領域Ａ３や未変換領域Ａ１についても、そこに記憶されているデータの正誤を検査してもよい。
【００３６】
修復部８は、検査部７によって誤ったデータであると判定された場合に、その誤ったデータを修復するものである。修復部８は、その誤ったデータの記憶されているアドレスに対応する正しいデータを、フリー領域Ａ３から検出し、その正しいデータで誤ったデータを上書きすることにより、修復する。
【００３７】
本実施形態は、上述のように構成されるため、旧RAIDグループに新ディスクドライブ２（HD４）を追加した場合に、比較的速やかに、旧RAID構成のデータを新RAID構成のデータに変換することができる。
【００３８】
高速な変換処理を行うためには、高速アクセス可能なメモリ（本実施形態では、キャッシュメモリ３）に、管理データMDを記憶させる必要がある。しかし、高速アクセス可能なメモリは、通常の場合、揮発性メモリとして構成される。従って、停電等が発生した場合、管理データMDが失われてしまう。管理データMDが失われると、変換処理を再開することができないばかりか、旧RAID構成のデータの一部が消失する。
【００３９】
揮発性のキャッシュメモリ３に代えて、フラッシュメモリ４内に管理データMDを記憶させる構成も考えられる。しかし、この場合は、上述のように、管理データMDに高速アクセスできないため、変換処理の速度が低下する。さらに、フラッシュメモリ４のような書込み回数に制限のある不揮発性メモリを、頻繁に更新される管理データMDを記憶させるために使用すると、フラッシュメモリ４の寿命が低下する。
【００４０】
そこで、本実施形態では、通常時は、管理データMDをキャッシュメモリ３に記憶させて使用し、所定タイミングで、キャッシュメモリ３内の管理データMDをフラッシュメモリ４内に退避させる。従って、停電等が発生した場合でも、フラッシュメモリ４内の管理データMDを用いて、変換処理を再開可能である。
【００４１】
本実施形態では、最新の最終アドレスＰｅが、フラッシュメモリ４に記憶されている先頭アドレスＰｓに一致した場合を所定タイミングとして、最新の、最終アドレスＰｅ及び先頭アドレスＰｓをフラッシュメモリ４に退避させる。つまり、本実施例では、フラッシュメモリ４内の管理データMDを、所定タイミング毎に更新させる。
【００４２】
従って、フラッシュメモリ４内の管理データMDが更新される頻度は、キャッシュメモリ３内の管理データMDが更新される頻度よりも大幅に少ない。例えば、キャッシュメモリ３内の管理データMDの更新頻度の数百分の一〜数万分の一程度の割合で、フラッシュメモリ４内の管理データMDを更新させることができる。これにより、変換処理を再開させるために必要な管理データMDを、不揮発性メモリ（本実施形態では、フラッシュメモリ４）内に定期的にバックアップさせた場合でも、変換処理の性能劣化による影響を実質的に排除することができる。
【００４３】
本実施形態では、上述の通り、キャッシュメモリ３内の最終アドレスＰｅが、フラッシュメモリ４内の先頭アドレスＰｓに一致した場合に、フラッシュメモリ４内の最終アドレスＰｅ及び先頭アドレスＰｓを更新させる。最新のアドレスＰｅがフラッシュメモリ４内に退避している先頭アドレスＰｓに追いつくまでは、フリー領域Ａ３に記憶されているデータによって、ユーザデータを失うことなく、変換処理を再開可能だからである。その仕組みは、図６で後述する。
【００４４】
本実施形態では、変換処理の再開前に、検査部７によって、変換領域Ａ２内のデータが正しいデータであるか否かを検査する。そして、誤ったデータであると判定された場合は、修復部８により、フリー領域Ａ３内のデータを用いて修復させる。従って、キャッシュメモリ３に読み上げられたユーザデータUD１が、停電等によって、ディスクドライブ２に書き込まれる前に失われた場合でも、正しい変換処理を再開できる。
【００４５】
本実施形態では、上書き確認部５Cによって、新RAID構成のデータをフリー領域Ａ３に書き込む前に、その新RAID構成のデータにより上書きされるデータが、デステージされているか否かを確認する。
【００４６】
ここで、デステージとは、キャッシュメモリ３内のデータをディスクドライブ２内に書き込むことを言う。ステージングとは、ディスクドライブ２内のデータをキャッシュメモリ３内に転送させることを言う。デステージ済のデータは、ディスクドライブ２内にも保存されているので、キャッシュメモリ３から消去可能である。本実施形態では、デステージ済のデータの状態を、クリーン状態と呼ぶ。これに対し、デステージが済んでいないデータは、キャッシュメモリ３上にのみ存在するデータであり、キャッシュメモリ３から消去してしまうと完全に消失されるデータである。本実施形態では、デステージの済んでいないデータの状態を、ダーティ状態と呼ぶ。
【００４７】
本実施形態では、フリー領域Ａ３内の上書き対象のデータがクリーン状態の場合（デステージ済の場合）に、新RAID構成のデータをフリー領域Ａ３に書き込む。換言すれば、フリー領域Ａ３内の上書き対象データがダーティ状態の場合、クリーン状態となるまで、未変換領域Ａ１からフリー領域Ａ３へのコピーを停止させる。これにより、変換済領域Ａ２内のデータがディスクドライブ２に書き込まれるまで、フリー領域Ａ３内のデータを保護することができる。従って、フリー領域Ａ３内のデータを用いて、変換領域Ａ２内のエラーを修復することができる。
【００４８】
なお、管理データMDを退避させるための第２メモリとして、フラッシュメモリ４を挙げたが、これに代えて、システム情報を記憶するためのディスクドライブ２等を、第２メモリとして使用してもよい。
【実施例１】
【００４９】
図２は、本実施例によるシステムの全体構成を示す説明図である。このシステムは、例えば、記憶制御システム１０と、ホスト２０と、管理端末３０とを備える。記憶制御システム１０は、コントローラ１００と、記憶装置搭載部２００とを備える。記憶装置搭載部２００は、HDU（Hard disk Unit）とも呼ばれる。
【００５０】
図１との対応関係を述べる。コントローラ１００は記憶制御装置１に、HDU２００内のディスクドライブ２１０はディスクドライブ２に、キャッシュメモリ１２０はキャッシュメモリ３に、フラッシュメモリ１４０はフラッシュメモリ４に、対応する。図１に示す変換部５，アドレス管理部６，検査部７，修復部８は、コントローラ１００内のCPU１１０により実現される。
【００５１】
通信ネットワークの構成を説明する。ホスト２０とコントローラ１００とは、通信経路CN１を介して相互通信可能に接続されている。コントローラ１００と記憶デバイス搭載部２０とは、通信経路CN２を介して相互通信可能に接続されている。通信経路CN１，CN２は、例えば、IP（Internet Protocol）を利用するIP_SAN、または、FCP（Fibre Channel Protocol）を利用するFC_SANのように構成される。
【００５２】
管理端末３０は、例えば、ＬＡＮ（Local Area Network）のような通信ネットワークCN３を介して、コントローラ１００に接続されている。管理端末３０は、コントローラ１００内の各種状態に関する情報を収集して、端末画面に表示させる。また、管理端末３０は、コントローラ１００に各種指示を与えて、設定変更等を行うことができる。
【００５３】
ホスト２０は、例えば、パーソナルコンピュータ、サーバコンピュータ、ワークステーション、メインフレームコンピュータのように構成される。ホスト２０は、コントローラ１００を介して、HDU２００内の論理ボリューム２３０を使用する。
【００５４】
コントローラ１００は、ホスト２０と各ディスクドライブ２１０との間のデータ授受を制御する。また、コントローラ１００は、ホスト２０や管理端末３０からの指示に応じて、RAIDグループ２２０の構成等を変更する。
【００５５】
コントローラ１００は、例えば、CPU（Central Processing Unit）１１０と、キャッシュメモリ１２０と、メモリ１３０と、フラッシュメモリ１４０と、ホストインターフェース１５０と、ドライブインターフェース１６０と、管理インターフェース１７０とを、備える。
【００５６】
記憶制御システム１０やコントローラ１００の構成は、図示の例に限定されない。例えば、記憶制御システム１０には、コントローラ１００を複数搭載できる。コントローラ１００を複数設けることにより、処理負荷を分散したり、耐障害性を向上できる。
【００５７】
CPU１１０は、コントローラ１００の動作を制御する。CPU１１０は、メモリ１３０に記憶されているコンピュータプログラムを読み込んで実行することにより、後述の各処理を実現する。CPU１１０は、例えば、データ処理部１１１と、データ転送部１１２と、内部キャッシュ１１３とを備える。
【００５８】
データ処理部１１１は、例えば、ホスト２０から受信したコマンドを処理し、その処理結果をホスト２０に返す。さらに、データ処理部１１１は、旧RAID構成のデータのアドレスを新RAID構成のデータのアドレスに変換したり、新RAID構成に基づくパリティを算出する。データ処理部１１１は、論理アドレスやLRCを含む、８バイトの保証コードを、５１２バイトのデータ（１つのストライプ分のデータ）に付加する。データ処理部１１１は、保証コードに基づいて、データの読出し先が正しいか否か等を判定する。
【００５９】
データ転送部１１２は、例えば、キャッシュメモリ１２０と所定の各部との間のデータ転送を制御するものである。所定の各部とは、例えば、フラッシュメモリ１４０，ホストインターフェース１５０，ドライブインターフェース１６０，管理インターフェース１７０である。
【００６０】
データ転送部１１２は、データ転送専用の回路として構成することもできる。同様に、データ処理部１１１により実行される各処理の少なくとも一部は、専用のハードウェア回路として実現することもできる。
【００６１】
キャッシュメモリ１２０は、ホスト２０から受信したデータ（ライトデータ）や、ディスクドライブ２１０から読み出されたデータを記憶する。キャッシュメモリ１２０は、揮発性メモリとして構成される。キャッシュメモリ１２０には、旧RAIDグループを新RAIDグループに変換するために使用される、管理テーブルＴ１０も記憶される。メモリ１３０には、CPU１１０により実行される各種のコンピュータプログラムが記憶される。
【００６２】
フラッシュメモリ１４０には、キャッシュメモリ１２０に記憶されている管理テーブルＴ１０の記憶内容のうち少なくとも一部が、所定のタイミングで記憶される。フラッシュメモリ１４０は、不揮発性メモリとして構成される。従って、もしも停電が発生して、コントローラ１００への給電が停止された場合でも、フラッシュメモリ１４０に記憶された内容は失われない。
【００６３】
ホストインターフェース１５０は、ホスト２０との通信を行う。ドライブインターフェース１６０は、ディスクドライブ２１０との通信を行う。管理インターフェース１７０は、管理端末３０との通信を行う。
【００６４】
HDU２００は、複数のディスクドライブ２１０を備える。本実施例では、便宜上、「ディスクドライブ」と呼ぶが、ディスク状の記憶媒体を用いる装置に限らない。ディスクドライブ２１０としては、例えば、ハードディスクデバイス、半導体メモリデバイス、光ディスクデバイス、光磁気ディスクデバイス、磁気テープデバイス、フレキシブルディスクデバイス等のデータを読み書き可能な種々の記憶装置を利用可能である。ハードディスクデバイスを用いる場合、例えば、FC（Fibre Channel）ディスク、SCSI（Small Computer System Interface）ディスク、SATAディスク、ATA（AT Attachment）ディスク、SAS（Serial Attached SCSI）ディスク等を用いることができる。
半導体メモリデバイスを用いる場合、例えば、フラッシュメモリデバイス、FeRAM（Ferroelectric Random Access Memory）、MRAM（MagnetoresistiveRandom Access Memory）、相変化メモリ（Ovonic Unified Memory）、RRAM（Resistance RAM）」等の種々のメモリデバイスを利用可能である。
【００６５】
複数のディスクドライブ２１０をグループ化して、RAIDグループ２２０を構成することができる。RAIDグループ２２０の記憶領域を用いて、一つまたは複数の論理ボリューム２３０を生成できる。論理ボリューム２３０は、ホストインターフェース１５０の備える通信ポートに対応付けられて、ホスト２０に提供される。ホスト２０は、論理アドレスを指定してリードコマンドやライトコマンドを発行することにより、論理ボリューム２３０にデータを読み書きすることができる。
【００６６】
図３は、RAIDグループ２２０を拡張するために使用される管理テーブルＴ１０の一例を示す説明図である。管理テーブルＴ１０は、例えば、グループ番号欄Ｃ１０と、状態欄Ｃ１１と、旧RAID構成欄Ｃ１２と、新RAID構成欄Ｃ１３と、変換済アドレス欄Ｃ１４と、未変換アドレス欄Ｃ１５と、その他の欄Ｃ１６とを備える。
【００６７】
管理テーブルＴ１０は、キャッシュメモリ１２０に格納され、CPU１１０によって使用される。さらに、管理テーブルＴ１０の少なくとも一部は、所定のタイミングで、フラッシュメモリ１４０にもコピーされる。例えば、RAIDグループの拡張処理が実施されているRAIDグループに関する情報は、フラッシュメモリ１４０にもコピーされる。
【００６８】
グループ番号欄Ｃ１０は、コントローラ１００の管理下にある全てのRAIDグループ２０を識別するためのRAIDグループ番号（RG#）を管理する。状態欄Ｃ１１は、そのRAIDグループが拡張中状態であるか否かを管理する。RAIDグループ２２０を拡張している場合、「実施」と設定される。RAIDグループ２２０を拡張していない場合は、「未実施」と設定される。
【００６９】
旧RAID構成欄Ｃ１２は、拡張処理が実施されるRAIDグループ２２０の、旧RAID構成を示す。新RAID構成欄Ｃ１２は、拡張処理が実施されるRAIDグループ２２０の新RAID構成を示す。RAIDグループ拡張処理が実施されないRAIDグループ番号には、旧RAID構成のみが設定されており、新RAID構成は設定されない。
【００７０】
RAID構成としては、例えば、４Ｄ+１Ｐ、４Ｄ+４Ｄ、６Ｄ+２Ｐ等のように、例えば、RAID０−RAID６の各RAIDレベルに基づく構成情報が設定される。ここで、４Ｄ+１Ｐとは、データを記憶する４台のデータドライブと、パリティを記憶する１台のパリティドライブとを備えるRAID構成である。例えば、RAID５等のような一種類のパリティを使用するRAIDレベルが用いられる。４Ｄ+４Ｄとは、４台のデータドライブと、別の４台のデータドライブとで、ミラーリング（RAID１）を構成する場合である。６Ｄ+２Ｐとは、４台のデータドライブと２台のパリティドライブから、RAID６を構成する場合である。
【００７１】
変換済アドレス欄Ｃ１４は、変換済領域Ａ２の最終アドレスＰｅを記憶する。未変換アドレス欄Ｃ１５は、未変換領域Ａ１の先頭アドレスＰｓを記憶する。その他欄Ｃ１６は、その他の情報を記憶する。その他の情報としては、例えば、そのRAIDグループを構成するディスクドライブ２１０のタイプ、そのRAIDグループの全記憶容量、そのRAIDグループの未使用の記憶容量、そのRAIDグループの使用済記憶容量、そのRAIDグループを構成する各ディスクドライブ２１０の識別情報を示すドライブリスト等を挙げることができる。
【００７２】
図４は、旧RAIDグループに新たなディスクドライブ２１０（HD１３）を追加して、拡張させる様子を示す。ここでは、記憶容量が拡張された後のRAIDグループを、新RAIDグループと呼ぶ。
【００７３】
図４の上段に示す旧RAIDグループ２２０（１）は、２台のディスクドライブ２１０（HD１１），２２０（HD１２）とから構成されている。図４の中段に示すように、旧RAIDグループ２２０（１）に、新たなディスクドライブ２１０（HD１３）を１台加えて、新RAIDグループ２２０（２）を生成する。
【００７４】
旧RAIDグループ２２０（１）を構成する各ディスクドライブ２１０（HD１１），２１０（HD１２）の記憶領域Ａ１には、既にデータが記憶されている。その記憶領域Ａ１には、新RAID構成のデータに変換されていないデータが記憶されている。従って、その記憶領域Ａ１を未変換領域と呼ぶ。新ディスクドライブ２１０（HD１３）が追加されることにより、RAIDグループの記憶領域は、ディスクドライブ１台分だけ増加する。その拡張された記憶領域に、領域Ａ１に記憶されている既存データを再配置させる。
【００７５】
旧RAIDグループ２２０（１）から新RAIDグループ２２０（２）への変換処理が完了した場合、図４の下段に示すように、新RAIDグループ２２０（２）の記憶領域には、変換済領域Ａ２と、フリー領域Ａ３とが存在する。変換済領域Ａ２とは、新RAID構成のデータとしてアドレスが再設定されたデータを記憶している領域である。フリー領域Ａ３とは、変換済領域Ａ２に同一データの存在する、旧RAID構成に基づく記憶領域である。
【００７６】
図５は、旧RAIDグループから新RAIDグループに変換させる様子を模式的に示す説明図である。図５の上段に示すように、未変換領域Ａ１（１）に、新たな記憶領域Ａ４（１）を追加する。そして、変換処理を開始する。
【００７７】
図５の中段は、変換処理が途中まで進んだ状態を示す。RAIDグループの記憶領域の先頭アドレスから最終アドレスＰｅまでの、変換済領域Ａ２（２）には、新RAID構成に従って変換されたデータが記憶されている。
【００７８】
変換済領域Ａ２の終端ＰｅからアドレスＰｓまでの、フリー領域Ａ３（２）には、再ストライピングの完了したデータの、再ストライピング完了前のデータが記憶されている。フリー領域Ａ３（２）の後には、未変換領域Ａ１（２）が存在する。未変換領域Ａ１（２）から取り出されたデータは、新RAID構成のデータに変換された後、フリー領域Ａ３（２）に書き込まれる。未変換領域Ａ１（２）のうち変換済データを有する部分は、フリー領域Ａ３（２）に属することになる。フリー領域Ａ３（２）のうち、新RAID構成のデータが書き込まれた部分は、変換済領域Ａ２（２）に属することになる。
【００７９】
図５の下段に示すように、最終的に、旧RAID構成のデータは全て新RAID構成のデータに変換されて、新RAIDグループの記憶領域の先頭から順番に再配置される。変換済領域Ａ２（３）のサイズと、変換前の未変換領域Ａ１（１）のサイズとは、等しい。フリー領域Ａ３（３）のサイズと追加領域Ａ４（３）のサイズとの合計値は、追加領域Ａ４（１）のサイズに等しい。
【００８０】
図６は、変換処理を詳細に示す説明図である。図６では、説明の便宜上、比較的単純な構成を例に挙げて説明する。図６（０）に示すように、変換処理を開始する前の、未変換領域Ａ１（０）は、２台のディスクドライブの記憶領域から構成される。一つのディスクドライブの記憶領域を縦一列分のブロックで示す。未変換領域Ａ１（０）に、新たなディスクドライブの記憶領域Ａ４（０）を追加して、変換処理（RAIDグループの拡張処理）を開始する。
【００８１】
図６（１）に示すように、新RAIDグループの１ストライプ列を構成するデータ（アドレス「１」からアドレス「３」のデータ）を、未変換領域Ａ１（１）から読出し、新RAIDグループの先頭アドレスから順番に書き込む。これにより、新RAIDグループの先頭部分に、変換済領域Ａ２（１）が形成される。新RAID構成に基づくデータ（以下、変換済データとも呼ぶ）が書き込まれることにより、フリー領域Ａ３も発生する。フリー領域Ａ３（１）は、アドレス「３」のデータを記憶する。アドレス「３」のデータは、変換済領域Ａ２（１）と、フリー領域Ａ３（１）の両方に記憶されている。
【００８２】
図６（２）に示すように、次の１ストライプ列を構成するデータ（アドレス「４」からアドレス「６」のデータ）を、未変換領域Ａ１（１）から読み出して、新RAIDグループの記憶領域に書き込む。２個分のストライプ列が書き込まれることにより、図６（１）に示すアドレス「３」のデータは、変換済領域Ａ２（２）内にのみ存在することになる。アドレス「４」からアドレス「６」までのストライプ列が新たに書き込まれることにより、フリー領域Ａ３（２）には、アドレス「５」のデータ及びアドレス「６」のデータが含まれる。
【００８３】
以下同様に、図６（３）〜図６（５）に示すように、未変換領域Ａ１から連続的にデータが読み出され、フリー領域Ａ３に連続的に書き込まれていく。正確には、フリー領域Ａ３及び新規に追加された領域Ａ４に、変換済データが書き込まれていく。
【００８４】
変換済領域Ａ２の最終アドレスＰｅと未変換領域Ａ１の先頭アドレスＰｓとは、変換処理の進捗に応じて時々刻々と変化する。キャッシュメモリ１２０内の管理テーブルＴ１０は、変換処理の進捗に応じて更新される。
【００８５】
さらに、フラッシュメモリ１４０に記憶されている先頭アドレスＰｓと、最新の最終アドレスＰｅとが一致した場合に、最新の先頭アドレスＰｓと最新の最終アドレスＰｅとがフラッシュメモリ１４０に退避される。
【００８６】
図７〜図１５に基づいて、本実施例の作用を説明する。以下に述べる各フローチャートは、各処理の概要を示しており、実際のコンピュータプログラムとは相違する。いわゆる当業者であれば、図示されたステップの入れ替え、変更、削除、新たなステップの追加を行うことができるであろう。
【００８７】
図７は、全体動作を模式的に示す説明図である。まず、ユーザは、新たなディスクドライブ２１０をHDU２００に追加したり、拡張対象のRAIDグループ番号やRAIDレベルを指示したりして、新RAIDグループを設定する（S１０）。HDU２００内に余分なディスクドライブ２１０が存在する場合は、そのディスクドライブ２１０を用いればよい。新RAIDグループの設定処理は、図８で詳細に説明する。
【００８８】
新RAIDグループの設定終了後に、コントローラ１００は、旧RAIDグループから新RAIDグループへの変換処理を開始する（S１１）。コントローラ１００は、旧RAID構成のデータを読み出して、新RAID構成に応じたアドレスに変換し、新RAIDグループの記憶領域に書き込む。変換処理の最中に、所定タイミングで、変換済領域Ａ２の最終アドレスＰｅと未変換領域の先頭アドレスＰｓとは、フラッシュメモリ１４０内に退避される。変換処理の詳細は、図１０，図１１で後述する。
【００８９】
変換処理が完了する前に、停電等の障害が発生する場合がある。コントローラ１００は、その障害を検出する（S１２）。障害とは、変換処理に重大な影響を与える傷害であり、例えば、停電等により、キャッシュメモリ１２０の記憶内容（テーブルＴ１０やユーザデータ）が消失する障害である。コントローラ１００が障害発生を発見する構成でもよいし、ユーザが管理端末３０から障害発生をコントローラ１００に通知する構成でもよい。障害検出処理は、図１２で後述する。
【００９０】
障害が検出された場合、コントローラ１００は、変換処理を再開するための準備を整えて（S１３）、S１１に戻る。再開準備を行う処理の詳細は、図１３で後述する。そして、再開される変換処理については、図１４で後述する。
【００９１】
図８は、新RAIDグループを設定するための処理を示すフローチャートである。ユーザは、HDU２００に新たなディスクドライブ２１０を追加する（S２０）。HDU２００内に未使用の予備ディスクドライブが有る場合、それを使用できる。
【００９２】
ユーザは、管理端末３０を用いて、新RAIDグループの構成を設定する（S２１）。例えば、ユーザは、拡張対象のRAIDグループ番号と、拡張対象のRAIDグループに追加されるディスクドライブの番号等を指定する。
【００９３】
ユーザは、管理端末３０を用いて、コントローラ１００に変換処理（RAIDグループの拡張処理）の開始を指示する（S２２）。コントローラ１００による処理が完了すると、コントローラ１００から管理端末３０に完了通知が送られる（図１１のS４５）。ユーザは、その完了通知によって、RAIDグループの拡張が完了したことを確認する（S２３）。
【００９４】
図９は、変換処理の再開に使用する各アドレスＰｓ，Ｐｅを示す説明図である。図９の上段は、フラッシュメモリ１４０に退避されている、最終アドレスＰｅ（ｎ），先頭アドレスＰｓ（ｎ）を示す。
【００９５】
図９下段は、変換処理が進行した状態を示す。変換済領域Ａ２は、Ａ２（ｎ）からＡ２（ｎ＋１）に拡張している。その拡張に応じて、未変換領域Ａ１は、Ａ１（ｎ）からＡ１（ｎ＋１）に縮小している。最終アドレスＰｅは、Ｐｅ（ｎ）からＰｅ（ｎ＋１）に進み、先頭アドレスＰｓは、Ｐｓ（ｎ）からＰｓ（ｎ＋１）に変化する。
【００９６】
図９下段に示す状態まで変換処理が行われた後で、停電が発生した場合は、フラッシュメモリ１４０に退避されている最終アドレスＰｅ（ｎ）及び先頭アドレスＰｓ（ｎ）を用いて、変換処理を再度実施する。変換処理は、図９上段に示す状態から再開される。
【００９７】
即ち、コントローラ１００は、変換済領域Ａ２の最終アドレスＰｅと未変換領域Ａ１の先頭アドレスＰｓとを、定期的にフラッシュメモリ１４０に退避させることにより、再開すべき位置を知ることができる。
【００９８】
図９下段は、最終アドレスＰｅ（ｎ＋１）が退避時の先頭アドレスＰｓ（ｎ）に一致した場合を示す。コントローラ１００は、Ｐｅ（ｎ＋１）=Ｐｓ（ｎ）となった場合に、最新の最終アドレスＰｅ（ｎ＋１）と最新の先頭アドレスＰｓ（ｎ＋１）とをフラッシュメモリ１４０に退避させる。これにより、コントローラ１００は、障害発生時に、フリー領域Ａ３に記憶されているデータを利用して、変換処理を再開することができる。
【００９９】
図１０，図１１は、変換処理を示すフローチャートである。コントローラ１００は、キャッシュメモリ１２０上に、管理テーブルＴ１０を作成する（S３１）。コントローラ１００は、管理テーブルＴ１０をフラッシュメモリ１４０にも転送して記憶させる（S３２）。
【０１００】
変換処理の開始時点で、管理テーブルＴ１０をフラッシュメモリ１４０内にも記憶させることにより、その直後に停電等が生じた場合でも、コントローラ１００は、どのRAIDグループについて、どのように拡張しようとしたのかを知ることができる。
【０１０１】
コントローラ１００は、変換対象のデータを決定する（S３３）。コントローラ１００は、変換対象データによって上書きされるデータの状態を検出する（S３４）。コントローラ１００は、上書きされるデータがクリーン状態なのか否かを判定する（S３５）。再ストライピングデータによって上書きされるデータがダーティ状態の場合（S３５:NO）、コントローラ１００は、その上書きされるデータがクリーン状態になるまで待機する。
【０１０２】
上書きされるデータがクリーン状態の場合（S３５:YES）、コントローラ１００は、先頭アドレスＰｓから所定量の変換対象データを読み出し（S３６）、キャッシュメモリ１２０に記憶させる（S３７）。
【０１０３】
コントローラ１００は、新RAID構成に従って新たなパリティを生成する（S３８）。コントローラ１００は、キャッシュメモリ１２０内の管理テーブルＴ１０に記憶されている各アドレスＰｅ，Ｐｓの値を、S３６で読み出した所定量の分だけ増加させる（S３９）。
【０１０４】
図１１に移る。コントローラ１００は、フラッシュメモリ１４０に記憶されている先頭アドレスＰｓ（FM）と、キャッシュメモリ１２０に記憶されている最終アドレスＰｅ（CM）とが一致するか否かを判定する（S４０）。
【０１０５】
先頭アドレスＰｓ（FM）と最終アドレスＰｅ（CM）とが一致する場合（S４０:YES）、コントローラ１００は、フラッシュメモリ１４０に記憶されている各アドレスＰｅ，Ｐｓを最新の値に更新させる（S４１）。先頭アドレスＰｓ（FM）と最終アドレスＰｅ（CM）とが不一致の場合（S４０:NO）、各アドレスＰｅ，Ｐｓをフラッシュメモリ１４０に退避させる必要は無いので、S４１はスキップされる。
【０１０６】
コントローラ１００は、S３６で読み出した変換対象のデータのアドレスを新RAID構成に従うアドレスに変換し、さらに、保証コードGCを付加する（S４２）。保証コードGCには、データの格納先アドレスを示すアドレス情報（LA）と、LRCとが含まれる。保証コードGCは８バイトに形成されており、５１２バイト単位で各データに付加される。従って、保証コードGCの付加された論理ブロックは、５２０バイトとなる。
【０１０７】
コントローラ１００は、保証コードの付加されたデータ及びパリティを、新RAIDグループの記憶領域に書き込む（S４３）。即ち、新RAID構成に基づくデータは、フリー領域Ａ３及び追加領域Ａ４に跨るストライプ列に書き込まれる。
【０１０８】
コントローラ１００は、未変換領域Ａ１が無くなったか否かを判定する（S４４）。未変換領域Ａ１内の全ての未変換データを新RAID構成のデータに変換し終わった場合（S４４:YES）、コントローラ１００は、処理が完了した旨を管理端末３０に通知する（S４５）。未変換領域Ａ１に未変換データが残っている場合（S４４:NO）、コントローラ１００は、図１０のS３３に戻る。
【０１０９】
図１２は、障害を検出する処理を示すフローチャートである。コントローラ１００は、例えば、停電等のような、キャッシュメモリ１２０内の記憶内容が失われる障害の発生を検出し（S５１）、管理端末３０に通知する（S５２）。
【０１１０】
管理端末３０は、コントローラ１００からの通知を受けて、ユーザに、障害が発生した旨を通知する（S５３）。例えば、管理端末３０は、端末画面に表示させるメッセージやユーザ宛に送信される電子メール等によって、障害発生をユーザに通知できる。その通知には、変換処理が中断された旨も含めることができる。
【０１１１】
障害の発生を知ったユーザは、障害から復旧したことを確認してから、中断された変換処理の再開をコントローラ１００に指示する（S５４）。コントローラ１００は、管理端末３０からの指示を受けて、検査及びデータ修復させる処理を実行し（S６０）、その次に、変換処理を再開する（S８０）。ユーザは、コントローラ１００から管理端末３０に送信される通知により、再開された変換処理が正常に終了したことを確認できる。なお、変換処理が再開された旨も、ユーザは管理端末３０を介して知ることができる。
【０１１２】
図１３は、検査及びデータ修復を行う処理（S６０）を示すフローチャートである。まず最初に、コントローラ１００は、本処理の進捗を管理するためのポインタPmを初期化する（S６１）。ポインタPmは、新RAIDグループの記憶領域の先頭アドレスである「０」に設定される。
【０１１３】
コントローラ１００は、変換済領域Ａ２から所定量の検査対象データを読出し（S６２）、キャッシュメモリ１２０に記憶させる（S６３）。コントローラ１００は、各データ毎に、それぞれのデータに付加されたアドレス情報（LA）を検査し、そのアドレス情報が正しいか否かを判定する（S６４）。変換済領域Ａ２から読み出されるデータは、その読出し先の論理アドレスと一致するアドレス情報を有するはずである。アドレス情報が間違っている場合（S６４:YES）、例えば、キャッシュメモリ１２０内の変換済データが、ディスクドライブ２１０に書き込まれるよりも前に、何らかの障害によって消失した場合、その変換済データが書き込まれるべき箇所には、変換前のデータが残っている。この場合、変換前のデータの有するアドレス情報は、その場所に新たに割り当てられたアドレスと一致しないため、エラーとして検出される。
【０１１４】
アドレスエラーが検出されると（S６４:YES）、コントローラ１００は、フリー領域Ａ３から修復用のデータを探し出して、その修復用データを読み出す（S６５）。修復用データとは、アドレスエラーの生じた箇所に本来記憶されるべきデータである。上述の通り、フリー領域Ａ３には、再ストライピングの終了した、再ストライピング前のデータが、記憶されている。
【０１１５】
本実施例では、上述の通り、フリー領域Ａ３のデータを修復用データとして使用できるように、アドレスＰｅ，Ｐｓを所定タイミングでフラッシュメモリ１４０に退避させ、かつ、変換対象データで上書きされるデータがクリーン状態になったことを確認してから、その変換対象データをフリー領域Ａ３に書き込む。従って、コントローラ１００は、フリー領域Ａ３に記憶されているデータの中から、修復用データを見つけることができる。
【０１１６】
コントローラ１００は、修復用データに付加されているアドレス情報を検査して、そのアドレス情報が正しいか否かを判定する（S６６）。修復用データのアドレス情報が正しい場合（S６６:YES）、コントローラ１００は、アドレスエラーの検出されたデータを、修復用データで上書きする（S６７）。アドレスエラーが検出されない場合（S６４:NO）、コントローラ１００は、S６８に移行する。
【０１１７】
コントローラ１００は、ポインタPmを更新し（S６８）、変換済領域の全てを検査したか否かを判定する（S６９）。未検査のデータが残っている場合（S６９:NO）、コントローラ１００は、S６２に戻る。変換済領域Ａ２の全体を検査した場合（S６９:YES）、コントローラ１００は、本処理を終了する。
【０１１８】
なお、修復用データのアドレス情報は、通常の場合、正しいはずなので、S７０のエラー処理は省略してもよい。但し、修復用データのアドレス情報を検査することにより、信頼性を高めることができる。
【０１１９】
図１４は、変換処理を再開させるフローチャートである。コントローラ１００は、フラッシュメモリ１４０から管理テーブルＴ１０を読出し（S８１）、キャッシュメモリ１２０内に管理テーブルＴ１０を再構築する（S８２）。以下、図１０及び図１１で述べたと同様に、コントローラ１００は、変換処理を実行する。
【０１２０】
図１５は、変換処理中のコマンド処理を示すフローチャートである。変換処理中に、コントローラ１００が、ホスト２０からライトコマンドやリードコマンドを受信すると（S９０）、コントローラ１００は、そのコマンドで指定されている論理アドレスADRを検出し（S９１）、そのアドレスADRと変換済領域Ａ２の最終アドレスＰｅとを比較する（S９２）。
【０１２１】
コマンドで指定されたアドレスADRが最終アドレスＰｅよりも大きい場合（S９２:YES）、コントローラ１００は、未変換領域Ａ１内のデータを用いて、ホスト２０から受信したコマンドを処理する（S９３）。これに対し、コマンドで指定されたアドレスADRが、最終アドレスＰｅ以下の場合（S９２:NO）、コントローラ１００は、変換済領域Ａ２内のデータを用いて、そのコマンドを処理する（S９４）。コマンドの処理結果は、ホストインターフェース１５０及び通信ネットワークCN１を介して、ホスト２０に送信される。
【０１２２】
本実施例は以下の効果を奏する。本実施例では、拡張したい容量分のディスクドライブ２１０を旧RAIDグループに追加するだけで、RAIDグループを簡単に拡張させることができる。本実施例では、ディスクドライブ２１０からキャッシュメモリ１２０へのデータ転送（リード処理）と、キャッシュメモリ１２０からディスクドライブ２１０へのデータ転送（ライト処理）とを非同期に実行するため、変換処理を高速に行うことができる。
【０１２３】
本実施例では、変換済領域Ａ２の最終アドレスＰｅと未変換領域Ａ１の先頭アドレスＰｓとを、フラッシュメモリ１４０に記憶させる。従って、停電等の障害が生じた場合でも、フラッシュメモリ１４０に退避された各アドレスＰｅ，Ｐｓを用いて、中断された変換処理を再開させることができる。
【０１２４】
本実施例では、退避されている先頭アドレスＰｓと最新の最終アドレスＰｅとが一致した場合に、最新の各アドレスＰｅ，Ｐｓをフラッシュメモリ１４０に記憶させる。従って、変換処理中における、フラッシュメモリ１４０へのアクセス頻度を大幅に低下させることができ、変換処理の速度低下を抑制できる。
【０１２５】
本実施例では、変換処理の再開前に、変換領域Ａ２内のデータが正しいデータであるか否かを検査し、誤ったデータはフリー領域Ａ３内のデータを用いて修復する。従って、変換処理を正しく再開させることができる。
【０１２６】
本実施例では、新RAID構成のデータをフリー領域Ａ３に書き込む前に、上書きされるデータが、デステージされているか否かを確認する。これにより、変換済領域Ａ２内のデータがディスクドライブ２１０に書き込まれるまで、フリー領域Ａ３内のデータを保護することができる。従って、フリー領域Ａ３内のデータを用いて、変換領域Ａ２内のエラーを修復できる。
【実施例２】
【０１２７】
図１６に基づいて第２実施例を説明する。本実施例は第１実施例の変形例に相当するため、第１実施例との相違点を中心に説明する。本実施例では、変換処理の進捗状況を管理端末３０に通知する。
【０１２８】
図１６は、変換状況を監視する処理を示すフローチャートである。コントローラ１００は、変換処理中であるか否かを判定する（S１００）。変換処理中の場合（S１００:YES）、コントローラ１００は、未変換領域の先頭アドレスＰｓと新RAIDグループの記憶容量とに基づいて、変換処理の進捗率を算出する（S１０１）。
【０１２９】
さらに、コントローラ１００は、変換処理が中断されて再開された場合に、その修復状況を検出する（S１０２）。そして、コントローラ１００は、変換処理の進捗率と修復状況とを、管理端末３０に通知する（S１０３）。管理端末３０は、コントローラ１００から受信した進捗率や修復状況を、端末画面に表示させる（S１０４）。
【０１３０】
このように構成される本実施例も第１実施例と同様の効果を奏する。さらに、本実施例では、変換処理の進捗率と修復状況とを監視して管理端末３０に通知するため、ユーザの使い勝手が向上する。
【０１３１】
なお、本発明は、上述した実施の形態に限定されない。当業者であれば、本発明の範囲内で、種々の追加や変更等を行うことができる。例えば、コントローラ１００とHDU２００とは、同一筐体に設けられる必要は必ずしも無く、それぞれ別々の筐体に設けることもできる。また、コントローラ１００とHDU２００とを、別々のサイトに設けてもよい。
【０１３２】
さらに、各アドレスＰｅ，Ｐｓ等を退避させるための第２メモリは、フラッシュメモリ１４０に限らず、ディスクドライブ等の他の不揮発性記憶装置を用いてもよい。また、第２メモリは、コントローラ１００の外部（例えば、管理端末３０内）に設けてもよい。
【図面の簡単な説明】
【０１３３】
【図１】本発明の実施形態の概念を示す説明図である。
【図２】ストレージシステムの全体構成図である。
【図３】RAIDグループの拡張を管理するためのテーブルを示す説明図である。
【図４】RAIDグループの拡張を単純化して示す説明図である。
【図５】RAIDグループの記憶領域に形成される、それぞれ属性の異なる複数の領域を示す説明図である。
【図６】RAIDグループを拡張するために旧RAID構成のデータが新RAID構成のデータに変換されて再配置される様子を示す説明図である。
【図７】ストレージシステムの全体的な動作を示す説明図である。
【図８】新RAIDグループを設定する処理を示すフローチャートである。
【図９】停電等で中断された変換処理を再開する場合の様子を示す説明図である。
【図１０】変換処理を示すフローチャートである。
【図１１】図１０に続くフローチャートである。
【図１２】障害検出処理を示すフローチャートである。
【図１３】検査及びデータを修復させる処理を示すフローチャートである。
【図１４】変換処理を再開する場合のフローチャートである。
【図１５】変換中のコマンドを処理するフローチャートである。
【図１６】第２実施例に係り、変換状況を監視する処理を示すフローチャートである。
【符号の説明】
【０１３４】
１：記憶制御装置、２：ディスクドライブ、３：キャッシュメモリ、４：フラッシュメモリ、５：変換部、６：アドレス管理部、７：検査部、８：修復部、１０：記憶制御システム、２０：ホストコンピュータ、３０：管理端末、１００：コントローラ、１１０：CPU、１２０：キャッシュメモリ、１３０：メモリ、１４０：フラッシュメモリ、１５０：ホストインターフェース、１６０：ドライブインターフェース、１７０：管理インターフェース、２００：HDU、２１０：ディスクドライブ、２２０：RAIDグループ、２３０：論理ボリューム、Ｔ１０：管理テーブル、Ｐｅ：変換済領域の最終アドレス、Ｐｓ：未変換領域の先頭アドレス
【図１】
2010066832.tif 000003
【図２】
2010066832.tif 000004
【図３】
2010066832.tif 000005
【図４】
2010066832.tif 000006
【図５】
2010066832.tif 000007
【図６】
2010066832.tif 000008
【図７】
2010066832.tif 000009
【図８】
2010066832.tif 000010
【図９】
2010066832.tif 000011
【図１０】
2010066832.tif 000012
【図１１】
2010066832.tif 000013
【図１２】
2010066832.tif 000014
【図１３】
2010066832.tif 000015
【図１４】
2010066832.tif 000016
【図１５】
2010066832.tif 000017
【図１６】
2010066832.tif 000018