(57)【要約】【課題】予期せぬ電源の遮断が生じてもデータが破壊されず、ファイルシステムの情報の整合性を確保する。【解決手段】データ領域とデータの配置を管理する管理領域を別に有するファイルシステムにおいて、データ本体の情報を読取り、新たなデータとマージし、マージしたデータをデータ領域の未使用領域へ書き込む。その後に管理領域であるテーブルＴ１、Ｔ２の情報を更新する。電源の復旧時に、テーブルＴ１、Ｔ２のエラーチェックと内容比較の検査を行い、検査結果によりファイルシステムの異常を判断し、正しいデータを参照できるように修復する。常に正しい状態のデータとテーブル情報を確保でき、復旧処理が迅速に行える。【選択図】  図３
2005149291.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置内の単一の記憶領域に構築されたファイルシステムにおいて、
前記ファイルシステムはデータ本体を格納するデータ領域と、データ本体の配置を管理する固定位置の管理領域を二重に有し、
データ本体の情報を読取り、新たなデータとマージし、マージしたデータをデータ領域の未使用領域へ書込み後に第１の管理領域の情報を更新し、第２の管理領域の情報を更新する手段を有することを特徴とするファイルシステム。
【請求項２】
前記第１の管理領域の情報と前記第２の管理領域の情報を比較し、比較結果によりファイルシステムの異常を判断する手段を有することを特徴とする請求項１記載のファイルシステム。
【請求項３】
記憶装置内の単一の記憶領域に構築されたファイルシステムにおいて、
前記ファイルシステムはデータ本体を格納するデータ領域と、データ本体の配置を管理する第１及び第２の管理領域と、データ本体の情報を読取り、新たなデータとマージし、マージしたデータをデータ領域の未使用領域へ書込み後に第１の管理領域の情報を更新し、次に第２の管理領域の情報を更新する手段と、
前記第１の管理領域の情報と前記第２の管理領域の情報を比較し、その比較の結果から異常を判断する手段を設けたことを特徴とするファイルシステム。
【請求項４】
データ本体を格納するデータ領域と、データ本体の配置を管理する固定位置の管理領域を二重に有し、記憶装置内の単一の記憶領域に構築されたファイルシステムにデータを書き込むプログラムにおいて、
上位アプリケーションから前記ファイルシステムへの書き込み要求に応じ、書き込みデータサイズ分の未使用クラスタを検索するステップと、書き込みの新規データが部分書き換えかを判定するステップと、部分書き換えであれば１クラスタ分のデータを読み出し、書き込みデータをマージするステップと、１クラス分の新規データを前記未使用クラスタに書き込むステップと、書き残しがなければ第１の管理領域のテーブルを更新し、さらに第２の管理領域のテーブルを更新するステップとを有し、ファイルシステムの書き込みを行うことを特徴とするプログラム。
【請求項５】
データ本体を格納するデータ領域と、データ本体の配置を管理する固定位置の管理領域を二重に有し、記憶装置内の単一の記憶領域に構築されたファイルシステムの復旧処理を行うプログラムにおいて、
第１の管理領域のテーブル１のエラーの有無を検出するステップと、テーブル１にエラーが無ければ第２の管理領域のテーブル２のエラーの有無を検出するステップと、テーブル２にエラーが無ければテーブル１とテーブル２の内容の比較をするステップと、テーブル１にエラーが無くテーブル２にエラーが有ればテーブル１の内容をテーブル２に上書きするステップと、テーブル１とテーブル２の内容が不一致のときテーブル１不一致情報の整合性を検査するステップと、その結果に応じてテーブル１またはテーブル２の内容を他方に上書きするステップと、テーブル１、テーブル２の双方にエラーがあるとき媒体の異常を報告するステップとを有し、ファイルシステムの復旧処理を行うことを特徴とするプログラム。
【請求項６】
電子計算機を備える情報処理システムにおいて、請求項１−３の何れか１項に記載のファイルシステムを設けることを特徴とする情報処理システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理システムに係り、特にハードディスクなど２次記憶内のデータの破壊や不整合を防止するファイルシステムに関する。
【背景技術】
【０００２】
近年、ハードディスク装置の小型化、低価格化が進み、情報制御装置や機器へ広く応用されている。また、フラッシュメモリデバイスの高集積化、低価格化が進み、小型軽量、低消費電力等の特徴を生かし、従来のハードディスクの代替として用いられるようになってきている。これら２次記憶装置の浸透は一方で、従来は想定されなかった使用条件の問題を孕んでいる。
【０００３】
ハードディスクはパーソナルコンピュータで標準装備されているが、その記録データの内容はファイルと呼ぶ形式で操作される。データの本体はクラスタやセクタと呼ばれる一定容量のブロックに分割して記録し、これらを複数束ねることで構成されている。そして、複数のクラスタの配置や順序を管理するテーブル情報や、ファイルの名称を関連付ける情報を付加することによってファイルシステムが構築されている。ファイルシステムは多くの情報制御機器でも、その互換性を保つことによって利便性が高まるために利用されている。
【０００４】
しかしながら、データの書換えなどファイルの操作中に電源が遮断されると、データが破壊されたり、テーブルの情報の整合性が失われたりして、その後の機器の動作が正しく行えなくなることがある。突然の電源遮断は落雷や電源容量の不足、あるいは電源コードの抜けなど、原因は複数の外部要因であることが多い。
【０００５】
このような予期しない電源遮断に対し、無停電電源装置（Uninterruptible Power Supply；ＵＰＳ）を備え、システムに悪影響が残らない状態になるまで電力を供給する方法が知られている。しかし、無停電電源装置は予備電源としてバッテリを用いるため、小型化、低価格化が容易ではない。また、耐環境性や寿命、メンテナンスの問題もある。
【０００６】
他の解決方法として、パーソナルコンピュータでは復旧処置としてスキャンディスクと呼ばれるファイルシステム情報の全体検査と修復を実行する方法が知られている。スキャンディスクによる方法では全体検査の時間が長大となる問題がある。また、データの内容は必ずしも保証できないなど、修復可能な損害の範囲が限られている。
【０００７】
近年、これらの解決策としてジャーナリングファイルシステム（Journaling File System）が導入されてきている。ファイルへの変更作業のログを別途、常に記録し、電源の遮断が生じた際には復旧時に短時間で検査、修復を実行できる方法である。特許文献１には複数のジャーナルデータをまとめて記憶媒体（フラッシュＡＴＡカード）に書き込むことにより、性能の改善や書込み回数を低減する改良方法が示されている。特許文献２にはジャーナル記録に相当する「状況データ」を不揮発性メモリに記録する方法が示されている。
【０００８】
また、他の解決方法として、特許文献３には第２の記憶媒体を更新専用として設けることによって初期的なファイルが失われないようにする方法が示されている。さらに、他の解決方法として、特許文献４には一時的にファイルインデックスを冗長に作成し、更新の際の手順を厳格に行うことによって復旧処理を簡略にする方法が示されている。
【０００９】
【特許文献１】特開２００１−２０９５６７公報
【００１０】
【特許文献２】特開２００２−３５８２４８公報
【特許文献３】特開２００２−３６４４９公報
【特許文献４】特開２００２−６３０５７公報
【発明の開示】
【発明が解決しようとする課題】
【００１１】
上記のジャーナリングファイルシステムは復旧処置の検査時間は短いが、通常動作における手順が増加するため処理性能が低下してしまう。従って、ファイルシステムを完全に保証するほどの記録をしない場合が多い。また、標準的なファイルシステムとの互換性を持ちながら問題を解決することは困難である。
【００１２】
特許文献１に記載の方法では複数のジャーナルデータをRAMにまとめてから記憶媒体に書き込むため、複数の記録が失われてしまう場合がある。特許文献２に記載の方法では状況データの書込み手順が多すぎ、性能が低下する。また、不揮発性メモリを別途用いるためにコストが増加する。
【００１３】
特許文献３に記載の方法では２つの記憶媒体を用いるためコストが増大する。また、読み書き専用媒体のファイルシステムが破綻したときは多くの新しい情報が失われてしまう。
【００１４】
特許文献４に記載の方法では一時的なファイルインデックスを作成、削除する手順が通常動作に加わり性能が低下する。また、１セクタ内での書込みは瞬時に行われ書込み不全は有り得ないとしているが、一般の記憶媒体では書込み不全は起こり得る。特に書込み動作に時間のかかるフラッシュメディアでは問題となる。
【００１５】
本発明が解決しようとする課題は、上記の従来技術の問題点に鑑み、予期せぬ電源の遮断が生じて更新処理が中断されたり、書込み不全があっても、正しいデータや管理情報を確保し、情報の整合性が失われないようにしたファイルシステムを提供することにある。また、そのためのプログラムを提供することにある。
【課題を解決するための手段】
【００１６】
上記の課題を解決するための本発明は、データ領域とデータの配置を管理する管理領域を別に有するファイルシステムにおいて、データ本体の情報を読取り、新たなデータとマージし、マージしたデータをデータ領域の未使用領域へ書込み、その後に第１の管理領域（テーブルＴ１）を更新し、ついで第２の管理領域（テーブルＴ２）の情報を更新する。さらに、第１の管理領域の情報と第２の管理領域の情報を比較し異常の有無を判断する。
【００１７】
これによって、常に正しい状態のデータとテーブル情報を確保できるようにしたものである。また、予期せぬ電源の遮断などが発生しても、復旧時にテーブルＴ１、Ｔ２のエラーチェックと内容比較を行うので、ファイルシステムの異常を容易に判断することができるようにしたものである。
【発明の効果】
【００１８】
本発明によれば２次記憶装置上のファイルシステムにおいて、テーブルＴ１、Ｔ２のエラーチェックと内容比較を行い、その比較結果によりファイルシステムの異常を判断し、正しいデータを参照できるように修復することができる。つまり、本発明によれば予期せぬ電源の遮断が生じても正しいデータが確保され、ファイルシステム情報の整合性を保つファイルシステムを、性能を大きく損なうことなく低コストで構築できる効果がある。
【発明を実施するための最良の形態】
【００１９】
以下、本発明の実施形態を説明する。図１はファイルシステムを適用する装置の概略の構成図を示す。本装置はＣＰＵ１０１、ＲＯＭ１０２、ＲＡＭ１０３、Ｉ／Ｏ１０５、Ｉ／Ｆ１０６、２次記憶装置１０７で構成する。
【００２０】
ＣＰＵ１０１はバス１０４の接続により他の構成部品と情報の入出力や、プログラムに基づいて数値演算や論理演算を行い、装置全体を制御するもので半導体デバイスの代表的なものである。
【００２１】
ＲＯＭ１０２はプログラムを記憶する半導体メモリデバイスである。読出し専用で電源を遮断しても内容は失われず、主に装置の立上げ動作に必要なプログラムを格納する。ＲＡＭ１０３は読出しと書込みが自由な半導体メモリデバイスである。装置の動作中に２次記憶装置１０７のプログラムをコピーして使用したり、一時的にデータを格納する。
【００２２】
Ｉ／Ｏ１０５は２次記憶装置１０７以外の各種の入出力である。通信装置やセンサ、アクチュエータを接続する。本発明において特に関連がないので詳細説明は省略する。Ｉ／Ｆ（Interface）１０６は２次記憶装置１０７とバス１０４を接続するためのプロトコル変換を行うものである。
【００２３】
２次記憶装置１０７はコンパクトフラッシュ(登録商標)、フラッシュメモリカード等のリムーバブルメディア(Removable Media)、またはハードディスク、あるいはフレキシブルディスク等である。また、近年市場に現れてきたフラッシュディスクでもよい。フラッシュディスクとは磁気ディスクではなく、フラッシュメモリデバイスを内蔵して記憶装置を構成しているものでハードディスクと同一プロトコルで接続できる。
【００２４】
図２はファイルシステムの適用装置のソフトウエアの概略構成図を示す。本装置のソフトウエアはＣＰＵ１０１が使用するプログラム群であり、ＲＯＭ１０２に格納している。アプリケーション２０１、オペレーティングシステム２０２、またはＩ／Ｏライブラリ２０３で構成する。また、復旧処理プログラム２０６を備える。オペレーティングシステム２０２とＩ／Ｏライブラリ２０３はいずれか一つがあれば良く、本発明はいずれの形態にも適用できる。なお、プログラム群は起動時に必要最小限のものをＲＯＭ１０２に格納し、残りを記憶媒体１０７に分割格納しても良い。
【００２５】
オペレーティングシステム（ＯＳ）２０２は主に種々の入出力デバイスを管理するとともに、アプリケーションからのデバイスの参照を容易にする汎用性のある基本ソフトウエアである。ファイルシステム２０４は２次記憶上のデータをファイルとして扱うためのコンポーネントである。最下層のデバイスドライバ２０５は直接デバイス入出力操作を行うもので個々のデバイスに特有なプロトコルやパラメータを吸収し、上位のファイルシステム２０４がデバイス毎個別にならないように隠蔽する。
【００２６】
Ｉ／Ｏライブラリ２０３はオペレーティングシステム２０２を用いずに２次記憶１０７を参照する場合の手段である。オペレーティングシステムと同様にファイルシステム管理、デバイス入出力操作を行うためのソフトウエアインタフェースである。オペレーティングシステム２０２を用いるより最適化（高速、コンパクト）が期待できる。一方で最適化はＩ／Ｏライブラリの汎用性が乏しくなる場合がある。
【００２７】
図８にファイルシステムに必要とされる記録情報の説明図を示す。ハードディスクなどの２次記憶装置１０７の記憶領域８０１において、ファイルシステムの情報は３つの領域に配置される。３つの領域とは、テーブル領域８０２（Ｔ１）と８０３（Ｔ２）、ディレクトリ領域８０４、データ領域８０５である。それぞれは記憶領域上の固定位置に配置されている。
【００２８】
テーブル領域は記録されたデータ本体がどのクラスタにどのような順序で配置されているかの情報を収めるものである。Ｔ２（８０３）はＴ１（８０２）と同一内容（コピー）であり、一方のテーブルが損傷しても本体配置情報が確保できるようにしている。
【００２９】
図の例はテーブル２０番に“２１”の数値が書き込まれている。これはクラスタ２０番には有効データが存在し、続くデータがクラスタ２１番に存在していることを示す。そして、テーブル２１番には“２２”の数値が書き込まれているが、これはクラスタ２１番に有効データが存在し、続くデータがクラスタ２２番に存在していることを示す。テーブル２２番には“Ｅ”（ＥＮＤの意）のコードが書き込まれているが、これはクラスタ２２番に有効データが存在し、続くデータはなく最後尾のデータが収められていることを示す。なお、図中の“−”は有効データの存在しないことを示すコードが書き込まれている。
【００３０】
ディレクトリ領域８０４はファイル毎にファイル名、更新日時、ファイルサイズ（大きさ）などの他、先頭クラスタ番号の情報を収める。先頭クラスタ番号とはデータ本体の先頭が何番のクラスタに存在するかを示す。図の例では、あるファイルがクラスタ２０番に先頭のデータを収めていることを示している。例えば、実際の使用方法としてこのファイルのデータを参照するときは、ファイル名でディレクトリ領域を検索し、そして先頭クラスタ番号が２０番であることから、データの本体配置情報をＴ１（８０２）のテーブル２０番から順次たどっていけばよい。
【００３１】
データ領域８０５はファイルデータ本体を収める。前述のようにデータはクラスタに分割して記録される。図の例はクラスタ２０番から２２番に渡ってデータが“Ａ”、“Ｂ”，“Ｃ”の部分ごとに収められていることを示している。なお、クラスタの大きさは一般に５１２バイトから６４Ｋバイトであり、これより小さいデータのファイルであれば１つのクラスタのみを占有する。
【００３２】
それぞれの書込みの順序は規定があるわけでなく、データ領域への書込みに先んじてテーブルの更新を行っていることが多い。
【００３３】
問題はファイルシステム情報の一連の更新処理の実行中に電源の遮断が起きたときに発生する。書込みが正常に終了せず内容が破壊された場合だけでなく、データ書換えが一部だけ行われたり、あるいはテーブルのみが更新されただけの段階で処理が中断すれば、一般にファイルとして参照されるデータの内容は保証されなくなる。しかも、異常の生じた個所の特定は容易ではない。
【００３４】
図３は本発明の一実施例により、ファイルの一部を更新するときの制御手順を示すフローチャートである。上位アプリケーションからファイルへの書込み要求に応じ、図８で説明したファイルシステム情報に対して一連の操作を行う。
【００３５】
まず、書込みデータサイズ分の未使用クラスタを検索する（ステップＳ０１）。本発明では書込み以前のデータへの上書きはせず、新規のデータ書込みは必ず未使用状態のクラスタに対して行うので、テーブルの情報を検索すればよい。以降、検索の結果で書込みを行うことを決定したデータ領域８０５のクラスタに対しクラスタ毎に書込み操作を行う。
【００３６】
次に部分書換えか否か判定する（ステップＳ０２）。ここでの部分書換えとは書込みの新規データがクラスタサイズより小さく、しかも書き込み以前のデータとマージ（合併）しなければデータの一部を失ってしまうケースである。部分書換えでなければステップＳ０５へ進む。
【００３７】
部分書換えであれば１クラスタ分のデータ読出しを行う（ステップＳ０３）。読み出すデータは書込み以前の有効データである。ステップＳ０３で読出したデータに書き込みデータをマージする（ステップＳ０４）。
【００３８】
次に、ステップＳ０５で、１クラスタ分の新規データをステップＳ０１で検索した未使用クラスタに書込む。そして、書き残したデータがあるか判定する（ステップＳ０６）。言い換えれば、書込み予定の全てのクラスタへの書込みを完了したかどうかである。書き残しがあれば、次の未使用クラスタへの書込みを行うため、ステップＳ０２へ進む。
【００３９】
書き残しがなければ、テーブルＴ１（８０２）を更新し（ステップＳ０７）、新規データの書込みを行ったクラスタへ対応を合致させる。本実施例ではこのステップをデータ領域への書込みが完了した後に行う。さらに、テーブルＴ２（８０３）を更新し（ステップＳ０８）、Ｔ１（８０２）と同一の情報を書込む。
【００４０】
以上のように、新規データの書込みを全て未使用クラスタに対して行い、その後でテーブルＴ１の更新、続いてテーブルＴ２の更新を行う。
【００４１】
次に、本実施例の制御手順によるファイルシステムの情報操作の１例を具体的に説明する。図４はファイルのデータの一部を更新するときの一連の状態変化を示す説明図である。
【００４２】
（１）は更新前の状態である。ファイルはデータ領域８０５のクラスタ２０番、２１番、２２番へ順序どおりに記録されている。データは“Ａ”、“Ｂ”、“Ｃ”の３部位に分割管理されている。テーブルＴ１（８０２）とＴ２（８０３）、ディレクトリ８０４の内容も対応している。
【００４３】
（２）は更新動作例で、“Ｂ”の部位の一部に対応するデータを書換える。未使用クラスタ検索で決定したクラスタは２３番であったことを示す（図３のステップＳ０１）。部分書換えであるので、クラスタ２１番の旧データと新規データをマージしてクラスタ２３番に書込む（図３のステップＳ０２、Ｓ０３、Ｓ０４、Ｓ０５）。新規のデータは“Ｂ’”である。本例では１クラスタの書込みだけで書き残し無くデータ領域の書込みを完了する（図３のステップＳ０６）。
【００４４】
（３）はテーブルＴ１（８０２）の更新である。データの連結順序は“Ａ”、“Ｂ’”、“Ｃ”であり、本例ではクラスタ配置と異なる。クラスタ２１番の旧データは無効化し、クラスタ２３番のデータを有効化する（図３のステップＳ０７）。
【００４５】
（４）はテーブルＴ２（８０３）の更新である（図３のステップＳ０８）。以上のようにデータとテーブルの更新を行う。
【００４６】
次に、本実施例の制御手順により、動作中に電源の遮断が発生した場合の対応方法を説明する。図５は、図４における動作例での３つの書込み動作中にそれぞれ電源の遮断（Power−fail）が起きた状態を示す。
【００４７】
（ａ）はデータ領域（８０５）への書込み中に電源が遮断されたケースである。新規データのクラスタ“Ｂ’”の内容は破壊されている。この場合、再起動後にはテーブル情報とデータの対応はデータ更新直前のものと合っている。かつデータは損傷を受けていないものを参照できる。なお、データの書換えだけ完了し、テーブルは全く更新していない段階で電源遮断が生じた場合も同様である。
【００４８】
（ｂ）はテーブルＴ１（８０２）への書込み中に電源が遮断されたケースである。テーブルＴ１の内容は破壊されている。この場合、再起動後にはテーブルＴ２（８０３）の情報とデータの対応はデータ更新直前のものと合っている。かつデータは損傷を受けていないものを参照できる。通常はＴ１を用いてデータを参照するので、再起動時にＴ１とＴ２の内容を検査し、この場合についてはＴ２の内容をＴ１にコピーして使用すればよい。検査方法については後述する。
【００４９】
（ｃ）はテーブルＴ２（８０３）への書込み中に電源が遮断されたケースである。テーブルＴ２の内容は破壊されている。この場合、再起動後にはテーブルＴ１（８０２）の情報とデータの対応はデータ更新後のものと合っている。かつデータは損傷を受けていないものを参照できる。通常はＴ１を用いてデータを参照するが、再起動時にＴ１とＴ２の内容を検査し、この場合についてはＴ１の内容をＴ２にコピーしておく。検査方法については後述する。
【００５０】
以上のように本実施例の制御手順によれば、動作中に電源の遮断が生じてもデータやテーブル情報が守られる。
【００５１】
次に、再起動後（復旧時）のテーブルの検査方法の例を説明する。図６はテーブルの検査結果と判定を示す説明図である。主な検査項目は「エラーチェック」と「内容比較」である。
【００５２】
「エラーチェック」はテーブルＴ１（８０２）とＴ２（８０３）を読み出し、デバイス固有のエラー（サムチェックやＣＲＣのような冗長検査符号による）が発生したかどうかを調べることを示す。デバイスへの書込みが正常に終了しなかったとき、殆どはこのチェックで検出される。
【００５３】
「内容比較」はテーブルＴ１（８０２）とＴ２（８０３）の内容をビット単位で比較するものである。上記の制御手順によれば、Ｔ１とＴ２の内容が完全に一致しているとき、テーブル情報とデータの対応は合っており、なおかつデータは損傷の無いものを参照できる。以下、検査結果によってどのように判定できるか、詳細を説明する。
【００５４】
結果１（６０１）は、Ｔ１、Ｔ２にエラーなしで、Ｔ１＝Ｔ２（完全一致）である。判定は、２つのテーブルは正常で、テーブル情報とデータは正しい状態にある。
【００５５】
結果２（６０２）は、Ｔ１、Ｔ２にエラーなしで、かつＴ１≠Ｔ２（不一致）である。判定はテーブル更新中に終了で、少なくとも一方のテーブルは正常である。この場合、さらにテーブルの整合性を検査することにより正常なテーブルを選定できる。
【００５６】
例えばシングルチェーン検証である。クラスタの連結は枝分かれしないので、ある一つのクラスタへは一つ（または０個）のクラスタからしか連結しないはずである。しかし、テーブル情報の更新途中では一時的に２つからの連結状態が発生しうる。また、連結先のテーブル情報は“−”（データ無効）となるはずは無いが、やはり一時的に連結先のテーブル情報が“−”になりうる。このような異常状態を検出するのがシングルチェーン検証である。なお、内容比較において不一致になった部分についてのみ検査すれば短時間で異常を判定できる。
【００５７】
結果３（６０３）は、Ｔ１にエラー検出、Ｔ２にエラーなしで、Ｔ１≠Ｔ２である。判定はＴ１テーブル更新中に終了で、Ｔ２テーブルは正常である。
【００５８】
結果４（６０４）は、Ｔ１にエラーなし、Ｔ２にエラー検出で、Ｔ１≠Ｔ２である。判定はＴ１テーブルは正常で、Ｔ２テーブル更新中に終了である。
【００５９】
結果５（６０５）は、Ｔ１、Ｔ２にエラー検出である。判定は媒体の異常である。
【００６０】
以上のように検査結果から判定して、正常なテーブルに基づけば正しくデータを参照できる。次に、この検査を実現し復旧処理を行う手順を説明する。
【００６１】
図７は復旧処理手順（復旧処理プログラム）を示すフローチャートである。まず、Ｔ１のエラーチェックを行う（ステップＳ００１）。エラーが検出されればステップＳ００４へ進み、検出されなければステップＳ００２へ進む。
【００６２】
次に、Ｔ２のエラーチェックを行う（ステップＳ００２）。エラーが検出されればステップＳ００６へ進み、検出されなければステップＳ００３へ進む。
【００６３】
Ｔ１とＴ２の内容を比較する（ステップＳ００３）。一致していれば処理を終了し、不一致であればステップＳ００５へ進む。
【００６４】
ステップＳ００４ではＴ２のエラーチェックを行う。エラーが検出されればステップＳ００８へ進み、検出されなければステップＳ００７へ進む。
【００６５】
ステップＳ００５では不一致となった部位の情報についてＴ１の整合性を検査する。正常であればステップＳ００６へ進み、異常が検出されればステップＳ００７へ進む。
【００６６】
ステップＳ００６ではＴ１の内容をＴ２に上書きコピーした後、処理を終了する。ステップＳ００７ではＴ２の内容をＴ１に上書きコピーした後、処理を終了する。ステップＳ００８では媒体異常を報告した後、処理を終了する。
【００６７】
なお、復旧処理は装置の起動時に必ず行ってもよいし、検出手段を備えて、予期せぬ電源断が生じていたことを検出したときのみ実行することもできる。また、復旧処理プログラムそのものは通常は書換えを行わないデバイス（またはパーティション）に格納されていることが望ましい。
【００６８】
次に本発明の他の実施例を説明する。図９は、図４とは異なるファイルシステム情報操作の一例を示す説明図である。ファイルにデータを追記するためクラスタを増加させるときの一連の状態変化を示す。
【００６９】
（１）は更新前の状態である。ファイルはデータ領域８０５のクラスタ２０番、２１番へ順序どおりに記録されている。データは“ａ”、“ｂ”の２部位に分割管理されている。テーブルＴ１（８０２）とＴ２（８０３）、ディレクトリ８０４の内容も対応している。
【００７０】
（２）はファイルのデータ終端に追記を行う。そのため、“ｂ”の部位の終端の一部を書換え、さらに使用クラスタを追加してその先頭にもデータを書き加える。この場合、未使用クラスタ検索で決定したクラスタは２２番と２３番であったことを示す（図３のステップＳ０１）。クラスタ２２番については部分書換えであるので、クラスタ２１番の旧データと新規データの一部をマージしたデータを書き込み（図３のステップＳ０２、Ｓ０３、Ｓ０４、Ｓ０５）、新規のデータは“ｂ’”である。
【００７１】
本例では書き残しているデータをさらにもう一つのクラスタに書込む必要がある（図３のステップＳ０６）。クラスタ２３番への書込みは新規として旧データとマージせずに書き込む（図３のステップＳ０２、Ｓ０５）。こうしてデータ領域の書換えを完了する（図３のステップＳ０６）。
【００７２】
（３）はテーブルＴ１（８０２）を更新する。データの連結順序は“ａ”、“ｂ’”、“ｃ”である。クラスタ２１番の旧データは無効化し、クラスタ２２番と２３番のデータへ連結するようにして有効化する（図３のステップＳ０７）。
【００７３】
（４）はテーブルＴ２（８０３）を更新する（図３のステップＳ０８）。以上のように、データとテーブルの更新を行う。
【００７４】
以上説明したように、本実施例によれば、２次記憶装置上の標準的ファイルシステムにおいて、データ本体の情報を読取り、新たなデータとマージし、マージしたデータをデータ領域の未使用領域へ書込みを行う。その後に、テーブルＴ１、Ｔ２の情報を更新することによって、常に正しい状態のデータとテーブル情報を確保できる。そして、予期せぬ電源の遮断が発生しても、復旧時にテーブルＴ１、Ｔ２のエラーチェックと内容比較の検査を行えば、検査結果によりファイルシステムの異常を容易に判断し、正しいデータを参照できるように修復することができる。
【００７５】
つまり、本発明によれば予期せぬ電源の遮断が生じても正しいデータが確保され、ファイルシステム情報の整合性を保つファイルシステムを、性能を大きく損なうことなく低コストで構築できる。
【００７６】
本発明により、ディレクトリ領域の情報が損傷を受けた場合の対処法については、以下の改良がある。標準的なファイルシステムではディレクトリ情報の配置について２つの方法が知られている。一つは前述のように固定領域に配置する方法であり、残り一つはファイルのデータ本体と同様にデータ領域に自由に配置する方法である。
【００７７】
ディレクトリ情報を固定領域に配置する場合は、テーブル情報と同様にディレクトリ領域を２つ設けても良い。テーブル情報と同じようにエラーチェックと内容比較を復旧処理プログラムで行えば良い。特許文献４に記載の方法では冗長なファイルインデックスを書込むだけでなく消去する手順が必要とされるが、本発明では書込みのみで良い。さらにファイル名の更新や先頭クラスタ番号の更新時のみ保存するなどにより、処理のオーバーヘッドが小さくなる。ファイルサイズ情報などはEOFの無い非テキストファイルについてのみ行うなどの方法もある。ディレクトリ情報はその他一般のファイルと異なり、特定のクラスタに定めるなど、それ自体の参照に問題が発生しにくいようにするのが望ましい。その他、整合性検査について既存技術も多い。
【００７８】
ディレクトリ情報をデータ領域に自由に配置する場合は、データ本体と同様の手順で必ず未使用クラスタ領域に更新情報を書き込むようにすれば良い。
【００７９】
本発明の第２の改良として、処理の高速化について説明する。ファイルデータやテーブル情報はメモリ上にコピーしたものを確保しておき、同一データを何度も２次記憶から読出さず、短時間で参照できるようにするキャッシュ方式が知られている。その場合に、部分書込みでも旧データの確保は２次記憶からではなく、高速なメモリ上から行えるケースがある。また、内容に変更が生じて２次記憶装置への反映が必要になったときには、データ領域、テーブルＴ１、テーブルＴ２への書込み制御順序を守るようにすれば良い。
【図面の簡単な説明】
【００８０】
【図１】本発明のファイルシステムを適用する情報制御装置の概略構成図。
【図２】本発明の適用形態例を示すソフトウエアの概略構成図。
【図３】本発明によるファイルシステムの書込み制御手順の一例を示すフローチャート。
【図４】ファイルの一部を書換える様子を順に示す説明図。
【図５】書込み中に電源断が生じた様子を示す説明図。
【図６】テーブルの検査結果と判定を示す説明図。
【図７】本発明による復旧処理手順（復旧処理プログラム）の一例を示すフローチャート。
【図８】標準的ファイルシステム情報の配置を示す説明図。
【図９】本発明の他の実施例で、ファイルにデータを追記する様子を順に示す説明図。
【符号の説明】
【００８１】
１０１…ＣＰＵ、１０２…ＲＯＭ、１０３…ＲＡＭ、１０４…バス、１０５…Ｉ／Ｏ、１０６…Ｉ／Ｆ、１０７…２次記憶装置、２０１…アプリケーション、２０２…オペレーティングシステム（ＯＳ）、２０３…Ｉ／Ｏライブラリ、２０４…ファイルシステム、２０５…デバイスドライバ。
【図１】
2005149291.tif 000003
【図２】
2005149291.tif 000004
【図３】
2005149291.tif 000005
【図４】
2005149291.tif 000006
【図５】
2005149291.tif 000007
【図６】
2005149291.tif 000008
【図７】
2005149291.tif 000009
【図８】
2005149291.tif 000010
【図９】
2005149291.tif 000011