(57)【要約】【課題】データの整合性を保つためのデータ管理方法を高信頼化する。【解決手段】情報処理装置に接続され、情報領域と複数の退避領域を備える蓄積装置に蓄積されるデータの管理方法であって、前記複数の退避領域に対してデータの書き込みを並列に行い、前記書き込みがいずれか１つの退避領域に対して完了したかを判定し、いずれかの退避領域に対して前記書き込みが完了した時、前記情報処理装置に前記情報領域に対する前記データの書き込み完了が通知され、いずれかの退避領域に対して前記書き込みが完了した後、前記情報領域に対して前記データの書き込みを行うことを特徴とするデータ管理方法を提供する。【選択図】  図１
2004295563.tif 000002
【特許請求の範囲】
【請求項１】
情報処理装置に接続され、情報領域と複数の退避領域を備える蓄積装置に蓄積されるデータの管理方法であって、
前記複数の退避領域に対してデータの書き込みを並列に行い、
前記書き込みがいずれかの退避領域に対して完了したかを判定し、
いずれかの退避領域に対して前記書き込みが完了した時、前記情報処理装置に前記情報領域に対する前記データの書き込み完了が通知され、
いずれかの退避領域に対して前記書き込みが完了した後、前記情報領域に対して前記データの書き込みを行うことを特徴とするデータ管理方法。
【請求項２】
請求項１において、
前記複数の退避領域に対してデータの書き込みを並列に行う際、前記複数の退避領域のそれぞれに対し、前記データを蓄積可能な空き領域があるかを判定し、いずれかの退避領域にて前記データを蓄積可能な空き領域がない場合、前記情報領域に対して反映すべきデータがあるかを判定し、
前記反映すべきデータがある場合、前記反映すべきデータを前記情報領域へ書き込み後、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外することを特徴とするデータ管理方法。
【請求項３】
請求項１において、
さらに、前記複数の退避領域に蓄積されたデータのうち前記情報領域に対して反映すべきデータを特定するためのヘッダ情報が各退避領域に記録され、
前記複数の退避領域に対してデータの書き込みを並列に行う際、前記複数の退避領域のそれぞれに対し、前記データを蓄積可能な空き領域があるかを判定し、いずれかの退避領域にて前記データを蓄積可能な空き領域がない場合、前記反映すべきデータがあるかを判定し、
前記反映すべきデータがある場合、前記反映すべきデータを前記情報領域へ書き込み後、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外するように前記ヘッダ情報を更新することを特徴とするデータ管理方法。
【請求項４】
請求項１において、
さらに、前記情報処理装置の起動時に、前記複数の退避領域に蓄積されたデータのうち最新データを保持する退避領域を選択し、
前記選択された退避領域において前記情報領域に反映すべきデータが蓄積されているかを判定し、
前記反映すべきデータが蓄積されている場合、前記情報領域に対して該反映すべきデータの書き込みを行うことを特徴とするデータ管理方法。
【請求項５】
情報処理装置に接続され、複数の情報領域と複数の退避領域を備える蓄積装置に蓄積されるデータの管理方法であって、
前記複数の退避領域に対してデータの書き込みを並列に行い、
前記書き込みがいずれかの退避領域に対して完了したかを判定し、
いずれかの退避領域に対して前記書き込みが完了した時、前記情報処理装置に前記複数の情報領域に対する前記データの書き込み完了が通知され、
いずれかの退避領域に対して前記書き込みが完了した後、前記複数の情報領域に対して前記データの書き込みを並列に行うことを特徴とするデータ管理方法。
【請求項６】
請求項５において、
さらに、前記情報処理装置の起動時に、前記複数の退避領域において前記複数の情報領域に反映すべきデータが蓄積されているかを判定し、
前記反映すべきデータが蓄積されている場合、前記複数の情報領域に対して該反映すべきデータの書き込みを並列に行い、
すべての情報領域に対して該書き込みが完了した場合、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外することを特徴とするデータ管理方法。
【請求項７】
情報領域と複数の退避領域を備える蓄積装置に接続された情報処理装置に、
前記複数の退避領域に対してデータの書き込みを並列に実行させ、
前記書き込みがいずれかの退避領域に対して完了したかを判定させ、
いずれかの退避領域に対して前記書き込みが完了した後、前記情報領域に対して前記データの書き込みを実行させるプログラム。
【請求項８】
請求項７において、
さらに、前記情報処理装置の起動時に、前記複数の退避領域に蓄積されたデータのうち最新データを保持する退避領域を選択させ、
前記選択された退避領域において前記情報領域に反映すべきデータが蓄積されているかを判定させ、
前記反映すべきデータが蓄積されている場合、前記情報領域に対して該反映すべきデータの書き込みを実行させるプログラム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、システムクラッシュ等による再起動時にデータの整合性を保つためのデータ管理方法を高信頼化する方法に関する。
【０００２】
【従来の技術】
情報処理装置が蓄積装置に蓄積されたデータを管理する方法として、ファイルシステムがある。これは、データをその管理情報と合わせたファイルとして管理するものである。管理情報には例えば、ファイルの作成者、アクセス権、サイズ、蓄積装置での位置情報などの情報が含まれる。
【０００３】
ファイルへのデータ書き込み中に情報処理装置が予期せぬ理由（電源断、システムクラッシュ等）で停止すると、管理情報を更新する前にデータだけが更新されたり、またその逆が起こる場合があり、データの整合性が取れなくなることがある。そこで、予期せぬ理由で正常終了せず再起動した場合のデータの整合性を保つデータ管理方法の１つとしてジャーナルファイルシステムが考案された。
【０００４】
図７は、ジャーナルファイルシステムを説明する図である。情報処理装置１のＩＯコントローラ４を介して情報処理装置１と複数の蓄積装置６１、６２が接続される。蓄積装置６１の情報領域７はファイルを格納するために使用され、蓄積装置６２の退避領域８は、ファイルに書き込むデータを一旦格納するために使用される。
【０００５】
メモリ３に格納されたオペレーティングシステム（ＯＳ）３１に基づいて処理を実行するＣＰＵ２は、情報処理装置１や蓄積装置６に命令を発行する。ＣＰＵ２は、更新ファイルに記録されたデータと書き込むデータの差分データ（ログデータ）を計算し、差分データをまず退避領域８の設定された蓄積装置６２に送信する。そして、ＣＰＵ２は退避領域８への書き込み完了通知を蓄積装置６２から受け、退避領域８に蓄積されたログデータを対応するファイルへ反映すべく、情報領域７への書き込みをスケジューリングする。その後、ＣＰＵ２はスケジュールされた情報領域７への書き込みを実行する。
【０００６】
このデータ管理方法により、ファイルへのデータ更新中にシステムトラブル等の予期せぬ理由により情報処理装置１が停止した場合でも、情報処理装置１の再起動時に退避領域８に残されたログデータを対象のファイルを含む情報領域７へ反映させることによりデータの整合性を保つことができる。なぜなら、データだけ更新されてしまった場合は、ログデータから管理情報を作成することができ、管理情報だけが更新されてしまった場合は、ログデータを対象のファイルに追加することができるためである。
【０００７】
なお、図７において情報領域７と退避領域８は別々の蓄積装置６１、６２に設定されているが、同一の蓄積装置に設定することもできる。また、退避領域８に蓄積されるログデータは、更新差分データに限られない。例えば、更新ファイルの更新前のデータあるいは書き込むデータ自身を退避領域８に蓄積し、システムトラブル等による再起動が発生したら、退避領域８に蓄積されたデータを対応するファイルに反映することによってもデータの整合性は保たれる。
【０００８】
ジャーナルファイルシステムに関する公知例には、クラスタノード間でディスクのみならずメモリをも共有し、共有メモリ上にログデータを保存し、ノードが故障しても共有メモリ上のログデータを使用し他方のノードがファイルシステムのリカバリを行うものがある（特許文献１参照）。また他の公知例には、現用系ノード、待機系ノードのメモリ上での同期的なログデータの複製により、ログデータの書き込みに伴う性能劣化問題を解消しようとするものがある（特許文献２参照）。
【０００９】
【特許文献１】
特開平９−２１２４００号公報、耐故障性を備えたファイルシステム
【００１０】
【特許文献２】
特開平８−１０６４２６号公報、クライアントサーバシステム及びその処理方法
【００１１】
【発明が解決しようとする課題】
しかしながら、従来におけるデータの整合性を保つデータ管理方法においては、情報処理装置が予期せぬ理由で停止した場合データの整合性は保たれるが、データ自身の破壊から情報処理装置を守るよう高信頼化されてはいない。例えば、ジャーナルファイルシステムでは、更新差分データ等の退避領域に記録されたログデータ自身が破壊された場合、破壊されたデータは修復されないため、誤ったデータが対象となるファイルに書き込まれる可能性があった。また、従来の特許文献１あるいは特許文献２に提案されるようなメモリ上にログデータが保存される場合、システム全体が停止した場合ログデータを喪失するため、システムの再起動後にファイルシステムの状態を復旧できないでいた。
【００１２】
退避領域に蓄積されたデータが破壊されてもデータの整合性を保つためには、ソフトウエアＲＡＩＤ（Ｒｅｄｕｎｄａｎｔ  Ａｒｒａｙ  ｏｆ  Ｉｎｄｅｐｅｎｄｅｎｔ  Ｄｉｓｋｓ）あるいはハードウエアＲＡＩＤにより退避領域に蓄積されるログデータを冗長化する方法が考えられる。しかし、ＲＡＩＤを使用して退避領域を冗長化する場合、ジャーナルファイルシステムの性能のキーとなる退避領域のＩＯ性能を損ねてしまう。
【００１３】
例えば、退避領域の冗長化を実現するＲＡＩＤレベルとして、ＲＡＩＤ１（ミラーリング）を使用する場合、ミラーの片面に対する書き込みが終了後でないとミラーのもう一方に対する書き込みが開始されず時間がかかる。またＲＡＩＤ５を使用する場合も、パリティの計算にＣＰＵの処理能力を消費してしまうため時間がかかる。
【００１４】
また、他にジャーナルファイルシステムの高信頼化法は提案されていない。従って本発明の目的は、ソフトウエアＲＡＩＤあるいはハードウエアＲＡＩＤを使用せずに、システムトラブル等による再起動時にデータの整合性を保つための高信頼化されたデータ管理方法に関連する技術を提供することにある。
【００１５】
【課題を解決するための手段】
上記目的は、情報処理装置に接続され、情報領域と複数の退避領域を備える蓄積装置に蓄積されるデータの管理方法であって、前記複数の退避領域に対してデータの書き込みを並列に行い、前記書き込みがいずれかの退避領域に対して完了したかを判定し、いずれかの退避領域に対して前記書き込みが完了した時、前記情報処理装置に前記情報領域に対する前記データの書き込み完了が通知され、いずれかの退避領域に対して前記書き込みが完了した後、前記情報領域に対して前記データの書き込みを行うことを特徴とするデータ管理方法を提供する請求項１に記載の発明により達成される。
【００１６】
また、上記目的は、請求項１において、前記複数の退避領域に対してデータの書き込みを並列に行う際、前記複数の退避領域のそれぞれに対し、前記データを蓄積可能な空き領域があるかを判定し、いずれかの退避領域にて前記データを蓄積可能な空き領域がない場合、前記情報領域に対して反映すべきデータがあるかを判定し、前記反映すべきデータがある場合、前記反映すべきデータを前記情報領域へ書き込み後、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外することを特徴とするデータ管理方法を提供する請求項２に記載の発明により達成される。
【００１７】
また、上記目的は、請求項１において、さらに、前記複数の退避領域に蓄積されたデータのうち前記情報領域に対して反映すべきデータを特定するためのヘッダ情報が各退避領域に記録され、前記複数の退避領域に対してデータの書き込みを並列に行う際、前記複数の退避領域のそれぞれに対し、前記データを蓄積可能な空き領域があるかを判定し、いずれかの退避領域にて前記データを蓄積可能な空き領域がない場合、前記反映すべきデータがあるかを判定し、前記反映すべきデータがある場合、前記反映すべきデータを前記情報領域へ書き込み後、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外するように前記ヘッダ情報を更新することを特徴とするデータ管理方法を提供する請求項３に記載の発明により達成される。
【００１８】
また、上記目的は、請求項１において、さらに、前記情報処理装置の起動時に、前記複数の退避領域に蓄積されたデータのうち最新データを保持する退避領域を選択し、前記選択された退避領域において前記情報領域に反映すべきデータが蓄積されているかを判定し、前記反映すべきデータが蓄積されている場合、前記情報領域に対して該反映すべきデータの書き込みを行うことを特徴とするデータ管理方法を提供する請求項４に記載の発明により達成される。
【００１９】
また、上記目的は、情報処理装置に接続され、複数の情報領域と複数の退避領域を備える蓄積装置に蓄積されるデータの管理方法であって、前記複数の退避領域に対してデータの書き込みを並列に行い、前記書き込みがいずれかの退避領域に対して完了したかを判定し、いずれかの退避領域に対して前記書き込みが完了した時、前記情報処理装置に前記複数の情報領域に対する前記データの書き込み完了が通知され、いずれかの退避領域に対して前記書き込みが完了した後、前記複数の情報領域に対して前記データの書き込みを並列に行うことを特徴とするデータ管理方法を提供する請求項５に記載の発明により達成される。
【００２０】
また、上記目的は、請求項５において、さらに、前記情報処理装置の起動時に、前記複数の退避領域において前記複数の情報領域に反映すべきデータが蓄積されているかを判定し、前記反映すべきデータが蓄積されている場合、前記複数の情報領域に対して該反映すべきデータの書き込みを並列に行い、すべての情報領域に対して該書き込みが完了した場合、前記複数の退避領域に蓄積されたデータを前記反映すべきデータから除外することを特徴とするデータ管理方法を提供する請求項６に記載の発明により達成される。
【００２１】
また、上記目的は、情報領域と複数の退避領域を備える蓄積装置に接続された情報処理装置に、前記複数の退避領域に対してデータの書き込みを並列に実行させ、前記書き込みがいずれかの退避領域に対して完了したかを判定させ、いずれかの退避領域に対して前記書き込みが完了した後、前記情報領域に対して前記データの書き込みを実行させるプログラムを提供する請求項７に記載の発明により達成される。
【００２２】
また、上記目的は、請求項７において、さらに、前記情報処理装置の起動時に、前記複数の退避領域に蓄積されたデータのうち最新データを保持する退避領域を選択させ、前記選択された退避領域において前記情報領域に反映すべきデータが蓄積されているかを判定させ、前記反映すべきデータが蓄積されている場合、前記情報領域に対して該反映すべきデータの書き込みを実行させるプログラムを提供する請求項８に記載の発明により達成される。
【００２３】
【発明の実施の形態】
図１は、本発明の第一の実施形態における情報処理装置と蓄積装置を示すブロック図である。本発明の第一の実施形態では、２つの退避領域を備えた蓄積装置に対し、情報処理装置が並列に書き込み命令を発行してデータを退避領域に蓄積する。また、すべての退避領域への書き込み完了を待たずにいずれかの退避領域にデータの書き込みを完了した後に情報領域への書き込みを行う。
【００２４】
また、退避領域に空き領域があるか判定し、空き領域がなければ空き領域を確保する処理を行う。そして、システムトラブル等の再起動時に退避領域のデータを反映することにより、データ整合性を保つ方法を高信頼化する。
【００２５】
情報処理装置１は、メモリ３に格納された実行手順にそって処理を実行するＣＰＵ２と、周辺機器との入出力処理を制御するＩＯコントローラ４を備える。メモリ３には、ＣＰＵ２を制御するためのオペレーティングシステム（ＯＳ）３１等が格納される。ＩＯコントローラ４は、情報処理装置１と蓄積装置６１〜６４を接続するためのインタフェースとして例えば、ＩＤＥ（Ｉｎｔｅｇｒａｔｅｄ  Ｄｒｉｖｅ  Ｅｌｅｃｔｒｏｎｉｃｓ）、ＳＣＳＩ（Ｓｍａｌｌ  Ｃｏｍｐｕｔｅｒ  Ｓｙｓｔｅｍ  Ｉｎｔｅｒｆａｃｅ）やＦＣ（Ｆｉｂｅｒ  Ｃｈａｎｎｅｌ）等を提供し、ＣＰＵ１と蓄積装置とのデータ送受信を仲介する。
【００２６】
蓄積装置６１〜６４は、中継装置５を介して情報処理装置１と接続される。蓄積装置６１、６２にはファイルが格納される情報領域７１、７２が設定され、蓄積装置６３、６４にはファイルを更新する際に一時的にデータを蓄積する退避領域８１、８２が設定される
中継装置５は、例えば、ＦＣをインタフェースとする際のＦＣカード、ＦＣスイッチや、ＳＣＳＩカード等が相当する。ＣＰＵ２により発行されたデータ書き込み、読み出し命令は、関連するデータと共にＩＯコントローラ４へ送信される。
【００２７】
例えば、書き込み命令であれば、まず、データが蓄積装置６３、６４の退避領域８１、８２に対して一旦書き込まれ、その後蓄積装置６１、６２の情報領域７１、７２への書き込みが開始される。読み出し命令であれば、情報領域７１、７２からデータが読み出される。
【００２８】
こうして情報処理装置１は、蓄積装置６１〜６４に対し、データ書き込み、読み出し命令を発行し、蓄積装置に蓄積されたファイルを管理する。なお、図１においては、蓄積装置６１〜６４のいずれかが故障しても他の情報領域７や退避領域８に影響を与えないようにするために、情報領域７、退避領域８がそれぞれ別々の蓄積装置６１〜６４に設定されているが、同一の蓄積装置に設定することも可能である。
【００２９】
本発明の第一の実施形態におけるデータ管理方法は、データ書き込み処理と、情報処理装置の起動時の処理に特徴がある。従って、次にこれらの処理をフローチャートを用いて説明する。
【００３０】
図２は、本発明の第一の実施形態における書き込み処理の動作を説明するフローチャートである。まず、蓄積装置６への書き込み命令が発行される（Ｓ２１）。ＣＰＵ２は書き込み命令を発行し、ＩＯコントローラ４は退避領域８への書き込み命令に変換する。
【００３１】
退避領域８に書き込むデータは、例えば、更新対象のファイルの更新差分データや、新規データ等である。本明細書においては、以降退避領域８に書き込むデータをログデータと呼ぶことにする。
【００３２】
次に、退避領域８にログデータを蓄積可能な空き領域があるかをすべての退避領域で判定する（Ｓ２２）。第一の実施形態における空き領域とは、データが蓄積されていない領域を意味する。ステップＳ２２では、ログデータを格納できるだけの空き領域が退避領域８１、８２に残されているかをＣＰＵ２が判定すればよい。例えば、退避領域に残された空き領域のサイズがログデータのデータサイズを上回るかが判定される。ＯＳの機能によってＣＰＵ２はこれらの情報を取得することができ、判定が可能である。
【００３３】
ステップＳ２２ですべての退避領域８に空き領域があると判定された場合、退避領域８へログデータを書き込む（Ｓ２３）。ＣＰＵ２は、複数の退避領域８１、８２に対して並列に書き込み命令を発行する。そしていずれかの退避領域８へのログデータの書き込みが完了したか判定する（Ｓ２４）。ステップＳ２４では、
蓄積装置６３か６４のいずれかが書き込み完了を通知した場合に、ＣＰＵ２がステップＳ２６の書き込み完了と判定する。
【００３４】
ステップＳ２４でどちらの退避領域８１、８２への書き込みも完了しなければ、どちらか１つの退避領域８への書き込みが完了するまで待機する。そして、いずれかの退避領域８１、８２へのログデータの書き込みが完了した場合、そのログデータの書き込みがすべての情報領域７に対して終了したものとＣＰＵ２はみなす（Ｓ２５）。ＣＰＵ２は、ステップＳ２１で発生した書き込み命令が完了したものとみなし、書き込み要求をしたエンドユーザ（アプリケーション等）に書き込み命令の完了を通知する。後述する起動時の処理あるいは後述するライトバッファのフラッシュ（ステップＳ２８の処理）を行うことにより、いずれかの退避領域にログデータがあれば、データの整合性を保つことが可能なため、情報領域への書き込み前に情報領域への書き込み完了とみなすことができ、書き込みを要求したエンドユーザに対する応答時間を短縮することができる。
【００３５】
ステップＳ２５は、複数の退避領域のいずれかに対するログデータの書き込み完了をもって、情報領域への書き込み完了とみなすだけなので、ログデータを書き込み中の退避領域では、書き込みが続行される。ステップＳ２５により、いずれかの退避領域でログデータを書き込み中であっても、ＣＰＵ２はそのすべての書き込み完了を待ち合わせることなく、ログデータの情報領域への書き込みをスケジューリングすることができる。
【００３６】
ステップＳ２５が済むと、情報領域へのログデータの書き込みがスケジューリングされる（Ｓ２６）。ステップＳ２６では、決められた時間にログデータが対応するファイルに書き込まれるようＣＰＵ２がスケジューリングする。スケジューリングされた時間に、ＣＰＵ２は書き込み命令を発行し、ＩＯコントローラ４が対応するファイルが格納された情報領域７１、７２に書き込みを行う。
【００３７】
そして、実際に情報領域への書き込みが完了したか判定し、情報領域への書き込みが完了すれば（Ｓ２７）、書き込み処理を終了する。ステップＳ２７は、ステップＳ２６で書き込みを行った情報領域を含む蓄積装置６が書き込み完了を通知した場合に、ＣＰＵ２がステップＳ２７の書き込み完了と判定すればよい。
【００３８】
ステップＳ２２でいずれかの退避領域にて空き領域が無いと判定された場合、退避領域に空き領域を確保するための処理を行う。まず、ライトバッファに蓄積されたデータを強制的に情報領域へ書き込む（Ｓ２８）。
【００３９】
ライトバッファはメモリ３に確保され、ステップＳ２６でスケジュールはされたがまだ実行されていない書き込みに関するデータ（例えば、更新対象のファイル名とそのファイルに対応するログデータ等）が格納される。そして、ステップＳ２７の情報領域への書き込み完了によってライトバッファは解放される。空き領域を確保するには、ログデータがすべて情報領域に反映されており、退避領域に蓄積されているログデータが反映すべきデータではない、つまり反映すべきデータから除外されている必要がある。
【００４０】
ログデータを情報領域に反映する前に削除、あるいは上書きしてしまうとファイルの整合性が保てなくなるためである。従って、ステップＳ２８でライトバッファに格納されたログデータを情報領域へ書き込みむことによって、ログデータが削除されても上書きされてもいい状態にする。
【００４１】
そして、対応するファイルが格納された情報領域７への書き込みが完了した後、空き領域の確保が行われる（Ｓ３０）。ステップＳ３０では、退避領域８１、８２に蓄積されたログデータを反映すべきデータから除外するため、ログデータをすべて削除するようＣＰＵ２が命令を発行すればよい。
【００４２】
ステップＳ２８により反映すべきログデータはすべて情報領域７に反映されており、この時点でログデータを削除しても問題はない。ステップＳ３０の終了後は、ステップＳ２３へ進み空になった退避領域へログデータの書き込みを行うことができる。
【００４３】
なお、本実施形態においては、退避領域が２つの場合を説明したが、退避領域が２つ以上存在しても図２を適用することができる。
【００４４】
以上に説明した第一の実施形態の書き込み処理により、ログデータは従来のＲＡＩＤ１（ミラーリング）とは異なる方法で冗長化される。即ち、ＣＰＵ２はすべての退避領域に対する書き込み完了時ではなくいずれかの退避領域に対する書き込み完了時に、書き込み要求をしたエンドユーザに書き込み完了を通知する。従って、エンドユーザに対する書き込みの応答時間が短縮される。また、エンドユーザに対する書き込み完了通知後もすべての退避領域に対しログデータの書き込みが続行されるため、ログデータの冗長化も実現される。
【００４５】
また、従来のミラーリングによる冗長化方法とは異なるため、冗長化された退避領域８間で同期を取る必要もない。さらに、各ミラーにおいて変更箇所をマップ情報として記録し、再起動時にマップ情報を参照し、変更箇所のみミラー間の同期を取ることでデータの整合性を保つＤＲＬ（Ｄｉｒｔｙ  Ｒｅｇｉｏｎ  Ｌｏｇｇｉｎｇ）も、前述したように退避領域間で同期を取る必要性がないことから、必要ない。また、ＲＡＩＤ５でのパリティの計算等も必要ないので、ＲＡＩＤを使用する方法より書き込みを高速化できる。
【００４６】
続いて、第一の実施形態における起動時の処理について説明する。
【００４７】
図３は、本発明の第一の実施形態における情報処理装置を起動する時の処理を説明するフローチャートである。この処理は、情報処理装置１に電源を入れ初期化する際や、システムトラブルなどによる再起動時に退避領域に蓄積された反映すべきログデータを情報領域に反映することによって、データの整合性を保つものである。
【００４８】
まず、退避領域８１、８２から最新のログデータを保持する退避領域を特定する（Ｓ３１）。最新のログデータを保持する退避領域とは、最後に書き込まれたログデータの書き込みが完了している退避領域を意味する。退避領域８へのログデータの書き込みは並列に実行され、書き込み状態に差が出ないのが理想だが、実際は蓄積装置６に対する書き込み性能や情報処理装置１の負荷状況によって、十分な時間が経てばどちらの退避領域８１、８２にも同じログデータが蓄積されるとしても、あるタイミングにおいては、一方の退避領域ではログデータの書き込みが完了し、他方の退避領域ではまだ書き込み中となる場合がある。
【００４９】
その状態で電源断等が発生した場合、次に起動させても退避領域のログデータは違いが生じたままである。そこで、最新のログデータを情報領域に反映して、データの整合性を保つためにステップＳ３１を実行する。ステップＳ３１は、例えば、ＯＳの機能によって退避領域に最後にログデータが書き込まれた時間がわかるので、その時間が最も遅いログデータを含む退避領域８をＣＰＵ２が１つ選択すればよい。
【００５０】
そして、ステップＳ３１で特定された退避領域８に反映すべきログデータが存在するか判定する（Ｓ３２）。第一の実施形態では、空き領域を確保するため反映済みのログデータをすべて削除するため（ステップＳ３０）、退避領域８にログデータが残されていれば、それはすべて反映すべきログデータと判定できる。そこで例えば、ステップＳ３２は、ＣＰＵ２がステップＳ３１で特定された退避領域に対して読み出し命令を発行し、読み出されるデータがあるかないかでログデータの有無を判定すればよい。
【００５１】
ステップＳ３２で反映すべきログデータが存在する場合、情報領域へのログデータの書き込みがスケジューリングされる（Ｓ２６）。ステップＳ２６は、ステップＳ２２で空き領域がある場合に行われるステップＳ２６と同じ処理を行う。そして情報領域への書き込み完了（Ｓ２７）により起動時の処理を終了する。ステップＳ２７は、ステップＳ２２で空き領域がある場合に行われるステップＳ２７と同じ処理を行う。
【００５２】
ステップＳ３２で退避領域にログデータが全く蓄積されていない場合、その退避領域はスキップされ、すべての退避領域に全くログデータが蓄積されていない場合は、そのまま起動時の処理を終了する。
【００５３】
以上に説明した、第一の実施形態の書き込み処理および起動時の処理によって、退避領域に対するログデータの書き込み中に、情報処理装置１がクラッシュして再起動した場合、いずれか１つの退避領域に最新のログデータが残されていれば、そのログデータを再起動時に情報領域に反映することによってクラッシュ前のデータと整合性を保つことができる。また、どこにもログデータが残されていなければ、情報領域へのログデータの書き込みは完了しており、何もせずにデータの整合性が保たれる。
【００５４】
また、情報処理装置１が稼動中に退避領域８１、８２のどちらかが故障しても、稼動中は、スケジュールされたタイミングや退避領域に空き領域が無くなったタイミングで、退避領域のログデータが情報領域に反映される。従って、本発明の第一の実施形態によってデータの整合性を保つデータ管理方法を高信頼化することができる。
【００５５】
続いて本発明の第二の実施形態を説明する。第二の実施形態では、図１のブロック図と同じ構成の情報処理装置と蓄積装置を用いるが、第一の実施形態と異なり、情報領域７１、７２に蓄積されるデータが冗長化される。すなわち、第一の実施形態においては、情報領域７１、７２のどちらかにデータが書き込まれたが、同じデータが情報領域７１、７２に対して並列に書き込まれる。その書き込み方法は、退避領域に対する書き込み方法と同様であって、ＲＡＩＤを使用しないものである。
【００５６】
また、第一の実施形態と異なり、退避領域に蓄積されるログデータがヘッダ情報によって管理され、どのログデータが情報領域に反映されたかが管理される。また、ヘッダ情報の使用により、退避領域を循環型（退避領域の末尾までデータを蓄積したらデータを削除することなく先頭から上書きする方法）の領域として使用することが可能になる。そこでまず、第二の実施形態において使用される退避領域のデータ構成例を説明する。
【００５７】
図４は、本発明の第二の実施形態において退避領域に蓄積されるデータのデータ構成例を示す図である。退避領域８１、８２のどちらにも、図４の構成をしたデータが蓄積される。各退避領域には、図４にあるようにログヘッダ４４と複数のログ４３が格納される。
【００５８】
各ログ４３には、ログ４３の開始と終了を示すスタートビット４５、エンドビット５０が記録され、その間にログレコード５１とログデータ４９が格納される。ログ４３は、スタートビット４５から記録され、最後にエンドビット５０が記録されることで初めて有効になる。
【００５９】
このため、ログデータ４９を記録中に情報処理装置１が停止した場合は、エンドビット５０の記録がない（閉じていない）ログ４３が退避領域に残される。スタートビット４５とエンドビット５０が共に存在しているログ４３だけが有効とみなされ、エンドビット５０が無く閉じていないログ４３は、無効とみなされる。
【００６０】
ログデータ４９は、第一の実施形態のステップＳ２１で説明したログデータそのものである。各ログデータ４９に対して、１、２、３、、、と１ずつ増加するように番号付けがされ、その番号はログ４３を特定するシークエンス番号として、ログレコード５１のシークエンス番号（ＳＥＱ）４６に格納される。ログレコード５１には他に、ログ４３全体の大きさ（ＳＩＺＥ）４７、ログデータ４９のサイズ（ＢＳＩＺＥ）４８が格納される。
【００６１】
ログヘッダ４４の最新シークエンス番号（ＳＳＥＱ）４１には、最後に情報領域に反映させたログ４３を特定するシークエンス番号が格納される。また、退避領域は所定の大きさごとに番地付けされており、番地により退避領域内の位置が特定される。ログヘッダ４４のオフセット（ＳＯＦＦＳＥＴ）４２には、最後に情報領域に反映させたログデータ４９を含むログの次のログ４３の開始番地が格納される。
【００６２】
第二の実施形態においては、情報処理装置の稼動中はメモリ３に、退避領域に最後に書き込んだログを特定するシークエンス番号、退避領域に最後に書き込んだログの次のログの退避領域での開始番地を特定するオフセット、情報領域に最後に反映させたログの次のログの退避領域での開始番地を特定するオフセットが退避領域毎に格納されるものとする。情報領域にログデータを反映させる際（例えば、ライトバッファのフラッシュ時）に、メモリ上のシークエンス番号がログヘッダ４４の最新シークエンス番号４１に、メモリ上の最後に情報領域に反映させたログの次のログの開始番地を特定するオフセットがログヘッダ４４のオフセット４２に格納される。
【００６３】
図４において、ログヘッダ４４を除いた領域には、ログが循環して蓄積される。即ち、末尾にログ４３ｎが記録された後、次のログを書き込む場合、そのまま先頭（図４ではログ４３１の位置）から次のログを上書きする。反映すべきデータを誤って上書きすることを防ぐために、ログを書き込む前に空き領域の有無を判定し、反映すべきデータが残っていれば、情報領域への反映を先に行うため、誤って上書きする問題も起きない。
【００６４】
退避領域に蓄積されるデータ構成を図４のようにした場合、次のようにして反映すべきデータの特定を行うことができる。まず反映すべきデータが存在するかどうかを次のようにして判定することができる。それは、オフセット（ＳＯＦＦＳＥＴ）４２で特定される位置のログ４３のシークエンス番号が、最新シークエンス番号（ＳＳＥＱ）４１のシークエンス番号以下かどうかを判定することにより行われる。即ち、オフセット（ＳＯＦＦＳＥＴ）４２により特定されるログのシークエンス番号４６が最新シークエンス番号４１以上であれば、そのログは最後に情報領域に反映が行われた後に退避領域に蓄積されたログデータを含み、反映すべきデータが存在することがわかる。
【００６５】
次に反映すべきデータを特定する。反映すべきデータは、オフセット４２で特定されるログからログを１つずつ読み出して、各ログレコード５１のシークエンス番号が開始位置のシークエンス番号から１ずつ単調増加する連番ではなくなるログまでのデータとして特定される。
【００６６】
次に、図４を利用した本発明の第二の実施形態の書き込み処理と起動時の処理をフローチャートを用いて説明する。
【００６７】
図５は、本発明の第二の実施形態における書き込み処理の動作を説明するフローチャートである。第二の実施形態における書き込み処理は、第一の実施形態における書き込み処理と一部重複するため、同じ処理には同じステップ番号が振られており、重複する箇所は説明が省略される。
【００６８】
まず、蓄積装置６への書き込み命令が発生する（Ｓ２１）。ステップＳ２１は、図２のステップＳ２１と同じ処理を行う。次に、退避領域８に空き領域があるかをすべての退避領域で判定する（Ｓ２２）。第二の実施形態においては、第一の実施形態と異なり、ヘッダ情報によりログデータが反映すべきデータかが管理され、ログデータを削除せず上書きするため、第二の実施形態における空き領域は、退避領域にて反映すべきログデータを含むログを除いた部分を意味する。
【００６９】
従って、ステップＳ２２では、退避領域に反映すべきログデータが存在するか判定し、反映すべきログデータが無ければ、空き領域があることになる。反映すべきログデータがある場合は、退避領域のサイズから、ログヘッダ４４のサイズ、反映すべきログデータを含むログ４３のサイズ、ログ１つ分のログレコード、ログ１つ分のスタートビット、エンドビットのサイズを引いたサイズが、書き込むログデータのサイズを上回るか判定し、上回れば空き領域があることになる。下回れば、空き領域がないと判定される。ＣＰＵ２は退避領域からログヘッダ４４およびログレコード５１を読み出すことによりこれらの判定が可能である。
【００７０】
ステップＳ２２で空き領域があると判定された場合、退避領域へログデータを書き込む（Ｓ２３）。ステップＳ２３は、第一の実施形態における図２のステップＳ２３と同じ処理を行う。そしていずれかの退避領域へのログデータの書き込みが完了したか判定する（Ｓ２４）。ステップＳ２４は、第一の実施形態における図２のステップＳ２４と同じ処理を行う。
【００７１】
ステップＳ２４で、どの退避領域への書き込みも完了しなければ、いずれか１つの退避領域への書き込みが完了するまで待機する。いずれかの退避領域８１、８２へのログデータの書き込みが完了した場合、そのログデータの書き込みがすべての情報領域７に対して終了したものとＣＰＵ２はみなす。（Ｓ２５）ＣＰＵ２は、ステップＳ２１で発生した書き込み命令が完了したものとみなし、書き込み要求をしたエンドユーザ（アプリケーション等）に書き込み命令の完了を通知する。
【００７２】
ステップＳ２５は、第一の実施形態における図２のステップＳ２５と同じものである。ステップＳ２５が済むと、情報領域へログデータの書き込みがスケジューリングされる（Ｓ２６）。第二の実施形態のステップＳ２６では、第一の実施形態と異なり、データを冗長化するためにＣＰＵ２が情報領域７１、７２に対して並列に書き込みを行うようスケジューリングする。
【００７３】
そしてすべての情報領域７１、７２に対する書き込みが完了したか判定する（Ｓ５１）。ステップＳ５１では、蓄積装置６１、６２が情報領域への書き込み完了を通知した場合に、ＣＰＵ２がステップＳ２６の書き込み完了と判定すればよい。
【００７４】
すべての情報領域７１、７２への書き込みが完了しなければ、すべての情報領域７への書き込みが完了するまで待機する。すべての情報領域への書き込みが完了すれば（Ｓ２７）、書き込み処理を終了する。ステップＳ２７では、例えば蓄積装置６がすべての情報領域への書き込み完了を通知した場合に、ＣＰＵ２がステップＳ２７の書き込み完了と判定してもよい。
【００７５】
ステップＳ２２で、いずれかの退避領域８１、８２にて空き領域が無いと判定された場合、退避領域に空き領域を確保するための処理を行う。まず、ライトバッファに蓄積されたデータを強制的に情報領域へ書き込む（Ｓ２８）。これは、図２のステップＳ２８の処理と同じである。
【００７６】
次に、ログデータを情報領域７１、７２の両方に対して書き込みが完了したか判定する（Ｓ５１）。すべての情報領域への書き込みが実際に完了した後でなければ、空き領域の確保を行うことができない。
【００７７】
例えば、情報領域７１へのログデータの反映が完了した時、情報領域７２ではまだログデータが書き込まれているとする。その時点で退避領域８１、８２からログデータを削除すると、情報領域７１が故障した場合、その後再起動しても情報領域７２に反映させるべきログデータが残されていないことになるからである。
【００７８】
ステップＳ５１では、蓄積装置６がすべての情報領域への書き込み完了を通知した場合に、ＣＰＵ２がステップＳ２６の書き込み完了と判定してもよい。ステップＳ５１でまだいずれかの情報領域７に対してログデータの書き込みが行われている間は特に何もしない。ステップＳ５１で情報領域７１、７２の両方に対してログデータの書き込みが終了した場合、次に空き領域の確保を行う（Ｓ３０）。
【００７９】
すべての情報領域に対するログデータの反映が済めば、そのログデータは反映すべきデータから除外され、ログデータを上書きしても構わない。第一の実施形態においては、空き領域の確保をするためログデータを削除したが、第二の実施形態においては、ログデータを反映すべきデータから除外するために、すべての退避領域８のログヘッダ４４のオフセット４２を、ステップＳ２８において反映が完了したログデータ４９を含むログ４３の次のログ４３が記録される開始番地に、そしてログヘッダ４４の最新シークエンス番号４１をメモリ３に格納された最後に情報領域に書き込んだログのシークエンス番号にそれぞれＣＰＵ２が更新する。メモリ３には、退避領域毎にこれらの情報が格納されており、対応するデータが各退避領域のログヘッダに書き込まれる。
【００８０】
ステップＳ３０の終了後は、ステップＳ２３に進み空き領域の確保された退避領域に対してログデータを上書きすることができる。
【００８１】
また、本実施形態においては、退避領域が２つの場合を説明したが、退避領域が２つ以上存在しても図５を適用することができる。また、情報領域が２つ以上存在している場合にも図５の適用が可能である。
【００８２】
以上に説明した第二の実施形態の書き込み処理により、ログデータは従来のＲＡＩＤ１（ミラーリング）とは異なる方法で冗長化される。即ち、ＣＰＵ２はすべての退避領域に対する書き込み完了時ではなくいずれかの退避領域に対する書き込み完了時に、書き込み要求をしたエンドユーザに書き込み完了を通知する。従って、エンドユーザに対する書き込みの応答時間が短縮される。また、エンドユーザに対する書き込み完了通知後もすべての退避領域に対しログデータの書き込みが続行されるため、ログデータの冗長化も実現される。
【００８３】
また、従来のミラーリングによる冗長化方法とは異なるため、冗長化された退避領域間で同期を取る必要もない。さらに、各ミラーにおいて変更箇所をマップ情報として記録し、再起動時にマップ情報を参照し、変更箇所のみミラー間の同期を取ることでデータの整合性を保つＤＲＬ（Ｄｉｒｔｙ  Ｒｅｇｉｏｎ  Ｌｏｇｇｉｎｇ）も、前述したように退避領域間で同期を取る必要性がないことから、必要ない。また、ＲＡＩＤ５でのパリティの計算等も必要ないので、ＲＡＩＤを使用する方法より書き込みを高速化できる。
【００８４】
続いて、第二の実施形態における起動時の処理について説明する。
【００８５】
図６は、本発明の第二の実施形態における情報処理装置を起動する時の処理を説明するフローチャートである。この処理は、情報処理装置に電源を入れ、計算機システムを初期化する際や、システムトラブルなどによる再起動時に退避領域に蓄積された反映すべきログデータを情報領域に反映することによって、データの整合性を保つものである。
【００８６】
まず、退避領域８１、８２から最新シークエンス番号が最も大きいものを特定する（Ｓ６１）。ＣＰＵ２が各退避領域８の最新シークエンス番号４１に記録されたシークエンス番号を比較し、その最も大きなものを特定すればよい。そして、ステップＳ３１で特定された最新シークエンス番号を利用し、各退避領域に反映すべきデータが存在するか判定する（Ｓ６２）。
【００８７】
ステップＳ６２は、図４において説明したように、各退避領域において、ログヘッダ４４に記録されたオフセット４２により特定されるログのシークエンス番号４６が、ステップＳ６１で特定された最も大きな最新シークエンス番号以上かを判定すればよい。前者が後者以上であれば反映すべきデータが存在することになる。ステップＳ６２でいずれかの退避領域に反映すべきデータが存在する場合、反映すべきデータが存在すると判定された退避領域にてログを１つ読み出す（Ｓ６３）。そして、ステップＳ６３で読み出されたログに含まれるログデータの有効性を判定する（Ｓ６４）。
【００８８】
ログデータの有効性は、読み出したログのログレコードに格納されたシークエンス番号が１ずつ単調増加しているかを判定する。番号が飛んでいる場合は、過去に記録されたデータであり情報領域に反映すべき有効なデータではないことになる。オフセット４２により特定される最初に読み出されるログのシークエンス番号が基準となるため、この最初に読み出されるログに関しては無条件に有効と判定される。ステップＳ６４は、反映すべきデータが存在すると判定されたすべての退避領域にて読み出されたログが対象である。
【００８９】
そして、ステップＳ６４で有効と判定されたログが１つでもあれば、そのログに含まれるログデータを情報領域に書き込む（Ｓ６５）。反映すべきデータが存在すると判定された退避領域が複数存在する場合でも、ステップＳ６５では有効と判定されたいずれかのログデータを１回情報領域に書き込めばよい。そして、ステップＳ６５が済むと、ステップＳ６３に戻り次のログを読み出す。
【００９０】
ステップＳ６２ですべての退避領域において反映すべきデータが存在しない場合と、ステップＳ６４で読み出されたすべてのログが有効でない場合は、各退避領域のログヘッダを初期化し（Ｓ６６）、起動時の処理を終了する。ステップＳ６６のログヘッダの初期化は、例えば、最新シークエンス番号を０にリセットし、オフセット４２をログが記録される領域の先頭番地（図４でいうログ４３１を特定する番地）とすればよい。
【００９１】
なお、情報領域が２つ以上存在している場合にも図６の適用が可能である。その場合、ステップＳ３４で書き込む対象の情報領域が複数になるだけである。
【００９２】
以上に説明した第二の実施形態の書き込み処理および起動時の処理によって、退避領域に対するログデータの書き込み中に、情報処理装置１がクラッシュして再起動した場合、どこか１つの退避領域にログデータが残されていれば、そのログデータを再起動時に情報領域に反映することによってクラッシュ前のデータと整合性を保つことができる。
【００９３】
また、反映すべきログデータがなければ、何もせずにデータの整合性が保たれる。また、退避領域８１、８２のどちらかが故障しても、残された反映すべきログデータを情報領域７に反映させることによりデータの整合性は保たれる。
【００９４】
また、冗長化された情報領域７１、７２へのログデータの反映中に情報処理装置がクラッシュして再起動した場合、すべての情報領域７１、７２のへのログデータの反映が完了するまでは、ログデータは削除されないので、残されたログデータを再度情報領域７１、７２へ反映することによってデータの整合性を保つことができる。従って、本発明の第二の実施形態によってデータの整合性を保つデータ管理方法を高信頼化することができる。
【００９５】
また、特に第二の実施形態においては、退避領域に蓄積されるログデータをログヘッダにより管理することにより、ログを循環型の記録領域として利用することができ、少ない容量で退避領域を実装できる。また、空き領域の確保をする際データを削除することなく、ログヘッダの更新だけをすればよいので、処理が高速化される。これは、退避領域が複数存在する場合に有効である。
【００９６】
なお、第二の実施形態において、ログデータをログヘッダにより管理せず、第一の実施形態のように単純にログデータを退避領域に蓄積させ、空き領域を確保する際に、反映済みのログデータを削除するようにしても本発明のデータ管理方法を実施することは可能である。また、情報領域が複数であったとしても第二の実施形態を適用することが可能である。
【００９７】
また、第一および第二の実施形態において実行される工程をプログラムにして、ＣＰＵ２に実行させることで本発明を実施することも可能である。
【００９８】
【発明の効果】
以上説明した本発明の実施形態によれば、退避領域を複数有することにより、そのいずれかの退避領域が故障しても、残りの退避領域を基にログデータを情報領域に反映させることができ、データの整合性を保つデータ管理方法を高信頼化することができる。また、すべての書き込みが完了するのを待ち合わせるのではなく、いずれか１つの退避領域に対するログデータの書き込みが完了すれば、情報処理装置１はエンドユーザに対する書き込み完了を通知でき、応答時間が短縮される。また、従来ＲＡＩＤ１において、再起動時にミラーされたボリュームの同期が取れているかを示すダーティリージョンログなどを必要としないため、このデータ管理方法ではより高速である。起動時には、ログに残されたデータのみを反映するだけでデータの整合性を保つことができ、高速である。
【図面の簡単な説明】
【図１】本発明の第一の実施形態における情報処理装置と蓄積装置を示すブロック図である。
【図２】本発明の第一の実施形態における書き込み処理の動作を説明するフローチャートである。
【図３】本発明の第一の実施形態における情報処理装置を起動する時の処理を説明するフローチャートである。
【図４】本発明の第二の実施形態において退避領域に蓄積されるデータのデータ構成例を示す図である。
【図５】本発明の第二の実施形態における書き込み処理の動作を説明するフローチャートである。
【図６】本発明の第二の実施形態における情報処理装置を起動する時の処理を説明するフローチャートである。
【図７】ジャーナルファイルシステムを説明する図である。
【符号の説明】
１  情報処理装置、２  ＣＰＵ、３  メモリ、３１  オペレーティングシステム、４  ＩＯコントローラ、５  中継装置、６  蓄積装置、７  情報領域、８  退避領域、４１  最新シークエンス番号、４２  オフセット、４３  ログ、４４  ログヘッダ、４５  スタートビット、４６  シークエンス番号、４７  ログサイズ、４８  ログデータサイズ、４９  ログデータ、５０  エンドビット
【図１】
2004295563.tif 000003
【図２】
2004295563.tif 000004
【図３】
2004295563.tif 000005
【図４】
2004295563.tif 000006
【図５】
2004295563.tif 000007
【図６】
2004295563.tif 000008
【図７】
2004295563.tif 000009