(57)【要約】【課題】ディスクに記録されたアドレス変換テーブルの特にエントリ情報変更後の整合性が容易に確認できるようにする【解決手段】ＲＡＩＤ高速化ドライバは、システムブート時には、ディスク１８０に確保されたＡＭＴ領域１８ａ内のＡＭＴのチェックサムを主メモリ上のチェックサム領域に書き込む。ドライバは、ディスク１８０に確保されたデータ領域内のデータストライプへのデータ書き込みに伴うＡＭＴキャッシュ１７２の更新時には、チェックサム領域内のチェックサム値を更新する（Ｓ１３０３）。ドライバ１００は、ＡＭＴ領域１８ａ内のＡＭＴのチェックサムを算出してチェックサム領域のチェックサム値と比較することで、ＡＭＴキャッシュ１７２の更新内容がＡＭＴ領域１８ａに正しく反映されているか判定する。【選択図】    図１３
2005018443.tif 000002
【特許請求の範囲】
【請求項１】
上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むと共に、当該空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むディスク制御システムにおいて、
主メモリの一部に設けられたアドレス変換テーブルキャッシュであって、前記ディスク上に確保されたアドレス変換テーブル領域に記録されている、前記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するアドレス変換テーブルの一部のコピーが保持されるアドレス変換テーブルキャッシュと、
前記データストライプの全領域へのデータの書き込みが終了した際に、前記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むタグ書き込み手段と、
前記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに前記アドレス変換テーブルキャッシュを更新する第１の更新手段と、
前記アドレス変換テーブルキャッシュの更新とは非同期に、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する第２の更新手段と、
システムブート時に、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記主メモリ上に設けられたチェックサム領域に書き込むチェックサム書き込み手段と、
前記アドレス変換テーブルキャッシュが更新される際に、前記チェックサム領域のチェックサム値を更新する第３の更新手段と、
前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを算出し、前記チェックサム領域のチェックサム値と比較することで、前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに正しく反映されているかを判定する手段
とを具備することを特徴とするディスク制御システム。
【請求項２】
前記チェックサム書き込み手段は、前記アドレス変換テーブル領域の初期化時にも、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記チェックサム領域に書き込むことを特徴とする請求項１記載のディスク制御システム。
【請求項３】
前記第３の更新手段は、前記チェックサム領域のチェックサム値を「現在のチェックサム値−アドレス変換テーブルキャッシュの更新対象エントリの更新前の値＋当該更新対象エントリに新たに書き込まれる値」に更新することを特徴とする請求項１記載のディスク制御システム。
【請求項４】
前記アドレス変換テーブル領域は所定サイズのブロックを単位に管理され、
前記チェックサム書き込み手段は、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのエントリ毎に「アドレス変換テーブルのエントリの値＊（当該エントリが属するブロック内のオフセット＋ｎ）（ｎは０以外の所定値）」を算出して、その値の総和を求めて前記アドレス変換テーブルのチェックサムとし、
前記第３の更新手段は、前記チェックサム領域のチェックサム値を「現在のチェックサム値＋（アドレス変換テーブルキャッシュの更新対象エントリに新たに書き込まれる値−当該更新対象エントリの更新前の値）＊（当該更新対象エントリが属するブロック内のオフセット＋ｎ）」に更新する
ことを特徴とする請求項１記載のディスク制御システム。
【請求項５】
前記ディスク上の各データストライプのタグ領域にそれぞれ書き込まれているタグ情報をもとに前記アドレス変換テーブル領域の前記アドレス変換テーブルを再構築するアドレス変換テーブル再構築手段を更に具備し、
前記第２の更新手段は、システムのシャットダウン時に、前記アドレス変換テーブルキャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに全て反映し、
前記判定手段は、前記シャットダウン時に前記第２の更新手段により前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映された際に、前記アドレス変換テーブルキャッシュの更新内容が正しく反映されているかを判定し、正しく反映されているならば、前記アドレス変換テーブルが有効であることを示す第１のステータス情報と前記アドレス変換テーブルのチェックサムの値とを、正しく反映されていないならば、当該アドレス変換テーブルが無効であることを示す第２のステータス情報を、前記ディスク上に確保されたパーティションステータスブロックに記録し、
前記チェックサム書き込み手段は、システムブート時に前記パーティションステータスブロックを参照し、前記第１のステータス情報が設定されているならば、当該ステータスブロックからチェックサム値を読み出して前記チェックサム領域に書き込み、前記第２のステータス情報が設定されているならば、前記アドレス変換テーブル再構築手段により前記アドレス変換テーブル領域内の前記アドレス変換テーブルを再構築させた後、その再構築後のアドレス変換テーブルのチェックサムを算出して前記チェックサム領域に書き込む
ことを特徴とする請求項１記載のディスク制御システム。
【請求項６】
前記タグ書き込み手段は、前記データストライプのタグ領域にタグ情報を書き込む際に、その際のタイムスタンプも当該タグ領域に書き込み、
前記アドレス変換テーブル再構築手段は、前記ディスク上の各データストライプのタグ領域に書き込まれているタグ情報を対応するタイムスタンプに従って時系列順に選択し、当該タグ情報をもとにデータブロック単位でアドレス変換情報を生成して前記ディスク上に確保されたアドレス変換テーブル領域に登録する
ことを特徴とする請求項５記載のディスク制御システム。
【請求項７】
前記ライトリクエストに従うデータ書き込みの対象となったデータストライプの識別情報を、前記ディスク上に確保されたストライプＩＤログ領域に時系列順に記録する手段と、
予め定められたタイミングが到来する毎に、前記第１の更新手段による新たなデータストライプに関する前記アドレス変換テーブルキャッシュの更新を停止させる手段と、
前記第１の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記アドレス変換テーブル領域の内容を前記ディスク上に確保されたアドレス変換テーブルバックアップ領域にコピーするバックアップ手段と、
前記第１の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記アドレス変換テーブルに関するチェックポイント情報であって、前記アドレス変換テーブルキャッシュの更新が停止される前に最後に当該キャッシュの更新が完了したデータストライプの識別情報と、当該キャッシュの更新に際して前記第３の更新手段により更新された前記チェックサム領域のチェックサム値と、当該データストライプのタグ領域に書き込まれているタイムスタンプとを含むチェックポイント情報を採取して、前記ディスク上に確保されたチェックポイントステータスブロックに書き込むチェックポイント採取手段と、
前記チェックポイント採取手段によるチェックポイント情報採取が完了した場合に、前記第１の更新手段による前記アドレス変換テーブルキャッシュの更新を再開させる手段と
を更に具備し、
前記第２の更新手段は、前記第１の更新手段による前記アドレス変換テーブルキャッシュの更新が停止された場合、前記バックアップ手段によるコピー動作に先行して、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する
ことを特徴とする請求項６記載のディスク制御システム。
【請求項８】
前記予め定められたタイミングは、前記第１の更新手段による前記アドレス変換テーブルキャッシュのデータストライプ単位での更新が予め定められた回数繰り返された時点であることを特徴とする請求項７記載のディスク制御システム。
【請求項９】
前記予め定められたタイミングは、前記上位ファイルシステムからのライトリクエストがない状態が一定期間を超えた時点であることを特徴とする請求項７記載のディスク制御システム。
【請求項１０】
システムの異常終了に伴うシステムリブート時に、その時点において最新のチェックポイント情報をチェックポイントステータスブロックから選択する手段と、
前記選択手段によって選択されたチェックポイント情報が採取された際に前記バックアップ領域にコピーされた内容を前記アドレス変換テーブル領域に復元する手段と、
前記選択手段によって選択されたチェックポイント情報をもとに、当該チェックポイント情報が採取された時点から前記システムの異常終了時点までに前記ストライプＩＤログ領域に記録されたデータストライプ識別情報を特定する手段と
を更に具備し、
前記タグ書き込み手段は、前記システムリブート時に、タグ領域へのタグ情報の書き込みが未完了の前記論理アドレスログ領域にデータストライプの識別情報と対応付けて書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプのタグ領域に書き込む動作を、前記復元手段の動作に先行して実行し、
前記第１の更新手段は、前記システムリブート時に前記タグ書き込み手段によってタグ領域へのタグ情報書き込みが行われた場合には、当該タグ情報をもとに前記アドレス変換テーブルキャッシュを更新し、前記特定手段によってデータストライプ識別情報が特定された場合には、当該特定されたデータストライプ識別情報により示されるデータストライプのタグ領域に書き込まれているタグ情報をもとに前記アドレス変換テーブルキャッシュを更新し、
前記第２の更新手段は、前記システムリブート時において前記第１の更新手段によって更新された前記アドレス変換テーブルキャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映する
ことを特徴とする請求項７記載のディスク制御システム。
【請求項１１】
上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むためのディスク制御プログラムであって、
コンピュータに、
前記データストライプの空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を、前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むステップと、
前記データストライプの全領域へのデータの書き込みが終了した際に、前記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むステップと、
主メモリの一部に設けられたアドレス変換テーブルキャッシュであって、前記ディスク上に確保されたアドレス変換テーブル領域に記録されている、前記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するアドレス変換テーブルの一部のコピーが保持されるアドレス変換テーブルキャッシュを、前記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに更新するステップと、
前記アドレス変換テーブルキャッシュの更新とは非同期に、当該キャッシュの更新内容を前記アドレス変換テーブル領域内の前記アドレス変換テーブルに反映するステップと、
システムブート時に、前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを前記主メモリ上に設けられたチェックサム領域に書き込むステップと、
前記アドレス変換テーブルキャッシュが更新される際に、前記チェックサム領域のチェックサム値を更新するステップと、
前記アドレス変換テーブル領域内の前記アドレス変換テーブルのチェックサムを算出し、前記チェックサム領域のチェックサム値と比較することで、前記アドレス変換テーブルキャッシュの更新内容が前記アドレス変換テーブル領域内の前記アドレス変換テーブルに正しく反映されているかを判定するステップと
を実行させるためのディスク制御プログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、主メモリとディスク装置とを利用して、ディスク上のストライプに連続的にライトリクエストのデータを書き込むための制御を行うディスク制御システムに係り、特にディスクに記録されたアドレス変換テーブル（ＡＭＴ）の整合性を確認するのに好適なディスク制御システム及びディスク制御プログラムに関する。
【０００２】
【従来の技術】
従来から、計算機システムにおけるディスク入出力（ディスクＩ／Ｏ）の効率向上のために、ホスト（ホスト計算機）からのディスクへのランダムライト要求を１つの連続した領域としての物理ストライプへの要求に変換して、当該ストライプにまとめて書き込むディスク制御方法が知られている。このディスク制御方法によれば、ディスクに書き込むべきデータは一旦書き換え可能な不揮発性メモリに書き込まれ、１ストライプ分の書き込みデータが揃った時点で、ディスク上のストライプに書かれる。
【０００３】
このように、一旦不揮発性メモリにデータを書き込むことにより、ディスク上にデータを書き込む前にシステムが異常停止したとしても、書き込みデータが失われないで済む。このため、システムリブート後に不揮発性メモリ上の書きかけのデータを正しくディスク上に書き込むことにより、書き込みを完了させることができる。つまり、不揮発性メモリへのデータ書き込みが終了しているならば、そのデータが失われることはない。このため、従来は、書き込みデータを不揮発性メモリに書き込んだ時点で、対応するライトリクエストに対して「完了」をホストに通知している。
【０００４】
しかしながら、不揮発性メモリはシステムに装着するＩ／Ｏカード（ハードウェア）で提供する必要があり、その分コストがかかるという問題がある。また、ホストとの相性の問題、互換性の問題、保守の手間がかかる等の問題がある。
【０００５】
そこで、不揮発性メモリを用いることなく、ディスク上のストライプに連続的にライトリクエストのデータを書き込むための制御を行うディスク制御システム及びディスク制御方法（以下、先行技術と称する）が、本発明者によって提案されている（例えば、特許文献１参照）。この先行技術の特徴は、上述の制御を主メモリとディスク装置とを用いて行うことにある。
【０００６】
この先行技術では、オペレーティングシステム（ＯＳ）のファイルシステム（つまり上位ファイルシステム）から認識可能な論理アドレスをディスク上の物理アドレスに変換するのに用いられるアドレス変換テーブル（ＡＭＴ：アドレスマッピングテーブル）が、不揮発性メモリに代えてディスクに保存される。また、アドレス変換の高速化のために、アドレス変換テーブルの一部がアドレス変換テーブルキャッシュ（ＡＭＴキャッシュ）として主メモリに置かれる。システムの稼動中は、このアドレス変換テーブルキャッシュがアクセスされる。アドレス変換テーブルキャッシュの内容が更新された場合、あるいはシステムがシャットダウンされる場合には、アドレス変換テーブルキャッシュの内容はディスク上のアドレス変換テーブルに書き戻される。
【０００７】
また、上記先行技術では、ディスク上のストライプに書き込まれるデータブロックの論理アドレスが、ディスク上に確保された論理アドレスログ領域にデータブロック毎に記録される。これにより、一連のデータ書き込み処理が完了しない状態でシステムに障害（システムダウン）が発生しても、論理アドレスログ領域に記録された情報を用いることで、システムリブート後のデータの回復処理が可能となる。
【０００８】
【特許文献１】
特開２００２−２０７５７２号公報（段落００３５乃至段落００５９、図３及び図４）
【０００９】
【発明が解決しようとする課題】
上記したように、特許文献１に記載された先行技術によれば、一連のデータ書き込み処理が完了しない状態でシステムに障害が発生した場合、不揮発性メモリを用いていないにも拘わらず、ディスク上に確保された論理アドレスログ領域に記録されている論理アドレスの情報をもとに、データの回復処理を行うことができる。
【００１０】
しかしながら上記先行技術は、ディスク上のアドレス変換テーブルの整合性（特にエントリ情報変更後の整合性）を確認可能とする仕組み、更にはシステムに障害が発生した場合に当該アドレス変換テーブルを復元（再構築）可能とする仕組みを有していない。
【００１１】
本発明は上記事情を考慮してなされたものでその目的は、ディスクに記録されたアドレス変換テーブルの特にエントリ情報変更後の整合性が容易に確認できる、ディスク制御システム及びディスク制御プログラムを提供することにある。
【００１２】
【課題を解決するための手段】
本発明の１つの観点によれば、上位ファイルシステムからのライトリクエストを単位に、または複数のライトリクエストをまとめて、複数のディスク装置により構成される論理的に単一のディスク上に確保されたデータ領域から選択された書き込み対象データストライプの空き領域に対応するデータを書き込むと共に、当該空き領域に書かれたデータブロック毎の論理アドレスを含む論理アドレスログ情報を前記ディスク上に確保された論理アドレスログ領域に当該データストライプの識別情報と対応付けて書き込むディスク制御システムが提供される。このシステムは、主メモリの一部に設けられたＡＭＴ（アドレス変換テーブル）キャッシュであって、上記ディスク上に確保されたＡＭＴ領域に記録されている、上記データ領域に書かれたデータブロック毎に論理アドレスと物理アドレスとの対応関係を表すアドレス変換情報を保持するＡＭＴの一部のコピーが保持されるＡＭＴキャッシュと、上記データストライプの全領域へのデータの書き込みが終了した際に、上記論理アドレスログ領域に書き込まれている論理アドレスログ情報に従って、当該データストライプに書き込まれた各データブロックに対応する論理アドレスを含むタグ情報を、当該データストライプに割り当てられたタグ領域に書き込むタグ書き込み手段と、上記データストライプのタグ領域にタグ情報が書き込まれた際に、当該タグ情報をもとに上記ＡＭＴキャッシュを更新する第１の更新手段と、上記ＡＭＴキャッシュの更新とは非同期に、当該キャッシュの更新内容を上記ＡＭＴ領域内のＡＭＴに反映する第２の更新手段と、システムブート時に、上記ＡＭＴ領域内のＡＭＴのチェックサムを上記主メモリ上に設けられたチェックサム領域に書き込むチェックサム書き込み手段と、上記ＡＭＴキャッシュが更新される際に、上記チェックサム領域のチェックサム値を更新する第３の更新手段と、上記ＡＭＴ領域内のＡＭＴのチェックサムを算出して、上記チェックサム領域のチェックサム値と比較することで、ＡＭＴキャッシュの更新内容がＡＭＴ領域内のＡＭＴに正しく反映されているかを判定する手段とを備えている。
【００１３】
このように、不揮発性メモリを用いることなく高速なデータ書き込みを実現する本発明のディスク制御システムによれば、システムブート時には、その時点におけるＡＭＴ領域内のＡＭＴのチェックサムが主メモリ上のチェックサム領域に書き込まれる。このチェックサム領域内のチェックサム値は、ディスク上のデータストライプへのデータ書き込みに伴うＡＭＴキャッシュの更新時に更新される。これにより、ＡＭＴ領域内のＡＭＴのチェックサムを算出してチェックサム領域のチェックサム値と比較するだけで、ＡＭＴキャッシュの更新内容がＡＭＴ領域に正しく反映されているかを簡単に確認できる。
【００１４】
ここで、上記第３の更新手段により更新されるチェックサム領域のチェックサム値が、「現在のチェックサム値−アドレス変換テーブルキャッシュの更新対象エントリの更新前の値＋当該更新対象エントリに新たに書き込まれる値」の演算により求められる構成とするならば、ＡＭＴキャッシュの更新を反映したチェックサムを簡単に求めることが可能となる。
【００１５】
また、上記第３の更新手段により更新されるチェックサム領域のチェックサム値が、ＡＭＴ領域内のＡＭＴのエントリ毎に「ＡＭＴエントリの値＊（当該エントリが属するブロック内のオフセット＋ｎ）（ｎは０以外の所定値）」を算出して、その値の総和を算出することで求められる構成としてもよい。このような構成においては、単純なＡＭＴエントリの入れ替えのような場合でも、ブロック内オフセット値が異なるエントリ間の入れ替えであれば、異なるチェックサム値となる。よって、主メモリ上のＡＭＴキャッシュとディスクのＡＭＴ領域に保存されているＡＭＴとの間で整合性に欠けた（一貫性のない）不正な状態を検出するチャンスを増やすことができる。
【００１６】
また、ディスク上の各データストライプのタグ領域にそれぞれ書き込まれているタグ情報をもとにＡＭＴ領域内のＡＭＴを再構築する再構築手段を追加し、システムのシャットダウン時には、ＡＭＴキャッシュの更新内容が第２の更新手段によりＡＭＴ領域内のＡＭＴに全て反映され、その際にＡＭＴキャッシュの更新内容がＡＭＴに正しく反映されているかが判定手段により判定され、正しく反映されているならば、ＡＭＴが有効であることを示す第１のステータス情報とＡＭＴのチェックサムの値とがディスク上に確保されたパーティションステータスブロックに記録され、正しく反映されていないならば、当該ＡＭＴが無効であることを示す第２のステータス情報が上記パーティションステータスブロックに記録される構成とするとよい。更に、システムブート時に、パーティションステータスブロックを参照し、上記第１のステータス情報が設定されているならば、当該ステータスブロックからチェックサム値を読み出して上記チェックサム領域に書き込み、上記第２のステータス情報が設定されているならば、上記アドレス変換テーブル再構築手段によりＡＭＴ領域内のＡＭＴを再構築させた後、その再構築後のＡＭＴのチェックサムを算出して上記チェックサム領域に書き込む構成とするとよい。
【００１７】
このような構成においては、システムシャットダウン後のシステムブートにおいて、主メモリ上のＡＭＴキャッシュとディスク上のＡＭＴ領域のＡＭＴとの整合性を確保できる。
【００１８】
また、上記データストライプのタグ領域にタグ情報が書き込まれる際に、その際のタイムスタンプも当該タグ領域に書き込まれる構成とするならば、ＡＭＴ再構築手段は、ディスク上の各データストライプのタグ領域に書き込まれているタグ情報を対応するタイムスタンプに従って時系列順に選択し、当該タグ情報をもとにデータブロック単位でアドレス変換情報を生成して上記ＡＭＴ領域に登録することができる。
【００１９】
また、ライトリクエストに従うデータ書き込みの対象となったデータストライプの識別情報（ストライプＩＤ）を、ディスク上に確保されたストライプＩＤログ領域に時系列順に記録する手段と、予め定められたタイミングが到来する毎に、上記第１の更新手段による新たなデータストライプに関するＡＭＴキャッシュの更新を停止させる手段と、上記第１の更新手段によるＡＭＴキャッシュの更新が停止された場合、上記ＡＭＴ領域の内容をディスク上に確保されたＡＭＴバックアップ領域にコピーするバックアップ手段と、上記第１の更新手段によるＡＭＴキャッシュの更新が停止された場合、上記ＡＭＴに関するチェックポイント情報であって、ＡＭＴキャッシュの更新が停止される前に最後に当該キャッシュの更新が完了したデータストライプの識別情報と、当該キャッシュの更新に際して上記第３の更新手段により更新されたチェックサム領域のチェックサム値と、当該データストライプのタグ領域に書き込まれているタイムスタンプとを含むチェックポイント情報を採取して、ディスク上に確保されたチェックポイントステータスブロックに書き込むチェックポイント採取手段と、このチェックポイント採取手段によるチェックポイント情報採取が完了した場合に、上記第１の更新手段によるＡＭＴキャッシュの更新を再開させる手段とを追加し、上記第１の更新手段によるＡＭＴキャッシュの更新が停止された場合、上記バックアップ手段によるコピー動作に先行して、当該キャッシュの更新内容が上記ＡＭＴ領域内のＡＭＴに反映される構成とするとよい。
【００２０】
このような構成においては、所定のタイミングが到来する毎にＡＭＴ更新処理が止められて、ＡＭＴ更新に関するチェックポイント情報が確実に採取されると共に、その際のＡＭＴ領域内のＡＭＴの全データがＡＭＴバックアップ領域にバックアップされる。これにより、たとえシステムに障害が発生して当該システムが異常終了しても、次のシステムリブート時には、最新のチェックポイント情報とバックアップ領域にバックアップされた内容（ＡＭＴ領域内のＡＭＴの全データ）とを用いて、障害発生時のＡＭＴを復元することが可能となる。
【００２１】
【発明の実施の形態】
まず、本発明の実施の形態で適用される各種の用語について説明する。
（データストライプ）
ディスク制御システムが「まとめ書き」（「一括書き込み」とも称される）するデータの単位を意味する。ディスクのパーティション上で、一続きの領域となっており、ＲＡＩＤコントローラが管理するストライプ（ストライプユニット）のサイズの整数倍のサイズである。例えば「ＲＡＩＤ５」と呼ばれるＲＡＩＤレベルを適用する場合、このサイズをパリティグループにすることにより、いわゆる「ＲＡＩＤ５のライトペナルティ」を改善することができ、大幅な性能向上を実現できる。ストライプは複数のデータブロックから構成される。
【００２２】
（ストライプ番号）
パーティション上に並んでいる物理ストライプの通し番号を意味する。
（論理ブロック番号＝論理アドレス番号）
「論理ブロック番号」とは、ＯＳ（オペレーティングシステム）のファイルシステム（上位ファイルシステム）から認識される、ディスクパーティション上のデータブロック番号である。ディスク制御システムにおいて、ＯＳファイルシステムがアクセスを要求するときのブロック番号は、論理ブロック番号であり、仮想的なブロック番号である。論理ブロック番号は、ディスク制御システムが管理する「アドレス変換テーブル」によって物理ブロック番号と対応付けられる。この物理ブロック番号は、ディスクパーティション上の対応するブロックの物理位置を示すブロック番号であり、当該パーティションを構成するディスク装置上の物理位置を示す（ＲＡＩＤコントローラから物理ブロック番号として認識される）ブロック番号とは異なる。つまり、この物理ブロック番号は、ディスクパーティション上でユニークであり、ＲＡＩＤコントローラからは論理ブロック番号として認識される。（物理ブロック番号）＊（ブロックサイズ［バイト］）から、パーティション上での先頭位置からのバイトオフセット値（アドレス）が求まる。
【００２３】
（アドレス変換テーブル：ＡＭＴ（Ａｄｄｒｅｓｓ  Ｍａｐｐｉｎｇ  Ｔａｂｌｅ））
上位ファイルシステムがアクセスを要求するときに用いられる上記論理ブロック番号は、「アドレス変換テーブル」によって上記物理ブロック番号と対応付けられる。本実施形態では、アドレス変換テーブルは、対象パーティション上に存在し、データ部とは別の領域が割り当てられる。アドレス変換テーブルの各エントリは、それぞれ固有の論理ブロック番号に対応付けられている。つまりアドレス変換テーブルのエントリは論理ブロック番号でインデックスされる。アドレス変換テーブルの各エントリには、当該エントリに対応する論理ブロック番号に対応付けられた物理ブロック番号が登録される。新たにデータブロックを書き込むときには、対応する論理ブロック番号で特定されるアドレス変換テーブルのエントリに、そのブロックを書き込むディスクパーティション上の物理ブロックの番号が登録される。また、データブロックを参照する際には、対応する論理ブロック番号（論理アドレス）をインデックスとするエントリの値を求め、その値をディスク上の物理ブロック番号（物理アドレス）として実際のアドレスを求め参照する。
【００２４】
以下、本発明の実施の形態につき図面を参照して説明する。図１は本発明の一実施形態に係るディスク制御システムを適用した計算機システムのブロック構成を示す。この計算機システムは、例えばサーバ（ＰＣサーバ）として利用されるものであり、複数のＣＰＵ１１−１（＃１），１１−２（＃２），…１１−Ｎ（＃Ｎ）を備えている。なお、計算機システムに搭載されるＣＰＵが複数である必要はない。ＣＰＵ１１−１（＃１），１１−２（＃２），…１１−Ｎ（＃Ｎ）は、プロセッサバス１を介してブリッジ１２に接続されている。ブリッジ１２はプロセッサバス１とＰＣＩ（Ｐｅｒｉｐｈｅｒａｌ  Ｃｏｍｐｏｎｅｎｔ  Ｉｎｔｅｒｃｏｎｎｅｃｔ）バス２とを双方向で接続するためのブリッジＬＳＩである。ブリッジ１２には、主メモリ１３を制御するためのメモリコントローラ（図示せず）も内蔵されている。
【００２５】
主メモリ１３には、オペレーティングシステム（ＯＳ）、実行対象のアプリケーションプログラム、及び各種ドライバを含むプログラム群がロードされている。この主メモリ１３にロードされている各種ドライバの１つは、後述するＲＡＩＤ高速化ドライバ１００（図２参照）である。主メモリ１３のドライバ作業領域１７には、ライトバッファ（まとめ書きバッファ）１７１、アドレス変換テーブルキャッシュ（以下、ＡＭＴキャッシュと称する）１７２、及びストライプ管理テーブル１７３の領域が確保されている。また、ドライバ作業領域１７には、ＡＭＴのチェックサムの値を保持するチェックサム領域１７４も確保される。
【００２６】
ライトバッファ１７１は、書き込みデータブロックを蓄積するためのデータバッファである。このライトバッファ１７１を用いることにより、当該バッファ１７１に例えば１物理ストライプ分の書き込みデータブロックが蓄積された時点でディスクアレイ１８への「まとめ書き」（一括書き込み）を開始することが可能である。但し本実施形態では、説明の簡略化のために、「まとめ書き」でなくて、「逐次書き込み」が適用されるものとする。「まとめ書き」を適用する場合、物理ストライプは「まとめ書き」の単位であり、ディスクアレイ１８の全記憶領域に形成されたパーティション（ディスクパーティション）上で一続きの連続した領域から構成される。各物理ストライプは、ＲＡＩＤコントローラ１６が管理するストライプユニットの整数倍のサイズである。
【００２７】
ＡＭＴキャッシュ１７２は、論理アドレス空間を構成する全論理ブロックの一部をなす複数の論理ブロックについて、それぞれの論理ブロック番号と、当該論理ブロック番号で指定されるデータブロックが存在するディスクパーティション上の物理位置を示す物理ブロック番号との対応関係を示すアドレス変換情報を記憶する。論理ブロック番号は、上位ファイルシステムとしてのＯＳファイルシステム５０（図２参照）がアクセスを要求するときのブロック番号であり、仮想的なアドレス（仮想ブロック番号）である。この論理ブロック番号はＡＭＴキャッシュ１７２によって物理ブロック番号（ディスクパーティション上の物理的なブロック番号）と対応付けられる。
【００２８】
ＡＭＴキャッシュ１７２は、論理アドレス空間内の任意の一定サイズの領域に含まれる論理ブロック数に一致する数のエントリであって、当該領域に含まれる各論理ブロックの論理ブロック番号それぞれに対応するエントリを有している。ＯＳファイルシステム５０から要求された論理ブロック番号のデータブロックを書き込むときには、当該論理ブロック番号に対応するエントリが存在するならば、当該エントリには、当該論理ブロック番号と当該データブロックが実際に書き込まれる物理ブロックの物理ブロック番号（物理アドレス）との対応関係を示すアドレス変換情報が登録される。一方、データブロックの読み出し時には、読み出し要求された論理ブロック番号に対応するエントリが存在するならば、当該エントリに登録されているアドレス変換情報中の物理ブロック番号（物理ブロック番号×ブロックサイズ）で指定されるディスクパーティション上の物理位置からデータブロックが読み出される。
【００２９】
ストライプ管理テーブル１７３は、各論理ストライプに関する情報を管理するためのものであり、それら各論理ストライプの情報はデータ再配置のための処理などに利用される。
【００３０】
ＰＣＩバス２には、ＲＡＩＤコントローラ１６が接続されている。ＲＡＩＤコントローラ１６は、ディスクアレイ１８へのアクセスを制御する。ディスクアレイ１８は、複数のディスク装置から構成され、各種ユーザデータ等の記録に用いられる。ディスクアレイ１８は、ＲＡＩＤコントローラ１６の制御により、例えばＲＡＩＤ５構成のディスクアレイとして機能する。この場合、ディスクアレイ１８は、データ記憶に必要なディスク装置の台数がＮであるものとすると、Ｎ＋１台のディスク装置（ここでは、ＤＩＳＫ０〜ＤＩＳＫ４の５台）から構成される。このＮ＋１台のディスク装置（ＤＩＳＫ０〜ＤＩＳＫ４）はグループ化され、論理的に単一のディスク（ディスクドライブ）として使用される。
【００３１】
グループ化されたディスク装置には、データ（ＤＡＴＡ）とそのパリティデータ（ＰＡＲＩＴＹ）とが記録される物理ストライプ（パリティグループ）の群が割り当てられる。ここで、物理ストライプ中のＮ＋１台のディスク装置（ＤＩＳＫ０〜ＤＩＳＫ４）に属する領域の当該ディスク装置内の物理位置は同一である。ＲＡＩＤ５では、パリティデータが記録される物理ストライプ内の位置（パリティ位置）は、物理ストライプ毎にＮ＋１台のディスク装置間で順に移動される。図１の場合、パリティ位置は、物理ストライプＳ０ではＤＩＳＫ４に、次の物理ストライプＳ１ではＤＩＳＫ３に、それぞれ割り当てられる。このようにＲＡＩＤ５では、パリティ位置を物理ストライプ単位でＮ＋１台のディスク装置に分散させることによって、同一ディスクへのアクセス集中を防止するように構成されている。
【００３２】
主メモリ１３に確保されたドライバ作業領域１７は、主としてＲＡＩＤ高速化ドライバ１００（図２参照）の実現のために使用される。ＲＡＩＤ高速化ドライバ１００は、ディスクアレイ１８に対する書き込み性能を向上させるために用いられる。本実施形態においては、ＯＳファイルシステム５０には改良を加えず、ＯＳに組み込んで用いられるドライバプログラム（ディスク制御プログラム）とドライバ作業領域１７とによってＲＡＩＤ高速化ドライバ１００が実現されている。
【００３３】
ここで、図２を参照して、ＲＡＩＤ高速化ドライバ１００によるディスクアレイ１８の書き込み制御の原理について説明する。ＲＡＩＤ高速化ドライバ１００は、ＯＳファイルシステム５０のドライバと物理ディスク（ディスクアレイ１８）のドライバとの間に位置するフィルタドライバである。ＲＡＩＤ高速化ドライバ１００は、ファイルシステム５０からのライトリクエストに応じて、次の処理を実行する。
【００３４】
（１）まずＲＡＩＤ高速化ドライバ１００は、書き込み先を、ライトリクエストにより指定される論理アドレス（論理ブロック番号）に無関係に、書き込み対象データストライプにおける次の空き領域の物理アドレス（ＲＡＩＤ上の論理パーティション内アドレス）として決定する。つまりＲＡＩＤ高速化ドライバ１００は、書き込み先を、書き込み対象データストライプにおける次の空き領域の物理ブロック番号（物理アドレス）とすることにより、ライトリクエストで指定された論理ブロック番号を当該物理ブロック番号にアドレス変換する。ＲＡＩＤ高速化ドライバ１００は、ＲＡＩＤコントローラ１６を利用して、この物理ブロック番号で特定される領域へのデータ書き込みを行う。
【００３５】
（２）次にＲＡＩＤ高速化ドライバ１００は、上記（１）で決定（変換）された書き込み先の物理ブロック番号をライトリクエストで指定された論理ブロック番号に対応付けてＡＭＴキャッシュ１７２に登録する。
【００３６】
このようにＲＡＩＤ高速化ドライバ１００は、ＯＳファイルシステム５０からのライトリクエストで指定される論理アドレスに無関係に、当該ＯＳファイルシステム５０から要求された書き込みデータを、ディスクアレイ１８の論理パーティション（ディスクパーティション）上に形成されるデータストライプの連続する領域に書き込む。つまりＲＡＩＤ高速化ドライバ１００は、ターゲットとなる論理アドレスが連続していない一連のライトリクエストに対しても、連続する領域へのデータ書き込みを実行し、その論理アドレスに対応する物理アドレスをＡＭＴキャッシュ１７２に登録する。ここで、データストライプを構成するディスクパーティション上のアドレスが連続する領域は、ディスクに効率良く書き込めるストライプ境界及びサイズである。このストライプ境界及びサイズはディスクを直接操作するドライバとＲＡＩＤコントローラ１６とに依存して決まる。特に、書き込み対象のディスクアレイ１８がＲＡＩＤ５で構成されている場合、上記連続領域は、「パリティグループ」あるいはその整数倍である。
【００３７】
なお、ＯＳファイルシステム５０から書き込み要求された順番で対応する書き込みデータをライトバッファ１７１に順次蓄積することも可能である。ここでは、複数の書き込みデータブロックから構成される大きなデータブロックが構成される。これにより、この大きなデータブロックをディスクアレイ１８の空き領域に「まとめ書き」することが可能となる。「まとめ書き」の単位は物理ストライプである。つまり、「まとめ書き」の度に１つの空き物理ストライプが割り当てられ、そこに１物理ストライプ分のデータブロックがシーケンシャルに書き込まれる。これにより、ランダムなアクセスをシーケンシャルなアクセスに変換することができ、書き込み性能を大幅に向上させることができる。
【００３８】
図２は、上記した「まとめ書き」による書き込み動作を示している。この図２は、ＯＳファイルシステム５０から送られてくる書き込みデータのブロックデータサイズが２ＫＢ、１ストライプユニットのデータサイズが６４ＫＢ、１物理ストライプ（パリティグループ）分のデータサイズが２５６ＫＢ（＝６４ＫＢ×４）の場合の例である。２ＫＢの書き込みデータブロックは、ＲＡＩＤ高速化ドライバ１００によって取得される。この取得された書き込みデータブロックは、上記ライトバッファ１７１に蓄積される。そして基本的には、ライトバッファ１７１に２５６ＫＢ分のデータブロック（２ＫＢ×１２８個のデータブロック）が蓄積された時点で、ＲＡＩＤ高速化ドライバ１００の制御の下、ディスクアレイ１８の１物理ストライプに対する書き込みが１度にまとめて行われる。この場合、ＲＡＩＤコントローラ１６は、２５６ＫＢ分の書き込みデータブロックのみからパリティを生成できるので、パリティ計算のために旧データを読み出す等の処理が不要となり、良く知られたＲＡＩＤ５の書き込みペナルティを減らすことができる。
【００３９】
次に、ＲＡＩＤ高速化ドライバ１００によるディスクアレイ１８への書き込み動作の詳細について説明する。このデータ書き込み処理に関しては、前記特許文献１にも記載されている（段落００３５乃至段落００５７参照）。しかし、このデータ書き込み処理は本願発明に関係するため、理解を容易にするために、図３を参照して改めて説明する。
【００４０】
図３は、ＯＳファイルシステム５０から順次送られてきた複数のライトリクエストＲｅｑ１，Ｒｅｑ２，Ｒｅｑ３，Ｒｅｑ４，…をＲＡＩＤ高速化ドライバ１００が処理する様子を示す。図３では、１つのディスク１８０に対してＲＡＩＤ高速化ドライバ１００が書き込み／参照処理をしているように示されている。しかし、ディスク１８０は論理的なものであり、実際には図１及び図２に示すように、ＲＡＩＤ構成をとる複数のディスク装置（ＤＩＳＫ０〜ＤＩＳＫ４）により実現される。ここでは、ディスク１８０全体が１つのパーティション（ディスクパーティション）を構成している。
【００４１】
図３において、ディスク１８０のパーティション内は、アドレス変換テーブル領域（以下、ＡＭＴ領域と称する）１８ａと、管理データ領域１８ｂと、データ領域１８ｃとに分けて管理されている。管理データ領域１８ｂは、ストライプＩＤログ領域１８ｂ１と論理アドレスログ領域１８ｂ２とＡＭＴチェックポイントステータスブロック１８ｂ３を含む。
【００４２】
ここで、現在の書き込み対象の物理データストライプがデータ領域１８ｃの「ストライプ＃３４」であると想定する。ＲＡＩＤ高速化ドライバ１００は、書き込み対象データストライプ＃３４中の全ての領域に書き込みデータが割り当てられた時点で、新しい空きストライプを次の新たな書き込み対象ストライプとして割り当てる。以降、ライトリクエストデータをディスク１８０に書き込む処理は、新たに割り当てられたストライプの領域に対して行われる。
【００４３】
ＲＡＩＤ高速化ドライバ１００は、ＯＳファイルシステム５０からのライトリクエストＲｅｑ１，Ｒｅｑ２，Ｒｅｑ３，Ｒｅｑ４，…を受けて、当該ライトリクエストで指定されたデータ（書き込みデータ）をライトバッファ１７１に逐次記憶する。ＲＡＩＤ高速化ドライバ１００は、このライトバッファ１７１に記憶したデータを、ディスク１８０のデータ領域１８ｃのストライプ＃３４に書き込む。この際、ＲＡＩＤ高速化ドライバ１００は、データの書き込み先の物理アドレス（物理ブロック番号）を、対応する論理アドレス（論理ブロック番号）に対応付けてＡＭＴキャッシュ１７２に登録する。
【００４４】
一方、ＯＳファイルシステム５０からのリードリクエスト（リード要求）に対しては、ＲＡＩＤ高速化ドライバ１００はＡＭＴキャッシュ１７２を参照して、当該リードリクエストにより指定された論理アドレスに対応する物理アドレスを求める。そしてＲＡＩＤ高速化ドライバ１００は、ディスク１８０からその物理アドレスのデータをリードしてＯＳファイルシステム５０に返す。
【００４５】
データ領域１８ｃの各データストライプの１ブロック、例えば最後の１ブロックはＴＡＧブロック（ＴＡＧ領域）に割り当てられている。このデータストライプ内のＴＡＧブロックには、ＴＡＧ情報が、当該データストライプにデータが書き込まれ（て当該ストライプに空き領域がなくなっ）た際に記録される。ＴＡＧ情報は、（１）タイムスタンプＴＳと、（２）当該データストライプ中の有効データブロック（物理ブロック）に対応する論理アドレス（論理ブロック番号）とを含む。ここでは、ＴＡＧ情報中の論理アドレス（論理ブロック番号）の並び順は、当該論理アドレス（論理ブロック番号）に対応するデータストライプ中のデータブロックの並び順に一致する。この場合、ＴＡＧ情報中に、論理アドレス（論理ブロック番号）に対応するデータストライプ中のデータブロックの物理アドレス（物理ブロック番号）を含めなくても、当該データストライプの物理アドレス（先頭位置の物理アドレス）と当該論理アドレス（論理ブロック番号）のＴＡＧ情報中の相対位置とから、対応する物理アドレス（物理ブロック番号）を特定できる。このことは、ＴＡＧ情報が、論理アドレスと当該論理アドレスに対応するデータストライプ中のデータブロックの物理アドレスとの対応関係を示す情報であることを意味する。
【００４６】
ＴＡＧ情報中のタイムスタンプＴＳは、対応するデータストライプにデータが書き込まれて当該ストライプに空き領域がなくなった際（データストライプへのデータ書き込みの完了時）の時刻を直接または間接に表す時刻情報であり、時刻それ自体、あるいは書き込みの順番を表すシーケンス番号である。ここでは、タイムスタンプＴＳはシーケンス番号であり、ＴＡＧブロックの最終位置に設定される。一方、有効データブロックに対応する、ＴＡＧ情報中の論理アドレスは、ＯＳファイルシステム５０からのライトリクエストで指定される論理アドレスである。
【００４７】
また、データストライプへのデータの書き込み時には、当該データストライプに書き込まれれるデータブロックに対応する論理アドレスが、管理データ領域１８ｂの論理アドレスログ領域１８ｂ２にデータブロック毎に記録される。同様に、管理データ領域１８ｂのストライプＩＤログ領域１８ｂ１には、書き込み対象として選択されたデータストライプのＩＤ（識別）情報であるストライプＩＤ（例えば、ストライプ番号）が時系列順（選択順）に記録される。図３の例では、ストライプＩＤ「３４」のストライプ（つまりストライプ＃３４）への書き込みの前に、ストライプＩＤ「３１」のストライプ（つまりストライプ＃３１）への書き込みが行われたことが分かる。
【００４８】
図３には、上記ディスク１８０の他に、ドライバ作業領域１７が示されている。ドライバ作業領域１７は、図１に示したように、主メモリ１３上に確保されている。図３では、このドライバ作業領域１７に、ライトバッファ１７１及びＡＭＴキャッシュ１７２の２つの領域が確保されていることが示されており、ストライプ管理テーブル１７３は省略されている。ＡＭＴキャッシュ１７２には、ＡＭＴ領域１８ａに記憶されるＡＭＴ（アドレス変換テーブル）の一部が記憶される。システム稼働中は基本的には、このＡＭＴキャッシュ１７２がアクセスされる。もし、ＡＭＴキャッシュ１７２に登録されていない論理アドレスによるアクセス要求があった場合、ＡＭＴ領域１８ａから該当するＡＭＴ内エントリを含む所定サイズのＡＭＴ情報が読み出され、ＡＭＴキャッシュ１７２に登録される。ＡＭＴキャッシュ１７２の内容が更新された場合、あるいはシステムがシャットダウンされる場合には、ＡＭＴキャッシュ１７２の内容はＡＭＴ領域１８ａ内のＡＭＴに書き戻される。
【００４９】
ライトバッファ１７１は、ＯＳファイルシステム５０からのライトリクエストに応じて、当該リクエストで指定されるデータを最初にバッファリングするための領域である。ライトバッファ１７１のサイズは１データストライプのサイズに等しい。但し、本実施形態のように、１ストライプ単位の「まとめ書き」を行わないシステムでは、ライトバッファ１７１は少なくとも１データブロックのサイズでよい。なお、１ストライプ単位の「まとめ書き」を行う場合、処理の高速化のために、１データストライプのサイズに等しいライトバッファ１７１を複数用意して、サイクリックに使用するとよい。
【００５０】
ＡＭＴキャッシュ１７２の領域は、ディスク１８０上のＡＭＴ領域１８ａに記録されているＡＭＴの一部をキャッシュして記憶するための領域である。ＲＡＩＤ高速化ドライバ１００は、ＡＭＴキャッシュ１７２上に、参照または変更（更新）の対象となるＡＭＴの内容が存在しない場合、その内容を含むＡＭＴの一部を、予め定められた固定サイズ（例えば４ＫＢ）の単位でＡＭＴ領域１８ａからＡＭＴキャッシュ１７２に読み込む。ＲＡＩＤ高速化ドライバ１００はＡＭＴキャッシュ１７２を変更した場合、当該ＡＭＴキャッシュ１７２の変更部分を含む固定サイズをＡＭＴ領域１８ａに書き戻す。
【００５１】
次に、ＲＡＩＤ高速化ドライバ１００によるディスク１８０のパーティションに対するデータ書き込み処理の詳細な動作について、ライト処理のメインルーチンの処理手順を表す図４のフローチャートを参照して説明する。なお、以下の説明では、書き込み対象データストライプが「ストライプ＃３４」であるとする。
【００５２】
今、ＯＳファイルシステム５０からライトリクエストＲｅｑｉ（ｉ＝１，２，３，４…）が入力されたものとする（ステップ４０１）。このライトリクエストＲｅｑｉは、論理アドレスａｄｄｒｉから始まるｎ個のライトブロックデータＢ０〜Ｂｎ−１の書き込みを指定するものとする。ここでは、１ブロックデータは２ＫＢである。
【００５３】
ＲＡＩＤ高速化ドライバ１００は、ライトリクエストＲｅｑｉが入力されると、現在、空き領域を有するストライプが書き込み対象ストライプとして割り当てられているか否かをチェックする（ステップ４０２）。もし、目的のストライプが割り当てられていないならば、ＲＡＩＤ高速化ドライバ１００はディスク１８０上の空きストライプを１つ選択する（ステップ４０３）。このステップ４０３では、書き込み対象ストライプのストライプＩＤ（ストライプ番号）を示すＩＤｋとして、当該ステップ４０３で選択された空きストライプのストライプＩＤ（この例では、ストライプ＃３４）が設定される。ＲＡＩＤ高速化ドライバ１００は、このストライプＩＤｋを、データ管理領域１８ｂのストライプＩＤログ領域１８ｂ１に、次のエントリ情報として書き込む（ステップ４０４）。これによりストライプＩＤログ領域１８ｂ１には、書き込み対象に選ばれたストライプのＩＤが時系列順に記録されていく。なお、空きストライプは、図１中のストライプ管理テーブル１７３により示される。
【００５４】
次に、ＲＡＩＤ高速化ドライバ１００は、ステップ４０４で選択されたストライプに管理データ領域１８ｂ中の論理アドレスログ領域１８ｂ２を割り当てる（ステップ４０５）。
【００５５】
論理アドレスログ領域１８ｂ２は、ＯＳファイルシステム５０からのライトリクエストＲｅｑｉにより指定されたデータを書き込み対象のデータストライプ＃３４に書き込んだ際に、そのデータの論理アドレスを記憶しておくための領域である。この論理アドレスログ領域１８ｂ２は、ヘッダ部とエントリ部とから構成される。論理アドレスログ領域１８ｂ２のヘッダ部には、書き込み対象のデータストライプのストライプＩＤが記録され、エントリ部には、当該ストライプを構成する各物理ブロックが保持するデータの論理アドレス（論理ブロックアドレス）がライトリクエストＲｅｑｉを単位に記録される。このエントリ部内の、ライトリクエストＲｅｑｉを単位とする領域をエントリと呼ぶ。図３では省略されているが、論理アドレスログ領域１８ｂ２のヘッダ部には、ストライプＩＤと組をなして、当該ストライプＩＤで示されるデータストライプへのデータ書き込みの完了時のタイムスタンプＴＳも記録される。同様に、論理アドレスログ領域１８ｂ２の各エントリには、論理アドレスと組をなして、対応する物理ブロックのデータのチェックサムも記録される。
【００５６】
ＲＡＩＤ高速化ドライバ１００は上記ステップ４０５を実行すると、書き込み対象データストライプ＃３４の空き領域内に、ライトリクエストＲｅｑｉで指定されたライトデータを記憶するための領域を２ＫＢのブロック単位で確保する（ステップ４０６）。この動作は、データストライプ＃３４の空き領域が無くなるまで、あるいは、ライトリクエストＲｅｑｉの全てのブロックの記憶領域が確保されるまで行われる。なお、空き領域を有する書き込み対象データストライプ＃３４が既に割り当てられている場合には（ステップ４０２）、ステップ４０３，４０４，４０５の処理をスキップして、ステップ４０６へ進む。
【００５７】
次に、ＲＡＩＤ高速化ドライバ１００は、データストライプ＃３４に対するデータ書き込みのＩ／Ｏ要求を発行する（ステップ４０７）。この際、書き込みできるデータはライトバッファ１７１上で１つにまとめられて、Ｉ／Ｏ要求が発行される。例えば、図３のライトリクエストＲｅｑ１は、２ＫＢのブロックデータを２個書き込むものであるが、これを１つのライトリクエストとしてＩ／Ｏ要求を発行する。これにより、ディスクの特性から効率の良い書き込みが行われる。更に、ライトデータに関する論理アドレス情報を、ステップ４０５で割り当てられた論理アドレスログ領域１８ｂ２に書き込むためのＩ／Ｏ要求が発行される。この例では、図３に示すように、論理アドレスログ領域１８ｂ２の先頭にストライプＩＤ＝３４が書き込まれる。また、論理アドレスログ領域１８ｂ２内の後続する領域に、書き込まれたデータの論理アドレス（論理ブロック番号）Ｖとして、図３に示すように、ライトリクエストＲｅｑ１の２ブロックデータの書き込みに対応してＶ＝１００，１０１が、同様にライトリクエストＲｅｑ２の３ブロックデータに対応してＶ＝７６，７７，７８が、ライトリクエストＲｅｑ３の１ブロックデータに対応してＶ＝６０が、そしてライトリクエストＲｅｑ４の４ブロックデータに対応してＶ＝７９，８０，８１，８２が、それぞれ書き込まれる（ステップ４０８）。
【００５８】
上記ステップ４０７，４０８で発行されたＩ／Ｏ要求は非同期に処理され、当該Ｉ／Ｏ要求で指定されるＩ／Ｏ処理の完了を待つことなく次の処理が行われる。即ちＲＡＩＤ高速化ドライバ１００は、ステップ４０７，４０８でＩ／Ｏ要求を発行すると、書き込み対象データストライプ＃３４に空き領域が有るか否かを調べる（ステップ４０９）。空き領域が無い場合、つまり書き込み対象データストライプ＃３４に当該ストライプ＃３４の全容量分の書き込みデータが揃った場合には、ＴＡＧ情報（対象データストライプ＃３４に書き込んだブロックの論理ブロック番号テーブル）の書き込みＩ／Ｏ要求（ＴＡＧ書き込みＩ／Ｏ要求）を発行する（ステップ４１０）。ＴＡＧ情報が書き込まれる領域は原則として、ディスク１８０上のどこに配置されても構わないが、本実施形態ではデータストライプ＃３４の１つのブロック（ＴＡＧブロック）として存在する。ステップ４１０のＴＡＧ情報の書き込み処理は非同期に行われる。このＴＡＧ情報中の論理ブロック番号（論理アドレス）には、データストライプ＃３４へのデータ書き込みに応じてディスク１８０の論理アドレスログ領域１８ｂ２に記録された論理ブロック番号（論理アドレス）が用いられる。
【００５９】
次にＲＡＩＤ高速化ドライバ１００は、書き込み対象データストライプ＃３４に書き込んだデータブロックのＴＡＧ情報の内容によりＡＭＴキャッシュ１７２を更新する（ステップ４１１）。即ちＲＡＩＤ高速化ドライバ１００は、ＡＭＴキャッシュ１７２のエントリの情報（ＡＭＴエントリ情報）のうち、ＴＡＧ情報中の論理ブロック番号を含むエントリ情報（アドレス変換情報）を、当該論理ブロック番号と当該論理ブロック番号のＴＡＧ情報中の位置から特定されるデータストライプ＃３４内のデータブロックの物理ブロック番号との対応関係を示す情報（アドレス変換情報）に更新する。この処理についてもＡＭＴキャッシュ１７２の操作にＩ／Ｏ要求が伴う場合があり、非同期に処理が行われる。一方、ステップ４０９において、書き込み対象データストライプ＃３４に空き領域が有る場合には、上記ステップ４１０，Ｓ４１１の処理をせず、ステップ４１２に進む。
【００６０】
最後に、ＲＡＩＤ高速化ドライバ１００は、ライトリクエストＲｅｑｉに対して全てのデータブロックの書き込みＩ／Ｏ要求が発行されたか否かを判断する（ステップ４１２）。まだライトすべきデータが残っている場合には、ステップ４０２に戻り、新たなストライプを割り当てて、同様に書き込みＩ／Ｏ要求を発行する。これに対し、ライトリクエストＲｅｑｉに対する全てのデータブロックの書き込みＩ／Ｏ要求が発行されていた場合には、ディスクへの書き込み処理は終了する。
【００６１】
図５は、上記ステップ４０７，４０８で発行されたＩ／Ｏ要求の完了処理（通常は完了割り込みの処理）の動作を示すフローチャートである。Ｉ／Ｏ完了処理＃１は、ステップ４０７に対応したデータ書き込みに関する完了処理であり、Ｉ／Ｏ完了処理＃２はステップ４０８に対応した論理アドレスログの書き込みに関する完了処理である。
【００６２】
ＲＡＩＤ高速化ドライバ１００は、Ｉ／Ｏ完了処理＃１では、完了したデータ書き込みに対応する論理アドレスログの書き込み処理が完了しているか否かをチェックする（ステップ５０１）。一方、Ｉ／Ｏ完了処理＃２では、ＲＡＩＤ高速化ドライバ１００は、完了した論理アドレスログの書き込みに対応するデータ書き込み処理が完了したか否かをチェックする（ステップ５１０）。ＲＡＩＤ高速化ドライバ１００は、判定の対象となる書き込みが完了しているならば、元々のライトリクエストＲｅｑｉに関して、全てのデータ書き込みと、論理アドレスログの書き込みとが完了しているか否かをチェックする（ステップ５０２）。それらが完了しているならば、ＲＡＩＤ高速化ドライバ１００は、ＯＳファイルシステム５０にライトリクエストＲｅｑｉに対するディスクへの書き込みが全て完了したことを通知する（ステップ５０３）。即ち、全ての書き込みブロックがデータストライプ＃３４に書き込まれ、且つ、それらのブロックの論理アドレス情報が論理アドレスログ領域１１８ｂ２に書き込まれた時点で、ＲＡＩＤ高速化ドライブ１００はライトリクエストＲｅｑｉの完了通知をリクエスト発行元のＯＳファイルシステム５０に通知する。
【００６３】
図６は、図４のステップ４１０で発行されたＴＡＧ書き込みＩ／Ｏ要求の完了処理の動作を示すフローチャートである。ＲＡＩＤ高速化ドライバ１００は、ＴＡＧ書き込みＩ／Ｏ要求の完了処理（Ｉ／Ｏ完了処理＃３）において、ＴＡＧ書き込みＩ／Ｏ要求処理が終ったストライプ＃３４に割り当てた論理アドレスログ領域を解放する（ステップ６００）。これにより、ＴＡＧ情報の書き込みは終了する。
【００６４】
以上、ＲＡＩＤ高速化ドライバ１００によるディスク１８０のパーティションに対するデータ書き込み処理について説明した。このデータ書き込み処理によれば、不揮発性メモリの代わりに、ディスク１８０上に設けられたＡＭＴ領域１８ａ（主メモリ１３上のＡＭＴキャッシュ１７２の領域を含む）、管理データ領域１８ｂ及びデータ領域１８ｃを用いることにより、ＯＳファイルシステム５０からのランダムライトを物理的に連続した領域への書き込みとして実行することができる。ＲＡＩＤ５を適用するディスクに対しては、パリティグループ単位での書き込みになるようにストライプ境界とサイズを合わせるならば、ストライプへの書き込みが全て終った段階で、ＲＡＩＤコントローラ１６のキャッシュメモリ上でパリティグループが揃うため、パリティ計算のためのディスクリード処理が不要となる。これにより、所謂「ＲＡＩＤ５のライトペナルティ」を無くすことが可能になり、結果として高速な書き込み処理が実現される。
【００６５】
また、一連のデータ書き込み処理が完了しない状態で、不慮のシステムダウンによる処理停止が起こった場合、論理アドレスログ領域１８ｂ２に記録された情報（以下、論理アドレスログ情報と称する）を用いて、システムリブート後のデータ回復処理が実行できる。この論理アドレスログ情報は、書き込み対象データストライプ＃３４に書き込まれる全ての書き込みデータブロックの論理アドレスと物理アドレスの関係を示す情報が、データストライプ＃３４のＴＡＧ情報として、当該ストライプ＃３４のＴＡＧブロックに登録された時点で不要になる。そのため、論理アドレスログ領域１８ｂ２が解放される。具体的には、論理アドレスログ領域１８ｂ２のヘッダ部に記録される後述するフラグが、使用中を示す状態から使用されていないことを示す状態に変更される。
【００６６】
次に、ＲＡＩＤ高速化ドライバ１００が書き込み処理を実行しているときにシステムの障害が発生した場合の、システムリブート後のデータの障害回復処理（復元処理）について説明する。システム障害発生時には、データや論理アドレスログ情報等の書き込みが完了しない状態でシステムが立ち上がる可能性がある。このようなときに、データ書き込みが完了していたデータブロックについては、書き込み対象データストライプ中のＴＡＧブロックとＡＭＴキャッシュ１７２に、そのブロックに関する論理アドレスと物理アドレスとの関係を示す情報を登録し直すことにより、以降、そのデータブロックへのアクセスが可能になる。
【００６７】
ここで、データがディスク１８０に正しく書き込めたか否かは、論理アドレスログ領域１８ｂ２に記録されているチェックサムと、書き込み先のデータの領域から再計算したチェックサムとを比較することで判断できる。この場合、論理アドレスログ領域１８ｂ２に記録された（チェックサムの値を含む）論理アドレスログ情報の値が、「正しい値」であることを保証する必要がある。そのためには、論理アドレスログ領域１８ｂ２の各エントリ毎に、例えば以下の手順
（ｘ）エントリ書き込み時に、特定の文字列（ｓｉｇｎａｔｕｒｅ）をエントリの領域の最初と最後に入れておき、読み出し時にチェックする。
【００６８】
（ｙ）エントリ全体のチェックサムを計算して記録する。
【００６９】
（ｚ）ターゲットのデータストライプのストライプＩＤを記録して、論理ストライプログ領域１８ｂ２の先頭に記録されるストライプＩＤとの一致を確認する。
【００７０】
を実行し、各エントリのデータの整合性を確認すればよい。
【００７１】
以下、上記の障害回復処理の手順について、図７のフローチャートを参照して説明する。なお、図３では作図の都合上、論理アドレスログ領域１８ｂ２が管理データ領域１８ｂ内に１つだけ存在するように示されている。しかし本実施形態では、管理データ領域１８ｂ内には複数の論理アドレスログ領域１８ｂ２、例えば図８に示すように４つの論理アドレスログ領域１８ｂ２が配置されている。この４つの論理アドレスログ領域１８ｂ２を区別するために、それぞれＬＡ０〜ＬＡ３の符号を付して、以下の説明では論理アドレスログ領域ＬＡ０〜ＬＡ３と呼ぶこともある。論理アドレスログ領域ＬＡ０〜ＬＡ３のヘッダ部には、ストライプＩＤの他に、当該論理アドレスログ領域ＬＡ０〜ＬＡ３が使用中であるかを示すフラグ（Ｖａｌｉｄ）が記録される。このフラグは、論理アドレスログ領域が使用中の間はセット（Ｖａｌｉｄ＝“１”）され、当該論理アドレスログ領域が解放される際にリセット（Ｖａｌｉｄ＝“０”）される。データ領域１８ｃの中から空きストライプが新たな書き込み対象ストライプとして割り当てられる場合、現在使用されていない（つまり解放されている）論理アドレスログ領域のうちで最も最近に使用された論理アドレスログ領域が、当該書き込み対象ストライプに対応する論理アドレス情報を記録するために選択される。本実施形態において、管理データ領域１８ｂ内に複数（４つ）の論理アドレスログ領域１８ｂ２を用意する理由は、複数（４つ）のデータストライプへのデータ書き込みが並行して行えるようにするためであり、その必要がなければ論理アドレスログ領域１８ｂ２は１つでも構わない。
【００７２】
さて、ＲＡＩＤ高速化ドライバ１００はまず、管理データ領域１８ｂ内の論理アドレスログ領域ＬＡ０〜ＬＡ３のヘッダ部を参照し、フラグが使用中（Ｖａｌｉｄ＝“１”）を示している論理アドレスログ領域を確認する（ステップ７０１）。図８の例では、論理アドレスログ領域ＬＡ１，ＬＡ２のフラグが使用中（Ｖａｌｉｄ＝“１”）を示している。この場合、ＲＡＩＤ高速化ドライバ１００は、論理アドレスログ領域ＬＡ１，ＬＡ２が使用中であると判定し、当該ＬＡ１，ＬＡ２の情報のリスト（使用中論理アドレスログ領域リスト）Ｓを主メモリ１３のドライバ作業領域１７上に生成する。
【００７３】
次にＲＡＩＤ高速化ドライバ１００は、上記リストＳの要素を、対応する論理アドレスログ領域のヘッダ部に記録されているタイムスタンプＴＳの値により降べきの順にソートする（ステップ７０２）。これにより、使用中の論理アドレスログ領域の情報が時系列順にソートされることになる。図８の例では、論理アドレスログ領域ＬＡ２のタイムスタンプＴＳ＝１１６７９の方が論理アドレスログ領域ＬＡ１のタイムスタンプＴＳ＝１１６８０より小さい（即ち、古い）。したがって、ステップ７０２のソートの結果、リストＳではＬＡ２，ＬＡ１の順となる。
【００７４】
次にＲＡＩＤ高速化ドライバ１００は、リストＳに未処理の使用中論理アドレスログ領域（要素）が存在するかを調べる（ステップ７０３）。この例のように存在する場合、ＲＡＩＤ高速化ドライバ１００は、リストＳから未処理の要素の中で一番古いタイムスタンプＴＳを持つ要素を要素（論理アドレスログ領域）ＬＡｉとして選択する（ステップ７０４）。１回目のステップ７０４では、ＬＡ２がＬＡｉとして選択される。
【００７５】
次にＲＡＩＤ高速化ドライバ１００は、主メモリ１３のライトバッファ１７１上にＴＡＧブロックの内容（ＴＡＧイメージ）を復元するための領域（以下、ＴＡＧバッファと称する）を確保して、当該領域（ＴＡＧバッファ）を初期化する（ステップ７０５）。このＴＡＧバッファの初期化により、即ち論理アドレスログ領域ＬＡｉのヘッダ部により示されるデータストライプの各物理ブロックに対応する、ＴＡＧバッファ内の各エントリの初期化により、当該各物理ブロックが無効である状態にされる。
【００７６】
次にＲＡＩＤ高速化ドライバ１００は、要素（論理アドレスログ領域）ＬＡｉ中のエントリＥｋを指定する変数ｋを初期値０に設定する（ステップ７０６）。そしてＲＡＩＤ高速化ドライバ１００は、論理アドレスログ領域ＬＡｉ（ここではＬＡ２）内の先頭エントリＥ０から順に有効なエントリＥｋを探す動作を変数ｋをインクリメントしながら実行する（ステップ７０７，７１１，７１２）。有効なエントリＥｋの判断は、上述した（ｘ）〜（ｚ）の手順で行えばよい。
【００７７】
ＲＡＩＤ高速化ドライバ１００は、有効なエントリＥｋを見つける都度、対応するデータストライプ中のデータブロックに実際に書かれているデータからチェックサムＣｈｋＳｕｍ１を計算する（ステップ７０８）。このチェックサムＣｈｋＳｕｍ１は、データブロック毎のチェックサムから構成される。そしてＲＡＩＤ高速化ドライバ１００は、算出されたチェックサムＣｈｋＳｕｍ１（中のデータブロック毎のチェックサム）がエントリＥｋに記録されているチェックサムＣｈｋＳｕｍ０（中のデータブロック毎のチェックサム）に一致するか否かを確認する（ステップ７０９）。
【００７８】
上記ステップステップ７０８，７０９の処理の詳細を、ＬＡｉがＬＡ２の場合を例に以下に説明する。まず、図８に示す論理アドレスログ領域ＬＡ２の例では、当該領域ＬＡ２のヘッダ部で示されるデータストライプが、ストライプＩＤ＝３４のデータストライプであり、当該領域ＬＡ２中のエントリＥ０，Ｅ１，Ｅ２，…のうち、ヘッダ部に設定されているタイムスタンプＴＳ＝１１６７９に一致するタイムスタンプを有するエントリＥ０，Ｅ１が有効なエントリであると想定している。また、ストライプＩＤ＝３４のデータストライプ（つまりデータストライプ＃３４）の先頭ブロックの物理アドレス（物理ブロック番号）が２０００であるとしている。
【００７９】
ＬＡ２中のエントリＥ０に注目すると、当該エントリＥ０は２つの物理ブロックから構成されている。エントリＥ０には、論理アドレスＶ＝４６３，４６４と、その論理アドレスＶ＝４６３，４６４が割り当てられるそれぞれのデータブロックのチェックサムＣＳ（ＣｈｋＳｕｍ０）＝ＣＳ０，ＣＳ１とが記録されている。
【００８０】
そこで上記ステップ７０８では、実際にデータストライプ＃３４（論理アドレスログＬＡ２に対応するデータストライプ）の１番目と２番目のデータブロック（物理アドレス２０００と２００１のデータブロック）を読み出して、チェックサムＣｈｋＳｕｍ１＝ＣＳ０’，ＣＳ１’を計算する。そしてステップ７０９で、ＣｈｋＳｕｍ０とＣｈｋＳｕｍ１とが比較される。具体的には、ＣｈｋＳｕｍ０中のＣＳ０とＣｈｋＳｕｍ１中のＣＳ０’、及びＣｈｋＳｕｍ０中のＣＳ１とＣｈｋＳｕｍ１中のＣＳ１’とが、それぞれ比較される。この比較の結果、チェックサムが一致するデータブロックについては正しいデータであると判断される。
【００８１】
ステップ７０９での比較の結果、チェックサムが一致した場合、当該チェックサムが一致したデータブロックに対応する、ＴＡＧバッファ内のエントリに、エントリＥ０中の該当する論理アドレス（論理ブロック番号）が記録される（ステップ７１０）。この論理アドレスが記録されるＴＡＧバッファ内のエントリの位置は、チェックサムが一致したデータブロックのデータストライプ＃３４内の相対位置（データストライプ＃３４内の何番目のデータブロックか）で決まる。
【００８２】
ＲＡＩＤ高速化ドライバ１００は、変数ｋをインクリメントする都度（ステップ７１１）、そのインクリメント後の変数ｋが、データストライプを構成するデータブロック数Ｎより小さいかを判定する（ステップ７１２）。もし、ｋ＜Ｎでないならば、ＲＡＩＤ高速化ドライバ１００は論理アドレスログ領域ＬＡ２内の全エントリについて処理したと判断する。この段階で、ＴＡＧバッファの情報（ＴＡＧイメージ）が完成する。
【００８３】
そこでＲＡＩＤ高速化ドライバ１００は、ｋ＜Ｎが成立しなくなった段階で（ステップ７１２）、ＴＡＧバッファの内容（ＴＡＧイメージ）を、論理アドレスログ領域ＬＡ２のヘッダ部で示されるデータストライプ（ここでは、データストライプ＃３４）のＴＡＧブロックに書き込む（ステップ７１３）。図９は、このときのデータストライプ＃３４内のＴＡＧブロックの状態、即ち論理アドレスログ領域ＬＡ２のエントリＥ０，Ｅ１に記録されている論理アドレスで指定される５つのデータブロック（論理アドレスＶ＝４６３，４６４，２７，２８，２９が割り当てられたデータブロック）を処理し終えた結果完成したＴＡＧイメージが書き込まれた、データストライプ＃３４内のＴＡＧブロックの状態を示す。
【００８４】
次にＲＡＩＤ高速化ドライバ１００は、ＴＡＧイメージ（つまりデータストライプ＃３４内のＴＡＧブロックに書き込まれている論理アドレスと当該論理アドレスに対応するデータストライプ中のデータブロックの物理アドレスとの対応関係を示す情報）をドライバ作業領域１７上のＡＭＴキャッシュ１７２に反映し、当該ＡＭＴキャッシュ１７２を更新する（ステップ７１４）。そしてＲＡＩＤ高速化ドライバ１００は、論理アドレスログ領域ＬＡ２中の使用中フラグをリセット（ｖａｌｉｄ＝“０”）して当該ログ領域ＬＡ２を解放することにより、論理アドレスログＬＡ２の回復処理を終了し（ステップ７１５）、ステップ７０３に戻る。同様の処理を論理アドレスログＬＡ１について行えば、障害発生時に書き込み途中であった論理アドレスログＬＡ１，ＬＡ２の書き込みを終了させることができる。
【００８５】
このように本実施形態では、システム障害が発生した後のシステム再立ち上げ時に、復元されたＴＡＧイメージでＡＭＴキャッシュ１７２を更新しているものの、その更新内容を直ちにディスク１８０上のＡＭＴ領域１８ａに反映させていない。同様に本実施形態では、通常のライト処理（図４のフローチャート参照）において、書き込み対象データストライプ＃３４に書き込まれたデータブロックのＴＡＧ情報の内容によりＡＭＴキャッシュ１７２を更新しているものの、その更新内容を直ちにディスク１８０上のＡＭＴ領域１８ａに反映させていない。その理由は、書き込み処理の高速化のためである。しかし、このようにすると、特にシステムに障害が発生した場合に、ディスク１８０のＡＭＴ領域１８ａに記録されているＡＭＴの整合性に欠けるという問題がある。
【００８６】
なお、ＴＡＧブロック内のエントリには、有効なデータブロックに関しては、対応する論理アドレスが記録され、無効なデータブロックに関しては、無効である旨を示す論理アドレス（無効論理アドレス）が記録される。無効論理アドレスには、例えばディスク１８０（ディスクパーティション）に存在しない論理アドレスが使用される。
【００８７】
次に、本願発明に直接関係する、ディスク１８０上のＡＭＴ領域１８ａに記憶されているＡＭＴ（アドレス変換テーブル）の特にエントリ情報変更後の整合性（つまりＡＭＴの情報の一貫性）を確認するための仕組みについて説明する。本実施形態では、ＡＭＴの整合性を確認するための方法として、以下に述べる方法１及び方法２のいずれかが適用可能である。
【００８８】
（方法１）
まず、方法１の概略手順について説明する。方法１では、ディスク１８０上のＡＭＴ領域１８ａの初期化時（以下、ＡＭＴ初期化時と称する）、あるいはシステムブート時に、当該ＡＭＴ領域１８ａの全てに対して、ＡＭＴのエントリの値の総和がチェックサムとして求められる。この値をＣｋ０とする。
【００８９】
以降、前述したＯＳファイルシステム５０からのライトリクエストに従うデータ書き込み等に伴って、主メモリ１３のドライバ作業領域１７に記憶されているＡＭＴキャッシュ１７２内のエントリの情報を変更する場合には、その変更（ＡＭＴ変更）に応じてＡＭＴのチェックサムの値が再計算される。この再計算されたチェックサムの値が主メモリ１３のドライバ作業領域１７に確保されたチェックサム領域１７４（図１参照）に保持される。ここでは、ＡＭＴ変更後のチェックサムは、次式
2005018443.tif 000003
により算出される。
【００９０】
ＡＭＴの変更は、まず、変更対象のエントリを含むＡＭＴのデータブロック（たとえば４ＫＢ）が主メモリ１３のドライバ作業領域１７上のＡＭＴキャッシュ１７２にキャッシュされている状態で、当該エントリに対して行われる。このＡＭＴの変更は、ＡＭＴキャッシュ１７２の変更内容をディスク１８０のＡＭＴ領域１８ａに書き戻すライトバック処理により、当該ＡＭＴ領域１８ａに保存されているＡＭＴに反映される。上記（１）式に従って求められる「ＡＭＴ変更後のチェックサム」は、ＡＭＴキャッシュ１７２内のエントリの変更後に当該エントリを含むＡＭＴのデータブロックがディスク１８０のＡＭＴ領域１８ａに書き戻されたときのＡＭＴ全体のチェックサムの値である。したがって、この値を用いることにより、最終的にディスク１８０のＡＭＴ領域１８ａ上のＡＭＴが正しく変更されたかどうかを判断することができる。
【００９１】
（方法２）
次に、方法２の概略手順について説明する。方法２においても、上記方法１と同様に、ＡＭＴ初期化時、あるいはシステムブート時に、ＡＭＴのチェックサムが求められる。但し、以下に述べるようにチェックサムの求め方が方法１と異なる。まず、ディスク１８０上のＡＭＴ領域１８ａが予め定められた一定の大きさのブロックに分割される。そして、ＡＭＴのエントリ毎に、そのエントリが属するブロック内のオフセット値（バイト）を用いて、次式
（ＡＭＴのエントリの値）＊（ブロック内オフセット＋１）…（２）
に示す演算が行われ、その演算結果の総和がチェックサムとして求められる。この値をＣｋ０とする。なお、システムブート時には、チェックサムを求める演算に代えて、後述するパーティションステータスブロック１８ｄ（図１３参照）に保存されているチェックサム値ＣＳｄｉｓｋがＣｋ０として用いられることもある（方法１においても同様）。
【００９２】
以降、ＯＳファイルシステム５０からのライトリクエストに従うデータ書き込み等に伴うＡＭＴ変更の場合には、その変更に応じてＡＭＴのチェックサムの値が再計算される。この再計算されたチェックサムの値は主メモリ１３のチェックサム領域１７４に保持される。ここでは、ＡＭＴ変更後のチェックサムは、次式
2005018443.tif 000004
により算出される。
【００９３】
このように方法２では、方法１と異なり、チェックサムの算出に、ＡＭＴのエントリの値をそのまま用いるのではなく、当該エントリの値に当該エントリが属するブロック内オフセット値（バイト）の重みを乗じた結果を用いている。これにより、単純なＡＭＴエントリの入れ替えのような場合でも、ブロック内オフセット値が異なるエントリ間の入れ替えであれば、方法１とは違い、異なるチェックサム値となる。よって、主メモリ１３のドライバ作業領域１７上のＡＭＴキャッシュ１７２とディスク１８０のＡＭＴ領域１８ａに保存されているＡＭＴとの間で整合性に欠けた（一貫性のない）不正な状態を検出するチャンスが増える。
【００９４】
なお、ブロック内の先頭のエントリのブロック内オフセットの値は０である。このため、ブロック内オフセットの値を、そのままエントリの値に乗ずると、チェックサムの計算にエントリの値が反映されなくなる。そこで方法２では、上記（２）式のように、ブロック内オフセットに所定値１を加算した値を、エントリの値に乗じている。なお、この所定値は１に限るものではなく、０以外の値であればよい。
【００９５】
次に、ＡＭＴの整合性を確認するための仕組みの詳細について、上記方法２を適用した場合を例に、（１）ディスク上のＡＭＴデータからのチェックサムの求め方、（２）ＡＭＴエントリの変更に伴うチェックサムの再計算に分けて、順に説明する。なお、本実施形態では、ＲＡＩＤ高速化ドライバ１００が、ディスク１８０上のＡＭＴ領域１８ａからＡＭＴの一部をＡＭＴキャッシュ１７２として４ＫＢのサイズ（以下、ＡＭＴブロックまたはＡＭＴページと呼ぶ）を単位に主メモリ１３のドライバ作業領域１７にリードするものとする。また、このＡＭＴキャッシュ１７２を対象に、ＲＡＩＤ高速化ドライバ１００が参照と変更とを行い、変更されたＡＭＴブロック（ＡＭＴページ）に関しては、あるタイミングで後ほどディスク１８０上のＡＭＴ領域１８ａに書き戻すことを前提とする。
【００９６】
（１）ディスク上のＡＭＴデータからのチェックサムの求め方
まず、ディスク１８０上のＡＭＴ領域１８ａ（に保存されているＡＭＴ）のチェックサムの求め方について説明する。ここでは、ＡＭＴ領域１８ａは、図１０に示すように、ディスク１８０上の予め定められた領域に確保されているものとする。このＡＭＴ領域１８ａのサイズは４ＫＢ×Ｍであり、４ＫＢのＡＭＴブロック（ＡＭＴページ）Ｂｉ（ｉ＝０，１，２，…Ｍ−１）を単位に管理される。本実施形態では、このブロックＢｉ毎のチェックサムＣＳｉが求められる。
【００９７】
図１１は、ＡＭＴブロックＢｉのチェックサムＣＳｉを求めるのに必要なブロック内オフセットＯｆｊと当該オフセット位置の４バイトの値Ａｊを説明するための図である。本実施形態では、ＡＭＴのエントリが４バイトで構成されるものとする。そこで図１１では、４ＫＢのブロックＢｉを４バイト単位で区切ることで、当該ブロックＢｉを先頭から４バイト単位の値の連続と見なしている。ＲＡＩＤ高速化ドライバ１００は、ブロックＢｉの４バイト（ブロックＢｉに属するＡＭＴエントリ）毎に、その４バイトの値Ａｊ（ｊは０〜１０２３のいずれか）と、その４バイト（ＡＭＴエントリ）のブロックＢｉ内のオフセットＯｆｊ＋１とを乗じた値を求める。これにより、１つのブロックＢｉについて、１，０２４個のＡｊ＊（Ｏｆｊ＋１）（ｊ＝０，１，２，…１０２３）の値が求められる。なお、図１１中のＡｊの例である“０ｘ００００１ｆ２８”の先頭にある“０ｘ”は、後続の文字列（００００１ｆ２８）が１６進表現であることを示す。
【００９８】
ＲＡＩＤ高速化ドライバ１００は、ブロックＢｉについて、生成された１，０２４個のＡｊ＊（Ｏｆｊ＋１）（ｊ＝０，１，２，…１０２３）を加算することで、図１２（ａ）に示すように、ブロックＢｉのチェックサムＣＳｉを求める。ＲＡＩＤ高速化ドライバ１００は、ＡＭＴ領域１８ａの全てのブロックＢｉ（ｉ＝０〜Ｍ−１）についてチェックサムＣＳｉを求め、図１２（ｂ）に示すように、それらの総和をＡＭＴ全体のチェックサム（ＡＭＴチェックサム）ＣＳ（Ｃｋ０）とする。このＡＭＴチェックサムＣＳは、ディスク１８０のパーティションステータスブロック１８ｄ（図１３参照）に（ＣＳｄｉｓｋとして）保存されると共に、主メモリ１３のチェックサム領域１７４に保持される。以上に述べたＡＭＴチェックサムＣＳの値を算出する処理は、ＡＭＴ初期化時、あるいはシステムブート時に実行される。但し、後述するように、パーティションステータスブロック１８ｄにＡＭＴ有効を示すステータス情報が保存されている状態でのシステムブート時には、当該ステータスブロック１８ｄに保存されているチェックサム値ＣＳｄｉｓｋが上記ＣＳとして用いられる。
【００９９】
（２）ＡＭＴエントリの変更に伴うチェックサムの再計算
次に、ＡＭＴ（ＡＭＴキャッシュ１７２）の任意のエントリを変更する際の、ＡＭＴチェックサムＣＳの再計算について説明する。ＲＡＩＤ高速化ドライバ１００は、ＡＭＴキャッシュ１７２の任意のエントリ（ＡＭＴエントリ）を変更する際には、主メモリ１３のチェックサム領域１７４に保持されているチェックサム（ＡＭＴチェックサム）ＣＳを、ＡＭＴ変更（ＡＭＴエントリ）後のチェックサムに前記（３）式に従って更新する。
【０１００】
図１３は、主メモリ１３のドライバ作業領域１７に保持されているＡＭＴキャッシュ１７２中のエントリＥｋが変更される際の動作手順を示す。同図に示すように、ＲＡＩＤ高速化ドライバ１００はまず、変更の対象となるＡＭＴキャッシュ１７２中のエントリＥｋの値Ｄｋｏｌｄを読み出す（ステップ１３０１）。このエントリＥｋがＡＭＴブロックＢｉに属するものとする。
【０１０１】
次にＲＡＩＤ高速化ドライバ１００は、主メモリ１３のチェックサム領域１７４に保持されている現在のＡＭＴチェックサムＣＳの値と、読み出したＡＭＴエントリＥｋの値（変更前のエントリの値）Ｄｋｏｌｄと、当該ＡＭＴエントリＥｋにこれから書き込む値（つまり新たなエントリの値）Ｄｋｎｅｗと、当該ＡＭＴエントリＥｋのブロックＢｉ内のオフセットＯｆ）とをもとに、前記（３）式に従って、ＡＭＴエントリ変更後のＡＭＴチェックサムＣＳを算出する（ステップ１３０２）。ＲＡＩＤ高速化ドライバ１００は、主メモリ１３のチェックサム領域１７４に保持されているＡＭＴチェックサムＣＳを、算出したＡＭＴチェックサムＣＳに更新する（ステップ１３０３）。次にＲＡＩＤ高速化ドライバ１００は、変更の対象となるＡＭＴキャッシュ１７２中のエントリＥｋの値を、新しいエントリ値Ｄｋｎｅｗに更新する（ステップ１３０４）。
【０１０２】
この時点では、ＡＭＴキャッシュ１７２内のエントリＥｋは更新されているものの、当該エントリに対応するディスク１８０上のＡＭＴ領域１８ａのＡＭＴエントリは更新されていない。つまり、ステップ１３０４で更新されたＡＭＴチェックサムは、ＡＭＴキャッシュ１７２内の更新されたエントリＥｋを含むデータブロックが全てディスク１８０のＡＭＴ領域１８ａに書き戻されたことを想定して算出されたものである。したがって、この状態においてＡＭＴ領域１８ａに保存されているＡＭＴから算出されるＡＭＴチェックサムの値（ＡＭＴ領域１８ａのチェックサム値）と、ステップ１３０３で更新されたＡＭＴチェックサムの値とは、異なっている。ＡＭＴキャッシュ１７２内の更新されたエントリＥｋを含むデータブロックが全てディスク１８０のＡＭＴ領域１８ａに正常に書き戻されて初めて、当該ＡＭＴ領域１８ａのチェックサムの値（以下、ＣＳｄｉｓｋと称する）はステップＳ１３０３で更新されたＡＭＴチェックサムの値に一致する。
【０１０３】
本実施形態では、図１の計算機システムのシャットダウンに際し、主メモリ１３のドライバ作業領域１７に保持されているＡＭＴキャッシュ１７２内のデータブロックのうち、変更が加えられた（エントリを含む）データブロック（であって当該変更がディスク１８０上のＡＭＴ領域１８ａに反映されていないデータブロック）が全て当該ＡＭＴ領域１８ａに書き戻（ライトバック）される。もし、この書き戻しが正常に行われるならば、当該書き戻し後のＡＭＴ領域１８ａのチェックサムの値ＣＳｄｉｓｋと主メモリ１３のチェックサム領域１７４に保持されているＡＭＴ変更後のチェックサムの値とは一致するはずである。したがって、上記書き戻し後にＡＭＴ領域１８ａのチェックサムの値ＣＳｄｉｓｋを再計算し、その値ＣＳｄｉｓｋをＡＭＴ変更後のチェックサムの値と比較するならば、上記書き戻しが正常に行われたかを判定できる。
【０１０４】
以下、この判定を伴う、計算機のシャットダウン時の処理について、図１４のフローチャートを参照して説明する。まずＲＡＩＤ高速化ドライバ１００は、主メモリ１３のチェックサム領域１７４に保持されているチェックサムの値、即ち現在までのＡＭＴ変更を反映したチェックサムの値を、ＣＳｍｅｍとする（ステップ１４０１）。次にＲＡＩＤ高速化ドライバ１００は、ＡＭＴキャッシュ１７２内のＡＭＴブロックのうち、変更が加えられた（エントリを含む）ＡＭＴブロック（であって当該変更がディスク１８０上のＡＭＴ領域１８ａに反映されていないＡＭＴブロック）を全てディスク１８０上のＡＭＴ領域１８ａに書き戻す（ステップ１４０２）。
【０１０５】
次にＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のＡＭＴ領域１８ａに保存されている、上記ステップ１４０２での書き戻し後のＡＭＴをＡＭＴブロック（ＡＭＴページ）単位で読み出して、当該ＡＭＴ領域１８ａのチェックサムの値ＣＳｄｉｓｋを算出する（ステップ１４０３）。ＲＡＩＤ高速化ドライバ１００は、算出されたチェックサム値ＣＳｄｉｓｋ（つまり書き戻し後のＡＭＴ領域１８ａのチェックサム値ＣＳｄｉｓｋ）をメモリ１３のチェックサム領域１７４に保持されているチェックサム値ＣＳｍｅｍと比較することにより、ＣＳｄｉｓｋがＣＳｍｅｍに一致するか否かを判定する（ステップ１４０４）。
【０１０６】
もし、算出されたチェックサム値ＣＳｄｉｓｋがチェックサム値ＣＳｍｅｍに一致しているならば、ＲＡＩＤ高速化ドライバ１００は、ＡＭＴ領域１８ａ内のＡＭＴが正常に変更されていると判断する。この場合、ＲＡＩＤ高速化ドライバ１００は、ディスク１８０の所定領域に確保されている図１３に示すパーティションステータスブロック１８ｄに、ＡＭＴが正しい旨（ＡＭＴ有効）を示すステータス情報を保存する（ステップ１４０５）。このステップ１４０５において、ＲＡＩＤ高速化ドライバ１００は、チェックサム値ＣＳ（＝ＣＳｍｅｍ＝ＣＳｄｉｓｋ）も、パーティションステータスブロック１８ｄに保存する。
【０１０７】
一方、ＣＳｍｅｍとＣＳｄｉｓｋとが異なる値の場合、ＲＡＩＤ高速化ドライバ１００は、ＡＭＴは正しくないと判断する。この場合、ＲＡＩＤ高速化ドライバ１００は、パーティションステータスブロック１８ｄに、ＡＭＴが誤っている旨（ＡＭＴ無効）を示すステータス情報を保存する（ステップ１４０６）。ＣＳｍｅｍとＣＳｄｉｓｋとが一致しない要因としては、例えばＲＡＩＤ高速化ドライバ１００のバグでＡＭＴブロックの変更が一部ディスクに反映されていない、あるいはディスク上でＡＭＴデータが壊れているなどが考えられる。
【０１０８】
このように本実施形態においては、ディスク１８０上のＡＭＴ領域１８ａ（に保存されているＡＭＴ）の内容から算出されたチェックサムの値ＣＳｄｉｓｋをメモリ１３のチェックサム領域１７４に保持されているチェックサムの値ＣＳｍｅｍと比べることにより、ＡＭＴの整合性が簡単にチェックでき、ＲＡＩＤ高速化ドライバ１００の信頼性を向上することができる。
【０１０９】
次に、本実施形態のシステムブート時の処理について、図１５のフローチャートを参照して説明する。まずＲＡＩＤ高速化ドライバ１００は、図１の計算機システムのブート時には、ディスク１８０のパーティションステータスブロック１８ｄを参照する（ステップ１５０１）。そしてＲＡＩＤ高速化ドライバ１００は、パーティションステータスブロック１８ｄに「ＡＭＴ有効」を示すステータス情報が保存されているか否かを判定する（ステップ１５０２）。
【０１１０】
もし、「ＡＭＴ有効」を示すステータス情報が保存されているならば、ＲＡＩＤ高速化ドライバ１００はディスク１８０上のＡＭＴ領域１８ａの内容（ＡＭＴの内容）は正しいと判断する。この場合、ＲＡＩＤ高速化ドライバ１００は、パーティションステイタスブロック１８ｄに保存されているチェックサム値ＣＳｄｉｓｋを読み出すと共に、当該パーティションステータスブロック１８ｄ中のステータス情報を「ＡＭＴ更新中」に変更する（ステップ１５０３，１５０４）。そしてＲＡＩＤ高速化ドライバ１００は、パーティションステータスブロック１８ｄから読み出したチェックサム値ＣＳｄｉｓｋをＣＳｍｅｍとして、主メモリ１３のチェックサム領域１７４に書き込む（ステップ１５０５）。この場合、ディスク１８０上のＡＭＴ領域１８ａの内容はそのまま参照され使用される。
【０１１１】
これに対し、パーティションステータスブロック１８ｄに、「ＡＭＴ無効」を示すステータス情報が保存されているならば（ステップ１５０２）、ＲＡＩＤ高速化ドライバ１００はＡＭＴ領域１８ａの内容は正しくないと判断する。この場合、ＲＡＩＤ高速化ドライバ１００は、ＡＭＴ領域１８ａを初期化して、ディスク（ディスクパーティション）１８０のデータ領域１８ｃ内の全データストライプに含まれているＴＡＧブロック（ＴＡＧ領域）の情報をもとに、当該ディスク１８０上のＡＭＴ領域１８ａの内容（ＡＭＴ）を再構築するＡＭＴ再構築処理を実行する（ステップ１５０６）。このＡＭＴ再構築処理の詳細については後述する。
【０１１２】
ＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のＡＭＴ領域１８ａの内容を再構築すると、当該再構築されたＡＭＴ領域１８ａのチェックサム値を求め、そのチェックサム値をＣＳｄｉｓｋと（してディスク１８０上のパーティションステータスブロック１８ｄに保存）する（ステップ１５０７）。そしてＲＡＩＤ高速化ドライバ１００は上記ステップ１５０５に進み、ステップ１５０７で求めたチェックサム値ＣＳｄｉｓｋをＣＳｍｅｍとして、主メモリ１３のチェックサム領域１７４に書き込む。このステップ１５０５が実行された後は、ＲＡＩＤ高速化ドライバ１００はＡＭＴキャッシュ１７２が変更される都度、前記（３）式に従ってＡＭＴ変更後のチェックサムを算出し、チェックサム領域１７４に保持されているチェックサム（ＡＭＴチェックサム）ＣＳを、この算出した値に更新する。
【０１１３】
次に、ＡＭＴ再構築処理（ステップ１５０６）の詳細について図１６のフローチャートを参照して説明する。まずＲＡＩＤ高速化ドライバ１００は、ディスク（パーティション）１８０上のＡＭＴ領域１８ａを初期化、つまり有効ブロックが１つも登録されていない状態にする（ステップＳ１６００）。次にＲＡＩＤ高速化ドライバ１００は、ディスク１８０のデータ領域１８ｃ内の全ての有効なストライプ（つまり、パーティション生成後にデータの書き込みが行われたストライプ）のＴＡＧブロックに設定されているＴＡＧ情報に関し、当該ＴＡＧ情報中のタイムスタンプＴＳに従い、当該タイムスタンプＴＳの昇べきの順（つまりＴＡＧ情報の生成時刻順）にソートする（ステップ１６０１）。
【０１１４】
次にＲＡＩＤ高速化ドライバ１００は、ソートされたＴＡＧ情報を、データ書き込み時刻の古いストライプのＴＡＧ情報から順番に選択する（ステップ１６０２，１６０７，１６０８）。ＲＡＩＤ高速化ドライバ１００は、参照したＴＡＧ情報中の論理ブロック番号毎に（ステップ１６０３）、その論理ブロック番号の当該ＴＡＧ情報中の相対位置と当該ＴＡＧ情報が設定されている（ＴＡＧブロックを含む）データストライプの物理アドレスとから、その論理ブロック番号で指定されるデータが書き込まれている物理ブロックの物理ブロック番号を特定する（ステップ１６０４）。ＲＡＩＤ高速化ドライバ１００は、ＴＡＧ情報中の論理ブロック番号と上記特定された物理ブロック番号（即ち当該論理ブロック番号で指定されるデータが書き込まれている物理ブロックの物理ブロック番号）との対応を示す情報を、ＡＭＴの１エントリの情報として、ディスク１８０上のＡＭＴ領域１８ａに登録する（ステップ１６０５）。
【０１１５】
ＲＡＩＤ高速化ドライバ１００は、以上のステップ１６０３〜１６０５の処理を、選択したＴＡＧ情報中の全ての論理ブロック番号について繰り返す（ステップ１６０６）。そしてＲＡＩＤ高速化ドライバ１００は、選択したＴＡＧ情報についての処理を終了すると（ステップ１６０６）、ソートされた全てのＴＡＧ情報について終了したか判定する（ステップ１６０７）。もし、未処理のＴＡＧ情報が残っているならば、ＲＡＩＤ高速化ドライバ１００は、ソートされたＴＡＧ情報の中から今回処理したＴＡＧ情報の次に古いＴＡＧ情報を選択して（ステップ１６０８）、当該ＴＡＧ情報中の全ての論理ブロック番号についてステップ１６０３〜１６０５の処理を繰り返す（ステップ１６０６）。ＲＡＩＤ高速化ドライバ１００は、以上の処理を、ソートされた全てのＴＡＧ情報について繰り返す。これにより、全てのＴＡＧ情報について、当該ＴＡＧ情報に含まれている各論理ブロック番号と物理ブロック番号との対応を表すＡＭＴエントリ情報がＡＭＴ領域１８ａに登録されて、ＡＭＴが再構築される。このときＡＭＴは、その際のディスク（パーティション）１８０内のデータブロックの論理ブロック番号と物理ブロック番号との関係を正しく表すようになり、ＡＭＴ再構築処理は完了する。
【０１１６】
なお、上記「有効なストライプ」とは、現在のパーティションの生成後に書き込みが行われたストライプを意味する。例えば、物理ディスク上に同じオフセット、同じ大きさのパーティションを数度作成する（と共に当該パーティションにデータの書き込みを行う）と、新しいパーティションで書き込みを行っていないストライプに関して、古いパーティションに対して書き込んだ際の古いストライプのイメージが、新しいパーティション上に存在するように認識されることになる。このようなストライプは新しいパーティションにとっては（まだ書き込みを行っていないので）「無効なストライプ」であり、そのストライプ内のデータは無効とみなす必要がある。つまり、上記の「ＡＭＴ再構築処理」ではこのようなストライプは無効なストライプとして区別する必要がある。そのためには、生成されたパーティションを識別可能な情報、例えばパーティションのＩＤを、当該パーティション上のデータストライプへのデータ書き込み時に当該ストライプ中のＴＡＧブロックに書き込むとよい。このようにすると、ＡＭＴ再構築処理で有効ストライプを選択する際に，ＴＡＧブロック内のパーティションＩＤが現在のパーティションＩＤに一致するか否かをチェックすることにより、当該ストライプが「有効」であるか「無効」であるかを判断できる。
【０１１７】
次に、本実施形態で適用される、図１の計算機システムに障害が発生した場合においてＡＭＴを障害発生直前の状態に復元する仕組みについて、その概要を説明する。
【０１１８】
既に述べたように、本実施形態では、書き込み対象になったストライプのＩＤが、ディスク１８０上に確保された管理データ領域１８ｂ内のストライプＩＤログ領域１８ｂ１に（ストライプＩＤ情報として）時系列順に記録される。また、データストライプへのデータ書き込み終了時に当該ストライプ中のＴＡＧブロックに記録されたＴＡＧ情報により示される、当該ストライプに書き込まれたデータブロックの論理ブロック番号と物理ブロック番号との対応関係が、ＡＭＴ（アドレス変換テーブル）に反映される。ＡＭＴの本体はディスク１８０上のＡＭＴ領域１８ａに存在し、ＡＭＴへのアクセス効率を向上するために、ＡＭＴ領域１８ａ内のＡＭＴの一部が一定のサイズ（４ＫＢ）のＡＭＴブロック（ＡＭＴページ）を単位に、ＡＭＴ領域１８ａから主メモリ１３（のドライバ作業領域１７）にキャッシュされる。また、ＡＭＴのエントリの変更は、主メモリ１３上にキャッシュされた状態で、つまりＡＭＴキャッシュ１７２を対象に行われ、その変更された部分を含むＡＭＴブロックは、最終的にはディスク１８０のＡＭＴ領域１８ａに書き戻される。
【０１１９】
本実施形態では、障害発生時のＡＭＴを復元するために、データストライプ単位でのＡＭＴの更新処理（を伴うデータストライプへのデータ書き込み）が定期的に停止される。この状態で、主メモリ１３のドライバ作業領域１７にキャッシュされている全てのＡＭＴブロック、即ちＡＭＴの更新処理の対象となったＡＭＴキャッシュ１７２を構成する全てのＡＭＴブロックが、ディスク１８０のＡＭＴ領域１８ａに書き戻される。
【０１２０】
この書き戻しの後に、以下の３種の情報
（１）最後にＡＭＴ更新を終えたストライプのＩＤ
（２）その時点での、主メモリ１３上のＡＭＴキャッシュ１７２の変更内容から計算された、ＡＭＴのチェックサムの値ＣＳｍｅｍ
（３）ストライプ書き込み時のタイムスタンプＴＳ
が、ＡＭＴチェックポイント情報として、ディスク１８０に確保された図３に示すＡＭＴチェックポイントステータスブロック１８ｂ３に記録される。このＡＭＴチェックポイントステータスブロック１８ｂ３は、例えば図１９に示すように、２つのエントリＥａ及びＥｂを有する。ＡＭＴチェックポイント情報は、この２つのエントリＥａ及びＥｂのいずれか一方に記録される。
【０１２１】
ディスク１８０には、ＡＭＴチェックポイントステータスブロック１８ｂ３の各エントリＥａ，Ｅｂに対応して、図２０に示すように、２つのＡＭＴバックアップ領域２１０ａ（＃１），２１０ｂ（＃２）も確保されている。ＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａまたはＥｂへのＡＭＴチェックポイント情報の記録時には、そのときのディスク１８０上のＡＭＴ領域１８ａの全データがバックアップ情報として、当該エントリＥａまたはＥｂに対応するＡＭＴバックアップ領域２１０ａまたは２１０ｂに保存される。
【０１２２】
図１の計算機システムの障害発生により異常終了した後のリブート処理では、最後のＡＭＴチェックポイント情報が検出され、当該チェックポイント情報中の上記３種の情報が読み出される。その後、最後のチェックポイント時のＡＭＴ領域１８ａのバックアップ情報（つまりＡＭＴバックアップ領域２１０ａまたは２１０ｂに保存されているバックアップ情報）を用いて、当該最後のチェックポイント時のＡＭＴ領域１８ａの内容が復元される。
【０１２３】
次に、ストライプＩＤログ領域１８ｂ１に時系列順に記録されているストライプＩＤで指定されるストライプのうち、上記ＡＭＴチェックポイント以降に使用されたストライプを対象に、当該ストライプ中のＴＡＧブロックからＴＡＧ情報が読み出される。このストライプ中のＴＡＧ情報をもとに、前記ステップＳ４１１と同様にして、ＡＭＴキャッシュ１７２が更新される。同時に、このＡＭＴキャッシュ１７２の更新内容が、上記読み出されたＡＭＴチェックポイント情報中のＡＭＴチェックサムの値ＣＳｍｅｍに反映される。
【０１２４】
このように、障害発生直前までに書き込み処理が行われた全てのストライプに関してＡＭＴ更新処理を行うことにより、障害発生時のＡＭＴを復元することが可能となる。なお、同一データストライプに対して複数回書き込みが繰り返される場合がある。この場合、ストライプＩＤログ領域１８ｂ１には、同一ストライプＩＤが複数記録される。そこで、ストライプＩＤで指定されるデータストライプ中のＴＡＧブロックに記録されているタイムスタンプを参照し、ＴＡＧが時系列に記録されている順番と異なっている場合には、ＡＭＴの更新が行われないようにする必要がある。
【０１２５】
次に、図１の計算機システムに障害が発生してシステムダウンした場合においてＡＭＴを障害発生直前の状態に復元する動作の詳細について説明する。
まず、ＡＭＴ復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理について、図４のフローチャートと相異する部分を中心に、図１７及び図１８のフローチャートを参照して説明する。ここでは、ＡＭＴチェックポイントを採取する時期をストライプ書き込みの回数から決定するために、当該ストライプ書き込みの回数を示す変数Ｉが適用される。また、ディスク１８０のストライプＩＤログ領域１８ｂ１には、ストライプＩＤ情報として、図３の例とは異なって、ストライプＩＤとタイムスタンプＴＳとの対が時系列に記録される。図２１は、ストライプＩＤとタイムスタンプＴＳとの対が時系列に記録されたストライプＩＤログ領域１８ｂ１の一例を示す。
【０１２６】
ＲＡＩＤ高速化ドライバ１００は、処理の開始時に、変数（ストライプ回数）Ｉを初期値０に設定する（ステップ１７０１）。またＲＡＩＤ高速化ドライバ１００は、ディスク１８０のデータ領域１８ｃ内の空きストライプを１つ選択して書き込み対象ストライプとして割り当てる（ステップ１７０２）。この書き込み対象ストライプのＩＤ（ストライプＩＤ）をＩＤｉとする。
【０１２７】
次にＲＡＩＤ高速化ドライバ１００は、ストライプＩＤｉに対して最新のタイムスタンプＴＳｉを割り当てる（ステップ１７０３）。そしてＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のストライプＩＤログ領域１８ｂ１内の最も最近にストライプＩＤ及びタイムスタンプＴＳの対が書き込まれたエントリの次のエントリに、（ストライプＩＤ，タイムスタンプＴＳ）として（ＩＤｉ，ＴＳｉ）を書き込む（ステップ１７０４）。このストライプＩＤログ領域１８ｂ１は循環バッファ（リングバッファ）として用いられる。ここで、最も最近にストライプＩＤ及びタイムスタンプＴＳの対が書き込まれたエントリは、現時点までで最も新しいタイムスタンプＴＳ（タイムスタンプＴＳにシーケンス番号が適用される本実施形態では、最も大きな値のタイムスタンプＴＳ）が書き込まれているエントリである。
【０１２８】
さて本実施形態では、論理アドレスログ領域１８ｂ２が複数用意される。そこでＲＡＩＤ高速化ドライバ１００は、複数の論理アドレスログ領域１８ｂ２の中から、ステップ１７０２で選択されたストライプＩＤｉのストライプに書き込むデータに対応する論理ブロック番号（論理アドレス）を記録するための論理アドレスログ領域１８ｂ２を決定して、当該ストライプＩＤｉのストライプに割り当てる（ステップ１７０５）。
【０１２９】
次にＲＡＩＤ高速化ドライバ１００は、書き込み途中のライトリクエストが存在するならば（ステップ１７０６）、当該ライトリクエストで指定されるデータを、ストライプＩＤｉのストライプ（書き込み対象ストライプ）に書き込む（ステップ１７０７）。このステップ１７０７においてＲＡＩＤ高速化ドライバ１００は、ストライプＩＤｉの書き込み対象ストライプに書き込んだデータの論理ブロック番号（論理アドレス）を、先に選択された論理アドレスログ領域１８ｂ２に書き込む。ＲＡＩＤ高速化ドライバ１００は、ステップ１７０７で書き込み対象ストライプにデータ書き込みを行っても、当該ストライプに空き領域が存在しているならば（ステップ１７０８）、ステップ１７０６に戻る。
【０１３０】
これに対し、ステップＳ１７０７でのデータ書き込みの結果、書き込み対象ストライプに空き領域がなくなったならば（ステップ１７０８）、ＲＡＩＤ高速化ドライバ１００はＡＭＴチェックポイント処理中か否かを判定する（ステップ１７０９）。もし、ＡＭＴチェックポイント処理中であれば、ＲＡＩＤ高速化ドライバ１００は、現在ＡＭＴの更新処理が開始されているストライプに後続する、未だＡＭＴ更新処理（ライトリクエストで指定された、ＡＭＴ更新処理を伴うデータ書き込み）が開始されていないストライプに関して当該ＡＭＴ更新処理（を伴うデータ書き込み）をペンディング（キューイング）して（ステップ１７１０）、ＡＭＴチェックポイント処理が終了するのを待つ（ステップ１７０９）。
【０１３１】
一方、ＡＭＴチェックポイント処理中でなければ（ステップ１７０９）、ＲＡＩＤ高速化ドライバ１００はストライプＩＤｉに関する後処理を開始する（ステップ１７１１）。ここでは、図４中のステップ４１０及び４１１に相当する処理、即ち（１）ＴＡＧ情報書き込みのためのＴＡＧ書き込みＩ／Ｏ要求の発行と、（２）ＴＡＧ情報を反映するＡＭＴキャッシュ１７２の更新（ＡＭＴ更新）とが行われる。また、ＡＭＴキャッシュ１７２が更新される際には、図１３に示したように、主メモリ１３上のチェックサム領域１７４のチェックサム値も更新される。ステップ１７１１の処理（ストライプＩＤｉに関する後処理）は、他の処理と非同期に行われ、その完了を待たずに次の処理（ステップ１７１２）が行われる。このステップＳ１７１２では、変数（ストライプ書き込み回数）Ｉが１インクリメントされる。
【０１３２】
もし、インクリメント後の変数Ｉが所定値Ｉｃ（例えば１０，０００）未満であるならば（ステップ１７１３）、ＲＡＩＤ高速化ドライバ１００は、上記ステップ１７０２から始まるＡＭＴ更新を伴うデータストライプへのデータ書き込みを再び実行する。これに対し、インクリメント後の変数Ｉが所定値Ｉｃ以上であるならば、ＲＡＩＤ高速化ドライバ１００は変数Ｉを初期値０に戻し（ステップ１７１４）、しかる後にＡＭＴチェックポイントを採取するＡＭＴチェックポイント処理（ステップ１７１５）を実行する。このようにＲＡＩＤ高速化ドライバ１００は、ステップＳ１７０２から始まる処理のループを所定回数Ｉｃ（＝１０，０００回）繰り返す毎に、つまりストライプ書き込みを所定回数Ｉｃ（＝１０，０００回）繰り返す毎に、当該ステップ１７０２から始まる処理（ＡＭＴ更新を伴うデータストライプへのデータ書き込み）を停止して、ＡＭＴチェックポイント処理（ステップ１７１５）を実行する。
【０１３３】
さてＲＡＩＤ高速化ドライバ１００は、ステップ１７０２から始まる処理を実行した結果、書き込み途中のライトリクエストがなくなると（ステップ１７０６）、ＯＳファイルシステム５０からライトリクエストまたはシャットダウン通知が発行されるのを待つ（ステップ１８０２）。この状態で、ＯＳファイルシステム５０からＲＡＩＤ高速化ドライバ１００にライトリクエストまたはシャットダウン通知が発行されたものとする（ステップ１８０１）。もし、ライトリクエストが発行されたならば（ステップ１８０３）、ＲＡＩＤ高速化ドライバ１００は上記ステップ１７０７に進む。これに対し、シャットダウン通知が発行されたならば（ステップ１８０３）、ＲＡＩＤ高速化ドライバ１００は上記ステップ１７１１でＴＡＧ書き込みＩ／Ｏ要求が発行される毎に実行が開始されるＴＡＧ書き込み処理が全て完了するのを待つと共に（ステップ１８０４）、このＴＡＧ書き込み処理で書き込まれるＴＡＧ情報が反映されるＡＭＴキャッシュ１７２の更新（ＡＭＴ更新）が全て完了するのを待つ（ステップ１８０５）。
【０１３４】
ＲＡＩＤ高速化ドライバ１００は、ＴＡＧ書き込み処理及びＡＭＴ更新処理が全て完了すると、ＡＭＴキャッシュ１７２上の更新されたＡＭＴブロック（つまりダーティブロック）をディスク１８０上のＡＭＴ領域１８ａに書き戻す（ステップ１８０６）。そしてＲＡＩＤ高速化ドライバ１００は、前記した図１４のフローチャートで示されるシャットダウン時の処理を実行する（ステップ１８０７）。
【０１３５】
次に、上記ＡＭＴチェックポイント処理（ステップ１７１５）の詳細について、図２２のフローチャートを参照して説明する。まずＲＡＩＤ高速化ドライバ１００は、現在ＡＭＴ更新処理が開始されているストライプに後続する、未だＡＭＴ更新処理（を伴うデータストライプへのデータ書き込み）が開始されていないストライプに関し、ＡＭＴ更新処理をペンディング（キューイング）するモードにする（ステップ２２０１）。このモードでは、ＡＭＴチェックポイント処理が実行される。そこで、このモードをＡＭＴチェックポイント処理モードと呼ぶ。ＡＭＴチェックポイント処理モードでは、上記後続のストライプのＡＭＴ更新処理は、たとえライトデータが全て揃っても待たされる（図１８のステップ１７０９，１７１０）。
【０１３６】
ＲＡＩＤ高速化ドライバ１００はＡＭＴチェックポイント処理モードを設定すると、現在ＡＭＴ更新処理の対象となっている全てのストライプについて、当該更新処理が完了するのを待つ（ステップ２２０２）。そして、ＡＭＴ更新処理中のストライプがなくなると、ＡＭＴキャッシュ１７２上の更新されたＡＭＴブロック（ＡＭＴページ）を全てディスク１８０上のＡＭＴ領域１８ａに書き戻す（ステップ２２０３）。この段階で、ディスク１８０上のＡＭＴ領域１８ａの内容は、全ての更新を反映した状態になる。したがって、この状態でＡＭＴ領域１８ａの内容（ＡＭＴ）のチェックサム値ＣＳｄｉｓｋを算出するならば、そのチェックサム値ＣＳｄｉｓｋは、現在主メモリ１３上のチェックサム領域１７４に保持されているチェックサム値ＣＳｍｅｍに一致するはずである。そこでＲＡＩＤ高速化ドライバ１００は、現在のＡＭＴ領域１８ａの全内容（ＡＭＴ）を、ディスク１８０上に予め確保されている、図２０に示した２つのＡＭＴバックアップ領域２１０ａ，２１０ｂのうちの一方（具体的には、前回のチェックポイント処理で使用されなかった方）に退避（コピー）する（ステップ２２０４）。
【０１３７】
さてＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のＡＭＴ領域１８ａの全内容をＡＭＴバックアップ領域２１０ａ，２１０ｂのうちの一方に退避すると、ディスク１８０上のＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａ，Ｅｂのうち、前回のチェックポイント処理で使われなかったエントリにチェックポイント情報を書き込む（ステップ２２０５）。このチェックポイント情報は、既に述べたように、以下の３種の情報
（１）最後にＡＭＴ更新を終えたストライプのＩＤ
（２）ＡＭＴチェックサムＣＳｍｅｍ
（３）ストライプのＴＳ（タイムスタンプ）
からなる。
【０１３８】
このようにＲＡＩＤ高速化ドライバ１００は、ＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａ，Ｅｂを交互に使用して、チェックポイント情報を保存する。またＲＡＩＤ高速化ドライバ１００は、ＡＭＴバックアップ領域２１０ａ，２１０ｂも交互に使用する。
【０１３９】
ＲＡＩＤ高速化ドライバ１００は、ＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａ，Ｅｂの一方にチェックポイント情報を書き込むと（ステップ２２０５）、ＡＭＴチェックポイント処理モードを解除して、ＡＭＴ更新処理を再開する（ステップ２２０６）
次に、図１の計算機システムが障害等で異常終了（システムダウン）した際に実行されるシステムリブート時の回復処理（ＡＭＴ回復処理）について、図２３のフローチャートを参照して説明する。ここでは、図１の計算機システムが、図１７及び図１８のフローチャートに示す手順のデータ書き込み及び図２２のフローチャートに示す手順のＡＭＴチェックポイント処理を適用しているものとする。
【０１４０】
図１の計算機システムが障害発生により異常終了した場合、その異常終了前に主メモリ１３のドライバ作業領域１７に保持されていた（ＡＭＴキャッシュ１７２に含まれている）変更済みのＡＭＴブロックのうち、その変更がディスク１８０上のＡＭＴ領域１８ａに反映されていないＡＭＴブロックは失われる。このとき、ディスク１８０上のＡＭＴ領域１８ａは、上記失われた変更済みのＡＭＴブロックの変更が反映されていない状態にある。図２３のシステムリブート時の回復処理（ＡＭＴ回復処理）の主たる特徴は、この失われた変更済みのＡＭＴブロックの変更をＡＭＴ領域１８ａに反映して、当該ＡＭＴ領域１８ａの情報の整合性を回復することにある。
【０１４１】
まずＲＡＩＤ高速化ドライバ１００は、書きかけのストライプ、即ちＴＡＧ書き込み及びＡＭＴ更新処理まで完了していないストライプに対して、ディスク１８０上の論理アドレスログ領域１８ｂ２の内容を用いて、ＴＡＧ書き込み及びＡＭＴ更新まで終らせる（ステップ２３０１）。このステップ２３０１の処理には、図７のフローチャートに従う障害回復処理の手順が適用される。
【０１４２】
ＲＡＩＤ高速化ドライバ１００は、ステップ２３０１を実行すると、主メモリ１３上のＡＭＴキャッシュ１７２の現在の内容に従い、ステップ２３０１で復元されたＡＭＴブロック、つまりＡＭＴキャッシュ１７２上の変更されたＡＭＴブロックを、ディスク１８０上のＡＭＴ領域１８ａに書き戻す（ステップ２３０２）。ＲＡＩＤ高速化ドライバ１００は、この書き戻しが完了したところで、ＡＭＴキャッシュ１７２上の全ての情報をクリア（初期化）する（ステップ２３０３）。
【０１４３】
次にＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のＡＭＴチェックポイントステータスブロック１８ｂ３に含まれている２つのエントリＥａ，Ｅｂを参照し、当該両エントリＥａ，Ｅｂに保存されているＡＭＴチェックポイント情報のうち最新のチェックポイント情報を選択する（ステップ２３０４）。ここでは、ＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａ，Ｅｂに保存されているチェックポイント情報中のタイムスタンプＴＳの値を比較し、値が大きい方のタイムスタンプＴＳ（つまり最新のタイムスタンプＴＳ）を含むチェックポイント情報を選択すればよい。選択されたチェックポイント情報中のストライプＩＤ、ＡＭＴチェックサムＣＳｍｅｍ及びタイムスタンプＴＳを、それぞれＳｉｄ０、ＣＳｍｅｍ０及びＴＳ０とする。図１９の例では、ＡＭＴチェックポイントステータスブロック１８ｂ３のエントリＥａ，Ｅｂのうち、ＴＳの値が大きい方のエントリＥｂが選択され、Ｓｉｄ０＝３４，ＣＳｍｅｍ０＝０ｘｆｅ６０ｆ５１２，ＴＳ０＝１４１３となる。
【０１４４】
次にＲＡＩＤ高速化ドライバ１００は、ディスク１８０上のＡＭＴバックアップ領域２１０ａ，２１０ｂのうち、選択されたＡＭＴチェックポイントステータスブロック１８ｂ３内のエントリ（ここではエントリＥｂ）に対応するＡＭＴバックアップ領域の内容を、ＡＭＴ領域１８ａにコピーして、当該ＡＭＴ領域１８ａの内容を、最新のチェックポイント情報を採取した際（最新のチェックポイント時）の状態に復元（リストア）する（ステップ２３０５）。本実施形態では、ＡＭＴチェックポイントステータスブロック１８ｂ３内のエントリＥｂには、図２０中のＡＭＴバックアップ領域２１０ｂ（＃２）が対応付けられている。この場合、ＡＭＴバックアップ領域２１０ｂ（＃２）のデータがＡＭＴ領域１８ａにコピーされる。
【０１４５】
次にＲＡＩＤ高速化ドライバ１００は、図２１に示した、ディスク１８０上のストライプＩＤログ領域１８ｂ１を参照し、ＡＭＴチェックポイントステータスブロック１８ｂ３内の選択されたエントリ（エントリＥｂ）に記録されているストライプＩＤ及びタイムスタンプＴＳと同じ値のストライプＩＤ及びタイムスタンプＴＳ（即ちＩＤ＝Ｓｉｄ０＝３４及びＴＳ＝ＴＳ０＝１４１３）が記録されている、ストライプＩＤログ領域１８ｂ１内のエントリを探す（ステップ２３０６）。このエントリは、最新のチェックポイント時のストライプのストライプＩＤ及びタイムスタンプＴＳの対からなるＩＤ情報が記録されているエントリであり、図２１の例ではストライプＩＤログ領域１８ｂ１内の先頭（左）から３番目のエントリである。このエントリをＥ０とする。
【０１４６】
ＲＡＩＤ高速化ドライバ１００は、エントリＥ０をカレントエントリＥとする（ステップ２３０７）。以後、ＲＡＩＤ高速化ドライバ１００は、ストライプＩＤログ領域１８ｂ１内の、エントリＥ０から異常終了（システムダウン）直前に書き込みが行われたストライプのＩＤ情報が記録されているエントリまでの各エントリで示されるストライプに記録されたＴＡＧ情報を読み込む処理（ステップＳ２３０８）を、カレントエントリＥを順次切り替えながら（ステップ２３１２）、繰り返す。ここで異常終了直前に書き込みが行われたストライプのＩＤが記録されている、ストライプＩＤログ領域１８ｂ１内のエントリは、当該ログ領域１８ｂ１内で最も大きな値のタイムスタンプが記録されているエントリとして検出される。そこでＲＡＩＤ高速化ドライバ１００は、エントリＥ０以降、ストライプＩＤログ領域１８ｂ１内のエントリに記録されているタイムスタンプＴＳの値が増加する傾向にある限り、つまりカレントエントリ（現在のエントリ）Ｅ中のタイムスタンプＴＳの値より、次のエントリ中のタイムスタンプＴＳの値の方が大きい限り（ステップ２３１１）、有効なエントリが続いているものと判断する。この場合、ＲＡＩＤ高速化ドライバ１００は次のエントリを新たなカレントエントリＥとして（ステップ２３１２）、当該エントリＥ中にタイムスタンプＴＳと対をなして記録されているストライプＩＤで指定されるストライプに記録されたＴＡＧ情報を読み込む（ステップ２３０８）。
【０１４７】
ＲＡＩＤ高速化ドライバ１００は、読み込んだＴＡＧ情報中のタイムスタンプＴＳの値とストライプＩＤログ領域１８ｂ１内のエントリＥに記録されているタイムスタンプＴＳとが等しいならば（ステップ２３０９）、そのＴＡＧ情報の内容をＡＭＴキャッシュ１７２に反映する（ステップ２３１０）。この際、ＲＡＩＤ高速化ドライバ１００は、ＣＳｍｅｍ０にＡＭＴキャッシュ１７２の更新（ＡＭＴ更新）の内容を反映する。
【０１４８】
ここで、ストライプＩＤログ領域１８ｂ１内のエントリＥに記録されているＴＳと、当該エントリＥ（に記録されているストライプＩＤ）で指定されるストライプ中のＴＡＧ情報に含まれているＴＳとが異なる場合がある。このことは、該当するストライプがＡＭＴチェックポイント時以降、複数回書き込みの対象となったことを示す。そのようなストライプに関しては、ＡＭＴにＴＡＧ情報を反映する処理（ステップ２３１０）は、最新のＴＡＧ情報について１度のみ行えばよい。つまり、上記のように、ストライプＩＤログ領域１８ｂ１内のエントリＥを参照し、当該エントリＥ（に記録されているストライプＩＤ）で指定されるストライプに記録されている実際のＴＡＧ情報中のＴＳが当該エントリＥに記録されているＴＳと一致したときのみＡＭＴを更新するようにすればよい。
【０１４９】
やがて、最新のストライプ、つまりストライプＩＤログ領域１８ｂ１内で最も大きな値のＴＳと対をなして記録されているストライプＩＤで指定されるストライプまでＴＡＧ情報のＡＭＴキャッシュ１７２への反映を終えたものとする（ステップ２３１１）。この場合、ＲＡＩＤ高速化ドライバ１００は、ＡＭＴキャッシュ１７２上の変更されている（ダーティな）ＡＭＴブロック（ＡＭＴページ）を、全てディスク１８０上のＡＭＴ領域１８ａに書き戻す（ステップ２３１３）。図１９の例では、ストライプＩＤログ領域１８ｂ１内の先頭（左）から３番目のエントリ（ＩＤ＝３４のエントリ）乃至５番目のエントリ（ＩＤ＝５１のエントリ）でそれぞれ指定されるストライプ（ＩＤ＝３４，４０，５１の各ストライプ）中のＴＡＧ情報が順次読み出され、そのＴＡＧ情報でＡＭＴキャッシュ１７２が更新される。このＡＭＴキャッシュ１７２の更新の結果、当該ＡＭＴキャッシュ１７２中の更新されたＡＭＴブロックからディスク１８０上のＡＭＴ領域１８ａを修復することにより、障害発生時のＡＭＴイメージが復元できる。
【０１５０】
このように本実施形態においては、ＡＭＴチェックポイントを採取することにより、ＡＭＴの高速な回復処理を実現できる。なお、本実施形態では、ライトしたストライプの総数Ｉが所定値Ｉｃ（＝１０，０００）になる都度、ＡＭＴチェックポイントを採取することから、ストライプＩＤログ領域１８ｂ１のエントリ数は少なくともＩｃ個必要となる。もし、Ｉｃを小さな値に設定するならば、ストライプＩＤログ領域１８ｂ１のエントリ数を少なくできる。しかし、ＡＭＴチェックポイント処理の間は、通常のライト処理を止める必要があることから、Ｉｃを小さな値に設定してＡＭＴチェックポイント処理を頻繁に行うと、性能に影響する。そこで、例えばＯＳファイルシステム５０からのライトリクエストがない状態が一定期間を超えた時点でＡＭＴチェックポイント処理が行われる構成を適用してもよい。この構成では、ＡＭＴチェックポイント処理が不定期に行われることから、ストライプＩＤログ領域１８ｂ１のエントリ数を十分に確保し、前回のＡＭＴチェックポイント時のストライプＩＤの情報が当該ログ領域１８ｂ１に残るようにする必要がある。
【０１５１】
なお、本発明は、上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合せにより種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。
【０１５２】
【発明の効果】
以上詳述したように本発明によれば、システムブート時に、ディスク上のアドレス変換テーブル領域内のアドレス変換テーブルのチェックサムを主メモリ上のチェックサム領域に書き込んでおき、それ以後、ディスク上のデータストライプへのデータ書き込みに伴うアドレス変換テーブルキャッシュの更新時に、当該チェックサム領域内のチェックサム値を更新するようにしたので、アドレス変換テーブル領域内のアドレス変換テーブルのチェックサムを算出してチェックサム領域のチェックサム値と比較するだけで、アドレス変換テーブルキャッシュの更新内容がアドレス変換テーブル領域に正しく反映されているかを、つまりアドレス変換テーブルとアドレス変換テーブルキャッシュとの情報の整合性を、簡単に確認できる。
【図面の簡単な説明】
【図１】本発明の一実施形態に係るディスク制御システムを適用した計算機システムの構成を示すブロック図。
【図２】図１中のＲＡＩＤ高速化ドライバ１００によるディスクアレイの書き込み制御の原理を説明するためのブロック図。
【図３】ＲＡＩＤ高速化ドライバ１００とディスク１８０との関係と、ＲＡＩＤ高速化ドライバ１００による書き込み制御とを説明するための図。
【図４】同実施形態におけるライト処理のメインルーチンの処理手順を表すフローチャート。
【図５】図４中のステップ４０７，４０８で発行されたＩ／Ｏ要求の完了処理（Ｉ／Ｏ完了処理＃１，＃２）の動作を説明するためのフローチャート。
【図６】図４中のステップ４１０で発行されたＩ／Ｏ要求の完了処理（Ｉ／Ｏ完了処理＃３）の動作を説明するためのフローチャート。
【図７】実施形態における障害回復処理の手順を説明するためのフローチャート。
【図８】同実施形態における論理アドレスログＬＡ０〜ＬＡ３の構成例を示す図。
【図９】図８中のステップ７１３の実行時における、データストライプのＴＡＧ情報の書き込み状態を示す図。
【図１０】図１中のＡＭＴ領域１８ａが複数のＡＭＴブロックに分割して管理されることを示す図。
【図１１】ＡＭＴ領域１８ａ内の任意のブロックＢｉのチェックサムＣＳｉを求めるのに必要なブロック内オフセットＯｆｊと当該オフセット位置の４バイトの値Ａｊを説明するための図。
【図１２】ブロックＢｉのチェックサムＣＳｉ及びＡＭＴ全体のチェックサムＣＳの求め方を説明するための図。
【図１３】ＡＭＴキャッシュ１７２中のエントリＥｋが変更される際の動作手順を説明するための図。
【図１４】同実施形態におけるシャットダウン時の処理を説明するためのフローチャート。
【図１５】同実施形態におけるブート時の処理を説明するためのフローチャート。
【図１６】図１５中のステップ１５０６の処理（ＡＭＴ再構築処理）の詳細を説明するためのフローチャート。
【図１７】同実施形態におけるＡＭＴ復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理を説明するためのフローチャートの一部を示す図。
【図１８】同実施形態におけるＡＭＴ復元を可能とするためのデータ書き込み時の動作及びシャットダウン時の動作並びにチェックポイント処理を説明するためのフローチャートの残りを示す図。
【図１９】ディスク１８０に確保されたＡＭＴチェックポイントステータスブロック１８ｂ３の一例を示す図。
【図２０】ディスク１８０のＡＭＴ領域１８ａに、２つのＡＭＴバックアップ領域２１０ａ（＃１），２１０ｂ（＃２）が確保されている例を示す図。
【図２１】ストライプＩＤとタイムスタンプＴＳとの対が時系列に記録されたストライプＩＤログ領域１８ｂ１の一例を示す
【図２２】図１７中のステップ１７１５の処理（ＡＭＴチェックポイント処理）の詳細を説明するためのフローチャート。
【図２３】同実施形態におけるシステムリブート時の回復処理（ＡＭＴ回復処理）の動作を説明するためのフローチャート。
【符号の説明】
１１−１〜１１−Ｎ…ＣＰＵ、１３…主メモリ、１６…ＲＡＩＤコントローラ、１７…ドライバ作業領域、１８…ディスクアレイ、１８ａ…ＡＭＴ領域、１８ｂ…管理データ領域、１８ｂ１…ストライプＩＤログ領域、１８ｂ２…論理アドレスログ領域、１８ｂ３…ＡＭＴチェックポイントステータスブロック、１８ｃ…データ領域、１８ｄ…パーティションステータスブロック、１５０…ＯＳファイルシステム、１００…ＲＡＩＤ高速化ドライバ、１７１…ライトバッファ、１７２…ＡＭＴキャッシュ、１７３…ストライプ管理テーブル、１７４…チェックサム領域、２１０ａ，２１０ｂ…ＡＭＴバックアップ領域。
【図１】
2005018443.tif 000005
【図２】
2005018443.tif 000006
【図３】
2005018443.tif 000007
【図４】
2005018443.tif 000008
【図５】
2005018443.tif 000009
【図６】
2005018443.tif 000010
【図７】
2005018443.tif 000011
【図８】
2005018443.tif 000012
【図９】
2005018443.tif 000013
【図１０】
2005018443.tif 000014
【図１１】
2005018443.tif 000015
【図１２】
2005018443.tif 000016
【図１３】
2005018443.tif 000017
【図１４】
2005018443.tif 000018
【図１５】
2005018443.tif 000019
【図１６】
2005018443.tif 000020
【図１７】
2005018443.tif 000021
【図１８】
2005018443.tif 000022
【図１９】
2005018443.tif 000023
【図２０】
2005018443.tif 000024
【図２１】
2005018443.tif 000025
【図２２】
2005018443.tif 000026
【図２３】
2005018443.tif 000027