(57)【特許請求の範囲】
【請求項１】
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリと、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、を備え、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する機能を有する、
ファイルシステム。
【請求項２】
請求項１に記載のファイルシステムであって、
前記ファイルアクセス部は、ファイルへのアクセス時に当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
ファイルシステム。
【請求項３】
請求項２に記載のファイルシステムであって、
前記書込処理部は、ファイルのメタデータ内に、前記キャッシュメモリ上におけるファイルの実データのサイズを表すファイルサイズ情報を含めると共に、当該ファイルの前記補助記憶装置に対する書き込みが完了した実データ部分のサイズを前記書込完了済み情報として含めて、ファイルのメタデータを前記補助記憶装置に記憶し、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルのメタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なり、当該メタデータ内の前記書込完了済み情報の値が当該メタデータ内の前記ファイルサイズ情報の値と異なる場合に、当該ファイルサイズに前記書込済み情報の値を上書きする、
ファイルシステム。
【請求項４】
請求項３に記載のファイルシステムであって、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルのメタデータ内の前記ファイルサイズ情報に対応するサイズの実データ部分のファイルにアクセスする、
ファイルシステム。
【請求項５】
請求項２に記載のファイルシステムであって、
前記書込処理部は、ファイルの実データを分割した分割ファイル毎に、当該分割ファイルの実データ、及び、当該分割ファイルの前記補助記憶装置に対する格納位置情報と当該分割ファイルの分割前のファイルに対する位置情報とを含むメタデータ、を前記補助記憶装置に書き込むと共に、当該分割ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、当該分割ファイルの前記補助記憶装置に対する書き込みが完了したことを表す前記書込完了済み情報と、を含めて前記補助記憶装置に記憶する機能を有する、
ファイルシステム。
【請求項６】
請求項５に記載のファイルシステムであって、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルの分割ファイルに対応するメタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、前記補助記憶装置から前記キャッシュメモリに読み出したファイルの各分割ファイルに対応する各メタデータのうち、ファイルの先頭から見て前記書込み完了済み情報が含まれている最後方のメタデータに対応する分割ファイルまでの実データ部分のファイルにアクセスする、
ファイルシステム。
【請求項７】
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備え、ファイルシステムを構成する情報処理装置に、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、
を実現させると共に、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
ことを実現させるためのプログラム。
【請求項８】
請求項７に記載のプログラムであって、
前記ファイルアクセス部は、ファイルへのアクセス時に当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
プログラム。
【請求項９】
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備えたファイルシステムにて、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込み、
メタデータに基づいてファイルの実データにアクセスすると共に、
ファイルの実データ及びメタデータを前記補助記憶装置に書き込むときに、当該ファイルのメタデータに、ファイルシステムが構築された情報処理装置自体から現在発行されている当該情報処理装置の起動毎に異なる起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
ファイル処理方法。
【請求項１０】
請求項９に記載のファイル処理方法であって、
ファイルへのアクセス時に、当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
ファイル処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ファイルシステムにかかり、特に、データ復旧機能を有するファイルシステムに関する。
【背景技術】
【０００２】
ファイルシステムに対して書き込みを行なう場合、実際のデータの他に、データのディスク上の位置などを確定できるようにするためメタデータの更新も行なわれる。メタデータの更新途中でシステム障害が発生すると、メタデータの情報に矛盾が生じる可能性があるため、一般的にはジャーナルと呼ばれる領域にメタデータの更新ログを記録してからディスクに反映して確定（コミット）する。これにより、メタデータに矛盾が発生することはなくなるが、データの保証はされない。
【０００３】
そのため、書き込み途中だったデータを、アプリケーション側で保証する仕組みが必要となる。例えば、NFS（Network File System）のプロトコルでは、NFSクライアントはコミットが完了するまで送信したデータを保持しておく必要があり、NFSサーバで障害が発生した場合、NFSクライアントはコミットされていない部分のデータを再送するよう規定されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特表２００３−５１３３５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかし、アプリケーションに処理の再開機能（resume機能）が実装されていない場合には、resume機能を利用者が独自に作り込む必要が出てくる。作り込みの手間を考えると、利用者がプロトコルを意識してresume機能を実現するのは現実的には難しい。そのため、例えばCIFS（Common Internet File System）経由でファイルのバックアップをする場合、バックアップサーバ側で障害が発生するとファイルの先頭からバックアップをしなおすのが一般的となる。ただしこの場合、ファイルサイズが非常に大きくなると時間的なロスが大きくなってしまう。
【０００６】
ここで、ファイルを復旧に関連する技術の一例が、特許文献１に開示されている。特許文献１に開示のシステムでは、データブロックをトランザクション毎の識別子に関連付けておき、システム故障発生時にいずれの識別子が起動していたかを起動中の識別子リストからチェックしている。
【０００７】
しかしながら、上述した技術を用いた場合には、識別子リストを用いて全てのデータの復旧処理を明示的に開始して実行する必要がある。すると、復旧処理自体が複雑となると共に、復旧処理中におけるファイルへのアクセスが不可能となったり、ファイルシステムの負荷が高くなるなどの問題が生じ、ファイルシステムの安定した稼働が困難となる。
【０００８】
このため、本発明の目的は、上述した課題である、簡易な構成にてファイル復旧が可能であると共に、安定した稼働が可能なファイルシステムを提供することにある。
【課題を解決するための手段】
【０００９】
本発明の一形態であるファイルシステムは、
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリと、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、を備え、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する機能を有する、
という構成を取る。
【００１０】
また、本発明の他の形態であるプログラムは、
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備え、ファイルシステムを構成する情報処理装置に、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、
を実現させると共に、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
ことを実現させるためのプログラムである。
【００１１】
また、本発明の他の形態であるファイル処理方法は、
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備えたファイルシステムにて、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込み、
メタデータに基づいてファイルの実データにアクセスすると共に、
ファイルの実データ及びメタデータを前記補助記憶装置に書き込むときに、当該ファイルのメタデータに、ファイルシステムが構築された情報処理装置自体から現在発行されている当該情報処理装置の起動毎に異なる起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
という構成を取る。
【発明の効果】
【００１２】
本発明は、上記構成を取ることにより、簡易な構成にてファイル復旧が可能であると共に、安定した稼働が可能なファイルシステムを提供することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の実施形態１におけるファイルシステムの構成を示すブロック図である。
【図２】一般的なメタデータと本実施形態におけるメタデータのデータ構造の一例を示す図である。
【図３】実施形態１におけるファイルシステム動作を示すフローチャートである。
【図４】実施形態１におけるファイルシステム動作を示すシーケンス図である。
【図５】実施形態１におけるファイルシステム動作を示すシーケンス図である。
【図６】実施形態１におけるファイルシステム動作を示すシーケンス図である。
【図７】実施形態１におけるファイルシステム動作を示すシーケンス図である。
【図８】実施形態１におけるロールバック前後のファイルの様子を示す図である。
【図９】本発明の実施形態２におけるファイルシステムの構成を示すブロック図である。
【図１０】実施形態２におけるファイルシステムにて処理するファイルのデータ構造の一例を示す図である。
【図１１】実施形態２におけるロールバック前後のファイルの様子を示す図である。
【図１２】実施形態２におけるファイルシステムの全体構成を示すブロック図である。
【発明を実施するための形態】
【００１４】
本発明の第１の実施形態を、図１乃至図８を参照して説明する。図１乃至図２は、ファイルシステムの構成を説明するための図であり、図３乃至図８は、ファイルシステムの動作を説明するための図である。
【００１５】
［構成］
本実施形態１における情報処理システムは、図１に示すように、アプリケーションＧ１と、ファイルシステムＧ２と、ＯＳ（Operating System）Ｇ４と、を備えている。なお、ファイルシステムＧ２とＯＳＧ４とは、情報処理システムを構成する情報処理装置に、プログラムが組み込まれることで構築される。また、情報処理システムは、補助記憶装置として、ディスクＧ３を備えている。
【００１６】
上記アプリケーションＧ１は、ファイルシステムＧ２が構築された同じ情報処理装置内で動作するものである。但し、アプリケーションＧ１は、NFS（Network File System）やCIFS（Common Internet File System）のように別装置からネットワーク経由で動作するものであってもよい。また、アプリケーションＧ１は、書き込みログを保持しておく必要は無いが、オリジナルのデータは保持している。従って、本実施形態におけるアプリケーションＧ１は、例えば、CIFS経由でデータをバックアップする機能を有するものであることが考えられる。但し、アプリケーションＧ１は、上述した機能を有するものに限定されず、後述するように、ディスクＧ３に対して、ファイルの書き込み、読み込み、更新などを行うべく、アクセスする機能を有していればよい。
【００１７】
上記ＯＳＧ４は、ファイルシステムが構築された情報処理装置単位あるいはファイルシステム単位で、当該情報処理装置の起動毎に一意に決まる識別情報である起動ＩＤ（起動識別情報）を出力する起動ＩＤ払出処理部Ｂ０を有する。具体的に、起動ＩＤ払出処理部Ｂ０は、情報処理装置が起動、再起動したときに、更新された新たな起動ＩＤを払い出す。なお、起動ＩＤとしては、例えば、システムの起動時刻、あるファイルシステムのマウント時刻、などが考えられるが、これらに限定されない。
【００１８】
上記ファイルシステムＧ１は、図１に示すように、インタフェース部Ａ０，inodeコピー処理部Ｃ０、キャッシュ管理部Ｄ０、ディスクアクセス部Ｅ０、を有する。また、データを一時保存するためのキャッシュメモリに形成された、メタデータ記憶領域Ｆ１、データキャッシュ領域Ｆ２、を有する。
【００１９】
上記インタフェース部Ａ０は、上記起動ＩＤ払出処理部Ｂ０から払い出された起動ＩＤを取得する起動ＩＤ取得処理部Ａ１（起動識別情報取得部）を備える。また、インタフェース部Ａ０は、アプリケーションＧ１がファイルのアクセスを行うためにやり取りを行うファイルアクセス部として機能する構成として、オープン処理部Ａ２、読み込み処理部Ａ３、書き込み処理部Ａ４、クローズ処理部Ａ５を備える。なお、これら各処理部Ａ２〜Ａ５は、まず、ファイルのメタデータであるinode情報にアクセスし、そのinode情報に基づいてファイルの実データにアクセスする。これら各処理部Ａ２〜Ａ５の機能については、後述する動作説明時に詳述する。
【００２０】
上記inodeコピー処理部Ｃ０は、上述したオープン処理部Ａ２、読み込み処理部Ａ３、書き込み処理部Ａ４、クローズ処理部Ａ５と協働してファイルアクセス部として機能し、上記オープン処理部Ａ２等によってファイルにアクセスするとき、つまり、ディスクＧ３からinodeなどのファイルのinode情報を読み込むときに、当該inode情報を書き換えてメタデータ記憶領域Ｆ１に格納する機能を有する。なお、inodeコピー処理部Ｃ０は、図１に示すように、再立上判定処理部Ｃ１と、コミット情報チェック処理部Ｃ２と、inode書換処理部Ｃ３と、を備えており、当該inode処理部Ｃ０によるinodeの書き換え処理の詳細については、後述する動作説明時に詳述する。
【００２１】
上記キャッシュ管理部Ｄ０は、データキャッシュ領域Ｆ２にキャッシュがたまって書き込みが滞ることを防ぐための処理であり、一定時間時間が経過した場合や、キャッシュ領域に一定量データがたまった場合、アプリケーションＧ１がコミット要求を発行した場合などに、ディスクアクセス部Ｅ０に要求して、データキャッシュ領域Ｆ２内のファイルの実データをディスクＧ３に反映させる。なお、以下では、データキャッシュ領域Ｆ２内のデータをディスクＧ３に反映させる処理を、「コミット」と呼ぶこととする。従って、このキャッシュ管理部Ｄ０は、上記書込み処理部Ａ４と共に、ファイルの実データ及びinode情報を、ディスクに書き込む書込処理部として機能する。
【００２２】
上記ディスクアクセス部Ｅ０は、データのディスクＧ３への書き込みや、ディスクＧ３にあるデータの読み込みを行なうための処理を行い、ファイルシステムＧ２とディスクＧ３とのインタフェースとして機能する。
【００２３】
上記データキャッシュ領域Ｆ２は、アプリケーションＧ１からディスクＧ３への書き込みの性能を向上させるために用いられ、特に、ファイルの実データを一時的に記憶するキャッシュメモリの領域である。
【００２４】
また、上記メタデータ記憶領域Ｆ２は、ファイルのinode情報を保存しておくための一時的なキャッシュメモリの領域である。ここで、inode情報の一例を、図２を参照して説明する。図２（Ｂ）に示すように、本実施形態におけるinode情報は、データキャッシュ領域Ｆ２で処理されているファイル全体つまりファイルの実データのサイズを表す「ファイルサイズ」情報と、対応するファイルの補助記憶装置に対する格納場所を表す「データの格納場所」情報と、を含む。また、inode情報は、対応するファイルに関する情報として、「所有者ＩＤ」、「グループＩＤ」、「inode番号」、「パーミッション」、最終ファイル更新時や最終inode更新時、最終参照時等を表す「タイムスタンプ」、を含む。
【００２５】
さらに、本実施形態におけるinode情報は、図２（Ｂ）に示すように、上述した起動ＩＤ取得処理部Ａ１にて取得した「起動ＩＤ」を含む。また、本実施形態におけるinode情報は、ディスクＧ３に対して書込みが完了したファイルの実データ部分のサイズを表す「コミット済サイズ」を含む。これら「起動ＩＤ」と「コミット済サイズ」とは、図２（Ａ）に示す一般的なファイルシステムで使用されるファイルのinode情報には含まれない情報である。なお、上記「起動ＩＤ」と「コミット済サイズ」とは、ファイルの実データがデータキャッシュ領域Ｆ２やディスクＧ３に書き込まれるときに更新される。ここで、上記「コミット済サイズ」は、必ずしもデータのサイズを表す情報であることに限定されず、ファイルの実データのうちディスクＧ３に書き込みが完了した部分を特定する情報であれば、他の情報であってもよい。
【００２６】
［動作］
次に、上述した情報処理システムの動作を説明する。はじめに、図３を参照して、既にファイルがディスクＧ３に格納されており、当該ディスクＧ３からファイルを参照したり更新するときの動作を説明する。
【００２７】
まず、アプリケーションＧ１が、ファイルの参照や更新を行なおうとした場合には、ファイルのパス名とディスクに格納されている位置情報を対応付けるため、ファイルのinode情報を参照する。このとき、アクセスに必要なinode情報がメタデータ記憶領域Ｆ１内にあればそれを利用するが（ステップＳ１、ステップＳ２でＹｅｓ）、なかった場合には（ステップＳ２でＮｏ）、ディスクＧ３からinode情報を読み込む。
【００２８】
続いて、ディスクＧ３からinode情報を読み込むために、インタフェース部Ａ０はinodeコピー処理部Ｃ０を実行する（ステップＳ３）。inodeコピー処理部Ｃ０は、ディスクアクセス部Ｅ０に要求して、ディスクＧ３から必要とするinode情報を、メタデータ記憶領域Ｆ１に読み込む（ステップＳ４）。
【００２９】
続いて、メタデータ記憶領域Ｆ１にinode情報の読み込みができたら、当該inode情報内の「起動ＩＤ」と、起動ＩＤ取得処理部Ａ１にて取得した現在の情報処理装置あるいはファイルシステムの「起動ＩＤ」と、を比較する（ステップＳ５）。これは、前回書き込みを行なったのが、システムの再起動を行う前か後かを判断するための比較である。従って、「起動ＩＤ」が一致している場合には（ステップＳ６でＹｅｓ）、前回の書き込みがシステムの再起動の後であると言え、データを書き込んだ後にシステム障害が発生していないことが言える。なお、起動ＩＤ取得処理部Ａ１によるシステムの「起動ＩＤ」の取得は、システムが起動してから一度行なっていればよく、例えば、システム起動後の最初にinodeコピー処理Ｃ０が実行された場合やシステムの起動スクリプトから読み込んでおけばよい。
【００３０】
そして、システムの取得した「起動ＩＤ」とinode上の「起動ＩＤ」とが一致していなかった場合には（ステップＳ６でＮｏ）、前回、データを書き込んでいる最中にシステム障害が発生した可能性がある。そのため、inode情報の中にある「ファイルサイズ」と「コミット済サイズ」とを比較し（ステップＳ７）、ファイルの実データをディスクＧ３に書き込む処理であるコミットが完了した以降に、データの書き込みが発生したかどうかを確認する。
【００３１】
システムの「起動ＩＤ」とinode上の「起動ＩＤ」とが一致しておらず、「ファイルサイズ」と「コミット済サイズ」とが一致していなかった場合（ステップＳ８でＮｏ）、ファイルのロールバック処理を実行するため、inode情報内の「ファイルサイズ」の値を「コミット済サイズ」の値に上書きする（ステップＳ９）。
【００３２】
続いて、inode情報の「ファイルサイズ」の値が「コミット済サイズ」の値に上書きされると、ファイルサイズは小さくなるため、今まで利用していたデータブロックが利用されなくなる場合がある。そのため、ファイルサイズの変更に合わせて、inodeに記載されているデータの格納場所を修正し、メタデータのデータブロックビットマップの情報を未使用に変更する（ステップＳ１０）。
【００３３】
その後、変更したinode情報や他のメタデータの値を、メタデータ格納領域Ｆ１に格納する（ステップＳ１１）。そして、inodeコピー処理部Ｃ０は、処理が完了したことをインタフェース部Ａ０に通知し、オープン処理部Ａ２や読み込み処理部Ａ３等によって、コミットした時点までロールバックしたファイルへのアクセスができるようにする（ステップＳ１２）。
【００３４】
上述した処理を行うことによるファイルの状況を、図８を参照して説明する。まず、図８（Ａ）は、一般的なファイルシステムにおけるinode情報とファイルの実データとの関係を示す図である。この図に示すように、一般的なファイルシステムでは、「ファイルサイズ」に従ってファイルの実データにアクセスされるため、未コミット部分が残ってしまい、アクセスが不可能となる。一方、本実施形態におけるファイルシステムでは、図８（Ｂ）の上段に示すように、上述したinodeコピー処理部Ｃ０による処理の前には、「ファイルサイズ」が「データ（未コミット）」部分まで含んでいるが、inodeコピー処理部Ｃ０による処理後には、「コミット済サイズ」が「ファイルサイズ」に上書きされるため、図８（Ｂ）の下段の実践部分に示すように、ファイル自体がコミット済みのデータ部分までとなる。逆に言うと、図８（Ｂ）の下段に示す点線部分は、ディスクＧ３には残っているものの、存在しないように見えるため、コミットが完了した時点までロールバックして、ファイルにアクセスすることが可能となる。
【００３５】
次に、ファイルシステムによる「ファイルのオープン」、「ファイルの書き込み（非同期）」、「ファイルの書き込み（同期）」、「ファイルの読み込み」、「ファイルのクローズ」の各動作を説明する。
【００３６】
（ファイルのオープン）
図４を参照して、「ファイルのオープン」処理の動作を説明する。
１．アプリケーションＧ１がインタフェース部Ａ０に対してファイルのオープンを要求する。
２．インタフェース部Ａ０は、オープン処理部Ａ２に処理を渡す。オープン処理部Ａ２では、要求された該当ファイルのinodeがメタデータ記憶領域Ｆ１に存在しているか確認する。存在していれば、下記手順４に進み、存在していなければ、下記手順３に進む。
【００３７】
３．オープン処理部Ａ２は、inodeコピー処理部Ｃ０による処理を実行する。inodeコピー処理部Ｃ０による処理は、上述した処理と同じ処理を行い、処理が完了したことをオープン処理部Ａ２に通知する。
４．オープン処理部Ａ２は、メタデータ記憶領域Ｆ１内のinode情報に基づき、ファイルのオープン処理を行ない、処理が完了したらアプリケーションＧ１に処理が完了したことを通知する。
【００３８】
（ファイルの書き込み（非同期））
図５を参照して、「ファイルの書き込み（非同期）」処理の動作を説明する。
１．アプリケーションＧ１がインタフェース部Ａ０に対して書き込むデータを送信する。
２．インタフェース部Ａ０は、書き込み処理部Ａ４に処理を渡す。書き込み処理部Ａ４では、要求された該当ファイルのinodeが、メタデータ記憶領域Ｆ１に存在しているか確認する。存在していれば下記手順４に進み、存在していなければ下記手順３に進む。なお、ファイルのオープンができていたとしても、メモリを解放するためにメタデータ記憶領域Ｆ１から必要なinode情報がクリアされている可能性もあるため、inodeの存在確認処理を行う。
【００３９】
３．書き込み処理部Ａ４は、inodeコピー処理部Ｃ０による処理を実行する。inodeコピー処理部Ｃ０による処理は、上述した処理と同じ処理を行い、処理が完了したことを書き込み処理部Ａ４に通知する。
４．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinode情報に基づき、受け取った書き込みデータ（ファイルの実データ）をデータキャッシュ領域Ｆ２に書き込む。このとき、書き込むデータに合わせてinode情報も変更する必要があるが、そのときにインタフェース部Ａ０で保持している現在の「起動ＩＤ」の情報を、inode情報内に反映する。
５．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinodeの更新と、データキャッシュ領域Ｆ２へのファイルの実データの書き込みが完了したら、アプリケーションＧ１に書き込みの完了を通知する。
【００４０】
（ファイルの書き込み（同期））
図６を参照して、「ファイルの書き込み（同期）」処理の動作を説明する。
１．アプリケーションＧ１がインタフェース部Ａ０に対して、ファイルの実データである書き込むデータを送信する。
２．インタフェース部Ａ０は、書き込み処理部Ａ４に処理を渡す。書き込み処理部Ａ４では、要求された該当ファイルのinodeが、メタデータ記憶領域Ｆ１に存在しているか確認する。存在していれば下記手順４に進み、存在していなければ下記手順３に進む。なお、ファイルのオープンができていたとしても、メモリを解放するためにメタデータ記憶領域Ｆ１から必要なinode情報がクリアされている可能性もあるため、inodeの存在確認処理を行う。
【００４１】
３．書き込み処理部Ａ４は、inodeコピー処理部Ｃ０による処理を実行する。inodeコピー処理部Ｃ０は、上述した処理と同じ処理を行い、処理が完了したことを書き込み処理部Ａ４に通知する。
４．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinode情報に基づき、受け取った書き込みデータであるファイルの実データをデータキャッシュ領域Ｆ２に書き込む。このとき、書き込むデータに合わせてinode情報も変更する必要があるが、そのときにインタフェース部Ａ０で保持している「起動ＩＤ」の情報をinode内に反映する。
【００４２】
５．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinode情報の更新とデータキャッシュ領域Ｆ２へのデータの書き込みが完了したら、ディスクアクセス部Ｅ０にディスクへの反映を要求する。
６．ディスクアクセス部Ｅ０は、ディスクＧ３への反映が完了したら、書き込み処理部Ａ４に通知する。
７．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinode内の「コミット済サイズ」の値を、「ファイルサイズ」の値に上書きする。
８．書き込み処理部Ａ４は、ディスクアクセス部Ｅ０に対し、メタデータ記憶領域Ｆ１内のinodeのディスクＧ３への反映を要求する。
９．ディスクアクセス部Ｅ０は、ディスクＧ３への反映が完了したら、書き込み処理部Ａ４に通知する。
１０．書き込み処理部Ａ４は、アプリケーションＧ１に書き込みの完了を通知する。
【００４３】
（ファイルの読み込み）
図７を参照して、「ファイルの読み込み」処理の動作を説明する。
１．アプリケーションＧ１が、インタフェース部Ａ０に対してファイルの読み込みを要求する。
２．インタフェース部Ａ０は、読み込み処理部Ａ３に処理を渡す。読み込み処理部Ａ３では、要求された該当ファイルのinodeが、メタデータ記憶領域Ｆ１に存在しているか確認する。存在していれば下記手順４に進み、存在していなければ下記手順３に進む。
【００４４】
３．読み込み処理部Ａ３は、inodeコピー処理部Ｃ０の処理を実行する。inodeコピー処理部Ｃ０は、上述した処理と同じ処理を行い、処理が完了したことを読み込み処理部Ａ３に通知する。
４．読み込み処理部Ａ３は、メタデータ記憶領域Ｆ１内のinode情報に基づき、ディスクアクセス部Ｅ０にデータの読み込みを要求する。
５．ディスクアクセス部Ｅ０は、ディスクＧ３からデータを読み込んだら、読み込み処理部Ａ３に返却する。なお、通常は読み込んだデータについても書き込み時と同じようにキャッシュを利用する実装が一般に行なわれるが、ここでは、説明を省略し、直接読み込み処理部Ａ３に渡す例を記載している。
６．読み込み処理部Ａ３は、アプリケーションＧ１に書き込みの完了を通知する。
【００４５】
（ファイルのクローズ）
次に、「ファイルのクローズ」処理の動作を説明する。
１．アプリケーションＧ１が、インタフェース部Ａ０に対してファイルのクローズを要求する。
２．インタフェース部Ａ０は、クローズ処理部Ａ５に処理を渡す。クローズ処理部Ａ５では、要求された該当ファイルのinodeが、メタデータ記憶領域Ｆ１に存在しているか確認する。存在していれば下記手順４に進み、存在していなければ下記手順３に進む。
【００４６】
３．クローズ処理部Ａ５は、メタデータコピー処理部Ｃ０による処理を実行する。inodeコピー処理部Ｃ０による処理は上述した処理と同じ処理を行い、処理が完了したことをクローズ処理部Ａ５に通知する。
４．クローズ処理部Ａ５は、メタデータ記憶領域Ｆ１内のinode情報に基づき、ディスクアクセス部Ｅ０にデータキャッシュ領域Ｆ２内のデータのディスクＧ３への反映を要求する。
【００４７】
５．ディスクアクセス部Ｅ０は、ディスクＧ３への反映が完了したら、クローズ処理部Ａ５に通知する。
６．クローズ処理部Ａ５は、メタデータ記憶領域Ｆ１内のinode内の「コミット済サイズ」の値を「ファイルサイズ」の値に上書きする。
７．クローズ処理部Ａ５は、ディスクアクセス部Ｅ０に対し、メタデータ記憶領域Ｆ１内のinodeのディスクＧ３への反映を要求する。
８．ディスクアクセス部Ｅ０は、ディスクＧ３への反映が完了したら、クローズ処理部Ａ５に通知する。
９．クローズ処理部Ａ５は、アプリケーションＧ１にクローズの完了を通知する。
【００４８】
（データの非同期の反映）
上述した非同期書き込みを行う場合、データキャッシュ領域Ｆ２内のデータをディスクＧ３に反映するための処理が別途必要となる。以下、その処理について説明する。
１．一定時間時間が経過した場合、データキャッシュ領域Ｆ２に一定量データがたまった場合などに、キャッシュ管理部Ｄ０からディスクアクセス部Ｅ０に要求してデータキャッシュ領域Ｆ２のデータをディスクＧ３に書き込む処理を要求する。
２．ディスクアクセス部Ｅ０は、メタデータ記憶領域Ｆ１およびデータキャッシュ領域Ｆ２のキャッシュを読み込み、ディスクＧ３に反映する。
３．データおよびinodeなどのメタデータの反映後、さらにinodeの「コミット済サイズ」だけ更新し、inodeについて再度ディスクＧ３に反映する。
【００４９】
（resume処理）
次に、アプリケーションＧ１が、書き込みデータのresumeを行う場合の処理について説明する。
１．アプリケーションＧ１は、インタフェース部Ａ０に対してファイルのオープンを要求する。なお、この時点では、システムに障害が発生していないこととする。
２．インタフェース部Ａ０は、オープン処理部Ａ２に処理を渡し、オープン処理部Ａ２からinodeコピー処理部Ｃ０による処理を実行する。
【００５０】
３．この時点で障害は発生していないため、ディスクＧ３にあるinode情報を、メタデータ格納領域Ｆ１にそのままコピーする。
４．inodeコピー処理部Ｃ０が、オープン処理部Ａ２に完了を通知し、オープン処理部Ａ２はアプリケーションＧ１にオープン完了を通知する。
５．アプリケーションＧ１は、インタフェース部Ａ０に対してデータの送信を行なう。
６．インタフェース部Ａ０は、書き込み処理部Ａ４に処理を渡す。
７．書き込み処理部Ａ４は、メタデータ記憶領域Ｆ１内のinode情報に基づき、受け取った書き込みデータをデータキャッシュ領域Ｆ２に書き込む。このとき、書き込むデータに合わせてinode情報も変更する。また、inode更新では「起動ＩＤ」の情報をinodeに反映する。
【００５１】
８．その後、システム障害が発生すると、システムが再起動する。このとき、アプリケーションＧ１も異常終了してしまう。
９．システム再起動後、アプリケーションＧ１で書き込んでいたデータをresumeするため、ファイルのサイズを確認する。ファイルサイズを確認するため、アプリケーションＧ１はファイルのオープンを要求する。 
１０．インタフェース部Ａ０は、オープン処理部Ａ２に処理を渡す。オープン処理部Ａ２では、該当ファイルのinodeがメタデータ記憶領域Ｆ１に存在しているか確認する。但し、この時点では、メタデータ記憶領域Ｆ１にinodeは存在していないものとする。
【００５２】
１１．オープン処理部Ａ２は、inodeコピー処理部Ｃ０による処理を実行する。
１２．inodeコピー処理部Ｃ０では、ディスクアクセス部Ｅ０に要求して、ディスクＧ３から必要とするinode情報を読み込む。
１３．inodeの読み込みができたら、システムの「起動ＩＤ」とinode上の「起動ＩＤ」を比較する。システム再起動の前にinodeの更新が行なわれていたため、システムの「起動ＩＤ」とinode上の「起動ＩＤ」は異なる値を持つ。
１４．次に、inode情報の中にある「ファイルサイズ」と「コミット済サイズ」を比較する。書き込み中に障害が発生したため、「ファイルサイズ」と「コミット済サイズ」は異なる値を持つ。なお、コミットの処理が完了した直後に障害が発生する可能性もあるが、一般には極めて稀なタイミングであるため、この例では考えないものとする。
１５．システムの「起動ＩＤ」とinode上の「起動ＩＤ」が一致しておらず、「ファイルサイズ」と「コミット済サイズ」が一致していなかったため、inode内の「ファイルサイズ」の値を「コミット済サイズ」の値に上書きする。
【００５３】
１６．inodeの「ファイルサイズ」の値が「コミット済サイズ」の値に上書きされると、ファイルサイズは小さくなるため、ファイルサイズの変更に合わせて、inodeに記載されているデータの格納場所の情報を修正し、メタデータのデータブロックビットマップの情報を未使用に変更する。
１７．上記手順１５と手順１６で変更したinodeや他のメタデータの情報をメタデータ格納領域Ｆ１に格納する。
１８．inodeコピー処理部Ｃ０は、オープン処理部Ａ２に処理が完了したことを通知する。
【００５４】
１９．オープン処理部Ａ２は、ファイルのオープン処理を実行する。オープン処理が完了したら、アプリケーションＧ１に対してオープン処理が完了したことを通知する。
２０．アプリケーションＧ１はファイルサイズの参照を要求する。
２１．インタフェース部Ａ０は、メタデータ記憶領域Ｆ１にあるinode情報からファイルサイズを通知する。
２２．アプリケーションＧ１は、データの書き込みを再開させるため、受け取ったファイルサイズの値のファイルとして認識し、当該ファイルサイズの値から先のデータの書き込みを始める。
【００５５】
以上のように、本実施形態によると、保証されていないデータは、かかるデータへのアクセス時に削除されるため、最終的に参照可能なデータは、保証された（コミットされた）データだけとなる。そして、データのアクセス時にメタデータをディスクからメモリにコピーするときに、メモリ上でメタデータを書き換えることでロールバック処理をしているため、データのロールバック処理に時間が掛からない。
【００５６】
さらに、本実施形態によると、アプリケーションＧ１からは保証されたデータのみディスクＧ３に格納されているように見えるため、ファイルサイズを確認してそれ以降のデータのみ書き込めばresumeしたことになるため、アプリケーションＧ１で書き込みログを用意していなくても、データの書き込みのresumeが容易に行なえる。
【００５７】
＜実施形態２＞
次に、本発明の第２の実施形態を、図９乃至図１２を参照して説明する。図９と図１２は、本発明の構成を示すブロック図であり、図１０と図１１は、本発明におけるファイルのデータ構造を示す図である。
【００５８】
［構成］
本実施形態におけるファイルシステムは、ファイルを格納する前に分割し、その分割データについて同一内容のデータは重複して記憶されることを排除する重複排除機能を有する。そして、このような重複排除機能を有するファイルシステムにて、以下に説明するロールバック機能を導入し、重複排除率の低下を防ぐ、というものである。
【００５９】
図９に示すように、本実施形態における情報処理システムは、ＯＳＱ２と、ファイルシステムＱ３と、クラスタ機能Ｑ５と、ディスクＱ４と、アプリケーションＱ１と、を備えて構成されている。なお、本実施形態における情報処理システムは、図１２に示すように、それぞれファイルシステムを構成する複数の情報処理装置がネットワークを介して接続された構成をとっている。
【００６０】
上記クラスタ機能Ｑ５は、負荷分散などのために、外部からのアクセスを他の装置に切り替えるために用いられる。切り替え前の装置でファイルシステム終了スクリプトＲ２を実行し、切り替え後の装置でファイルシステム起動スクリプトＲ１を実行することで切り替えを実現する。
【００６１】
上記ＯＳＱ２は、実施形態１と同様に、起動ＩＤ払出処理部Ｐ０を有しており、システムの起動毎に更新される「起動ＩＤ」を払い出す。
【００６２】
上記ファイルシステムＱ３は、インタフェース部Ｌ０と、分割管理部Ｎ１と、ディスクアクセス部Ｎ２と、メタデータ記憶領域Ｍ１と、データキャッシュ領域Ｍ２と、保留データキャッシュ領域Ｍ３と、を備える。また、上記インタフェース部Ｌ０は、起動ＩＤ取得処理部Ｌ１、クローズ処理部Ｌ２、オープン処理部Ｌ３、読み込み処理部Ｌ４、書込み処理部Ｌ５、キャッシュ削除処理部Ｌ６を備える。以下、主に、実施形態１と異なる構成について詳述する。
【００６３】
上記キャッシュ削除処理部Ｌ６は、上述したクラスタ機能Ｑ５のファイルシステム終了スクリプトＲ２から呼び出され、キャッシュ削除処理を実行する。
【００６４】
上記分割管理部Ｎ１は、書き込み時は特定のルールに従い１つのファイルを複数のファイルに分割してディスクＱ４に格納し、読み込み時は複数のファイルに分割されたデータを元の１つのファイルとして読めるようにする処理を行なう。例えば、ファイルの書き込み時には、図１０（Ａ）に示すファイルを、図１０（Ｂ）に示すように、ファイルの実データを「ａ１」、「ｂ１」等の各分割ファイルに分割し、予め設定されたルールにて各分割ファイルを種類別に分割データＤ２としてまとめて、ディスクＱ４に格納する。同時に、各分割ファイルに対応して、当該分割ファイルのディスクＱ４に対する格納位置情報と当該分割ファイルの分割前におけるファイルに対する位置情報とを含む各メタデータからなる位置情報ファイルＤ１を生成して、ディスクＱ４に格納する。そして、読み出し時には、位置情報ファイルＤ１の各メタデータに含まれる格納位置情報から当該各メタデータに対応する各分割ファイルを読み出し、元ファイルに対する位置情報に基づいてファイルを復元して読み出す。
【００６５】
なお、位置情報ファイルＤ１の各エントリを構成する各メタデータは、上述したように、対応する分割ファイルの格納位置情報や分割前のファイルに対する位置情報の他、対応する分割ファイルの種類（実データ／非データ）、対応する分割ファイルのサイズ、ＣＲＣなどの情報も含んでいる。
【００６６】
そして、分割管理部Ｎ１では、上述したメタデータに含まれる対応する分割ファイルの格納位置情報として、当該分割ファイルのデータ内容に固有なコンテンツアドレスを用いている。従って、同一のデータ内容の分割ファイルはコンテンツアドレスが同一となるため、１つの分割ファイルをディスクＱ４に格納しておけばよい。つまり、同一データ内容の他の分割ファイルを書き込むときには、既に記憶されている同一データ内容の分割ファイルのコンテンツアドレスである格納位置を参照することで、重複記憶を排除することができる。
【００６７】
上記保留データキャッシュ領域Ｍ３は、ファイルを分割するためのルールで判断ができなかったものを保留しておき、後から来るデータと合わせて判断できるようにするために用いられる一時的なキャッシュ領域である。
【００６８】
なお、本実施形態におけるシステムは、実施形態１と比較して、以下の相違点がある。
１．まず、アーカイブソフトなどのアプリケーションを使ってファイルシステムにファイル（実データ）を格納すると、実データにアーカイブソフトで管理するための日付などの情報（非データ）が付与されて格納する場合がある。すると、実データの更新がなくても、非データの更新が行なわれると、ファイルシステムにとっては別々のファイルとして扱う。このため、ファイルシステムが重複排除機能を有していた場合であっても、うまく重複排除できないことがある。かかる状況であっても効率よく重複排除を行うために、本実施形態では、実データと非データを分割して格納することにより、効率的に重複排除を行う機能を有する。なお、複数のファイルに分割して格納する技術はすでにあるため、その詳細な説明は省略する。
【００６９】
２．本実施形態では、各分割ファイルの格納位置情報などを含む各メタデータに、対応する分割ファイルがコミットされたか否かを表す「コミット情報」と「起動ＩＤ」とを含む。
３．実施形態１では、ファイルのメタデータであるinodeをメタデータ記憶領域Ｆ１に記憶するときに、inodeコピー処理部Ｃ０による処理により書き換えを行なってから記憶していたが、本実施形態では、分割して格納されているデータを１つのファイルのように見せるため、分割管理部Ｎ１で元のファイルの状態に復元してから見せるようにしている。
【００７０】
４．本実施形態では、データキャッシュ領域Ｍ２のデータをディスクＱ４に格納するときに、意味のある形で分割できるように保留データキャッシュ領域Ｍ３を備えている。
５．本実施形態では、クラスタ機能Ｑ５と、当該クラスタ機能Ｑ５のファイルシステム終了スクリプトＲ２から呼び出されるキャッシュ削除処理部Ｌ６を備えている。
【００７１】
［動作］
次に、上述したシステムの動作の概略を説明する。まず、アプリケーションＱ１がファイルの参照や更新を行なおうとした場合、ファイルが複数の分割ファイルに分割されてディスクＱ４に格納されていると、分割ファイルを元に戻して処理しなければならない。そのため、インタフェース部Ｌ０からメタデータやデータにアクセスするためには、すべて分割管理部Ｎ１を通してアクセスを行なう。
このとき、ファイルの実データである各分割ファイルに関する情報である各メタデータには、対応する分割データのディスクＧ４への書き込みに完了したか否かを表す「コミット情報」と「起動ＩＤ」とを記憶している。
なお、ファイルを分割してディスクに書き込む目的として、データの暗号化を行なったり重複排除を行なったりすることが考えられるが、書き込まれたデータを処理するときに、データキャッシュ領域に十分データがたまっていないと、どのように分割するべきかの情報を得られない場合がある。そのような場合、保留データキャッシュ領域Ｍ３に分割できなかったデータを一時格納しておき、次に書き込まれるデータとあわせることで有効な分割を行うことができる。
【００７２】
しかし、保留データキャッシュ領域Ｍ３にデータが存在している状態で、コミット要求があると、分割するのに必要な情報が足りていなくても、ディスクに書き込む必要がある。この場合、重複排除を行うファイルシステムであると、重複排除率が低下してしまう。また一般に、負荷分散のために別の装置からファイルシステムをアクセスできるようにすると、負荷分散前に利用していた装置でのアクセスをすべて停止する必要があり、このときにはコミット要求が来る。
【００７３】
以上のように、負荷分散を繰り返し行なうだけで重複排除率が低下してしまうため、本実施形態では、負荷分散などでの切り替えを行なう場合にはコミットを行なわず、キャッシュデータをすべて捨てる処理を行う。
【００７４】
次に、「コミット情報の登録」処理について説明する。本実施形態では、コミット要求があった場合、分割ファイルをディスクに書き込んだ後、その分割ファイルに対応するメタデータを更新して、当該メタデータにコミットしたことを示すフラグを立てることで、コミットが完了した旨を表す「コミット情報」を登録する。例えば、図１１（Ａ）の黒丸印に示すように、メタデータに「コミット情報」を登録する。
【００７５】
次に、「ロールバック」処理について説明する。ディスクＱ４からファイルを読むためには、当該ファイルに対応したメタデータ群からなる位置情報ファイルＤ１を参照する必要があるが、まず、位置情報ファイルＤ１内のメタデータ中の「起動ＩＤ」が、起動ＩＤ取得処理部Ｌ１にて取得した現在の「起動ＩＤ」と一致するか否かを調べる。一致しない場合には、障害発生前に行われたファイルの変更内容がコミットされていない場合が考えられるため、続いて、位置情報ファイルＤ１内の各メタデータ中の「コミット情報」を探す。このとき、位置情報ファイルＤ１の終端側からさかのぼって各メタデータ内のコミット情報を探す。なお、位置情報ファイルの各エントリである各メタデータを固定長にすることにより、コミット情報をすばやく確認することができる。
【００７６】
そして、メタデータ記憶領域Ｍ１上に位置情報ファイルＤ１を展開するときには、最終コミットの地点以降のメタデータはないものとして扱う。つまり、位置情報ファイルＤ１内のメタデータから「コミット情報」を検出すると、当該「コミット情報」を検出したメタデータのうち位置情報ファイルＤ１の最後端側に位置するメタデータ以降のメタデータを「０」に変更し、この「０」となったメタデータに対応する分割ファイルも「０」に変更する。このとき、対応するメタデータがない分割ファイルも「０」に変更する。換言すると、オープン処理部Ｌ３、読み込み処理部Ｌ４等のインタフェース部Ｌ０は、図１１（Ｂ）に示すように、位置情報ファイルＤ１の先頭から見て、黒丸印である「コミット情報」が含まれる最後方のメタデータに対応する分割ファイルまでで復元されるファイルを、アクセス可能とする。具体的に、図１１（Ｂ）の例では、点線部分のデータがないものとして扱われる。
【００７７】
次に、キャッシュ削除処理について、図９及び図１２を参照して説明する。
１．負荷分散の切り替えのため、クラスタ機能Ｑ５のファイルシステム終了スクリプトＲ２が実行される。
２．ファイルシステム終了スクリプトＲ２は、インタフェース部Ｌ０のキャッシュ削除処理部Ｌ６による処理を呼び出す。
３．キャッシュ削除処理部Ｌ６では、インタフェース部Ｌ０へのアクセスをすべて停止する。これは、アプリケーションＱ１からの追加の書き込みやコミット要求を受けないようにするためである。
４．アクセスがすべて停止した段階で、データキャッシュ領域Ｍ２のデータと保留データキャッシュ領域Ｍ３のデータをすべて削除する。つまり、ディスクＱ４に書き込みを行わない。
５．キャッシュのデータがすべて削除できたら、ファイルシステム終了スクリプトＲ２の残りの処理を実施する。これにより、ファイルシステムのアンマウントなどが行なわれる。
６．負荷分散により切り替わる先の装置で、ファイルシステム起動スクリプトＲ１を実行する。これにより、ファイルシステムのマウントなどが行なわれる。
【００７８】
以上により、保留データキャッシュ領域Ｍ３内にあったデータはディスクに書き込まれないことになり、分割できない状態で強制的にディスクＱ４へ書き込む必要が無くなる。そのため、重複排除率の低下を防ぐことができる。また、切り替わる先の装置でデータのロールバックが実行されるため、データは保証されることになる。
【００７９】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるファイルシステム等の構成を説明する。但し、本発明は、以下の構成に限定されない。
【００８０】
（付記１）
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリと、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、を備え、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する機能を有する、
ファイルシステム。
【００８１】
（付記２）
付記１に記載のファイルシステムであって、
前記ファイルアクセス部は、ファイルへのアクセス時に当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
ファイルシステム。
【００８２】
（付記３）
付記２に記載のファイルシステムであって、
前記書込処理部は、ファイルのメタデータ内に、前記キャッシュメモリ上におけるファイルの実データのサイズを表すファイルサイズ情報を含めると共に、当該ファイルの前記補助記憶装置に対する書き込みが完了した実データ部分のサイズを前記書込完了済み情報として含めて、ファイルのメタデータを前記補助記憶装置に記憶し、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルのメタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なり、当該メタデータ内の前記書込完了済み情報の値が当該メタデータ内の前記ファイルサイズ情報の値と異なる場合に、当該ファイルサイズに前記書込済み情報の値を上書きする、
ファイルシステム。
【００８３】
（付記４）
付記３に記載のファイルシステムであって、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルのメタデータ内の前記ファイルサイズ情報に対応するサイズの実データ部分のファイルにアクセスする、
ファイルシステム。
【００８４】
（付記５）
付記２に記載のファイルシステムであって、
前記書込処理部は、ファイルの実データを分割した分割ファイル毎に、当該分割ファイルの実データ、及び、当該分割ファイルの前記補助記憶装置に対する格納位置情報と当該分割ファイルの分割前のファイルに対する位置情報とを含むメタデータ、を前記補助記憶装置に書き込むと共に、当該分割ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、当該分割ファイルの前記補助記憶装置に対する書き込みが完了したことを表す前記書込完了済み情報と、を含めて前記補助記憶装置に記憶する機能を有する、
ファイルシステム。
【００８５】
（付記６）
付記５に記載のファイルシステムであって、
前記ファイルアクセス部は、前記補助記憶装置から前記キャッシュメモリに読み出したファイルの分割ファイルに対応するメタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、前記補助記憶装置から前記キャッシュメモリに読み出したファイルの各分割ファイルに対応する各メタデータのうち、ファイルの先頭から見て前記書込み完了済み情報が含まれている最後方のメタデータに対応する分割ファイルまでの実データ部分のファイルにアクセスする、
ファイルシステム。
【００８６】
（付記７）
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備え、ファイルシステムを構成する情報処理装置に、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込む書込処理部と、
メタデータに基づいてファイルの実データにアクセスするファイルアクセス部と、
ファイルシステムが構築された情報処理装置自体から発行され、当該情報処理装置の起動毎に異なる起動識別情報を取得する起動識別情報取得部と、
を実現させると共に、
前記書込処理部は、ファイルの実データ及びメタデータを前記補助記憶装置に書き込むと共に、当該ファイルのメタデータに、情報処理装置自体から現在発行されている前記起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
ことを実現させるためのプログラム。
【００８７】
（付記８）
付記７に記載のプログラムであって、
前記ファイルアクセス部は、ファイルへのアクセス時に当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
プログラム。
【００８８】
（付記９）
ファイルに対する処理を行うために、当該ファイルの実データと、当該ファイルの実データの格納位置情報を含むメタデータと、を一時的に記憶するキャッシュメモリを備えたファイルシステムにて、
前記キャッシュメモリ上のファイルの実データ及びメタデータを前記補助記憶装置に書き込み、
メタデータに基づいてファイルの実データにアクセスすると共に、
ファイルの実データ及びメタデータを前記補助記憶装置に書き込むときに、当該ファイルのメタデータに、ファイルシステムが構築された情報処理装置自体から現在発行されている当該情報処理装置の起動毎に異なる起動識別情報と、前記補助記憶装置に書き込みが完了したファイルの実データ部分を特定する書込完了済み情報と、を含めて前記補助記憶装置に記憶する、
ファイル処理方法。
【００８９】
（付記１０）
付記９に記載のファイル処理方法であって、
ファイルへのアクセス時に、当該ファイルのメタデータが前記キャッシュメモリに記憶されていない場合に、当該メタデータを前記補助記憶装置から前記キャッシュメモリに読み出して、当該メタデータ内の前記起動識別情報が情報処理装置自体から現在発行されている前記起動識別情報と異なる場合に、ファイルのメタデータ内の前記書込完了済み情報にて特定される実データ部分のファイルにアクセスする、
ファイル処理方法。
【符号の説明】
【００９０】
Ａ０  インタフェース部
Ａ１  起動ＩＤ取得処理部
Ａ２  オープン処理部
Ａ３  読み込み処理部
Ａ４  書き込み処理部
Ａ５  クローズ処理部
Ｂ０  起動ＩＤ払出処理部
Ｃ０  inodeコピー処理部
Ｃ１  再立上判定処理部
Ｃ２  コミット情報チェック処理部
Ｃ３  inode書換処理部
Ｄ０  キャッシュ管理部
Ｅ０  ディスクアクセス部
Ｆ１  メタデータ記憶領域
Ｆ２  データキャッシュ領域
Ｇ１  アプリケーション
Ｇ２  ファイルシステム
Ｇ３  ディスク
Ｇ４  ＯＳ
Ｌ０  インタフェース部
Ｌ１  起動ＩＤ取得処理部
Ｌ２  クローズ処理部
Ｌ３  オープン処理部
Ｌ４  読み込み処理部
Ｌ５  書き込み処理部
Ｌ６  キャッシュ削除処理部
Ｍ１  メタデータ記憶領域
Ｍ２  データキャッシュ領域
Ｍ３  保留データキャッシュ領域
Ｎ１  分割管理部
Ｎ２  ディスクアクセス部
Ｐ０  起動ＩＤ払出処理部
Ｑ１  アプリケーション
Ｑ２  ＯＳ
Ｑ３  ファイルシステム
Ｑ４  ディスク
Ｑ５  クラスタ機能
Ｒ１  ファイルシステム起動スクリプト
Ｒ２  ファイルシステム終了スクリプト
【図１】
0005626034.tif 000002
【図２】
0005626034.tif 000003
【図３】
0005626034.tif 000004
【図４】
0005626034.tif 000005
【図５】
0005626034.tif 000006
【図６】
0005626034.tif 000007
【図７】
0005626034.tif 000008
【図８】
0005626034.tif 000009
【図９】
0005626034.tif 000010
【図１０】
0005626034.tif 000011
【図１１】
0005626034.tif 000012
【図１２】
0005626034.tif 000013