(57)【要約】【課題】少なくとも無効な論理アドレスに対するデータを移動することなしにレイドレベル変更を実現する。【解決手段】制御装置１は、ディスク装置２４を追加してディスクアレイ２のレイドレベルを変更する処理で、レイドレベル変更開始時点のアドレス変換テーブル３２のコピー３５に従って有効な論理アドレスを検索し、その検索した有効な論理アドレスのデータを再構築後の書き込みバッファ３１に詰めて蓄積する。制御装置１は、１ストライプ分の論理ブロックのデータが蓄積された段階で、当該１ストライプ分の論理ブロックと論理アドレスタグブロックとを含む１ストライプ分のデータブロックを、ディスクアレイ２内のディスク装置２１〜２４上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込む。【選択図】　　図１
2004094429.tif 000002
【特許請求の範囲】
【請求項１】
複数のディスク装置から構成されるディスクアレイを備え、論理アドレスから物理アドレスに変換するアドレス変換テーブルを参照して前記ディスクアレイをアクセスするディスクアレイ装置であって、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記アドレス変換テーブルを更新するアドレス変換テーブル更新手段と、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成する手段と、
前記ディスクアレイに書き込むべきデータを一時蓄積するための不揮発性メモリ上に確保された書き込みバッファと、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築する手段と、
前記アドレス変換テーブルのコピーに従って有効な論理アドレスを検索する手段と、
前記検索手段によって検索された有効な論理アドレスに対応する物理アドレスのデータブロックが含まれる物理ストライプを前記ディスクアレイから読み込む手段と、
前記読み込み手段により読み込まれた物理ストライプ中の有効な論理アドレスに対応する論理ブロックのデータを前記レイドレベル変更後の書き込みバッファに詰めて蓄積する手段と、
前記レイドレベル変更後の書き込みバッファに前記レイドレベル変更後のストライプサイズに対応した１ストライプ分の論理ブロックのデータが蓄積された段階で、当該１ストライプ分の論理ブロックに対する論理アドレスを含む論理アドレスタグブロックを生成する手段と、
前記論理アドレスタグブロック生成手段によって生成された論理アドレスタグブロックと当該論理アドレスタグブロックに対応する前記１ストライプ分の論理ブロックとを含む１ストライプ分のデータブロックを、前記ディスクアレイ内の前記複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込む手段とを具備することを特徴とするディスクアレイ装置。
【請求項２】
前記検索手段は、前記アドレス変換テーブルのコピーに従って論理アドレスの順番に有効な論理アドレスを検索することを特徴とする請求項１記載のディスクアレイ装置。
【請求項３】
複数のディスク装置から構成されるディスクアレイを備え、ホストコンピュータからの書き込み要求の指定するデータをブロック単位に分割して不揮発性メモリ上に確保された書き込みバッファに詰めて蓄積し、当該バッファに１ストライプ分の論理ブロック数のデータが蓄積された段階で、当該１ストライプ分の論理ブロックと、当該１ストライプ分の各論理ブロックに対する論理アドレス、及び時刻情報を含むタイムスタンプ情報から構成される論理アドレスタグブロックと、当該１ストライプ分の論理ブロック及び当該論理アドレスタグブロックに対するパリティデータであるパリティブロックとを含む１ストライプ分のデータブロックが、レイドレベルを構成する前記ディスクアレイ内の前記複数のディスク装置の台数に対応したストライピングルールに従って、当該複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込まれるディスクアレイ装置であって、
前記ホストコンピュータからの論理アドレスを前記ディスクアレイの物理アドレスに変換するためのアドレス変換情報、及び当該アドレス変換情報の登録または更新時の時刻情報の組が記憶されたアドレス変換テーブルと、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記アドレス変換テーブル内の対応するアドレス変換情報及び時刻情報を更新するアドレス変換テーブル更新手段と、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成する手段と、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築する手段と、
前記レイドレベル変更後のアドレス変換テーブルを、レイドレベル変更後に使用されるアドレス変換テーブルに再構築する手段と、
前記レイドレベル変更前のアドレス変換テーブルのコピーに従って、前記ディスクアレイ内の空きストライプを検索し、レイドレベル変更後のストライピングルールに従って当該空きストライプ中の前記論理アドレスタグブロックの位置を特定することで、当該論理アドレスタグブロックを初期化する手段と、
前記ディスクアレイのレイドレベル変更の終了時の時刻情報を含むタイムスタンプ情報を、前記ディスクアレイ内の、データを記録する領域とは別に確保された特別な領域に記録する手段と
を具備することを特徴とするディスクアレイ装置。
【請求項４】
前記レイドレベル変更後の前記ディスクアレイ中の物理ストライプについて、前記アドレス変換テーブルに当該物理ストライプに対応するアドレス変換情報と組をなして記憶された前記時刻情報を、前記特別な領域に記録されている前記タイムスタンプ情報に含まれている時刻情報と比較することで、当該ストライプがレイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかを判定するストライプ判定手段を更に具備することを特徴とする請求項３記載のディスクアレイ装置。
【請求項５】
前記ストライプ判定手段によりレイドレベル変更前の有効な物理ストライプであると判定された、ストライプ統合の対象となる物理ストライプを前記ディスクアレイから読み込む手段と、
前記読み込み手段により読み込まれた前記ストライプ統合の対象となる物理ストライプ中の前記論理アドレスタグブロックに含まれている各論理アドレス毎に、当該論理アドレスに対応するアドレス変換情報と組をなして前記再構築されたアドレス変換テーブルに記憶された時刻情報を、当該論理アドレスタグブロックに含まれている時刻情報と比較することで、当該論理アドレスに対応する前記物理ストライプ中の論理ブロックが無効であるか或いは有効であるかを判定するブロック判定手段と、
前記ストライプ統合の対象となる複数の物理ストライプ中の論理ブロックのうちの、前記ブロック判定手段により有効であると判定された論理ブロックを含む、前記レイドレベル変更後の１ストライプ分の論理ブロックのデータを前記書き込みバッファに蓄積する手段と、
前記ブロック判定手段により有効であると判定された論理ブロックを含む前記レイドレベル変更後の１ストライプ分の論理ブロックのデータが前記書き込みバッファに蓄積された段階で、当該１ストライプ分の論理ブロックと、当該１ストライプ分の論理ブロックに対する論理アドレス、及びその時点の時刻情報を含むタイムスタンプ情報から構成される論理アドレスタグブロックと、当該１ストライプ分の論理ブロック及び当該論理アドレスタグブロックに対するパリティブロックとを含む１ストライプ分のデータブロックを、前記レイドレベル変更後のストライピングルールに従って、前記ディスクアレイ内の前記複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込むことでストライプ統合を実行するストライプ統合手段とを更に具備することを特徴とする請求項４記載のディスクアレイ装置。
【請求項６】
前記ディスクアレイ中の各物理ストライプ毎に、当該物理ストライプがレイドレベル変更後の有効な物理ストライプであると仮定して、当該ストライプから前記レイドレベル変更後のストライピングルールに従って論理アドレスタグブロックを読み込む手段と、
前記読み込み手段により読み込まれた論理アドレスタグブロックのうちの、前記レイドレベル変更後のストライピングルールに従って初期化された論理アドレスタグブロック以外の各論理アドレスタグブロックについて、当該論理アドレスタグブロックに含まれている時刻情報を、前記特別な領域に記録されている前記タイムスタンプ情報に含まれている時刻情報と比較することで、対応する前記物理ストライプがレイドレベル変更後の有効な物理ストライプであるか、或いはレイドレベル変更前の有効な物理ストライプであるかを判定するストライプ判定手段
とを更に具備することを特徴とする請求項３記載のディスクアレイ装置。
【請求項７】
前記アドレス変換テーブルが使用不可能な状態となった場合に、初期化された新たなアドレス変換テーブルを生成する手段と、
前記ディスクアレイの各物理ストライプのうち、前記レイドレベル変更後のストライピングルールに従って初期化された論理アドレスタグブロックを含む空きストライプ以外の有効な物理ストライプから、有効な論理アドレスタグブロックを検出する手段と、
前記検出手段により検出された論理アドレスタグブロックに含まれている各論理アドレス毎に、当該論理アドレスに対応するアドレス変換情報と組をなして前記新たなアドレス変換テーブルに記憶された時刻情報を、当該論理アドレスタグブロックに含まれている時刻情報と比較することで、当該アドレス変換情報が有効であるか或いは無効であるかを判定するアドレス変換情報判定手段と
を更に具備し、
前記アドレス変換テーブル更新手段は、前記アドレス変換情報判定手段により前記アドレス変換情報が無効であると判定された場合に、前記新たなアドレス変換テーブル内の当該アドレス変換情報及び時刻情報を更新する
ことを特徴とする請求項３記載のディスクアレイ装置。
【請求項８】
前記論理アドレスタグブロック検出手段は、
前記ディスクアレイ中の各物理ストライプ毎に、当該物理ストライプがレイドレベル変更後の有効な物理ストライプであると仮定して、当該ストライプから前記レイドレベル変更後のストライピングルールに従って論理アドレスタグブロックを読み込む第１の論理アドレスタグブロック読み込み手段と、
前記第１の論理アドレスタグブロック読み込み手段により読み込まれた論理アドレスタグブロックのうちの、前記レイドレベル変更後のストライピングルールに従って初期化された論理アドレスタグブロック以外の各論理アドレスタグブロックについて、当該論理アドレスタグブロックに含まれている時刻情報を、前記特別な領域に記録されている前記タイムスタンプ情報に含まれている時刻情報と比較することで、対応する前記物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が正しかったか或いは誤っていたかを判定する手段と、
前記物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が誤っていたと判定された場合、当該物理ストライプから前記レイドレベル変更前のストライピングルールに従って論理アドレスタグブロックを読み込む第２の論理アドレスタグブロック読み込み手段と、
前記物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が正しかったと判定された場合には、当該物理アドレスから前記第１の論理アドレスタグブロック読み込み手段により読み込まれた論理アドレスタグブロックを採用し、前記物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が誤っていたと判定された場合には、当該物理アドレスから前記第２の論理アドレスタグブロック読み込み手段により読み込まれた論理アドレスタグブロックを採用する手段と
を含むことを特徴とする請求項７記載のディスクアレイ装置。
【請求項９】
前記ディスクアレイを構成する前記複数のディスク装置のいずれか１つが故障して、当該故障したディスク装置に代えて予備のディスク装置を用いて前記ディスクアレイを再構築する場合に、前記再構築されたアドレス変換テーブル内の各アドレス変換情報を参照することで、前記故障ディスク装置上に存在する物理ブロックに割り当てられていた有効な論理アドレスを検索する手段と、
前記検索手段により検索された各論理アドレス毎に、当該論理アドレスに対応するアドレス変換情報と組をなして前記再構築されたアドレス変換テーブルに記憶された時刻情報を、前記特別な領域に記録されている前記タイムスタンプ情報に含まれている時刻情報と比較することで、当該論理アドレスに対応する物理ストライプがレイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかを判定するストライプ判定手段と、
前記検索手段により検索された各論理アドレス毎に、前記ストライプ判定手段の判定結果に応じて、対応するデータをレイドレベル変更前またはレイドレベル変更後のストライピングルールに従って復旧する手段と
を更に具備することを特徴とする請求項３記載のディスクアレイ装置。
【請求項１０】
複数のディスク装置から構成されるディスクアレイを備え、ホストコンピュータからの書き込み要求の指定するデータをブロック単位に分割して不揮発性メモリ上に確保された書き込みバッファに詰めて蓄積し、当該バッファに１ストライプ分の論理ブロック数のデータが蓄積された段階で、当該１ストライプ分の論理ブロックと、当該１ストライプ分の各論理ブロックに対する論理アドレスを含む論理アドレスタグ、並びに時刻情報及びレイドレベル変更回数を示す世代番号を含むタイムスタンプ情報であって、当該タイムスタンプ情報のチェックサムが付加されたタイムスタンプ情報から構成される論理アドレスタグブロックと、当該１ストライプ分の論理ブロック及び当該論理アドレスタグブロックに対するパリティデータであるパリティブロックとを含む１ストライプ分のデータブロックが、レイドレベルを構成する前記ディスクアレイ内の前記複数のディスク装置の台数に対応したストライピングルールに従って、当該複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込まれるディスクアレイ装置であって、
前記ホストコンピュータからの論理アドレスを前記ディスクアレイの物理アドレスに変換するためのアドレス変換情報、及び当該アドレス変換情報の登録または更新時の時刻情報の組が記憶されたアドレス変換テーブルと、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記アドレス変換テーブル内の対応するアドレス変換情報及び時刻情報を更新するアドレス変換テーブル更新手段と、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成する手段と、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築する手段と、
前記レイドレベル変更前のアドレス変換テーブルを、レイドレベル変更後に使用されるアドレス変換テーブルに再構築する手段と、
前記ディスクアレイのレイドレベル変更の終了時の時刻情報、及び世代番号を含むタイムスタンプ情報を、前記ディスクアレイ内の、データを記録する領域とは別に確保された特別な領域に記録する手段と
を具備することを特徴とするディスクアレイ装置。
【請求項１１】
前記ディスクアレイ中の各物理ストライプから、前記特別な領域に記録されている前記タイムスタンプ情報に含まれている前記世代番号に対応するレイドレベル変更で再構築されたディスクアレイを構成するディスク装置の台数と、当該物理ストライプの物理ストライプ番号とをもとに、前記論理アドレスタグブロックを読み込む手段と、
前記論理アドレスタグブロック読み込み手段により前記論理アドレスタグブロックが読み込まれる毎に、当該論理アドレスタグブロックに含まれている前記論理アドレスタグ及びタイムスタンプ情報のチェックサムを算出する手段と、
前記論理アドレスタグブロック読み込み手段により前記論理アドレスタグブロックが読み込まれる毎に、当該論理アドレスタグブロックに含まれているチェックサムと、当該論理アドレスタグブロックをもとに前記チェックサム算出手段により算出されたチェックサムとを比較し、その比較結果に応じて当該論理アドレスタグブロックが有効であるか、或いは無効であるかを判定することで、有効な論理アドレスタグブロックを検出する手段と、
前記検出手段により前記論理アドレスタグブロックが無効であると判定された場合、前記世代番号を１世代前の番号に変更し、その変更後の世代番号を用いて、前記論理アドレスタグブロック読み込み手段による当該論理アドレスタグブロックに対応する前記物理ストライプからの再度の論理アドレスタグブロック読み込みを行わせる手段と
を更に具備することを特徴とする請求項１０記載のディスクアレイ装置。
【請求項１２】
前記ディスクアレイのレイドレベル変更に際し、前記書き込みバッファにデータが蓄積されているならば、当該バッファにレイドレベル変更前のストライプサイズの１ストライプ分の論理ブロックが蓄積されたとして、当該バッファに蓄積されているデータを含む１ストライプ分のデータブロックを生成して、前記ディスクアレイに強制的に書き込む強制書き込み手段を更に具備することを特徴とする請求項１または請求項３記載のディスクアレイ装置。
【請求項１３】
複数のディスク装置から構成されるディスクアレイを備え、論理アドレスから物理アドレスに変換するアドレス変換テーブルを参照して前記ディスクアレイをアクセスするディスクアレイ装置であって、
前記ディスクアレイへのデータ書き込み時に、前記アドレス変換テーブルを更新するアドレス変換テーブル更新手段と、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成する手段と、
前記アドレス変換テーブルのコピーに従って有効な論理アドレス及び当該論理アドレスに対応する物理アドレスを検索する手段と、
前記検索手段によって検索された有効な論理アドレスに対応する物理アドレスのデータブロックを前記ディスクアレイから読み込む手段と、
前記読み込み手段により読み込まれたデータブロックを、当該デブに対応する前記有効な論理アドレスに一致する物理アドレスで指定される前記ディスクアレイの領域に書き込む手段とを具備することを特徴とするディスクアレイ装置。
【請求項１４】
複数のディスク装置から構成されるディスクアレイを備え、ホストコンピュータからの書き込み要求の指定するデータをブロック単位に分割して不揮発性メモリ上に確保された書き込みバッファに詰めて蓄積し、当該バッファに１ストライプ分の論理ブロック数のデータが蓄積された段階で、当該１ストライプ分の論理ブロックと当該１ストライプ分の論理ブロックに対する論理アドレスを含む論理アドレスタグブロックとを含む１ストライプ分のデータブロックが、前記ディスクアレイ内の前記複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込まれ、論理アドレスから物理アドレスに変換するアドレス変換テーブルを参照して前記ディスクアレイをアクセスするディスクアレイ装置におけるレイドレベル変更方法であって、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記アドレス変換テーブルを更新するステップと、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成するステップと、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築するステップと、
前記アドレス変換テーブルのコピーに従って有効な論理アドレスを検索するステップと、
前記検索ステップで検索された有効な論理アドレスに対応する物理アドレスのデータブロックが含まれる物理ストライプを前記ディスクアレイから読み込むステップと、
前記読み込みステップで読み込まれた物理ストライプ中の有効な論理アドレスに対応する論理ブロックのデータを前記再構築後の書き込みバッファに詰めて蓄積するステップと、
前記再構築後の書き込みバッファに前記レイドレベル変更後のストライプサイズに対応した１ストライプ分の論理ブロックのデータが蓄積された段階で、当該１ストライプ分の論理ブロックに対する論理アドレスを含む論理アドレスタグブロックを生成するステップと、
前記生成された論理アドレスタグブロックと当該論理アドレスタグブロックに対応する前記１ストライプ分の論理ブロックとを含む１ストライプ分のデータブロックを、前記ディスクアレイ内の前記複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込むステップと
を具備することを特徴とするディスクアレイ装置におけるレイドレベル変更方法。
【請求項１５】
複数のディスク装置から構成されるディスクアレイを備え、ホストコンピュータからの書き込み要求の指定するデータをブロック単位に分割して不揮発性メモリ上に確保された書き込みバッファに詰めて蓄積し、当該バッファに１ストライプ分の論理ブロック数のデータが蓄積された段階で、当該１ストライプ分の論理ブロックと、当該１ストライプ分の各論理ブロックに対する論理アドレス及び時刻情報を含むタイムスタンプ情報から構成される論理アドレスタグブロックと、当該１ストライプ分の論理ブロック、及び当該論理アドレスタグブロックに対するパリティデータであるパリティブロックとを含む１ストライプ分のデータブロックが、レイドレベルを構成する前記ディスクアレイ内の前記複数のディスク装置の台数に対応したストライピングルールに従って、当該複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込まれるディスクアレイ装置におけるレイドレベル変更方法であって、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記ホストコンピュータからの論理アドレスを前記ディスクアレイの物理アドレスに変換するためのアドレス変換情報、及び当該アドレス変換情報の登録または更新時の時刻情報の組が記憶されたアドレス変換テーブルを更新するステップと
前記ディスクアレイにディスク装置を追加して当該ディスクアレイの記憶容量を拡張する場合に、前記アドレス変換テーブルのコピーを生成するステップと、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築するステップと、
前記レイドレベル変更前のアドレス変換テーブルを、レイドレベル変更後に使用されるアドレス変換テーブルに再構築するステップと、
前記アドレス変換テーブルのコピーに従って、前記ディスクアレイ内の空きストライプを検索し、レイドレベル変更後のストライピングルールに従って当該空きストライプ中の前記論理アドレスタグブロックの位置を特定することで、当該論理アドレスタグブロックを初期化するステップと、
前記ディスクアレイのレイドレベル変更の終了時の時刻情報を含むタイムスタンプ情報を、前記ディスクアレイ内の、データを記録する領域とは別に確保された特別な領域に記録するステップと
を具備することを特徴とするディスクアレイ装置におけるレイドレベル変更方法。
【請求項１６】
複数のディスク装置から構成されるディスクアレイを備え、ホストコンピュータからの書き込み要求の指定するデータをブロック単位に分割して不揮発性メモリ上に確保された書き込みバッファに詰めて蓄積し、当該バッファに１ストライプ分の論理ブロック数のデータが蓄積された段階で、当該１ストライプ分の論理ブロックと、当該１ストライプ分の各論理ブロックに対する論理アドレスを含む論理アドレスタグ、並びに時刻情報及びレイドレベル変更回数を示す世代番号を含むタイムスタンプ情報であって、当該タイムスタンプ情報のチェックサムが付加されたタイムスタンプ情報から構成される論理アドレスタグブロックと、当該１ストライプ分の論理ブロック及び当該論理アドレスタグブロックに対するパリティデータであるパリティブロックとを含む１ストライプ分のデータブロックが、レイドレベルを構成する前記ディスクアレイ内の前記複数のディスク装置の台数に対応したストライピングルールに従って、当該複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込まれるディスクアレイ装置におけるレイドレベル変更方法であって、
前記ディスクアレイへの１ストライプ単位の書き込み時に、前記ホストコンピュータからの論理アドレスを前記ディスクアレイの物理アドレスに変換するためのアドレス変換情報、及び当該アドレス変換情報の登録または更新時の時刻情報の組が記憶されたアドレス変換テーブル内の対応するアドレス変換情報及び時刻情報を更新するステップと、
前記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の前記アドレス変換テーブルのコピーを生成するステップと、
前記不揮発性メモリ上の前記書き込みバッファを前記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築するステップと、
前記レイドレベル変更前のアドレス変換テーブルを、レイドレベル変更後に使用されるアドレス変換テーブルに再構築するステップと、
前記ディスクアレイのレイドレベル変更の終了時の時刻情報、及び世代番号を含むタイムスタンプ情報を、前記ディスクアレイ内の、データを記録する領域とは別に確保された特別な領域に記録するステップと
を具備することを特徴とするディスクアレイ装置におけるレイドレベル変更方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、複数のディスク装置から構成されるディスクアレイを備えたディスクアレイ装置に係り、特にディスクアレイのレイドレベル（ＲＡＩＤレベル）を変更する場合に好適なディスクアレイ装置及び同装置におけるレイドレベル変更方法に関する。
【０００２】
【従来の技術】
従来からログ構造化ファイルシステム（Ｌｏｇ−Ｓｔｒｕｃｔｕｒｅｄ　Ｆｉｌｅ　Ｓｙｓｔｅｍ）と呼ばれるディスク記憶管理方法が知られている。ログ構造化ファイルシステムについては、例えば以下の文献、”Ｔｈｅ　Ｄｅｓｉｇｎ　ａｎｄ　Ｉｍｐｌｅｍｅｎｔａｔｉｏｎ　ｏｆ　ａ　Ｌｏｇ−Ｓｔｒｕｃｔｕｒｅｄ　Ｆｉｌｅ　Ｓｙｓｔｅｍ”，Ｍｅｎｄｅｌ　Ｒｏｓｅｎｂｌｕｍ　ａｎｄ　Ｊｏｈｎ　Ｋ．Ｏｕｓｔｅｒｈｏｕｔ，ＡＣＭ　Ｔｒａｎｓａｃｔｉｏｎ　ｏｎ　Ｃｏｍｐｕｔｅｒ　Ｓｙｓｔｅｍｓ，Ｆｅｂｒｕａｒｙ　１９９２に詳細に記載されている。この文献に記載されたログ構造化ファイルシステムを要約すると、更新後のデータを、複数個まとめて有効なデータが格納されていない別の連続領域に書き込み、更新前に、当該データが格納されていた古い領域を無効にする方法である。
【０００３】
また、米国特許第６，２１９，７５２号公報及び米国特許第６，２３３，６４８号公報には、ログ構造化ファイルシステムをディスクアレイ装置に適用した技術（以下、先行技術と称する）が開示されている。この先行技術においては、ホストコンピュータからのアクセス要求で指定された論理アドレス（ホストコンピュータからみたディスクアレイ上のデータアドレス）を、ディスクアレイにおける物理的なデータの位置を示す物理アドレスに変換するにのにアドレス変換テーブルが用いられる。
【０００４】
また、ログ構造化ファイルシステムを適用していないディスクアレイ装置においてシステムを停止することなくレイドレベルを変更する方式に関する技術が、特開平８−３３５１４６号公報に記載されている。この特開平８−３３５１４６号公報に記載されたレイドレベル変更技術においては、ディスクアレイ装置のレイドレベルを変更するのに、ディスクアレイ装置を構成している領域全体に渡ってデータの移動を行う必要がある。このため、上記レイドレベル変更技術では、アレイを構成するディスク装置の記憶容量に依存してデータの移動に伴う入出力回数が増加するため、レイドレベル変更に要する時間が増大することになる。
【０００５】
一方、特開平７−１４１１２１号公報には、ログ構造化ファイルシステムを適用していないディスクアレイ装置における動的記憶容量拡張の例が記載されている。この特開平７−１４１１２１号公報に記載された技術をレイドレベル変更に適用した場合に、データの再配置中の書き込み位置を記憶することでホストからのＩ／Ｏ（入出力）要求がレイドレベル変更前か後かを判断し、レイドレベル変更が実現できることが類推可能である。この特開平７−１４１１２１号公報に記載された手法では、ディスク装置の増設により、物理アドレスに対する論理アドレスのマッピングを変更する必要があるため、パリティデータ（冗長データ）の再生成とそのパリティデータを含むデータの再配置を実施している。このため、データの再配置に伴うディスク装置への入出力が発生する。しかも、データの再配置に伴うディスク装置への入出力は、ディスク装置の記憶容量に依存する。
【０００６】
【発明が解決しようとする課題】
上記したように、従来のディスクアレイ装置におけるレイドレベル変更では、ディスクアレイ装置を構成している領域全体に渡ってデータの移動を行う必要がある。このため、ディスクアレイを構成するディスク装置の記憶容量に依存して多くの時間が必要となる。
【０００７】
本発明は上記事情を考慮してなされたものでその目的は、ディスクアレイ装置のレイドレベル変更を実施する場合に、少なくとも無効な論理アドレスに対するデータについては移動することなしに動的なレイドレベル変更が実現でき、レイドレベル変更に要する時間を大幅に短縮することができるディスクアレイ装置及び同装置におけるレイドレベル変更方法を提供することにある。
【０００８】
【課題を解決するための手段】
本発明の第１の観点によれば、ログ構造化ファイルシステムを適用するディスクアレイ装置が提供される。このディスクアレイ装置は、ディスクアレイへの１ストライプ単位の書き込み時に、アドレス変換テーブルを更新するアドレス変換テーブル更新手段と、上記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の上記アドレス変換テーブルのコピーを生成する手段と、不揮発性メモリ上に配置される書き込みバッファを上記ディスクアレイのレイドレベル変更後のストライプサイズに対応した大きさに再構築する手段と、上記アドレス変換テーブルのコピーに従って有効な論理アドレスを検索する手段と、この検索手段によって検索された有効な論理アドレスに対応する物理アドレスのデータブロックが含まれる物理ストライプを上記ディスクアレイから読み込む手段と、この読み込み手段により読み込まれた物理ストライプ中の有効な論理アドレスに対応する論理ブロックのデータを上記再構築後の書き込みバッファに詰めて蓄積する手段と、上記再構築後の書き込みバッファにレイドレベル変更後のストライプサイズに対応した１ストライプ分の論理ブロックのデータが蓄積された段階で、当該１ストライプ分の論理ブロックに対する論理アドレスを含む論理アドレスタグブロックを生成する手段と、上記生成された論理アドレスタグブロックと当該論理アドレスタグブロックに対応する１ストライプ分の論理ブロックとを含む１ストライプ分のデータブロックを、上記ディスクアレイ内の複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に書き込む手段とを備えている。
【０００９】
このような構成のディスクアレイ装置においては、ログ構造化ファイルシステムの特徴、つまり、ディスクアレイへの１ストライプ単位の書き込みは、当該ディスクアレイを構成する複数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域内の物理的に連続する領域に対して行われるという特徴に着目し、アドレス変換テーブルのコピーを利用して、ホストコンピュータにより使用されている有効な論理アドレスを検索して、その検索された有効なデータのみをレイドレベル変更後のディスクアレイの空きストライプに連続して書き込むことにより、ディスクアレイのレイドレベル変更を実現している。
【００１０】
これにより、本発明の第１の観点に係るディスクアレイ装置では、ディスクアレイ装置を構成している領域全体に渡ってデータの移動を行う必要がなく、また、レイドレベル変更前のディスクアレイの全データをレイドレベル変更後のディスクアレイに再配置することなく、ディスクアレイのレイドレベルの動的変更が実現でき、レイドレベル変更を短時間で実行できる。しかも、レイドレベル変更開始時点で有効な論理アドレスの論理ブロックが含まれていた物理ストライプには、レイドレベル変更処理を終了した時点では有効な論理アドレスの論理ブロックは含まれなくなって空きストライプとなることから、セグメントクリーニングを実施する必要がない。
【００１１】
ここで、アドレス変換テーブルのコピーを利用した有効な論理アドレスの検索を、論理アドレスの順番に実行するとよい。このようにすると、有効な物理ストライプ中に断片化したデータブロックがなくなり、ストライプ内のフラグメンテーションが回避できる。この結果、レイドレベル変更処理に起因するシーケンシャルアクセスの性能低下を防止できる。
【００１２】
本発明の第２の観点に係るディスクアレイ装置は、上記第１の観点に係るディスクアレイ装置で適用されている論理アドレスタグブロックに相当する論理アドレスタグブロックとして、１ストライプ分の各論理ブロックに対する論理アドレス、及び時刻情報を含むタイムスタンプ情報から構成される論理アドレスタグブロックを適用することを第１の特徴とする。また、本発明の第２の観点に係るディスクアレイ装置は、上記第１の観点に係るディスクアレイ装置で適用されている、レイドレベル変更時点で有効な論理アドレスを全て検索して、その有効な論理アドレスのデータをレイドレベル変更後のディスクアレイに再配置する仕組みの代わりに、レイドレベル変更前のアドレス変換テーブルのコピーに従って、ディスクアレイ内の空きストライプを検索し、レイドレベル変更後のストライピングルールに従って当該空きストライプ中の論理アドレスタグブロックの位置を特定することで、当該論理アドレスタグブロックを初期化する手段と、ディスクアレイのレイドレベル変更の終了時の時刻情報を含むタイムスタンプ情報を、ディスクアレイ内の、データを記録する領域とは別に確保された特別な領域に記録する手段とを備えたことを第２の特徴とする。
【００１３】
本発明の第２の観点に係るディスクアレイ装置においては、レイドレベル変更時点で有効な論理アドレスのデータも再配置の対象とならないため、上記第１の観点に係るディスクアレイ装置に比べて、レイドレベル変更を更に短時間で実行できる。ここで、レイドレベル変更時に空きとなっている物理ストライプ、つまり空きストライプ中の、レイドレベル変更後に１ストライプ分のデータが書き込まれる際に、当該１ストライプ分のデータに含まれている論理アドレスタグブロックが配置されるべき領域は、レイドレベル変更時に初期化される。したがって、レイドレベル変更後に、レイドレベル変更後のストライピングルールで決まる物理ストライプ中の論理アドレスタグブロックの領域が、初期化されたままであるか否かを調べることで、当該ストライプが現在空きストライプであるか、或いは有効な物理ストライプであるかを簡単に判定できる。
【００１４】
また、レイドレベル変更後のディスクアレイ中の物理ストライプについて、アドレス変換テーブルに当該物理ストライプに対応するアドレス変換情報と組をなして記憶された時刻情報を、上記特別な領域に記録されているタイムスタンプ情報に含まれている時刻情報と比較することで、当該ストライプがレイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかをも、簡単に判定できる。これにより、有効な物理ストライプ中の有効な論理アドレスタグブロックを検出できる。また、アドレス変換テーブルを利用して検索される有効な論理アドレスについて、当該論理アドレスに対応するアドレス変換情報と組をなしてアドレス変換テーブルに記憶された時刻情報を、上記特別な領域に記録されているタイムスタンプ情報に含まれている時刻情報と比較することでも、当該論理アドレスに対応する物理ストライプがレイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかを、簡単に判定できる。この判定機能は、レイドレベル変更後に障害が発生したディスク装置のデータを復旧する場合に利用可能である。
【００１５】
また、上記の判定は、アドレス変換テーブルを用いなくても可能である。そのためには、まず、レイドレベル変更後のディスクアレイ中の物理ストライプについて、当該物理ストライプがレイドレベル変更後の有効な物理ストライプであると仮定して、当該ストライプから前記レイドレベル変更後のストライピングルールに従って論理アドレスタグブロックを読み込む。そして、読み込んだ論理アドレスタグブロックのうちの、レイドレベル変更後のストライピングルールに従って初期化された論理アドレスタグブロック以外の各論理アドレスタグブロックについて、当該論理アドレスタグブロックに含まれている時刻情報を、上記特別な領域に記録されているタイムスタンプ情報に含まれている時刻情報と比較することで、対応する物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が正しかったか或いは誤っていたか、つまり対応する物理ストライプがレイドレベル変更後の有効な物理ストライプであるか或いはレイドレベル変更前の有効な物理ストライプであるかを判定する。上記仮定が誤っていた場合、対応する物理ストライプ中の論理アドレスタグブロックは、レイドレベル変更前のストライピングルールに従って検出すればよい。このように、アドレス変換テーブルを用いずに、有効な論理アドレスタグブロックを検出できることから、アドレス変換テーブルが使用不可能な状態になっても、当該テーブルを再構築できる。
【００１６】
本発明の第３の観点に係るディスクアレイ装置は、上記第２の観点に係るディスクアレイ装置で適用されている論理アドレスタグブロックに相当する論理アドレスタグブロックとして、１ストライプ分の各論理ブロックに対する論理アドレスを含む論理アドレスタグ、並びに時刻情報及び世代番号を含むタイムスタンプ情報であって、当該タイムスタンプ情報のチェックサムが付加されたタイムスタンプ情報から構成される論理アドレスタグブロックを適用することを第１の特徴とする。また、本発明の第３の観点に係るディスクアレイ装置は、上記第２の観点に係るディスクアレイ装置で適用されている、ディスクアレイのレイドレベル変更の終了時の時刻情報を含むタイムスタンプ情報を特別な領域に記録する手段に代えて、ディスクアレイのレイドレベル変更の終了時の時刻情報、及び世代番号を含むタイムスタンプ情報を上記特別な領域に記録する手段を備えていることを第２の特徴とする。
【００１７】
本発明の第３の観点に係るディスクアレイ装置においては、レイドレベル変更時に空きストライプ中の論理アドレスタグブロックを初期化する処理が不要なため、上記第２の観点に係るディスクアレイ装置に比べて、レイドレベル変更を更に短時間で実行できる。この第３の観点に係るディスクアレイ装置においては、レイドレベル変更後のディスクアレイ中の物理ストライプが現在空きストライプであるか、或いは有効な物理ストライプであるかを、当該物理ストライプ中の論理アドレスタグブロックが初期化されているか否かにより判定して、有効な物理ストライプから有効な論理アドレスタグブロックを検出することはできない。しかし、第３の観点に係るディスクアレイ装置においては、世代番号を利用して、物理ストライプ中の論理アドレスタグブロックの位置を特定すると共に、特定した論理アドレスタグブロックに含まれているチェックサムと、当該論理アドレスタグブロックをもとに算出されるチェックサムとを利用して、当該論理アドレスタグブロックが有効であるか、或いは無効であるかを簡単に判定可能である。
【００１８】
本発明の第３の観点に係るディスクアレイ装置は、少なくともレイドレベル変更後にはログ構造化ファイルシステムを適用しないディスクアレイ装置、即ち論理アドレスに一致する物理アドレスの位置に当該論理アドレスのデータが書き込まれるディスクアレイ装置であり、ディスクアレイへのデータ書き込み時に、アドレス変換テーブルを更新するアドレス変換テーブル更新手段と、上記ディスクアレイのレイドレベルを変更する場合に、レイドレベル変更前の上記アドレス変換テーブルのコピーを生成する手段と、上記アドレス変換テーブルのコピーに従って有効な論理アドレス及び当該論理アドレスに対応する物理アドレスを検索する手段と、この検索手段によって検索された有効な論理アドレスに対応する物理アドレスのデータブロックを上記ディスクアレイから読み込む手段と、この読み込み手段により読み込まれたデータブロックを、当該データブロックに対応する上記有効な論理アドレスに一致する物理アドレスで指定されるディスクアレイの領域に書き込む手段とから構成される。
【００１９】
このように、少なくともレイドレベル変更後にはログ構造化ファイルシステムを適用しないディスクアレイ装置であっても、レイドレベル変更を実施する場合に、アドレス変換テーブルを利用して、有効な論理アドレスのデータだけを、その論理アドレスに一致する物理アドレスに移動することにより、少なくとも無効な論理アドレスに対するデータについては移動することなしにレイドレベル変更が実現できるため、レイドレベル変更に要する時間を大幅に短縮できる。
【００２０】
なお、以上のディスクアレイ装置に係る本発明は、ディスクアレイを制御する制御装置（ディスクアレイコントローラ）に係る発明としても、ディスクアレイ装置におけるレイドレベル変更方法に係る発明としても成立する。
【００２１】
また、本発明は、コンピュータに当該発明に相当する手順を実行させるためのプログラムに係る発明としても成立する。
【００２２】
【発明の実施の形態】
以下、本発明の実施の形態につき図面を参照して説明する。
図１は、本発明の一実施形態に係るログ構造化ファイルシステムを適用するディスクアレイ装置を備えたコンピュータシステムの構成を示すブロック図である。
【００２３】
図１において、ディスクアレイ装置は、制御装置１と、当該制御装置１に接続されたディスクアレイ２と、当該制御装置１に接続された不揮発性メモリ３と、当該制御装置１に接続された揮発性メモリ４とから構成される。
【００２４】
ディスクアレイ２は、複数のディスク装置、例えば３台のディスク装置２１，２２，２３から構成される。ディスクアレイ２は、ディスク装置２１，２２，２３のいずれか１台が故障しても、その故障したディスク装置のデータの復旧（復元）が可能なように、冗長化ディスク構成を適用している。ここでは、説明を簡略化するために、ディスクアレイ２がＲＡＩＤ４の冗長化ディスク構成を適用しており、ディスク装置２１〜２３のうちの特定の１台、例えばディスク装置２３がパリティデータを格納するパリティディスク装置として割り当てられているものとする。また、図１の例では、ディスクアレイ２に、ディスク装置２４が追加ディスク装置として新たに追加される状態が示されている。このディスク装置２４が追加された後は、ディスクアレイ２は４台のディスク装置２１〜２４から構成されることになる。
【００２５】
制御装置１は、ディスクアレイ２を制御するコントローラ（ディスクアレイコントローラ）であり、ホストコンピュータ１０と接続されている。ディスクアレイ２は、ホストコンピュータ１０からは１つの論理的なディスク装置としてみえる。ホストコンピュータ１０と制御装置１とのインターフェースには、例えばＳＣＳＩ（Ｓｍａｌｌ　Ｃｏｍｐｕｔｅｒ　Ｓｙｓｔｅｍ　Ｉｎｔｅｒｆａｃｅ）、或いはＰＣＩバス（Ｐｅｒｉｐｈｅｒａｌ　Ｃｏｍｐｏｎｅｎｔ　Ｉｎｔｅｒｃｏｎｎｅｃｔ　Ｂｕｓ）等が適用可能である。
【００２６】
なお、本実施形態では、図１に示す構成を中心として説明するが、当該技術分野に属する熟練者にとって、それらの詳しい細部の説明がなくても、図１に示す構成から派生する他のコンピュータシステムの構成であっても、本発明を実施できることは明らかである。例えば、制御装置１を実現するのに、特開２０００−１０７３８号公報の第２５頁右欄の段落００４２〜００４５に記載されたディスクアレイコントローラの実現方法を適用することも可能である。
【００２７】
ここで、図１の構成の詳細な説明の前に、本実施形態の説明で用いる用語について説明する。
ａ）論理ブロック
論理ブロックとは、ホストコンピュータ１０からみたデータブロック、更に詳細に述べるならば、ホストコンピュータ１０からみたディスクアレイ２における論理的なディスク領域上のデータブロックを示す。
ｂ）物理ブロック
物理ブロックとは、ディスクアレイ２上の物理的なブロック、更に詳細に述べるならば、ディスクアレイ２における物理的なディスク領域上のデータブロックを示す。データブロック（論理ブロック、物理ブロック）のサイズは予め定められており、一定である。
【００２８】
ｃ）論理アドレス
論理アドレスとは、ホストコンピュータ１０からみたディスクアレイ（ディスク装置）２上のデータアドレスを示す。ここでは、論理アドレスは、ディスクアレイ２における論理的なディスク領域上のデータブロックの位置、つまり論理ブロックの位置を示す論理ブロックアドレスとして用いられる。
【００２９】
ｄ）物理アドレス
物理アドレスとは、ディスクアレイ２上のデータ（データブロック）の物理的位置を示すために使用する。ここでは、物理アドレスは、ディスクアレイ２（を構成するディスク装置）上のデータブロックの物理的位置、つまり物理ブロックの位置を示す物理ブロックアドレスであり、後述する物理ストライプ番号と物理ブロック番号とから構成される。
【００３０】
ｅ）論理アドレスタグ
論理アドレスタグとは、各論理ブロックに対する論理アドレスからなる情報群を示す。
ｆ）パリティブロック
パリティブロックとは、複数の論理ブロックに対応する冗長データを格納するためのデータブロックを意味する。
ｇ）論理アドレスタグブロック
論理アドレスタグブロックとは、論理アドレスタグとタイムスタンプ情報からならデータブロックを意味する。タイムスタンプ情報については後述する。
【００３１】
ｈ）論理ブロック番号
論理ブロック番号とは、ホストコンピュータからみたディスクアレイ２上のデータブロックの番号を示す。
ｉ）物理ブロック番号
物理ブロック番号とは、ディスクアレイ２上の後述する物理ストライプ内のデータブロックの相対位置を示す番号であり、ディスクアレイ２を構成するディスク装置に固有の番号である。
【００３２】
不揮発性メモリ３には、書き込みバッファ３１、アドレス変換テーブル３２、タイムスタンプ情報３３、及びバッファ管理テーブル３４が配置される。また不揮発性メモリ３には、アドレス変換テーブル３２のコピー３５、及び後述するソート後のアドレス変換テーブル３６が適宜配置される。書き込みバッファ３１は、ディスクアレイ２に書き込むデータをログ構造化して保持するのに用いられる。アドレス変換テーブル３２は、ホストコンピュータ１０からみたディスクアレイ（ディスク装置）２上のデータアドレス（データブロックアドレス）、つまり論理アドレス（論理ブロックアドレス）を、ディスクアレイ２における物理的なデータ（データブロック）の位置を示すアドレス、つまり物理アドレス（物理ブロックアドレス）に変換するのに用いられる変換マップである。タイムスタンプ情報３３は、主として書き込みの時間的順序を維持するのに用いられる。このタイムスタンプ情報３３は、１ストライプ分のデータの書き込みを実行した時点またはディスクアレイ２のレイドレベル変更時点での時刻を示す時刻情報としてのタイムスタンプと、レイドレベル変更時に更新されるストライプ世代番号と、ディスクアレイ２を構成するディスク装置の数（ディスク台数）とを含む。バッファ管理テーブル３４は、書き込みバッファ３１内の空き領域の情報及び当該バッファ３１に保持されている書き込データの論理アドレスの情報を保持するのに用いられる。アドレス変換テーブル３２のコピー３５は、ディスクアレイ２のレイドレベルを変更する処理で生成される。
【００３３】
揮発性メモリ４には、本発明の実施形態における第２の変形例で使用される、後述するストライプテーブル４１が配置される。
【００３４】
ディスクアレイ２を構成する各ディスク装置２１〜２３では、それぞれデータブロックのサイズ（ブロックサイズ）の整数倍（ここでは、Ｋ倍とする、但しＫは１以上の整数）である予め決められた単位、つまりＫブロック単位（以下、ストライプユニットと称する）で書き込みが行われる。ここで、ディスク装置２１〜２３の物理的に同じ位置のストライプユニットは、１つのストライプを構成するストライプユニットとして、同じタイミングで書き込みが行われる。
【００３５】
明らかなように、１ストライプ（物理ストライプ）を構成するデータブロック（つまり１ストライプ分のデータブロック）の数は、ディスクアレイ２を構成するディスク装置の台数をＮ、１ストライプユニットのデータブロック数をＫとすると、Ｎ×Ｋで表される。つまり１ストライプは、Ｎ×Ｋ個のデータブロックから構成される。更に詳細に述べるならば、１ストライプは、ディスクアレイ２を、パリティデータの生成が不要なＲＡＩＤ０，ＲＡＩＤ１，ＲＡＩＤ１０などのレイドレベル（ＲＡＩＤレベル）で用いる場合には、Ｎ×Ｋ−１個（Ｎは２以上の整数）の論理ブロック、及び１個の論理アドレスタグブロックＴＧから構成される。また、ディスクアレイ２を、パリティデータの生成が必要なＲＡＩＤ４，ＲＡＩＤ５，ＲＡＩＤ５０などのレイドレベルで用いる場合には、１ストライプは、（Ｎ−１）×Ｋ−１個（Ｎは３以上の整数）の論理ブロック、１個の論理アドレスタグブロックＴＧ、及びＫ個のパリティブロックから構成される。なお、ストライプユニットのサイズ（ブロック数）は、ディスク装置に対するアクセス効率を考慮すると、当該ディスク装置の１トラック長に近いサイズが好ましい。
【００３６】
さて本実施形態では、ディスクアレイ２を、当該ディスクアレイ２を構成するディスク装置２１〜２３の実際の記憶容量を合わせた総記憶容量よりも少ない記憶容量のディスクアレイとして、ホストコンピュータ１０に見せている。そのため、ホストコンピュータ１０が最初にディスクアレイ装置内の制御装置１に対して記憶容量を問い合わせてきたとき、制御装置１は、その返答として上記総記憶容量より少ない記憶容量を返す。これにより、ディスクアレイ２の記憶領域には、ホストコンピュータ１０から論理的に読み書きできる記憶領域の他に余分な記憶領域が確保されることになる。この余分な領域を空き領域と呼び、その空き領域内の各ストライプを空きストライプと呼ぶ。つまり本実施形態では、ホストコンピュータ１０から論理的に読み書きできる記憶領域を全て使用している場合でも、必ずディスクアレイ２上に空き領域が確保できる。但し、ディスクアレイ２における空き領域の物理的な位置は固定ではない。また、ホストコンピュータ１０が使用している論理的な領域が少ない場合、空き領域の記憶容量は上記余分な記憶領域の記憶容量より大きくなる。
【００３７】
ディスクアレイ２にディスク装置２４を追加して、当該ディスクアレイ２のレイドレベル変更を実施した場合、その追加されたディスク装置２４では、そのブロックサイズの整数倍（Ｋ倍）であるストライプユニットを単位に書き込みが行われる。ディスクアレイ２におけるレイドレベル変更後には、当該ディスクアレイ２は、ディスク装置２１〜２３にディスク装置２４を加えた４台のディスク装置で構成されることになる。この場合、ディスク装置２１〜２４内の物理的に同じ位置のストライプユニットは、１つのストライプを構成するストライプユニットとして、同じタイミングで書き込みが行われる。明らかなように、ディスクアレイ２を構成するディスク装置が３台から４台に増設された場合、１ストライプを構成するストライプユニットの数は３から４に増加する。
【００３８】
制御装置１は、ＲＯＭ等の記憶装置（図示せず）に予め格納されている制御プログラムに従ってディスクアレイ２へのアクセス等を制御すると共に、不揮発性メモリ３上の書き込みバッファ３１、アドレス変換テーブル３２、タイムスタンプ情報３３、及びバッファ管理テーブル３４等を管理する。
【００３９】
制御装置１は、前記米国特許第６，２１９，７５２、及び米国特許第６，２３３，６４８に記載されているのと同様の高速書き込み方法を適用している。即ち制御装置１は、ホストコンピュータからの更新（書き込み）要求に対してディスクアレイ２内の対応する旧データの領域の内容を書き換えるのではなく、更新データを書き込みバッファ３１の空き領域にブロック単位に分割して詰めて書き込んで蓄積しておく。この書き込みバッファ３１には、パリティデータの生成が不要な場合であれば、１ストライプ分、即ちＮ×Ｋデータブロック分の、不揮発性メモリ３上の記憶領域が割り当てられる。また、パリティデータの生成が必要な場合であれば、書き込みバッファ３１には、１ストライプ−１ストライプユニット分、即ち（Ｎ−１）×Ｋデータブロック分の、不揮発性メモリ３上の記憶領域が割り当てられる。したがって、ディスクアレイ２がＲＡＩＤ４の冗長化ディスク構成を適用している例では、パリティデータの生成が必要なことから、書き込みバッファ３１には（Ｎ−１）×Ｋデータブロック分の記憶領域が割り当てられる。
【００４０】
制御装置１は、１ストライプ分に１ストライプユニット＋１データブロック少ない数まで、書き込みバッファ３１にデータブロック（論理ブロック）が蓄積された時点で、論理アドレスタグとタイムスタンプ情報ＴＳとから構成される論理アドレスタグブロックＴＧを生成して当該書き込みバッファ３１上に格納する。制御装置１は、生成した論理アドレスタグブロックＴＧが加えられた、書き込みバッファ３１上の１ストライプ−１ストライプユニット分のデータ（（Ｎ−１）×Ｋ個のデータブロック）から、１ストライプユニット分のパリティデータ（Ｋ個のパリティブロック）を生成する。そして制御装置１は、１ストライプユニット分のパリティデータが１ストライプ−１ストライプユニット分のデータに加えられた（Ｎ×Ｋ個のブロックからなる）１ストライプ分のデータを、ディスクアレイ２のレイドレベルを構成するディスク装置の台数Ｎに応じたストライピングルールに従って、その台数のディスク装置上の更新されるべきデータを保持している領域とは別の空き領域の物理的に連続する位置に、一括して書き込む動作を開始する。
【００４１】
本実施形態で適用される論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳは、タイムスタンプと、ストライプ世代番号と、ディスク台数と、チェックサムとから構成される。タイムスタンプ情報ＴＳ中のタイムスタンプ、ストライプ世代番号、及びディスク台数には、不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプ、ストライプ世代番号、及びディスク台数の情報が用いられる。このようにタイムスタンプ情報３３は、ホストコンピュータ１０からの書き込みデータが１ストライプ単位で実際にディスクアレイ２に書き込まれる際に当該ストライプのタイムスタンプ情報ＴＳの一部として付加される情報であり、当該タイムスタンプ情報３３中のタイムスタンプはディスクアレイ２内でのデータ書き込み順序を判定するのに用いられる。そのためタイムスタンプ情報３３中のタイムスタンプの値は、書き込みバッファ３１のデータがディスク装置２に書き込まれる毎に例えば１インクリメントされる。したがって、ストライプ上のタイムスタンプ情報ＴＳに含まれているタイムスタンプを参照することにより、その書き込みデータが新しいデータであるか、古いデータであるかが判別できる。チェックサムは、論理アドレスタグブロックＴＧ中の各論理アドレス、並びにタイムスタンプ情報ＴＳ中のタイムスタンプ、ストライプ世代番号、及びディスク台数をもとに算出される。ストライプ世代番号とチェックサムは、後述するように、対応する論理アドレスタグブロックＴＧがディスクアレイ２のレイドレベル変更前の旧ストライプに属するか、或いはレイドレベル変更後の新ストライプに属するかを制御装置１が判別するのに使用される。
【００４２】
制御装置１により用意された１ストライプ分のデータの例（Ｋ＝３の場合）と、当該１ストライプ分のデータがディスクアレイ２内のディスク装置２１〜２３に書き込まれる様子を図２に示す。図２の例では、論理アドレスＬ３，Ｌ７，Ｌ１１，Ｌ１５の論理ブロック（Ｌ３Ｄａｔａ，Ｌ７Ｄａｔａ，Ｌ１１Ｄａｔａ，Ｌ１５Ｄａｔａ）からなるストライプユニットと、論理アドレスＬ１００，Ｌ１，Ｌ２０の論理ブロック（Ｌ１００Ｄａｔａ，Ｌ１Ｄａｔａ，Ｌ２０Ｄａｔａ）、及び論理アドレスタグブロック（ＴＧ）からなるストライプユニットと、論理アドレスＬ３，Ｌ１００の論理ブロックに対するパリティブロックＰ０、論理アドレスＬ７，Ｌ１の論理ブロックに対するパリティブロックＰ１、論理アドレスＬ１１，Ｌ２０の論理ブロックに対するパリティブロックＰ２、及び論理アドレスＬ１５の論理ブロックと論理アドレスタグブロックＴＧに対するパリティブロックＰ３からなるストライプユニットとが、それぞれディスク装置２１，２２，２３の空き領域に、データＤ１，Ｄ２，Ｐとして一括して書き込まれる様子が示されている。
【００４３】
この例では、パリティブロックＰ０は論理アドレスＬ３，Ｌ１００の論理ブロックの間の排他的論理和（ＸＯＲ）演算により生成され、パリティブロックＰ１は論理アドレスＬ７，Ｌ１の論理ブロックの間の排他的論理和演算により生成される。また、パリティブロックＰ２は論理アドレスＬ１１，Ｌ２０の論理ブロックの間の排他的論理和演算により生成され、パリティブロックＰ３は論理アドレスＬ１５の論理ブロックと論理アドレスタグブロックＴＧとの間の排他的論理和演算により生成される。
【００４４】
ここで、不揮発性メモリ３上に配置されるアドレス変換テーブル３２について図３を参照して説明する。同図に示すように、アドレス変換テーブル３２の各エントリは、それぞれ固有の論理アドレスに対応している。ここでは、アドレス変換テーブル３２を参照する場合の効率を考慮して、当該テーブル３２のｊ番目（ｊ＝０，１，２…）のエントリを、論理ブロックｊの論理アドレスＬｊに対応させている。アドレス変換テーブル３２のエントリ数は、ホストコンピュータ１０からみえる全論理アドレスの数に一致する。
【００４５】
アドレス変換テーブル３２の各エントリｊの情報（アドレス変換情報）は、論理アドレス（論理ブロックアドレス）と、当該論理アドレス（論理ブロックアドレス）で示される論理ブロックが割り当てられるディスクアレイ２（における物理的なディスク領域）上の物理ブロックを含む物理ストライプを示す物理ストライプ番号と、その物理ストライプ内の当該物理ブロックの相対位置を示す物理ブロック番号と、当該論理アドレスのデータブロックがディスクアレイ２に書き込まれた時間的順序を管理するためのタイムスタンプの各項目から構成される。なお、本実施形態のように、アドレス変換テーブル３２のｊ番目のエントリを論理アドレスｊに対応させる場合、当該論理アドレスｊから対応するｊ番目のエントリを参照可能であることから、当該エントリ中に必ずしも論理アドレスの項目を用意する必要はない。但し、後述する第２の変形例で使用される、有効な論理アドレスの順にソートされたソート後のアドレス変換テーブル３６（図１参照）では、各エントリ中に論理アドレスの項目を用意する必要がある。
【００４６】
このようなデータ構造のアドレス変換テーブル３２を用いることで、制御装置１は、論理アドレスＬｊが与えられれば、当該論理アドレスＬｊに対応するアドレス変換テーブル３２内エントリを参照することにより、物理ストライプ番号と物理ブロック番号とから実際の物理アドレスを簡単に求めることができる。例えば、ホストコンピュータ１０からの読み出し要求に従うディスクアレイ２を対象とするデータ読み込み処理は、当該要求で指定された論理アドレスをアドレス変換テーブル３２に従ってディスクアレイ２上の物理アドレスに変換することで行われる。なお、図３中の論理アドレスＬｉは無効（使用されていない）論理アドレスを示す。
【００４７】
図４は、不揮発性メモリ３上に配置される書き込みバッファ３１とバッファ管理テーブル３４との関係の一例を示す。
ホストコンピュータ１０からディスクアレイ２への書き込みが要求された場合、制御装置１は先に述べたように、要求された書き込みデータをディスクアレイ２に対して即書き込まずに、ブロック（論理ブロック）単位に分割して書き込みバッファ３１に順番に詰めてログ形式で格納していく。書き込みバッファ３１の領域は、レイドレベル変更後は、追加されたディスク装置２４のブロックサイズに応じて変更される。
【００４８】
制御装置１は、書き込みバッファ３１に書き込みデータをブロック単位で書き込む際には、当該書き込みデータを構成する論理ブロックを指定する論理アドレス、つまりホストコンピュータ１０から見た論理アドレスを、当該論理ブロックが格納された書き込みバッファ３１内の領域（ブロック領域）に対応する、バッファ管理テーブル３４のエントリに保存する。このエントリ（のエントリ番号）をｉとすると、そのエントリｉには、対応するバッファ３１内のブロック領域Ｂｉに有効なデータが格納されているか否か（つまり当該ブロック領域が空き領域であるか）を示すフラグフィールドが設けられている。バッファ３１内の空きのブロック領域に対応する、バッファ管理テーブル３４内のエントリには、その旨を示すフラグ“Ｕ”が設定されている。
【００４９】
制御装置１は、バッファ管理テーブル３４内のエントリｉに論理アドレスを保存した場合、当該エントリｉ中のフラグフィールドに、対応する書き込みバッファ３１内のブロック領域Ｂｉにデータが格納されていることを示すフラグ“Ｆ”を設定する。したがって、バッファ管理テーブル３４を参照することにより、ホストコンピュータ１０から要求された書き込みデータを格納すべき次のブロック領域を決めることができる。
【００５０】
図４に示す例では、書き込みバッファ３１内のブロック領域Ｂ０〜Ｂ１５のうちのＢ７まで書き込みデータが格納されており、ブロック領域Ｂ０，Ｂ１，…，Ｂ７に格納されている論理ブロックの論理アドレスがそれぞれＬ１２３，Ｌ９９，…，Ｌ１であることを表わしている。
【００５１】
次に、図１に示すディスクアレイ装置の動作を説明する。
まず、ディスクアレイ装置における書き込み動作について、パリティディスク装置２３がデータディスク装置に変更された後、つまりディスクアレイ２のレイドレベルがＲＡＩＤ４からＲＡＩＤ０に変更された後を例に簡単に説明する。
【００５２】
今、ディスクアレイ装置内の制御装置１が、ホストコンピュータ１０からの書き込み（更新）要求に応じて、当該ホストコンピュータ１０から書き込むべきデータと当該データの開始位置の論理アドレス及び当該データのサイズ（データブロックのサイズの整数倍）を受け取ったものとする。すると、制御装置１は、ホストコンピュータ１０から受け取った書き込みデータ（更新データ）を、不揮発性メモリ３上の書き込みバッファ３１の空き領域に、ブロック単位に分割して詰めて格納する。ここで、書き込みバッファ３１は、後述する図６のフローチャート中のステップＳ５の処理で、レイドレベル変更後のストライプサイズに対応した大きさに変更されている。
【００５３】
また、制御装置１は、受け取った論理アドレスを、当該論理アドレスとサイズとから、ブロック毎の論理アドレス（論理ブロックアドレス）に変換して、バッファ管理テーブル３４内の対応するエントリに格納する。なお、既に書き込みバッファ３１に格納されているデータに対する更新データの書き込みの場合には、制御装置１は書き込みバッファ３１の空き領域に詰めて格納するのではなく、直接書き込みバッファ３１内の旧データを変更する。書き込みバッファ３１に格納されているデータに対する更新データの書き込みであるか否かは、バッファ管理テーブル３４内に、対応する論理ブロックアドレスが設定されていて、且つフラグが“Ｆ”のエントリが存在するか否かにより判定可能である。
【００５４】
制御装置１は、書き込みバッファ３１に格納された書き込みデータを構成する論理ブロックの数がＲＡＩＤ０へのレイドレベル変更後の１ストライプ分の論理ブロック数（１ストライプ分のデータブロック数でない点に注意されたい）、つまりＮ×Ｍ−１個に達すると、その論理ブロック数の論理ブロックの論理アドレスを含む論理アドレスタグとタイムスタンプ情報ＴＳとから構成される論理アドレスタグブロックＴＧを生成して、当該書き込みバッファ３１内の最後のブロック領域（論理アドレスタグブロック領域）に格納する。ここで、論理アドレスタグブロックＴＧは、書き込みバッファ３１内のブロック領域にデータブロック（論理ブロック）が格納される際に、バッファ管理テーブル３４内の対応するエントリに格納された論理アドレスと、不揮発性メモリ３上のタイムスタンプ情報３３とから生成される。このタイムスタンプ情報３３中のストライプ世代番号は、レイドレベル変更に伴い１だけ加算される。
【００５５】
制御装置１は、生成した論理アドレスタグブロックＴＧをバッファ管理テーブル３４内の最後のブロック領域に格納すると、その時点において書き込みバッファ３１に格納されている、１ストライプ分の論理ブロック数（Ｎ×Ｋ−１個）の論理ブロックと１個の論理アドレスタグブロックＴＧとからなるＮ×Ｋ個のデータブロック、即ち１ストライプ分のデータを、ディスクアレイ２内のディスク装置２１〜２４上の更新されるべきデータを保持している領域とは別の空き領域の物理的に連続する領域に書き込む。
【００５６】
この様子を図５に示す。図５の例では、論理アドレスＬ３，Ｌ２１，Ｌ３２，Ｌ４１の論理ブロック（Ｌ３Ｄａｔａ，Ｌ２１Ｄａｔａ，Ｌ３２Ｄａｔａ，Ｌ４１Ｄａｔａ）からなるストライプユニットと、論理アドレスＬ２，Ｌ７，Ｌ８，Ｌ０の論理ブロック（Ｌ２Ｄａｔａ，Ｌ７Ｄａｔａ，Ｌ８Ｄａｔａ，Ｌ０Ｄａｔａ）からなるストライプユニットと、論理アドレスＬ１，Ｌ９９，Ｌ２０，Ｌ４の論理ブロック（Ｌ１Ｄａｔａ，Ｌ９９Ｄａｔａ，Ｌ２０Ｄａｔａ，Ｌ４Ｄａｔａ）からなるストライプユニットと、論理アドレスＬ１１，Ｌ１７，Ｌ４０の論理ブロック（Ｌ１１Ｄａｔａ，Ｌ１７Ｄａｔａ，Ｌ４０Ｄａｔａ）及び論理アドレスタグブロックＴＧからなるストライプユニットとが、それぞれディスク装置２１，２２，２３，２４の空き領域に、データＤ１，Ｄ２，Ｄ３，Ｄ４として一括して書き込まれる様子が示されている。
【００５７】
制御装置１は、１ストライプ分のデータを、レイドレベル変更後のディスクアレイ２上の更新されるべきデータを保持している領域とは別の空き領域に書き込んだ場合、当該ストライプ中の各論理ブロックについて、当該論理ブロックに対する論理アドレスと、当該論理ブロックが書き込まれたディスクアレイ２上の物理的なデータ位置、つまり物理ストライプ番号と物理ブロック番号とで示される物理アドレスとの関係を、レイドレベル変更後のアドレス変換テーブル３２に設定する。具体的には、制御装置１は、上記ストライプ中の各論理ブロックに対する論理アドレスに対応するアドレス変換テーブル３２内のエントリにおける物理ブロック番号と物理ストライプ番号とを、それぞれ当該論理ブロックが実際に書き込まれた物理ストライプ内の物理ブロック位置を示す番号と当該物理ストライプの番号とに更新する。このとき制御装置１は、不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプの値を１インクリメントし、そのインクリメント後のタイムスタンプで、アドレス変換テーブル３２内の上記更新されたエントリ中のタイムスタンプを更新する。
【００５８】
次に、ディスクアレイ２のレイドレベルを変更する処理について、図６及び図７のフローチャートを参照して説明する。
今、図１に示すコンピュータシステムの利用者が、ディスクアレイ２にディスク装置２４を追加したものとする。この状態で利用者がホストコンピュータ１０を操作することにより、当該ホストコンピュータ１０からディスクアレイ装置内の制御装置１に対して、ＲＡＩＤ４からＲＡＩＤ０へのレイドレベル変更処理が要求されたものとする。この場合、制御装置１はバッファ管理テーブル３４を調べて、書き込みバッファ３１に蓄積されているデータがあるか否かを判定する（ステップＳ１）。
【００５９】
もし、書き込みバッファ３１内に蓄積されているデータがあるならば（ステップＳ１のＹＥＳ）、制御装置１はステップＳ２に進む。制御装置１はステップＳ２において、バッファ管理テーブル３４内の各エントリのうち、フラグフィールドにフラグ“Ｕ”が設定されている空きエントリを検索する（但し、最後のエントリは除く）。また、制御装置１はステップＳ２において、検索されたエントリ中のフラグフィールドの状態を“Ｕ”のままにして、当該エントリに対応する書き込みバッファ３１内のブロック領域、つまり空きブロック領域にゼロを設定する。このゼロを設定する処理は、空きエントリがないならば、つまり空きブロック領域がないならば、当然不要である。そして、制御装置１はステップＳ２において、そのときのバッファ管理テーブル３４の各エントリのうち、フラグフィールドの状態が“Ｆ”のエントリに設定されている論理アドレスとタイムスタンプ情報３３とから論理アドレスタグブロックＴＧを生成し、この論理アドレスタグブロックＴＧを含むレイドレベル変更前のサイズの１ストライプ分のデータを、ディスクアレイ２内のディスク装置２１〜２３の空き領域に一括して書き込む。ここで、１ストライプ分のデータは、書き込みバッファ３１のデータとパリティデータとからなる。
【００６０】
制御装置１はステップＳ２を実行すると、当該ステップＳ２でのディスク装置２１〜２３へのデータ書き込みに応じて、不揮発性メモリ３上のアドレス変換テーブル３２を更新する（ステップＳ３）。制御装置１は、ステップＳ３でアドレス変換テーブル３２を更新した場合、或いはステップＳ１で書き込みバッファ３１内に蓄積されているデータがないと判定された場合には、アドレス変換テーブル３２を不揮発性メモリ３上の別の領域にコピーして、アドレス変換テーブルのコピー３５を生成する（ステップＳ４）。
【００６１】
次に制御装置１は、レイドレベル変更後にストライプサイズが変更になることを考慮して、不揮発性メモリ３上の書き込みバッファ３１をレイドレベル変更後のストライプサイズに対応した大きさに変更する（ステップＳ５）。また制御装置１は、レイドレベル変更で増加する記憶容量分の物理ブロック用のエントリを、アドレス変換テーブル３２の内容をレイドレベル変更前の状態に維持したままで、当該テーブル３２に追加する（ステップＳ６）。これによりアドレス変換テーブル３２は、レイドレベル変更に対応したものに再構築される。
【００６２】
次に制御装置１は、論理ブロックの論理アドレスを示す変数ｉの初期値として０（ｉ＝０）を設定する（ステップＳ７）。次に制御装置１は、不揮発性メモリ３上のアドレス変換テーブルのコピー３５を参照して、論理アドレスｉが有効か否か、つまり論理アドレスｉの論理ブロックがホストコンピュータ１０により使用されているか否かを判定する（ステップＳ８）。この判定は、論理アドレスｉに対応する、アドレス変換テーブルのコピー３５内のエントリ中の物理ストライプ番号、物理ブロック番号、及びタイムスタンプの各項目がいずれもＮＵＬＬ以外であるか否かを調べることで行われる。なお、アドレス変換テーブル３２内エントリに、対応する論理アドレスが有効であるか或いは無効であるかを示すフラグを設け、当該テーブル３２のコピー３５内の各エントリに設定されている当該フラグを参照することで、対応する論理アドレスが有効であるか否かを判定する構成であってもよい。
【００６３】
論理アドレスｉが有効な場合（ステップＳ８のＹＥＳ）、つまりアドレス変換テーブル３２から有効な論理アドレスｉが検索できた場合、制御装置１は、論理アドレスｉのデータがレイドレベル変更処理においてディスクアレイ２に対し未書き込みであったか否かを判定する（ステップＳ９）。この判定を効率的に行うには、アドレス変換テーブル３２の各エントリに、対応する論理アドレスの論理ブロックのデータがディスクアレイ２に対して新たに書き込み（再配置）済みであるか或いは未書き込みであるかを示すフラグの設定フィールドを設けるとよい。
【００６４】
もし、論理アドレスｉのデータがディスクアレイ２に対して未書き込みであった場合（ステップＳ９のＹＥＳ）、制御装置１はアドレス変換テーブルのコピー３５から、論理アドレスｉに対応する物理ストライプの物理ストライプ番号を取得し、その物理ストライプ番号で示されるレイドレベル変更前のサイズの物理ストライプのデータをディスクアレイ２内のディスク装置２１〜２３から読み込む（ステップＳ１０）。
【００６５】
次に制御装置１は、読み込んだ物理ストライプに含まれている論理ブロックの論理アドレスの中に未処理の有効な論理アドレスｊがあるか否かを判定する（ステップＳ１１）。この判定は、上記読み込んだ物理ストライプの物理ストライプ番号をキーにしてアドレス変換テーブル３２内のエントリを参照して、対応する未処理の論理アドレスが検索できたか否かにより行われる。
【００６６】
制御装置１は未処理の有効な論理アドレスｊがある場合（ステップＳ１１のＹＥＳ）、ステップＳ１０で読み込んだ物理ストライプの中から、その有効な論理アドレスｊの論理ブロックを取り出して、書き込みを実行する（ステップＳ１２）。このステップＳ１２での書き込みは、従来技術の欄で述べたような高速書き込み方法を用いた通常通りの手順で次のように行われる。
【００６７】
まず制御装置１は、論理アドレスｊの論理ブロックを不揮発性メモリ３上の書き込みバッファ３１の空き領域に詰めて書き込む。通常は、この書き込みバッファ３１への書き込みで、ステップＳ１２は完了する。しかし、論理アドレスｊの論理ブロックを書き込みバッファ３１に書き込んだ結果、当該バッファ３１に蓄積されている書き込みデータの量が、変更後のレイドレベルで決まる量（ＲＡＩＤ０の例では、１ストライプ分に１ブロックだけ少ない量）となった場合には、制御装置１は上記ステップＳ１２において更に次に述べる書き込みを行う。
【００６８】
まず制御装置１は、書き込みバッファ３１に蓄積されている１ストライプ−１ブロック分の書き込みデータに対応する論理アドレスタグブロックＴＧを生成してアドレス変換テーブル３２の最後のブロック領域に書き込む。次に制御装置１は、この論理アドレスタグブロック書き込み後の書き込みバッファ３１上のデータ、即ち１ストライプ分のデータを、ディスク装置２４が追加されたディスクアレイ２に一括して書き込む。この一括書き込みは、ディスク装置２４が追加された後のディスクアレイ２の空きストライプに対し、レイドレベル変更後のディスクアレイ２に対応する新たなストライピングルールに従って行われる。制御装置１は、ステップＳ１２でディスクアレイ２への一括書き込みを行った場合、再構築後のアドレス変換テーブル３２を更新する。なお、この例とは逆に、ＲＡＩＤ０からＲＡＩＤ４へのレイドレベル変更の場合には、制御装置１は、バッファ３１に蓄積されている書き込みデータの量が１ストライプ分に１ストライプユニット＋１ブロック分少ない量となった段階で、以下の書き込みを行う。即ち制御装置１は、書き込みバッファ３１に蓄積されている１ストライプ−（１ストライプユニット＋１ブロック）分の書き込みデータに対応する論理アドレスタグブロックＴＧを生成してアドレス変換テーブル３２の最後のブロック領域に書き込み、この論理アドレスタグブロック書き込み後の書き込みバッファ３１上のデータ（１ストライプ−１ストライプユニット分のデータ）から１ストライプユニット分のパリティデータ（つまり１ストライプユニット分のブロック数のパリティブロック）を生成する。そして制御装置１は、書き込みバッファ３１上の１ストライプ−１ストライプユニット分のデータと生成された１ストライプユニット分のパリティデータとから構成される１ストライプ分のデータを、ディスク装置２４が追加されたディスクアレイ２に一括して書き込む。
【００６９】
制御装置１は、上記ステップＳ１１，Ｓ１２を、ステップＳ１０で読み込んだ物理ストライプに含まれている全ての論理ブロックの論理アドレスについて、繰り返す（ステップＳ１３）。
【００７０】
制御装置１は、ステップＳ１０で読み込んだ物理ストライプに含まれている全ての論理ブロックの論理アドレスについて処理したならば（ステップＳ１３のＹＥＳ）、ｉを１だけインクリメントする（ステップＳ１４）。また、制御装置１は、論理アドレスｉが有効でない場合（ステップＳ８のＮＯ）、或いは論理アドレスｉの論理ブロックがディスクアレイ２に対して書き込み済みである場合には（ステップＳ９のＮＯ）、そのままステップＳ１４に進んでｉを１だけインクリメントする。
【００７１】
制御装置１はｉを１だけインクリメントすると、そのインクリメント後のｉの値から、全ての論理アドレスについて処理したか否かを判定する（ステップＳ１５）。もし、未処理の論理アドレスが残っているならば（ステップＳ１５のＮＯ）、ステップＳ１４でのインクリメント後のｉで指定される論理アドレスｉについて、上記ステップＳ８以降の処理を実行する。これに対し、全ての論理アドレスｉについて処理したならば（ステップＳ１５のＹＥＳ）、制御装置１はレイドレベル変更処理を終了する。
【００７２】
このように本実施形態においては、アドレス変換テーブルのコピー３５を利用して、ホストコンピュータ１０により使用されている有効な論理アドレスｉを全て検索し、その有効な論理アドレスのデータをレイドレベル変更後のディスクアレイ２の空きストライプに連続して書き込んで行く（ステップＳ７〜Ｓ１５）。
【００７３】
本実施形態において、レイドレベル変更処理に伴ってホストコンピュータ１０からの書き込み要求を停止しなければならないのは、明らかなようにステップＳ１からステップＳ７までの間である。この間に発生するディスクアレイ２への入出力回数は、レイドレベル変更の開始時に既に書き込みバッファ３１上に蓄積されていたデータをディスクアレイ２に書き込むためのステップＳ２の１回だけである。それ以外は、全て不揮発性メモリ３上での操作であるため、ホストコンピュータ１０からの書き込み要求の実行を停止しなければならない期間はごくわずかである。また、ステップＳ７以降の処理は、ホストコンピュータ１０からの入出力要求と混在しても実行可能である。よって、本実施形態においては、システムを停止させずにディスクアレイ２のレイドレベルを変更すること、つまり動的なレイドレベル変更が可能となる。
【００７４】
また、本実施形態においては、レイドレベル変更処理の開始時点でのアドレス変換テーブル３２で有効となっている論理アドレスのデータのみをディスクアレイ２内での移動（再配置）対象としている。このため、レイドレベル変更開始時点で有効な論理アドレスの論理ブロックが含まれていた物理ストライプには、レイドレベル変更処理を終了した時点では有効な論理アドレスの論理ブロックは含まれなくなる。つまり、レイドレベル変更開始時点で有効な論理アドレスの論理ブロックが含まれていた物理ストライプは、レイドレベル変更処理を終了した時点では空きストライプとなることから、後述するセグメントクリーニングを実施する必要がない。
【００７５】
［第１の変形例］
次に、本発明の実施形態の第１の変形例について、図６及び図７のフローチャートを援用して説明する。この第１の変形例の特徴は、有効な論理アドレスの順番に、対応するデータを、ディスクアレイ２上の更新されるべきデータを保持している領域とは別の空き領域の物理的に連続する位置に順次書き込みながらレイドレベル変更を行う点にある。
【００７６】
第１の変形例では、制御装置１は、ステップＳ４で生成されたアドレス変換テーブルのコピー３５を使用して、各エントリ情報が有効な論理アドレスの昇順にソートされた、レイドレベル変更処理用のアドレス変換テーブル（以下、ソート後のアドレス変換テーブルと称する）３６を不揮発性メモリ３上に新たに生成する。このソートには、従来からよく知られているＭｅｒｇｅｓｏｒｔ、Ｑｕｉｃｋｓｏｒｔ、Ｓｈｅｌｌｓｏｒｔ、Ｈｅａｐｓｏｒｔ等の高速ソートアルゴリズムを適用するとよい。なお、アドレス変換テーブル３２のｉ番目のエントリを論理アドレスｉに対応させている場合、当該テーブル３２内の各エントリは論理アドレスの昇順の並びとなっていることから、特別のソートアルゴリズムは不要である。
【００７７】
ソート後のアドレス変換テーブル３６が生成されると、制御装置１は当該テーブル３６を使用して、図６及び図７のフローチャート中のステップＳ７以降の処理を実行する。これにより、有効な論理アドレスの順番に、対応するデータを、ディスクアレイ２上の更新されるべきデータを保持している領域とは別の空き領域の物理的に連続する位置に順次書き込みながら、ディスクアレイ２のレイドレベル変更が行われる。このように、有効な論理アドレスの順番に処理することで、有効な物理ストライプ中に無効なデータブロック、つまり断片化したデータブロックがなくなり、ストライプ内のフラグメンテーションが回避できる。この結果、レイドレベル変更後の論理アドレスと物理アドレスのマッピング関係の最適化が実施され、レイドレベル変更処理に起因するシーケンシャルアクセスの性能低下を防止できる。
【００７８】
［第２の変形例］
次に、本発明の実施形態の第２の変形例について説明する。この第２の変形例では、ディスクアレイ２にＲＡＩＤ５の冗長化ディスク構成を適用しているものとする。ここでは、物理ストライプ中のパリティデータ（パリティ用のストライプユニット）が配置されるディスク装置は、上記実施形態で便宜的に想定したＲＡＩＤ４の冗長化ディスク構成を適用する場合と異なって固定化されず、物理ストライプ毎にサイクリックに切り替えられる。また、論理アドレスタグブロックＴＧが配置されるディスク装置も、パリティデータと同様に物理ストライプ毎にサイクリックに切り替えられる。
【００７９】
まず本発明の実施形態の第２の変形例の概要について説明する。
第２の変形例において、ディスクアレイ２のレイドレベルをＲＡＩＤ５からレイド０に変更するものとする。レイドレベル変更直後のパリティデータの記録位置は、レイドレベル変更前と同じディスクアレイ２内の位置となる。つまり第３の変形例におけるレイドレベル変更処理では、パリティデータを含むデータの移動（再配置）は行われず、したがってパリティデータは、レイドレベル変更直後は、ディスク装置２４を追加する前にディスクアレイ２を構成していたディスク装置２１〜２３のいずれかに配置されたままとなる。
【００８０】
その後、ホストコンピュータ１０からの書き込み要求に従うディスクアレイ２へのデータ書き込みをトリガにして、ディスク装置２４の追加により拡張された物理ストライプ毎に、その物理ストライプの番号とディスク装置追加後にディスクアレイ２を構成しているディスク装置の台数とから決定される位置に、新たな論理アドレスタグブロックが格納される（ＲＡＩＤ０へのレベル変更であるからパリティデータが必要なくなることに注意）。ここでは、ストライプ世代番号が更新（＋１）されたタイムスタンプ情報ＴＳを含む新たな論理アドレスタグブロックＴＧが生成され、同一ストライプ内の論理ブロックのデータと合わせてディスクアレイ２にまとめ書きされる。ディスクアレイ２に書き込まれた論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれている世代番号は、再度レイドレベル変更が実施されるまで同じ値が継続される。
【００８１】
第２の変形例においては、レイドレベル変更前にディスクアレイ２を構成していたディスク装置２１〜２３に記録されているデータの移動とパリティデータの再生成とを実施する必要がない。このため、レイドレベル変更に要する時間を大幅に短縮することができる。
【００８２】
次に、本発明の実施形態の第２の変形例におけるレイドレベル変更処理の詳細について、図８のフローチャートを参照して説明する。
制御装置１は、ホストコンピュータ１０からレイドレベル変更が要求されると、バッファ管理テーブル３４を調べて、書き込みバッファ３１に蓄積されているデータがあるか否かを判定する（ステップＳ２１）。もし、書き込みバッファ３１内に蓄積されているデータがあるならば（ステップＳ２１のＹＥＳ）、制御装置１はステップＳ２２に進む。制御装置１はステップＳ２２において、書き込みバッファ３１内に空きブロック領域があるならば、当該空きブロック領域にゼロを設定する。このゼロを設定する処理は、空きブロック領域がないならば、当然不要である。そして、制御装置１はステップＳ２２において、そのときのバッファ管理テーブル３４の各エントリのうち、フラグフィールドの状態が“Ｆ”のエントリに設定されている論理アドレスとタイムスタンプ情報３３とから論理アドレスタグブロックＴＧを生成し、この論理アドレスタグブロックＴＧを含むレイドレベル変更前のサイズの１ストライプ分のデータを、ディスクアレイ２内のディスク装置２１〜２３の空き領域に一括して書き込む。ここで、１ストライプ分のデータは、書き込みバッファ３１のデータとパリティデータとからなる。
【００８３】
制御装置１はステップＳ２２を実行すると、当該ステップＳ２２でのディスク装置２１〜２３へのデータ書き込みに応じて、不揮発性メモリ３上のアドレス変換テーブル３２を更新する（ステップＳ２３）。制御装置１は、ステップＳ２３でアドレス変換テーブル３２を更新した場合、或いは書き込みバッファ３１内に蓄積されているデータがないとステップＳ２１で判定された場合には、アドレス変換テーブル３２を不揮発性メモリ３上の別の領域にコピーして、アドレス変換テーブルのコピー３５を生成する（ステップＳ２４）。
【００８４】
次に制御装置１は、レイドレベル変更後にストライプサイズが変更になることを考慮して、不揮発性メモリ３上の書き込みバッファ３１をレイドレベル変更後のストライプサイズに対応した大きさに変更する（ステップＳ２５）。つまり、制御装置１は、書き込みバッファ３１を、レイドレベル変更後のストライプサイズに対応した大きさとなるように再構築する。また、制御装置１は、レイドレベル変更で増加する記憶容量分の物理ブロック用のエントリを、アドレス変換テーブル３２の内容をレイドレベル変更前の状態に維持したままで、当該テーブル３２に追加する（ステップＳ２６）。これによりアドレス変換テーブル３２は、レイドレベル変更後に対応したものに再構築される。
【００８５】
次に制御装置１は、ステップＳ２４で生成したアドレス変換テーブルのコピー３５を使用してディスクアレイ２内の空きストライプを検索し、レイドレベル変更後のストライピングルールに従って当該空きストライプ中の論理アドレスタグブロックＴＧの位置を特定することで、その論理アドレスタグブロックＴＧをＮＵＬＬ（ここではゼロ）で初期化する（ステップＳ２７）。
【００８６】
次に制御装置１は、不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプ、ストライプ世代番号及びディスク台数を、それぞれ１だけインクリメントして更新し、その更新後のタイムスタンプ情報３３をディスクアレイ２に確保されている特別な空き領域に記録する（ステップＳ２８）。この特別な空き領域は、データを記録する領域とは別にディスクアレイ２内に確保される領域であり、制御装置１による管理に使用される領域である。このステップＳ２８で、ディスクアレイ２内に記録されたタイムスタンプの情報（レイドレベル変更時タイムスタンプ情報）は、レイドレベル変更後において追加ディスク装置２４への書き込みがあったか否かを判断する場合に必要となる。
【００８７】
ＲＡＩＤ５のように、パリティブロックがディスクアレイ２を構成する複数のディスク装置に分散配置される場合、レイドレベル変更前と、レイドレベル変更後で且つ拡張された物理ストライプに対する書き込みが行われた場合とで、論理アドレスタグブロックＴＧの記録位置がそれぞれ異なる。この様子を、図１においてディスク装置２４が追加される前と、ディスク装置２４が追加され、且つ拡張された物理ストライプに対する書き込みが行われた後とについて図９に示す。
【００８８】
図９では、例えば物理ストライプ１００中の論理アドレスタグブロック（を含むデータブロック）の位置が、ディスク装置２１からディスク装置２４へと変わっている。論理アドレスタグブロックの位置は、ディスクアレイ２を構成するディスク装置の台数と物理ストライプの番号（物理ストライプ番号）とから計算で求めることができる。
【００８９】
図９の例では、ディスクアレイ２を構成するディスク装置の台数がディスク装置２１，２２，２３の３台であるレイドレベル変更前は、物理ストライプ番号ｉをその台数３で割った剰余がそれぞれ０，１，２であれば、対応する物理ストライプ中のパリティブロックはそれぞれディスク装置２１，２２，２３に配置され、論理アドレスタグブロック（を含むデータブロック）はそれぞれディスク装置２３，２１，２２に配置される。一方、ディスクアレイ２を構成するディスク装置の台数がディスク装置２１，２２，２３，２４の４台であるレイドレベル変更後は、物理ストライプ番号ｉをその台数４で割った剰余がそれぞれ０，１，２，３であれば、対応する物理ストライプ中の論理アドレスタグブロック（を含むデータブロック）はそれぞれディスク装置２４，２１，２２，２３に配置される。このような配置を右対称の配置と称する。
【００９０】
物理ストライプに記録されたデータブロックが有効か否かを判定するには、当該ストライプ中の論理アドレスタグブロックＴＧを読み込み、その論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれているタイムスタンプとディスクアレイ２上の特別な空き領域に記録されたタイムスタンプ情報に含まれているタイムスタンプとを比較すればよい。
【００９１】
上記実施形態の第２の変形例では、不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプの値はストライプ単位のまとめ書き時点だけでなく、レイドレベル変更処理を終了する際の処理ステップ（ステップＳ２８）でもインクリメントされる。このため、ある時点のタイムスタンプをＴ１、そのＴ１より後の時点のタイムスタンプであってＴ１より後に少なくとも１回は更新されたタイムスタンプをＴ２とすると、Ｔ１，Ｔ２の間にはＴ１＜Ｔ２の関係がある。
【００９２】
したがって、物理ストライプ中の論理アドレスタグブロックＴＧに設定されたタイムスタンプ情報ＴＳに含まれているタイムスタンプの値の方が、レイドレベル変更処理を終了する際にディスクアレイ２の特別の領域に記録されたタイムスタンプ情報（レイドレベル変更時タイムスタンプ情報）に含まれているタイムスタンプの値より小さい場合には、そのストライプはレイドレベル変更前に使用されていたと判定できる。また、物理ストライプ中の論理アドレスタグブロックＴＧに設定されたタイムスタンプ情報ＴＳがＮＵＬＬであった場合には、そのストライプは、レイドレベル変更時点で未使用であり、つまり空きストライプであり、その状態が現在まで継続していると判定できる。また、物理ストライプ中の論理アドレスタグブロックＴＧに設定されたタイムスタンプ情報ＴＳに含まれているタイムスタンプの値が、レイドレベル変更時タイムスタンプ情報ＴＳに含まれているタイムスタンプの値以上の場合には、そのストライプはレイドレベル変更後に使用されたと判定できる。更に、レイドレベル変更処理が複数回実行される場合もあり得る。この場合には、後述する本発明の実施形態の第３の変形例で述べるように、物理ストライプ中の論理アドレスタグブロックＴＧに設定されたタイムスタンプ情報ＴＳに含まれている世代番号を調べることで、そのストライプが何度目のレイドレベル変更時点で使用されていたかを判別することができる。
【００９３】
よって、原理的には、パリティブロックまたは論理アドレスタグブロックＴＧの読み出しが必要となる度に、ディスクアレイ２上の各物理ストライプのチェック、つまりレイドレベル変更前に使用されていたストライプであるか、レイドレベル変更後に使用されたストライプであるかをチェックすることにより、読み出すべきパリティブロックまたは論理アドレスタグブロックＴＧを検出することができる。ところが、パリティブロックまたは論理アドレスタグブロックＴＧを頻繁に読み出す必要がある場合に、この方法を使用すると、ブロック読み出しに多大な時間を要することから実用的でない。
【００９４】
そこで、パリティブロックまたは論理アドレスタグブロックＴＧのデータが必要となるディスクアレイ構成の再構築や後述するアドレス変換テーブルの再構築を実施する場合に限って、ディスクアレイ２上の全物理ストライプを対象に論理アドレスタグブロックＴＧの調査を行うことにより、ストライプテーブル４１を生成して図１に示すように揮発性メモリ４上に配置するとよい。このストライプテーブル４１の各エントリには、図１０に示すように、ディスクアレイ２から読み出された物理ストライプの番号（物理ストライプ番号）と、当該物理ストライプ中の論理アドレスタグブロックＴＧに設定されたタイムスタンプ情報ＴＳに含まれているタイムスタンプとが設定される。
【００９５】
さて、ストライプテーブル４１を生成する場合には、ディスクアレイ２を構成するディスク装置の台数と適用するレイドレベルとを意識して、論理アドレスタグブロックＴＧの読み込みのための入出力が各ディスク装置で並列に実行できるように論理アドレスタグブロックＴＧ（物理アドレス）を選ぶならば、効率の向上を図ることが可能となる。図９中のレイドレベル変更後のディスクアレイ２の例であれば、物理ストライプ０，１，２，３に含まれる論理アドレスタグブロックは、それぞれ異なるディスク装置２４，２１，２２，２３に分散して配置されているため、同時に読み込むことが可能である。
【００９６】
なお、ストライプテーブル４１は必ずしも揮発性メモリ４上に配置する必要はなく、不揮発性メモリ３上に配置されるものであっても構わない。また、ストライプテーブル４１が配置される揮発性メモリ４（または不揮発性メモリ３）の記憶容量に余裕がある場合には、ディスクアレイ２の構築時に、各エントリに全てＮＵＬＬが設定されたストライプテーブル４１を当該揮発性メモリ４（または不揮発性メモリ３）上に用意し、アドレス変換テーブル３２の更新と同様に、ストライプ単位のまとめ書きの時点で、不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプの値を記録して当該ストライプテーブル４１を更新するようにしてもよい。また、図１の例のように、ストライプテーブル４１を揮発性メモリ４上に生成する場合には、先に述べたストライプテーブル４１を生成する方法を適用して、システム起動の都度、当該ストライプテーブル４１を揮発性メモリ４上に再生すればよい。
【００９７】
本実施形態の第２の変形例では、レイドレベル変更処理に伴ってホストコンピュータ１０からの書き込み要求を停止しなければならないのは、明らかなようにステップＳ２１からステップＳ２８までの間である。この間に発生するディスクアレイ２への入出力回数は、レイドレベル変更処理の開始時点で書き込みバッファ３１に蓄積されていたデータをディスクアレイ２に書き込むためと、タイムスタンプ情報ＴＳの書き込み（空きストライプ中の論理アドレスタグブロックＴＧに含まれているタイムスタンプ情報ＴＳを初期化するため）に関する入出力のみである。しかも、ディスクアレイ２のレイドレベル変更を実施するのは、一般に、当該ディスクアレイ２の空き記憶容量が少なくなった場合、つまりディスクアレイ２上に空きストライプが少なくなった場合が多い。したがって、本実施形態の第２の変形例では、殆どの処理が不揮発性メモリ３上での操作となる。このため、ディスクアレイ２との間の入出力回数は最低限に抑えられ、レイドレベル変更に必要な時間はごくわずかである。
【００９８】
ここで、本発明の実施形態の第２の変形例における、レイドレベル変更後のディスクアレイ装置の書き込み動作及び読み出し動作について簡単に順次説明する。
まず、ディスクアレイ装置内の制御装置１は、レイドレベル変更後にホストコンピュータ１０からデータ書き込み要求を受け取った場合、当該ホストコンピュータ１０により指定された書き込みデータ（更新データ）を、ステップＳ２５で再構築された書き込みバッファ３１に蓄積する。制御装置１は、レイドレベル変更後のストライピングルールで決まる量の、論理アドレスタグブロックＴＧを含むデータが書き込みバッファ３１に蓄積された時点で、そのデータ及びパリティデータを含む１ストライプ分のデータを、ディスクアレイ２上の更新されるべきデータを保持している領域とは別の空き領域の物理的に連続する位置に順次書き込む。このとき制御装置１は、ステップＳ２６で生成されたレイドレベル変更後のアドレス変換テーブル３２を更新する。
【００９９】
このように、第２の変形例における、レイドレベル変更後のディスクアレイ装置の書き込み動作は、上記実施形態と同様に行われる。但し、第２の変形例は、次の点で上記実施形態と異なる。まず、上記実施形態では、レイドレベル変更処理において、有効な論理アドレスのデータの移動（再配置）がレイドレベル変更後のレイドレベルに従って行われる。このため上記実施形態では、レイドレベル変更が終了した段階で、ディスクアレイ２の全ての有効な物理ストライプには、レイドレベル変更前の状態とは異なって、いずれも、レイドレベル変更後のストライピングルールに従って論理アドレスタグブロックＴＧが配置された１ストライプ分のデータが格納されている。これに対し、第２の変形例では、レイドレベル変更処理でデータの移動（再配置）は行われない。このため第２の変形例においては、レイドレベル変更後のディスクアレイ２上には、レイドレベル変更前のストライピングルールに従ってストライプ単位の書き込みが行われた有効な物理ストライプ、つまりレイドレベル変更前の有効な物理ストライプと、レイドレベル変更後のストライピングルールに従ってストライプ単位の書き込みが行われた有効な物理ストライプ、つまりレイドレベル変更後の有効な物理ストライプとが混在する可能性がある。この点が、上記実施形態と異なる。
【０１００】
明らかなように、第２の変形例では、レイドレベル変更後は時間が経過するにつれて、レイドレベル変更後の有効な物理ストライプの割合が増加する。このことは、第２の変形例におけるレイドレベル変更処理、即ちディスクアレイ２上のデータの移動を行うことなく当該ディスクアレイ２のレイドレベルを変更する処理を実行しても、何ら問題がないことを示す。但し、第２の変形例では、上記したように、レイドレベル変更前の有効な物理ストライプと、レイドレベル変更後の有効な物理ストライプとが混在する。このため、第２の変形例では、物理ストライプから論理アドレスタグブロックＴＧ及びパリティブロックを取り出す必要がある場合には、ディスクアレイ２が適用するレイドレベルによっては、その物理ストライプに適用されたストライピングルールを特定するために、その物理ストライプがレイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかを判別する必要がある。これについては、後述する。
【０１０１】
次に、第２の変形例における、レイドレベル変更後のディスクアレイ装置の読み込み動作について、簡単に説明する。
まず、制御装置１は、ホストコンピュータ１０からの読み出し要求に応じて、読み出すべきデータの開始位置の論理アドレス（論理ブロックアドレス）とサイズ（データブロックのサイズの整数倍）とを受け取る。制御装置１は、受け取った論理アドレスとサイズとから、当該論理アドレスを含む、当該サイズで指定されるブロック数分の論理ブロックの論理アドレスを求める。制御装置１は、求めた各論理アドレスについて、ステップＳ２６で不揮発性メモリ３上に再構築されたレイドレベル変更後のアドレス変換テーブル３２の対応するエントリを参照することで、当該論理アドレス（論理ブロックアドレス）を物理アドレス（物理ブロックアドレス）に変換する。この物理アドレスは、物理ストライプ番号と物理ブロック番号とから構成される。
【０１０２】
制御装置１は、変換後の物理アドレスを用いて、ディスクアレイ２から当該物理アドレスで指定される物理ブロックのデータを読み込み、ホストコンピュータ１０に転送する。ここで、ディスクアレイ２からの読み出しの対象となる物理ブロックを含む物理ストライプは、レイドレベル変更前の物理ストライプ、またはレイドレベル変更後の物理ストライプである。しかし、この物理ブロックを読み出すのに、いずれの物理ストライプであるかを意識する必要はない。明らかなように、アドレス変換後の物理アドレスの示す物理ブロックがレイドレベル変更前の物理ストライプに含まれている場合、そのアドレス変換に用いられたアドレス変換テーブル３２内のエントリの情報は、レイドレベル変更前に登録されたものである。これに対し、アドレス変換後の物理アドレスの示す物理ブロックがレイドレベル変更後の物理ストライプに含まれている場合、そのアドレス変換に用いられたアドレス変換テーブル３２内のエントリの情報は、レイドレベル変更後に登録されたものである。
【０１０３】
なお、ディスクアレイ装置には、一般にホストコンピュータ１０と当該ディスクアレイ装置との間で入出力されるデータを一時保持するのに用いられるデータキャッシュが設けられている。したがって、ホストコンピュータ１０から要求された読み出しの対象となるデータがデータキャッシュ上に存在する場合には、当該キャッシュ上のデータが読み出されてホストコンピュータ１０に転送される。
【０１０４】
図１１に、本発明の実施形態の第２の変形例におけるレイドレベル変更後のアドレス変換テーブル３２の一例を示す。
図１１の例では、例えば論理アドレスＬ０，Ｌ１に対応するアドレス変換テーブル３２内のエントリには、ＮＵＬＬ以外の値のタイムスタンプが設定されている。ＮＵＬＬでないので、不揮発性メモリ３に記録されているレイドレベル変更前のアドレス変換テーブル、つまりアドレス変換テーブルのコピー３５に対応する物理ストライプ番号と物理ブロック番号とが登録されていることを示す。また、論理アドレスＬ２，Ｌｉの論理ブロックは、それぞれ物理ストライプ番号７０００，１００００の物理ストライプ中の、物理ブロック番号１４，２のブロック領域に記録されていることを示す。論理アドレスＬｊは、無効な論理アドレスであることを示す。
【０１０５】
さて、ＲＡＩＤ５を適用したディスクアレイ２のレイドレベル変更に、上記第２の変形例を用いた場合、レイドレベル変更後に書き込みが実施されていないストライプとレイドレベル変更後に書き込みが実施されたストライプとでは、論理アドレスタグロックの位置が異なってくる。先に述べたように、論理アドレスタグブロック位置は、物理ストライプ番号とディスクアレイを構成するディスク装置の台数とから簡単に計算できる。
【０１０６】
例えば、図２に示したように、ディスク装置２１〜２３を使用してレイドレベル変更前のディスクアレイ２を構成すると共に、当該ディスクアレイ２を右対称にパリティデータが配置されるＲＡＩＤ５で使用する場合には、物理ストライプ番号が１００のパリティブロックは、１００／３の剰余が１であることから、ディスク装置２１〜２３のうちの２番目のディスク装置２２に配置され、論理アドレスタグブロックは、ディスク装置２１〜２３のうちの３番目のディスク装置２３（パリティブロックが配置されるディスク位置　＋　１）に配置される（図９（ａ）参照）。また、図５に示したように、追加されたディスク装置２４を含むディスク装置２１〜２４を使用してレイドレベル変更後のディスクアレイ２を構成すると共に、当該ディスクアレイ２をＲＡＩＤ０で使用する場合には、右対称に論理アドレスタグブロックが配置され、レイドレベル変更後の物理ストライプ番号が１００の物理ストライプに対するストライプ単位での書き込みが実施された後には、論理アドレスタグブロックは、１００／４の剰余が０であることから、ディスク装置２１〜２４のうちの２番目のディスク装置２２に配置される（図９（ｂ）参照）。
【０１０７】
上述のようにディスクアレイ２内の各物理ストライプに配置される論理アドレスタグブロックの位置は、レイドレベル変更前とレイドレベル変更後（で且つ拡張された物理ストライプへの書き込みの後）とによって異なる。レイドレベル変更の前と後のどちらの物理ストライプが有効であるかを判定するためには、図１１に示したレイドレベル変更後のアドレス変換テーブル３２を使用すればよい。具体的には、判定の対象となる物理ストライプの物理ストライプ番号でレイドレベル変更後のアドレス変換テーブル３２を逆引きし、当該物理ストライプ番号が登録されているエントリ中のタイムスタンプを、レイドレベル変更時にディスクアレイ２の特別な領域に保存されたタイムスタンプ情報（レイドレベル変更時タイムスタンプ情報）中のタイムスタンプと比較すればよい。ここでは、レイドレベル変更後のアドレス変換テーブル３２内のエントリ中のタイムスタンプの値がレイドレベル変更時タイムスタンプ情報中のタイムスタンプの値以上であれば、対応する物理ストライプはレイドレベル変更後に物理ストライプ単位での書き込みがなされた有効なストライプであると判定される。これに対し、レイドレベル変更後のアドレス変換テーブル３２内のエントリ中のタイムスタンプの値がレイドレベル変更時タイムスタンプ情報中のタイムスタンプの値より小さいならば、そのエントリ中のタイムスタンプが非ＮＵＬＬであるか否かにより、対応する物理ストライプが、レイドレベル変更前に物理ストライプ単位での書き込みがなされた有効なストライプであるか（非ＮＵＬＬの場合）、或いはレイドレベル変更前から空きストライプであったか（ＮＵＬＬの場合）が判定される。
【０１０８】
ここで、レイドレベル変更前またはレイドレベル変更後の有効な各物理ストライプ中の論理アドレスタグブロックの記録位置は、先に述べたように、そのレイドレベルの変更前または変更後においてディスクアレイ２を構成するディスク装置の台数と当該物理ストライプの物理ストライプ番号とから計算により決定される。
【０１０９】
本発明の実施形態の第２の変形例では、レイドレベル変更後にセグメントクリーニング処理が行われる。以下、このセグメントクリーニング処理について説明する。
【０１１０】
まず、本発明の実施形態では、前記したように、ホストコンピュータ１０から要求された書き込みデータ（更新データ）により旧データの領域を直接書き換えるのではなく、その書き込みデータをブロック単位に分割して書き込みバッファ３１に溜めておき、当該書き込みバッファ３１に１ストライプ分の論理ブロックが溜まった段階で、その１ストライプ分の論理ブロック及びパリティブロックを含む１ストライプ分のデータブロックを、ディスクアレイ２内の旧データの領域とは別の空き領域にまとめて書き込む方法を適用している。この、まとめ書きのためには、空き領域が常に存在することが必要である。そこで、既に他の領域にデータが書き込まれ無効になっているデータを寄せ集めて空き領域を確保する必要がある。この処理をセグメントクリーニング処理と呼ぶ。
【０１１１】
セグメントクリーニング処理は、無効ブロック判定とストライプ統合との２つのステップに大別される。無効ブロックの判定には、レイドレベル変更後のアドレス変換テーブル３２に記録されているタイムスタンプを使用する。このアドレス変換テーブル３２に記録されているタイムスタンプには、その記録時点に不揮発性メモリ３上のタイムスタンプ情報３３に含まれているタイムスタンプが用いられる。このタイムスタンプ情報３３は、書き込みバッファ３１に蓄積されたデータをストライプ単位でディスクアレイ２にまとめ書きする際に、論理アドレスタグブロックＴＧにタイムスタンプ情報ＴＳの一部として付加される。先に述べたように、タイムスタンプ情報３３に含まれているタイムスタンプは、ディスクアレイ２に対するストライプ単位の書き込みが行われる毎にインクリメントされる。したがって、ストライプ統合の対象となる各物理ストライプ中の各論理ブロックが無効であるか否か（有効であるか）は、当該ストライプに含まれている論理アドレスタグブロック中に、当該論理アドレスタグブロック中の各論理アドレスに対応するアドレス変換テーブル３２内のエントリに設定されているタイムスタンプより値が小さいタイムスタンプ、つまり古いタイムスタンプが設定されているか否かにより判定可能である。
【０１１２】
ストライプ統合の対象となる物理ストライプに含まれている論理アドレスタグブロックの位置は、ディスクアレイ２にＲＡＩＤ５の冗長化ディスク構成を適用している第２の変形例では、先に述べたように当該ストライプがレイドレベル変更前の有効なストライプであるか、或いはレイドレベル変更後の有効なストライプであるかによって異なる。この物理ストライプ中の論理アドレスタグブロックの位置は、対応する物理ストライプ番号とディスクアレイ２を構成するディスク装置の台数とから、更に詳細に述べるならば、物理ストライプ番号とディスクアレイ２を構成するディスク装置の台数で決まるストライピングルールとから、簡単に計算できる。ここでは、ディスクアレイ２を構成するディスク装置の台数には、レイドレベル変更前の物理ストライプ中の論理アドレスタグブロック位置を計算する場合であれば、レイドレベル変更前のディスク台数３を用い、レイドレベル変更後の物理ストライプ中の論理アドレスタグブロック位置を計算する場合であれば、レイドレベル変更後のディスク台数４を用いればよい。
【０１１３】
ストライプ統合の対象となる物理ストライプがレイドレベル変更前の有効なストライプであるか、或いはレイドレベル変更後の有効なストライプであるかの判定、つまりストライプ判定のためには、先に述べたように、ストライプ統合の対象となる物理ストライプの物理ストライプ番号でレイドレベル変更後のアドレス変換テーブル３２を逆引きし、当該物理ストライプ番号が登録されているエントリ中のタイムスタンプを、レイドレベル変更時タイムスタンプ情報中のタイムスタンプと比較すればよい。但し、第２の変形例では、以下に述べるように、ストライプ統合の対象となるストライプには、レイドレベル変更前のストライプが用いられる。なお、ストライプ統合の対象となるストライプを選択するためのアルゴリズムについては、従来から種々提案されていると共に本発明に直接関係しないため、説明を省略する。
【０１１４】
ストライプ統合処理の具体例を、図１２を参照して説明する。
図１２は、２つのストライプｉ，ｊを１つのストライプｋに統合する例を示している。まず、ストライプｉ，ｊは、いずれも上述のストライプ判定でレイドレベル変更前の有効なストライプであると判定された物理ストライプである。ストライプｉは、ブロックＢ１〜Ｂ１１と論理アドレスタグブロックＴＧｉとの１２ブロックから構成され、ブロックＢ１〜Ｂ１１中ではブロックＢ２，Ｂ７，Ｂ８の３ブロックが有効で他の８ブロックは無効であるとする。同様に、ストライプｊは、ブロックＢ１２〜Ｂ２２と論理アドレスタグブロックＴＧｊとの１２ブロックから構成され、ブロックＢ１２〜Ｂ２２中ではブロックＢ１２，Ｂ１３，Ｂ１８，Ｂ１９，Ｂ２０，Ｂ２１，Ｂ２２の７ブロックが有効で他の４ブロックが無効であるとする。ここで、ブロックＢｘ（ｘ＝１〜２２）の表記は、当該ブロックが論理アドレスがｘの論理ブロックであることを示す。
【０１１５】
図１２の例では、２つのストライプｉ，ｊの有効ブロックは論理アドレスタグブロックＴＧｉ，ＴＧｊを除くと合計で１０ブロックしかない。したがって、この２つのストライプｉ，ｊを、当該ストライプｉ，ｊに含まれていた有効なブロックＢ２，Ｂ７，Ｂ８，Ｂ１２，Ｂ１３，Ｂ１８，Ｂ１９，Ｂ２０，Ｂ２１，Ｂ２２と、対応する論理アドレスタグブロックＴＧｋとを含む、拡張されたストライプｋに統合することにより、結果として１つの空きストライプが確保できる。
【０１１６】
図１２の例では、ストライプｋに統合された有効ブロックを、Ｂ２，Ｂ７，Ｂ８，Ｂ１２，Ｂ１３，Ｂ１８，Ｂ１９，Ｂ２０，Ｂ２１，Ｂ２２の順番、つまり論理アドレスの順番に並べている。このように、ストライプ統合時に、各有効ブロックを対応する論理アドレスの昇順に並び替えると、シーケンシャルアクセスの性能の低下を防ぐことができる。そのためには、ストライプ統合の対象として、連続した有効な論理アドレスの論理ブロックを含むストライプｉ，ｊを選択することが好ましい。
【０１１７】
さて制御装置１は、選択された２つのストライプｉ，ｊをストライプｋに統合するために、当該ストライプｉ，ｊを揮発性メモリ４に読み込み、しかる後に当該ストライプｉ，ｊ中の有効ブロックだけを不揮発性メモリ３上のレイドレベル変更後の書き込みバッファ３１に詰めて書き込む。図１２の例では、書き込みバッファ３１上には、有効ブロックが書き込まれない空きのブロック領域が５つある。そこで制御装置１は、上記５つの空きブロック領域に、それぞれＮＵＬＬを設定する。また、制御装置１は、ストライプｉ，ｊ中の、対応する物理ストライプ番号とレイドレベル変更前のストライピングルールとで決まる位置に配置されている論理アドレスタグブロックＴＧｉ，ＴＧｊから有効ブロックの論理アドレスだけを取り出して、ストライプｋにおける有効ブロックの配列に一致する並びの論理アドレス列とタイムスタンプ情報ＴＳとを含む新たな論理アドレスタグブロックＴＧｋを生成し、その論理アドレスタグブロックＴＧｋを書き込みバッファ３１の最後のブロック領域に書き込む。ここで、タイムスタンプ情報ＴＳ中のタイムスタンプ、世代番号、及びディスク台数には、その時点におけるタイムスタンプ情報３３中のタイムスタンプ、世代番号、及びディスク台数が用いられる。このタイムスタンプ情報３３は、ストライプｋがディスクアレイ２に書き込まれた際に更新される。
【０１１８】
このように、ストライプ統合は、無効なデータブロックを持つ複数のストライプを統合して、その複数のストライプに含まれている全ての有効なデータブロックを持つストライプを作成する処理である。なお、２つのストライプを１つのストライプに統合するだけでなく、３つ以上のストライプを、それより少ない２つ以上のストライプに統合することも可能である。
【０１１９】
次に、本発明の実施形態の第２の変形例において、不揮発性メモリ３が故障した場合に適用されるアドレス変換テーブル３２の再構築処理について、図１３及び図１４のフローチャートを参照して説明する。
【０１２０】
まず、本発明の実施形態では、ホストコンピュータ１０からディスクアレイ装置への入出力要求に対し、不揮発性メモリ３上のアドレス変換テーブル３２を用いて論理アドレスから物理アドレスへの変換が行われ、その物理アドレスを用いてディスクアレイ２がアクセスされる。このため、不揮発性メモリ３が故障した場合には、アドレス変換テーブル３２が使用できなくなって、ディスクアレイ２へのアクセスができなくなってしまう。この場合、アドレス変換テーブル３２の再構築処理が必要となる。
【０１２１】
アドレス変換テーブル３２の再構築処理のためには、制御装置１はまず、各エントリの論理アドレスのフィールドにのみ論理アドレスが設定され、他のフィールドには全てＮＵＬＬが設定されたアドレス変換テーブル３２、つまり初期化されたアドレス変換テーブル３２を、故障不揮発性メモリ３と交換された新たな不揮発性メモリ３上に配置する（ステップＳ３１）。ここでは、アドレス変換テーブル３２のエントリｉには、そのエントリｉに一致する論理アドレスＬｉが設定されている。
【０１２２】
次に、制御装置１は、物理ストライプを指定する変数ｉを最初の物理ストライプを示す初期値に設定する（ステップＳ３２）。そして制御装置１は、ディスクアレイ２内の物理ストライプｉに含まれている論理アドレスタグブロックＴＧを検出する処理（ステップＳ３３〜Ｓ３８）を実行する。この論理アドレスタグブロックＴＧを検出する処理の詳細については後述する。
【０１２３】
制御装置１は、検出した論理アドレスタグブロックＴＧ中の各論理アドレスについて、その論理アドレスに対応するアドレス変換テーブル３２内のエントリを参照する（ステップＳ３９，Ｓ４０）。そして制御装置１は、参照したアドレス変換テーブル３２内エントリ中のタイムスタンプの値が、上記検出した論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれているタイムスタンプの値より小さいか否かを判定する（ステップＳ４１）。
【０１２４】
もし、参照したアドレス変換テーブル３２内エントリ中のタイムスタンプの値が、検出した論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれているタイムスタンプの値より小さいならば（ステップＳ４１のＹＥＳ）、制御装置１は当該エントリに設定されているアドレス変換情報は無効であり、したがって当該情報の示す物理ブロックのデータは無効であると判定する。この場合、制御装置１は、参照したアドレス変換テーブル３２内エントリ中の物理ストライプ番号、物理ブロック番号、及びタイムスタンプを、上記検出した論理アドレスタグブロックＴＧが属する物理ストライプを示す番号、当該エントリに対応する論理アドレスの論理ブロックが格納されている物理ブロックの番号、及び当該論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれているタイムスタンプに更新し（ステップＳ４２）、ステップＳ４３に進む。
【０１２５】
これに対し、参照したアドレス変換テーブル３２内のエントリ中のタイムスタンプの値が、上記検出した論理アドレスタグブロックＴＧ中のタイムスタンプ情報ＴＳに含まれているタイムスタンプの値以上であるならば、制御装置１は、当該エントリに設定されている情報の示す物理ブロックのデータは有効であると判定する。この場合、制御装置１は、参照したアドレス変換テーブル３２内のエントリの更新を行わずに、そのままステップＳ４３に進む。
【０１２６】
制御装置１は、上記ステップＳ４３において、上記検出した論理アドレスタグブロックＴＧ中の全ての論理アドレスについて処理したか否かを判定する。もし、未処理の論理アドレスが残っているならば（ステップＳ４３のＮＯ）、制御装置１はステップＳ３９に戻って、上記検出した論理アドレスタグブロックＴＧから未処理の論理アドレスを取り出す。これに対し、全ての論理アドレスについて処理したならば（ステップＳ４３のＹＥＳ）、制御装置１はｉを１だけインクリメントして（ステップＳ４４）、そのインクリメント後のｉの値、つまり物理ストライプｉから、全ての物理ストライプについて処理したか否かを判定する（ステップＳ４５）。もし、未処理の物理ストライプが残っているならば（ステップＳ４５のＮＯ）、制御装置１は、インクリメント後のｉで指定される物理ストライプｉについて、ステップＳ３３以降の処理を実行する。これに対し、全ての物理ストライプについて処理したならば（ステップＳ４５のＹＥＳ）、制御装置１は、アドレス変換テーブル３２の再構築処理を終了する。
【０１２７】
次に上記論理アドレスタグブロックＴＧを検出する処理の詳細について説明する。ＲＡＩＤ５を適用したディスクアレイ２では、前記したようにレイドレベル変更後に書き込みが実施されていないストライプとレイドレベル変更後に書き込みが実施されたストライプとでは、論理アドレスタグブロックＴＧの位置が異なる場合がある（図９参照）。そのため、レイドレベル変更の前と後のどちらの物理ストライプが有効であるかを判断する必要がある。そこで、制御装置１は、物理ストライプｉから論理アドレスタグブロックＴＧを検出するために、例えば当該物理ストライプｉはレイドレベル変更後に書き込みがなされた物理ストライプであると仮定する。そして制御装置１は、レイドレベル変更後のストライピングルールに従って、物理ストライプｉ中の、物理ストライプ番号とディスクアレイ２を構成するディスク装置の台数（ここでは４）とで決まる位置から、論理アドレスタグブロックＴＧを読み込む（ステップＳ３３）。
【０１２８】
制御装置１は、読み込んだ論理アドレスタグブロックＴＧがＮＵＬＬであるか否かを判定する（ステップＳ３４）。もし、読み込んだ論理アドレスタグブロックＴＧがＮＵＬＬであるならば（ステップＳ３４のＹＥＳ）、制御装置１は、対応する物理ストライプｉはレイドレベル変更時の上記ステップＳ２７の処理で初期化（ＮＵＬＬ初期化）されたままであり、レイドレベル変更後も依然として空きストライプのままであると判定する。この場合、制御装置１はディスクアレイ２内の次の物理ストライプからの論理アドレスタグブロックＴＧの検出のために、ステップＳ４４に進む。これに対し、読み込んだ論理アドレスタグブロックＴＧがＮＵＬＬでないならば（ステップＳ３４のＮＯ）、制御装置１は、当該論理アドレスタグブロックＴＧ中のタイムスタンプの値がレイドレベル変更時にディスクアレイ２の特別な領域に保存されたタイムスタンプ情報（レイドレベル変更時タイムスタンプ情報）中のタイムスタンプの値以上であるか否かを判定する（ステップＳ３５）。
【０１２９】
もし、論理アドレスタグブロックＴＧ中のタイムスタンプの値がレイドレベル変更時タイムスタンプ情報中のタイムスタンプの値以上であるならば（ステップＳ３５のＹＥＳ）、制御装置１は、対応する物理ストライプｉはレイドレベル変更後の有効な物理ストライプであるとして、ステップＳ３３で読み込んだ論理アドレスタグブロックＴＧを採用する（ステップＳ３６）。これにより、レイドレベル変更後の有効な物理ストライプｉから、論理アドレスタグブロックＴＧが検出されたことになる。
【０１３０】
一方、論理アドレスタグブロックＴＧ中のタイムスタンプの値がレイドレベル変更拡張時タイムスタンプ情報中のタイムスタンプの値以上であると判定できない場合（論理アドレスタグブロックＴＧが不定の場合も含む）には（ステップＳ３５のＮＯ）、制御装置１は、対応する物理ストライプがレイドレベル変更後の有効な物理ストライプであるとの仮定が誤っており、当該物理ストライプはレイドレベル変更前の有効な物理ストライプであると判定する。この場合、制御装置１は、レイドレベル変更前のストライピングルールに従って、物理ストライプｉ中の、物理ストライプ番号とレイドレベル変更前のディスクアレイ２を構成するディスク装置の台数（ここでは３）とで決まる位置から、論理アドレスタグブロックＴＧを読み込み（ステップＳ３７）、当該論理アドレスタグブロックＴＧを採用する（ステップＳ３８）。これにより、レイドレベル変更前の有効な物理ストライプｉから、論理アドレスタグブロックＴＧが検出されたことになる。
【０１３１】
次に、本発明の実施形態の第２の変形例において、ディスクアレイ２のレイドレベルが例えばＲＡＩＤ５からＲＡＩＤ１（またはＲＡＩＤ１からＲＡＩＤ１）のような冗長データ（またはパリティデータ）を有するレイドレベルに変更された後に、当該ディスクアレイ２を構成するディスク装置のいずれか１つに障害が発生した場合に、その障害が発生したディスク装置のデータを予備のディスク装置に復旧する処理について、図１５のフローチャートを参照して説明する。
【０１３２】
まず、制御装置１は、論理アドレス（論理ブロックアドレス）を示す変数ｉを初期値０に設定する（ステップＳ５１）。次に、制御装置１は、論理アドレスｉに対応する、レイドレベル変更後のアドレス変換テーブル３２内のエントリを参照する（ステップ５２）。制御装置１は、参照したアドレス変換テーブル３２内エントリ中の物理ストライプ番号、物理ブロック番号、及びタイムスタンプの各項目がいずれもＮＵＬＬ以外であるか否かを調べることで、論理アドレスｉが有効であるか否かを判定する（ステップＳ５３）。
【０１３３】
もし、論理アドレスｉが有効であるならば（ステップＳ５３のＹＥＳ）、つまり有効な論理アドレスｉが検索できたなら、制御装置１は、上記参照したアドレス変換テーブル３２内エントリ中の物理ブロック番号が、障害が発生したディスク装置（障害ディスク装置）に固有の物理ブロック番号であるか否かを判定する（ステップＳ５４）。もし、参照したアドレス変換テーブル３２内エントリに、障害ディスク装置に固有の物理ブロック番号が登録されているならば（ステップＳ５４のＹＥＳ）、つまり障害ディスク装置に固有の物理ブロック番号に対応する有効な論理アドレスｉが検索できたなら、制御装置１は、当該エントリ中のタイムスタンプの値が、レイドレベル変更時タイムスタンプ情報中のタイムスタンプの値以上であるか否かを判定する（ステップＳ５５）。
【０１３４】
もし、参照したアドレス変換テーブル３２内エントリ中のタイムスタンプの値が、レイドレベル変更時タイムスタンプ情報中のタイムスタンプの値より小さいならば（ステップＳ５５のＮＯ）、制御装置１は、論理アドレスｉのデータブロックが存在する物理ストライプがレイドレベル変更前の有効な物理ストライプであると判定する。この場合、制御装置１は、論理アドレスｉのデータを、レイドレベル変更前のストライピングルールに従って復旧し、その復旧されたデータを障害ディスク装置に代えて用いられる予備ディスク装置、つまり置換ディスク装置に書き込む（ステップＳ５６）。これに対し、参照したアドレス変換テーブル３２内エントリ中のタイムスタンプの値が、レイドレベル変更時タイムスタンプ情報中のタイムスタンプの値以上ならば（ステップＳ５５のＹＥＳ）、制御装置１は、論理アドレスｉのデータブロックが存在する物理ストライプがレイドレベル変更後の有効な物理ストライプであると判定する。この場合、制御装置１は、論理アドレスｉのデータを、レイドレベル変更後のストライピングルールに従って復旧し、その復旧されたデータを上記置換ディスク装置に書き込む（ステップＳ５７）。具体的には、ディスク装置２１に障害が発生した場合を例にとると、制御装置１は、レイドレベル変更前の有効な物理ストライプに対応する有効な論理アドレスｉについては、当該ストライプ中のディスク装置２２及び２３に属するデータブロックをもとに、レイドレベル変更後の有効な物理ストライプに対応する有効な論理アドレスｉについては、当該ストライプ中のディスク装置２２乃至２４に属するデータブロックをもとに、いずれも各データブロック間の排他的論理和演算により（ディスクアレイ２がＲＡＩＤ４またはＲＡＩＤ５等を適用する場合）データを復旧する。
【０１３５】
制御装置１は、ステップＳ５６またはＳ５７を実行すると、ｉを１だけインクリメントする（ステップＳ５８）。制御装置１は、このインクリメント後のｉの値から、全ての論理アドレスについて処理したか否かを判定する（ステップＳ５９）。もし、未処理の論理アドレスが残っているならば（ステップＳ５９のＮＯ）、ステップＳ５８でのインクリメント後のｉで指定される論理アドレスｉについて、上記ステップＳ５２以降の処理を実行する。これに対し、全ての論理アドレスについて処理したならば（ステップＳ５９のＹＥＳ）、制御装置１は、障害ディスク装置のデータを復旧する処理を終了する。これにより、ディスクアレイ２が再構築される。
【０１３６】
このように、本発明の実施形態の第２の変形例では、ディスクアレイ２を構成するディスク装置のいずれか１つに障害が発生した場合、ホストコンピュータ１０により使用されている有効な論理アドレスであって、且つ障害ディスク装置上に存在する物理ブロックに割り当てられていた有効な論理アドレスが、アドレス変換テーブル３２から検索され、その論理アドレスのデータのみが復旧される。このため、復旧処理が短時間で行える。ここで、論理アドレスのデータを復旧するためには、上記したように、当該論理アドレスのデータブロックが存在する物理ストライプが、レイドレベル変更前の有効な物理ストライプであるか、或いはレイドレベル変更後の有効な物理ストライプであるかを、判定する必要がある。第２の変形例では、この判定を、対象となる論理アドレスに対応するアドレス変換テーブル３２内のエントリ中のタイムスタンプを、レイドレベル変更時タイムスタンプ情報中のタイムスタンプと比較することにより行っているため、正しい判定が可能となる。
【０１３７】
なお、復旧したデータは、当該データが障害ディスク装置に格納されていた物理ブロックに相当する置換ディスク装置内の物理ブロックに必ずしも書き込む必要はない。例えば、復旧したデータを含めて有効な論理アドレスのデータのみを、書き込みバッファ３１に蓄積しながら、障害ディスク装置が置換ディスク装置に置き換えられたディスクアレイ２に対し、ストライプ単位で書き込みを行うようにしても構わない。この場合、セグメントクリーニングが同時に行える。
【０１３８】
つまり、ディスクアレイ２のＲＡＩＤ構成を再構築する場合には、次のようにすることで同時にセグメントクリーニングを実施することが可能となる。まず、レイドレベル変更後のアドレス変換テーブル３２を使用して、有効な論理アドレスに対応する論理ブロックのデータのみをディスクアレイ２から読み出す。このディスクアレイ２から読み出した論理ブロックのデータをレイドレベル変更後の書き込みバッファ３１に順次書き込む。そして、書き込みバッファ３１に１ストライプ分の論理ブロックのデータが溜まる毎に、論理アドレスタグブロックとパリティブロックを生成し、その１ストライプ分の論理ブロックのデータと論理アドレスタグブロックとパリティブロックとからなる１ストライプ分のデータブロックを、レイドレベル変更後のストライピングルールに従ってディスクアレイ２に書き込む。これにより、ＲＡＩＤ構成の再構築と同時にセグメントクリーニングを実現できる。
【０１３９】
ここで、ＲＡＩＤ構成を再構築するに際し、先に述べた本発明の実施形態の第１の変形例と同様に、有効な論理アドレスを昇順に並び替えるとよい。この場合、有効な論理アドレスの順番に、その論理アドレスのデータをレイドレベル変更後の書き込みバッファ３１に蓄積し、レイドレベル変更後のストライピングルールに従ってディスクアレイ２に書き込みすることになる。これにより、ＲＡＩＤ構成の再構築処理後の論理アドレスの連続性が保証され、ホストコンピュータ１０からのシーケンシャルリードを効率よく処理することができる。
【０１４０】
［第３の変形例］
次に、本発明の実施形態の第３の変形例によるレイドレベル変更処理について図１６のフローチャートを参照して説明する。
【０１４１】
図１６に示すように、第３の変形例によるレイドレベル変更処理は、図８のフローチャート中のステップＳ２１〜Ｓ２６に相当するステップＳ６１〜Ｓ６６と、図８のフローチャート中のステップＳ２８に相当するステップＳ６７とにより実現される。このように、第３の変形例の特徴は、第２の変形例におけるレイドレベル変更処理とは異なって、図８のフローチャート中のステップＳ２７に相当する処理を必要としない点にある。このステップＳ２７の処理、つまりディスクアレイ２のレイドレベル変更後の空きストライプに含まれている論理アドレスタグブロックＴＧをＮＵＬＬ初期化する処理は、有効な論理アドレスタグブロックＴＧがレイドレベル変更前と後のいずれで生成されたものであるかを判別可能とするために実行されている。しかし、第３の変形例では、有効な論理アドレスタグブロックＴＧがレイドレベル変更前または後のいずれに生成されたものであるか（或いは、何度目のレイドレベル変更で生成されたものであるか）を、当該論理アドレスタグブロックＴＧ中の各論理アドレス、タイムスタンプ、ストライプ世代番号、及びディスク台数をもとに算出されるチェックサムを利用して判別することで、図１６に示したように、レイドレベル変更処理における論理アドレスタグブロックＴＧのＮＵＬＬ初期化を不要としている。これにより、ディスク装置に対する入出力を必要最低限に抑えることができ、レイドレベル変更処理にかかる時間をより一層短縮することができる。
【０１４２】
次に、本発明の実施形態の第３の変形例において適用される有効な論理アドレスタグブロックを判別する処理について、図１７のフローチャートを参照して説明する。なお、図１７のフローチャートは、レイドレベル変更後におけるディスクアレイ２上の１つの物理ストライプについて有効な論理アドレスタグブロックＴＧを求める処理を示すものである。したがって、図１７のフローチャートによって示される処理を、ディスクアレイ２上の全ての物理ストライプについて実行することにより、その全ての物理ストライプに対する有効な論理アドレスタグブロックＴＧを求めることが可能となる。
【０１４３】
まず、制御装置１は、ディスクアレイ２の特別な領域に保存されているタイムスタンプ情報、つまり最も最近に行われたレイドレベル変更時のタイムスタンプ情報を読み込む（ステップＳ７１）。次に、制御装置１は、読み込んだタイムスタンプ情報から世代番号を取り出す（ステップＳ７２）。制御装置１は、取り出した世代番号に対応するディスク台数と、判別の対象とする論理アドレスタグブロックＴＧを含む物理ストライプの物理ストライプ番号とから、当該論理アドレスタグブロックＴＧの記録位置を算出する（ステップＳ７３）。
【０１４４】
制御装置１は、ステップＳ７３での算出結果に基づき上記物理ストライプ番号で指定される物理ストライプに含まれている論理アドレスタグブロックＴＧを読み込む（ステップＳ７４）。次に、制御装置１は、読み込んだ論理アドレスタグブロックＴＧが有効であると仮定して、当該論理アドレスタグブロックＴＧ中の各論理アドレス、タイムスタンプ、ディスク台数、及び世代番号からチェックサムを算出する（ステップＳ７５）。そして、制御装置１は、読み込んだ論理アドレスタグブロックＴＧ中のチェックサムと、ステップＳ７５で算出したチェックサムとが等しいか否かを判定する（ステップＳ７６）。
【０１４５】
もし、読み込んだ論理アドレスタグブロックＴＧ中のチェックサムと、算出したチェックサムとが等しいならば（ステップＳ７６のＹＥＳ）、制御装置１は、当該論理アドレスタグブロックＴＧは、上記世代番号で示されるレイドレベル変更後に生成された有効なブロックであると判定して、対応する物理ストライプについての処理を終了する（ステップＳ７７）。この場合、有効であると判定された論理アドレスタグブロックＴＧを含む物理ストライプ中の有効な論理ブロックの位置、及び有効なパリティブロックの位置も、上記ディスク台数及び物理ストライプ番号とから決定可能である。
【０１４６】
これに対し、読み込んだ論理アドレスタグブロックＴＧ中のチェックサムと、算出したチェックサムとが等しくないならば（ステップＳ７６のＮＯ）、制御装置１は、当該論理アドレスタグブロックＴＧは無効であると判定する。この場合、制御装置１は、上記世代番号を１だけデクリメントして（ステップＳ７８）、上記ステップＳ７３に戻る。なお、図１７では省略されているが、世代番号が初期値に一致するまでステップＳ７８が繰り返されても、論理アドレスタグブロックＴＧが無効であると判定された場合には、対応する物理ストライプは空きストライプであると判定され、当該物理ストライプについての処理は終了となる。
【０１４７】
このように、本発明の実施形態の第３の変形例では、世代番号とチェックサムを利用することで、上記第２の変形例のようにレイドレベル変更処理で論理アドレスタグブロックをＮＵＬＬ初期化することなく、レイドレベル変更前の有効な論理アドレスタグブロックとレイドレベル変更後の有効な論理アドレスタグブロックを検出でき、加えて、それぞれ異なるレイドレベル変更時点で使用されていた有効な論理アドレスタグブロックも正しく検出できる。したがって、この有効な論理アドレスタグブロックの検出機能を利用して、図１３及び図１４のフローチャート中のステップＳ３３〜Ｓ３８に相当する論理アドレスタグブロック検出処理を実行することで、不揮発性メモリ１３が故障した場合のアドレス変換テーブル３２の再構築処理も、上記第２の変形例と同様に実現できる。また、ディスクアレイ２を構成するディスク装置のいずれか１つに障害が発生した場合における、その障害が発生したディスク装置のデータを復旧する処理も、上記第２の変形例と同様に実現できる。
【０１４８】
［第４の変形例］
次に、本発明の実施形態の第４の変形例について説明する。この第４の変形例の特徴は、レイドレベル変更処理において、論理アドレスと物理アドレスとが一致するようにデータの移動（再配置）を実施する点にある。
【０１４９】
次に、本発明の実施形態の第４の変形例によるレイドレベル変更処理について図１８及び図１９のフローチャートを参照して説明する。
図１８及び図１９に示すように、第４の変形例によるレイドレベル変更処理は、図６のフローチャート中のステップＳ１〜Ｓ６に相当するステップＳ８７〜Ｓ９６と、図６及び図７のフローチャート中のステップＳ７〜Ｓ１５に対応するステップＳ８７〜Ｓ９５とにより実現される。第４の変形例によるレイドレベル変更処理が図６及び図７のフローチャートに従うレイドレベル変更処理と異なる点は、このステップＳ８７〜Ｓ９５の処理にある。
【０１５０】
第４の変形例において、制御装置１は、アドレス変換テーブルのコピー３５から有効な論理アドレスｉと当該論理アドレスｉに対応する物理アドレス（を構成する物理ストライプ番号及び物理ブロック番号）とを検索する（ステップＳ８７〜Ｓ９０）。制御装置１は、有効な論理アドレスｉ及び対応する物理アドレスを検索する都度、その物理アドレスの指定するレベル変更前のディスクアレイ２の領域から当該論理アドレスｉのデータ（データブロック）を読み込む（ステップＳ９１）。そして制御装置１は、読み込んだ論理アドレスｉのデータを、書き込みバッファ３１を介して、当該論理アドレスｉに一致する物理アドレスｉの指定するレベル変更後のディスクアレイ２の領域に書き込む（ステップＳ９２，Ｓ９３）。これにより、論理アドレスｉのデータが当該論理アドレスｉに一致する物理アドレスｉの領域に移動されたことになる。制御装置１は、このデータ移動のための処理（ステップＳ９０〜Ｓ９３）を、アドレス変換テーブルのコピー３５で示されている全ての有効な論理アドレスについて実行する（ステップＳ９４，Ｓ９５，Ｓ８８，Ｓ８９）。
【０１５１】
このように第４の変形例においては、アドレス変換テーブルのコピー３５を利用して、有効な論理アドレス（と対応する物理アドレスを構成する物理ストライプ番号及び物理ブロック番号と）を検索し、その有効な論理アドレスのデータのみを、当該有効な論理アドレスに一致する物理アドレス（を構成する物理ストライプ番号及び物理ブロック番号）により示されるディスクアレイ２の領域に移動している。したがって第４の変形例においては、論理アドレスが有効であるか無効であるかに拘わらずにデータ移動を実施する従来技術に比較して、レイドレベル変更時のディスクアレイ２上でのデータ移動に係わる入出力を必要最低限に抑えることができ、レイドレベル変更処理に要する時間を短縮することができる。
【０１５２】
ここで、有効な論理アドレスｉを検索する毎に、その論理アドレスｉのデータを当該論理アドレスｉに一致する物理アドレスで指定されるディスクアレイ２の領域に書き込む代わりに、そのデータを当該論理アドレスｉ（物理アドレスｉ）に対応するレイドレベル変更後の書き込みバッファ３１の領域に蓄積するようにしてもよい。もし、論理アドレスｉが無効であった場合には、当該論理アドレスｉに対応する書き込みバッファ３１の領域には何もデータを書き込む必要はないが、ＮＵＬＬを書き込んでもよい。そして、１ストライプ分の連続する論理アドレスについて処理する毎に、その際の書き込みバッファ３１の１ストライプ分の領域のデータを、その連続する論理アドレスに一致する、ディスクアレイ２の連続する物理アドレスの領域に一括して書き込む。このようにすると、ディスクアレイ２に対する入出力回数が著しく減るため、レイドレベル変更処理に要する時間を一層短縮できる。
【０１５３】
なお、第４の変形例によるレイドレベル変更後は、不揮発性メモリ１３上のアドレス変換テーブルを削除するか、或いは当該アドレス変換テーブルを使用しない構成とするならば、ディスクアレイにログ構造化ファイルシステムを適用しないディスクアレイ装置に対する入出力方式、つまり論理アドレスに一致する物理アドレスで指定されるディスクアレイ２の領域を固定的にアクセスする入出力方式に変更することも可能である。
【０１５４】
上記実施形態では、書き込みバッファ３１、アドレス変換テーブル３２、タイムスタンプ３３、バッファ管理テーブル３４、アドレス変換テーブルのコピー３５、及びソート後のアドレス変換テーブル３６の各部が不揮発性メモリ３に配置されるものとして説明したが、これに限るものではない。例えば、揮発性メモリと、電源オフ時にも当該揮発性メモリの記憶内容が消失するのを防止するための、電池等のメモリバックアップ機構とにより、等価的に不揮発性メモリ３に相当する不揮発性メモリを実現し、上記各部が揮発性メモリに配置される構成であっても構わない。つまり上記各部が、揮発性メモリとメモリバックアップ機構とから構成される不揮発性メモリに配置される構成であっても構わない。
【０１５５】
また、上記実施形態では、ディスク装置を追加してディスクアレイのレイドレベルを変更する場合について説明したが、ディスク装置を追加せずにディスクアレイのレイドレベルを変更する場合にも同様に実施できる。
【０１５６】
また、本発明は、上記実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。更に、上記実施形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件から幾つかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出され得る。
【０１５７】
【発明の効果】
以上詳述したように本発明によれば、ディスク装置を追加してディスクアレイ装置のレイドレベル変更を実施する場合に、ログ構造化ファイルシステムの特徴を利用することで、少なくとも無効な論理アドレスに対するデータについては移動することなしに動的なレイドレベル変更が実現でき、レイドレベル変更処理に要する時間を大幅に短縮することができる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るディスクアレイ装置を備えたコンピュータシステムの構成を示すブロック図。
【図２】１ストライプ分のデータの例と、当該１ストライプ分のデータがディスクアレイ２内のディスク装置２１〜２３に書き込まれる様子を示す図。
【図３】図１中のアドレス変換テーブル３２のデータ構造例を示す図。
【図４】不揮発性メモリ３上に配置される書き込みバッファ３１とバッファ管理テーブル３４との関係の一例を示す図。
【図５】ディスクアレイ２のレイドレベル変更後における１ストライプ分のデータの例と、当該１ストライプ分のデータがディスクアレイ２内のディスク装置２１〜２４に書き込まれる様子を示す図。
【図６】同実施形態におけるディスクアレイ２のレイドレベルを変更するレイドレベル変更処理を説明するためのフローチャートの一部を示す図。
【図７】同実施形態におけるディスクアレイ２のレイドレベルを変更するレイドレベル変更処理を説明するためのフローチャートの残りを示す図。
【図８】同実施形態の第２の変形例で適用されるレイドレベル変更処理を説明するためのフローチャート。
【図９】レイドレベル変更の前と、レイドレベル変更の後で且つ拡張された物理ストライプに対する書き込みが行われた場合とで、論理アドレスタグブロックの記録位置がそれぞれ異なる様子を示す図。
【図１０】図１中のストライプテーブル４１のデータ構造例を示す図。
【図１１】ディスクアレイ２のレイドレベル変更後におけるアドレス変換テーブル３２のエントリ情報例を示す図。
【図１２】同実施形態の第２の変形例で適用されるストライプ統合処理の具体例を説明するための図。
【図１３】同実施形態の第２の変形例で適用されるアドレス変換テーブル３２の再構築処理を説明するためのフローチャートの一部を示す図。
【図１４】同実施形態の第２の変形例で適用されるアドレス変換テーブル３２の再構築処理を説明するためのフローチャートの残りを示す図。
【図１５】同実施形態の第２の変形例で適用されるデータ復旧処理を説明するためのフローチャート。
【図１６】同実施形態の第３の変形例で適用されるレイドレベル変更処理を説明するためのフローチャート。
【図１７】同実施形態の第３の変形例で適用される有効な論理アドレスタグを判別する処理を説明するためのフローチャート。
【図１８】同実施形態の第４の変形例で適用されるレイドレベル変更処理を説明するためのフローチャートの一部を示す図。
【図１９】同実施形態の第４の変形例で適用されるレイドレベル変更処理を説明するためのフローチャートの残りを示す図。
【符号の説明】
１…制御装置
２…ディスクアレイ
３…不揮発性メモリ
４…揮発性メモリ
１０…ホストコンピュータ
２１〜２３…ディスク装置
２４…追加ディスク装置
３１…書き込みバッファ
３２…アドレス変換テーブル
３３…タイムスタンプ情報
３４…バッファ管理テーブル
３５…アドレス変換テーブルのコピー
３６…ソート後のアドレス変換テーブル
４１…ストライプテーブル
【図１】
2004094429.tif 000003
【図２】
2004094429.tif 000004
【図３】
2004094429.tif 000005
【図４】
2004094429.tif 000006
【図５】
2004094429.tif 000007
【図６】
2004094429.tif 000008
【図７】
2004094429.tif 000009
【図８】
2004094429.tif 000010
【図９】
2004094429.tif 000011
【図１０】
2004094429.tif 000012
【図１１】
2004094429.tif 000013
【図１２】
2004094429.tif 000014
【図１３】
2004094429.tif 000015
【図１４】
2004094429.tif 000016
【図１５】
2004094429.tif 000017
【図１６】
2004094429.tif 000018
【図１７】
2004094429.tif 000019
【図１８】
2004094429.tif 000020
【図１９】
2004094429.tif 000021