(57)【要約】【課題】ファイルやディレクトリなどのデータについて、処理前の状態と処理後の状態とで切り替えて使用することを可能とすること。【解決手段】情報処理装置１００は、ファイルＦに含まれるデータブロックＤ群へのポインタＰ群であるスナップショットＡを複製しておく。そして、情報処理装置１００は、ファイルＦの変更に伴って、複製されたスナップショットＢから変更後のファイルＦ’に含まれるデータブロックＤ群へのポインタＰ群であるスナップショットＢ’を作成する。このとき、情報処理装置１００は、ログ構造ファイルシステムを採用し、ファイルの変更箇所に対応する変更前のデータブロックＤ１と変更後のデータブロックＤ１’とを両方保存しておく。これにより、情報処理装置１００は、複数のスナップショットを分岐させて併存させることができる。【選択図】図１
2013073403.tif 000002
【特許請求の範囲】
【請求項１】
格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、
該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う制御部を備え、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、
また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、
また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理装置。
【請求項２】
データブロック集合のデータブロックごとに、指定先を記憶する第１のデータベースと、
前記指定先ごとに、指定元の状態を記憶する第２のデータベースと、を備え、
前記制御部は、
前記更新処理により削除される削除データ部分が存在する場合には、前記第１のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、前記削除データ部分を格納していたデータブロックについて前記第１のポインタ群情報で指定される状態および前記第２のポインタ群情報で指定されない状態と、前記削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて前記第２のデータベースに追加し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックの指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第１のデータベースに追加し、前記追加データ部分の格納先となったデータブロックについて前記第１のポインタ群情報で指定されない状態および前記第２のポインタ群情報で指定される状態と、前記追加データ部分の格納先となったデータブロックの指定先と、を対応付けて前記第２のデータベースに追加することを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記制御部は、
前記第１のデータベースと前記第２のデータベースとを参照して、前記データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、前記データブロック集合から削除することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
コンピュータが、
格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行し、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理方法。
【請求項５】
コンピュータに、
格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行させ、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報を処理する情報処理装置、情報処理方法、および情報処理プログラムに関する。
【背景技術】
【０００２】
従来、ログ構造ファイルシステムの技術がある。ログ構造ファイルシステムでは、ファイル内のデータが更新される際に、更新前のデータを残したまま、更新後のデータを新たに保存する。そのため、ファイルの状態を過去の状態に戻すことが可能である。これにより、ファイルの更新に失敗した場合に、直前の状態に復元できる。また、ファイルシステムの利用者が、更新を取り消そうとした場合、過去の状態に復元できる。従来技術としては、上述したログ構造ファイルシステムにおいて、スナップショットの作成を高速化する技術がある（例えば、下記特許文献１参照）。
【０００３】
また、従来技術としては、複数のスナップショットから差分を生成して世代管理を行う技術がある（例えば、下記特許文献２参照）。スナップショットとは、スナップショットの作成時点のファイルやディレクトリの状態を特定できるデータである。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００４−２１３６４７号公報
【特許文献２】特開２０１０−０２６９３９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術では、作成されるスナップショットは時系列に沿った一連のスナップショット（いわゆる「読み込みのみのスナップショット」）である。そのため、過去のファイルやディレクトリは取り出しのみが可能となる。したがって、ファイルやディレクトリの状態を復元した状態と復元する前の状態とで切り替えて使用することができない。
【０００６】
本発明は、１つの側面では、ファイルやディレクトリなどのデータについて、処理前の状態と処理後の状態とで切り替えて使用することを可能とすることを目的とする。
【課題を解決するための手段】
【０００７】
本発明の一側面によれば、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う情報処理装置、情報処理方法、および情報処理プログラムが提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、ファイルやディレクトリなどのデータについて、処理前の状態と処理後の状態とで切り替えて使用することができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、スナップショットの作成の内容を示す説明図である。
【図２】図２は、実施の形態にかかる情報処理装置１００のハードウェア構成例を示すブロック図である。
【図３】図３は、データファイル２３０の具体例１を示す説明図である。
【図４】図４は、データファイル２３０の具体例２を示す説明図である。
【図５】図５は、データファイル２３０の具体例３を示す説明図である。
【図６】図６は、情報処理装置１００の機能的構成例を示すブロック図である。
【図７】図７は、分岐可能なスナップショットの一例を示す説明図（その１）である。
【図８】図８は、分岐可能なスナップショットの一例を示す説明図（その２）である。
【図９】図９は、分岐可能なスナップショットの一例を示す説明図（その３）である。
【図１０】図１０は、分岐可能なスナップショットの一例を示す説明図（その４）である。
【図１１】図１１は、スナップショットを作成する際のポインタＰの具体例を示す説明図（その１）である。
【図１２】図１２は、スナップショットを作成する際のポインタＰの具体例を示す説明図（その２）である。
【図１３】図１３は、スナップショットを作成する際のポインタＰの具体例を示す説明図（その３）である。
【図１４】図１４は、情報処理装置１００によるガーベージコレクションの具体例を示す説明図である。
【図１５】図１５は、スナップショットのユーザインターフェースの一例を示す説明図である。
【図１６】図１６は、データ読み出し処理の処理内容を示すフローチャートである。
【図１７】図１７は、エントリ取り出し処理の処理内容を示すフローチャートである。
【図１８】図１８は、データブロック取り出し処理の処理内容を示すフローチャートである。
【図１９】図１９は、ブロックマップ検索処理の処理内容を示すフローチャートである。
【図２０】図２０は、データ書き込み処理の処理内容を示すフローチャート（その１）である。
【図２１】図２１は、データ書き込み処理の処理内容を示すフローチャート（その２）である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、この発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。情報処理装置は、リソース（記憶領域）の操作方法として、ログ構造ファイルシステムを採用している。情報処理装置は、ログ構造ファイルシステムでは、記憶領域をデータブロックに分割しており、１または複数のデータブロックを使用してデータ（例えばファイルやディレクトリ）を記憶している。また、情報処理装置は、情報処理装置の記憶するファイルが変更される場合、ファイルに含まれる変更を反映させる対象のデータブロック（以下、「反映対象データブロック」という）を残しておく。そして、情報処理装置は、反映対象データブロックとは別に、反映対象データブロックに変更を反映させた反映後のデータブロックを新たに記憶する。
【００１１】
ここで、情報処理装置は、ログ構造ファイルシステムを採用しつつ、複数のスナップショットを作成して併存できるようにする。また、情報処理装置は、１つのスナップショットから複数のスナップショットを分岐させて作成できるようにする。そのために、情報処理装置は、ファイルに含まれるデータブロック群を指定するポインタ群を、ファイルに対応するスナップショットとして保存する。
【００１２】
そして、情報処理装置は、ファイルが変更される場合、変更前のファイルに対応するスナップショットを残したまま、変更後のファイルに対応するスナップショットを新たに記憶する。新たなスナップショットとは、変更前のファイルに対応するスナップショットのうち、反映対象データブロックを指定するポインタを反映後のデータブロックを指定するポインタに置き換えた、スナップショットである。このように、情報処理装置は、複数のスナップショットを併存させることができる。
【００１３】
また、情報処理装置は、不要なデータブロックを削除し、リソースを解放するガーベージコレクションを実行する。情報処理装置は、ガーベージコレクションの実行の際に、保存しているいずれのスナップショットでも指定していないデータブロックを削除する。これにより、情報処理装置は、ログ構造ファイルシステムに対して、分岐が可能なスナップショットを作成することができる。
【００１４】
（スナップショットの作成の内容）
まず、図１を用いて、スナップショットの作成の内容について説明する。
【００１５】
図１は、スナップショットの作成の内容を示す説明図である。ここで、情報処理装置１００の記憶領域１０１には、ファイルＦに含まれるデータブロックＤ１〜データブロックＤ３が記憶されている。また、情報処理装置１００の記憶領域１０２には、ファイルＦに含まれるデータブロックＤ群を指定するポインタＰ群を保存したスナップショットＡが記憶されている。スナップショットＡには、データブロックＤ１へのポインタＰ１と、データブロックＤ２へのポインタＰ２と、データブロックＤ３へのポインタＰ３と、が含まれている。
【００１６】
情報処理装置１００のユーザインターフェースでは、データブロックＤ１〜データブロックＤ３を組み合わせたファイルＦが表示される。そして、情報処理装置１００の利用者は、ファイルＦに対して、データの削除、追加、または変更の処理を実行する。
【００１７】
（１）まず、情報処理装置１００は、スナップショットＡを複製し、ファイルＦを対象にするスナップショットＢを作成する。スナップショットＢには、データブロックＤ１へのポインタＰ１と、データブロックＤ２へのポインタＰ２と、データブロックＤ３へのポインタＰ３と、が含まれている。
【００１８】
（２）次に、スナップショットＢからファイルＦの内容を変更する。情報処理装置１００は、データブロックＤ１が変更される際に、変更前のデータブロックＤ１とは別に、変更後のデータブロックＤ１’を記憶しておく。
【００１９】
（３）次に、情報処理装置１００は、複製したスナップショットＢのうち、変更前のデータブロックＤ１へのポインタＰ１を削除する。また、情報処理装置１００は、複製したスナップショットＢに、新たに変更後のデータブロックＤ１’へのポインタＰ４を追加する。
【００２０】
これにより、変更後のファイルＦ’に含まれるデータブロックＤ群を指定するポインタＰ群となるスナップショットＢ’が作成され、スナップショットＡとスナップショットＢ’とが併存する。結果として、利用者は、スナップショットＡのポインタＰが指定するデータブロックＤを組み合わせれば変更前のファイルＦを使用することができ、スナップショットＢ’のポインタＰが指定するデータブロックＤを組み合わせれば変更後のファイルＦ’を使用することができる。
【００２１】
このように、利用者は、スナップショットが併存することによって、変更前後のファイルを切り替えて使用することができる。また、利用者は、スナップショットＡとスナップショットＢ’を残したまま、さらに、スナップショットＡからスナップショットＢ’とは異なるスナップショットを作成することができる。
【００２２】
（情報処理装置１００のハードウェア構成例）
図２は、実施の形態にかかる情報処理装置１００のハードウェア構成例を示すブロック図である。図２において、情報処理装置１００は、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２０１と、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０２と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２０３と、磁気ディスク２０４と、光ディスク２０５と、ディスプレイ２０６と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２０７と、キーボード２０８と、マウス２０９と、スキャナ２１０と、プリンタ２１１と、を備えている。また、各構成部はバス２００によってそれぞれ接続されている。
【００２３】
ここで、ＣＰＵ２０１は、情報処理装置１００の全体の制御を司る。ＲＯＭ２０２は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０３は、ＣＰＵ２０１のワークエリアとして使用される。
【００２４】
磁気ディスク２０４は、ＣＰＵ２０１の制御によりデータのリード／ライトが行われる記憶媒体である。磁気ディスク２０４は、ＣＰＵ２０１の制御により書き込まれたデータを記憶する。例えば、磁気ディスク２０４に、ログ構造ファイルシステムが作成され、データブロックＤが記憶される。また、磁気ディスク２０４は、情報処理装置１００によるガーベージコレクションの実行の際に、情報処理装置１００に参照されるデータファイル２３０を記憶している。データファイル２３０の記憶内容については、図３〜図５を用いて説明する。
【００２５】
光ディスク２０５は、ＣＰＵ２０１の制御によりデータのリード／ライトが行われる記憶媒体である。光ディスク２０５は、ＣＰＵ２０１の制御により書き込まれたデータを記憶したり、光ディスク２０５に記憶されたデータをコンピュータに読み取らせたりする。
【００２６】
ディスプレイ２０６は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ２０６は、例えば、ＣＲＴ、ＴＦＴ液晶ディスプレイ、プラズマディスプレイなどを採用することができる。
【００２７】
インターフェース（以下、「Ｉ／Ｆ」と略する。）２０７は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１２に接続され、このネットワーク２１２を介して他の装置に接続される。そして、Ｉ／Ｆ２０７は、ネットワーク２１２と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２０７には、例えばモデムやＬＡＮアダプタなどを採用することができる。
【００２８】
キーボード２０８は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス２０９は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。
【００２９】
スキャナ２１０は、画像を光学的に読み取り、情報処理装置１００内に画像データを取り込む。なお、スキャナ２１０は、ＯＣＲ（Ｏｐｔｉｃａｌ  Ｃｈａｒａｃｔｅｒ  Ｒｅａｄｅｒ）機能を持たせてもよい。また、プリンタ２１１は、画像データや文書データを印刷する。プリンタ２１１には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。
【００３０】
また、情報処理装置１００は、ストレージアダプタによって接続された外部の記憶装置にログ構造ファイルシステムを作成してもよい。
【００３１】
（データファイル２３０の具体例１）
次に、図３を用いて、磁気ディスク２０４に記憶されているデータファイル２３０の具体例１について説明する。
【００３２】
図３は、データファイル２３０の具体例１を示す説明図である。図３に示すように、データファイル２３０は、スナップショットごとに作成される。また、データファイル２３０は、ブロック番号項目のそれぞれに対応付けて、作成ＣＮＯ（Ｃｈｅｃｋｐｏｉｎｔ  Ｎｕｍｂｅｒ）項目と、削除ＣＮＯ項目と、を有し、データブロックＤの作成ごとにレコードを構成し、データブロックＤの削除ごとにレコードを更新する。
【００３３】
ブロック番号項目には、データブロックＤの作成順に付与された、データブロックＤを特定する識別子が記憶される。作成ＣＮＯ項目には、データブロックＤが作成されたときのＣＮＯが記憶される。削除ＣＮＯ項目には、データブロックＤが削除されたときのＣＮＯが記憶される。ＣＮＯは、データブロックＤを変更、生成、または削除したときに、インクリメントされるカウンタである。
【００３４】
（データファイル２３０の具体例２）
次に、図４を用いて、磁気ディスク２０４に記憶されているデータファイル２３０の具体例２について説明する。
【００３５】
図４は、データファイル２３０の具体例２を示す説明図である。図４に示すように、データファイル２３０は、ブロック番号項目のそれぞれに対応付けて、作成ＣＮＯ項目と、スナップショットごとの削除ＣＮＯ項目（ここでは、スナップショットＡ−削除ＣＮＯ項目とスナップショットＢ−削除ＣＮＯ項目）と、を有する。そして、データファイル２３０は、データブロックＤの作成ごとにレコードを構成し、データブロックＤの削除ごとにレコードを更新する。また、スナップショットごとの削除ＣＮＯ項目は、スナップショットが作成されるごとに項目を増加させる。
【００３６】
ブロック番号項目には、データブロックＤの作成順に付与された、データブロックＤを特定する識別子が記憶される。作成ＣＮＯ項目には、データブロックＤが作成されたときのＣＮＯが記憶される。
【００３７】
スナップショットＡ−削除ＣＮＯ項目には、スナップショットＡにおいて、データブロックＤが削除されたときのＣＮＯが記憶される。スナップショットＢ−削除ＣＮＯ項目には、スナップショットＢにおいて、データブロックＤが削除されたときのＣＮＯが記憶される。
【００３８】
（データファイル２３０の具体例３）
次に、図５を用いて、磁気ディスク２０４に記憶されているデータファイル２３０の具体例３について説明する。図５に示すように、磁気ディスク２０４には、データファイル２３０と、データファイル２３０を補助する補助テーブル５００と、が記憶されている。
【００３９】
図５は、データファイル２３０の具体例３を示す説明図である。データファイル２３０は、ブロック番号項目のそれぞれに対応付けて、作成ＣＮＯ項目と、状態記憶先項目と、を有し、データブロックＤの作成ごとにレコードを構成し、データブロックＤの削除ごとにレコードを更新する。
【００４０】
ブロック番号項目には、データブロックＤの作成順に付与された、データブロックＤを特定する識別子が記憶される。作成ＣＮＯ項目には、データブロックＤが作成されたときのＣＮＯが記憶される。状態記憶先項目には、各スナップショットにおいてデータブロックＤが指定されている状態か否かを記憶する補助テーブル５００のレコードへのポインタが記憶される。
【００４１】
また、図５に示すように、補助テーブル５００は、ポインタ項目のそれぞれに対応付けて、指定状態項目を有し、データブロックＤの生成ごとにレコードを構成し、データブロックＤの削除ごとにレコードを更新する。
【００４２】
ポインタ項目には、データブロックＤの生成または削除ごとに付与された識別子が記憶される。指定状態項目には、データブロックＤが生成または削除された時点で、各スナップショットにおいてデータブロックＤが指定されている状態か否かが記憶される。
【００４３】
このように、補助テーブル５００を使用することでデータファイル２３０と補助テーブル５００とが固定列となり、図３または図４に示したデータファイル２３０の場合に比して、データファイル２３０と補助テーブル５００との作成および更新が容易になる。また、スナップショットの複製時に、データファイル２３０を複製しなくてよいため、情報処理装置１００の処理量が削減される。
【００４４】
（情報処理装置１００の機能的構成例）
次に、図６を用いて、情報処理装置１００の機能的構成例について説明する。
【００４５】
図６は、情報処理装置１００の機能的構成例を示すブロック図である。情報処理装置１００は、検出部６０１と、特定部６０２と、複製部６０３と、更新部６０４と、格納部６０５と、削除部６０６と、を含む構成である。この制御部６００となる機能（検出部６０１〜削除部６０６）は、具体的には、例えば、図２に示したＲＯＭ２０２、ＲＡＭ２０３、磁気ディスク２０４、光ディスク２０５などの記憶装置に記憶されたプログラムをＣＰＵ２０１に実行させることにより、または、Ｉ／Ｆ２０７により、その機能を実現する。
【００４６】
制御部６００は、複数のデータブロックＤに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の複数のデータブロックＤのそれぞれを示す複数のポインタＰを含む第１のポインタ群情報と、更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタＰを含む第２のポインタ群情報とが記憶装置に記憶された状態となるように記憶制御を行う機能を有する。ここで、データとは、例えば、利用者によって更新処理されたファイルである。ポインタ群情報とは、１つのファイルに含まれるデータブロックＤ群を指定するポインタＰ群であり、上述したスナップショットである。
【００４７】
第２のポインタ群情報とは、更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックＤを示すポインタＰを含まないスナップショットである。また、第２のポインタ群情報とは、更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックＤを示すポインタＰを含むスナップショットである。また、第２のポインタ群情報とは、更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックＤを示すポインタＰを含むスナップショットである。以下では、削除データ部分を格納していたデータブロックＤを「削除対象データブロック」という。また、追加データ部分の格納先となったデータブロックＤを「追加対象データブロック」という。また、更新処理により変更されたデータブロックＤを「反映対象データブロック」という。
【００４８】
また、制御部６００は、更新処理により削除される削除データ部分が存在する場合には、第１のデータベースのうち削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、削除データ部分を格納していたデータブロックについて第１のポインタ群情報で指定される状態および第２のポインタ群情報で指定されない状態と、削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて第２のデータベースに追加する機能を有する。制御部６００は、更新処理により追加される追加データ部分が存在する場合には、新たに追加データ部分の格納先となったデータブロックの指定先を追加データ部分の格納先となったデータブロックに対応付けて第１のデータベースに追加し、追加データ部分の格納先となったデータブロックについて第１のポインタ群情報で指定されない状態および第２のポインタ群情報で指定される状態と、追加データ部分の格納先となったデータブロックの指定先と、を対応付けて第２のデータベースに追加する機能を有する。
【００４９】
制御部６００は、更新処理により削除される削除データ部分が存在する場合には、第１のデータベースのうち削除データ部分を格納していたデータブロックの指定先を、削除データ部分を格納していたデータブロックについて第１のポインタ群情報で指定される状態および第２のポインタ群情報で指定されない状態に対応付けて第２のデータベースに記憶された指定先に更新する機能を有する。制御部６００は、更新処理により追加される追加データ部分が存在する場合には、新たに追加データ部分の格納先となったデータブロックについて第１のポインタ群情報で指定されない状態および第２のポインタ群情報で指定される状態に対応付けて第２のデータベースに記憶された指定先を追加データ部分の格納先となったデータブロックに対応付けて第１のデータベースに追加する機能を有する。
【００５０】
また、制御部６００は、第１のデータベースと第２のデータベースとを参照して、データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、データブロック集合から削除する機能を有する。
【００５１】
以下では、制御部６００となる機能（検出部６０１〜削除部６０６）について、具体的に説明する。検出部６０１は、データブロック集合の中から反映対象データブロックを検出する機能を有する。ここで、データブロック集合とは、情報処理装置１００により、ＲＡＭ２０３、磁気ディスク２０４、光ディスク２０５などの記憶領域に記憶されているデータブロックＤの集合である。反映対象データブロックとは、利用者によってファイルで変更された変更箇所に対応するデータブロックＤであり、変更を反映させる対象になるデータブロックＤである。具体的には、例えば、検出部６０１は、データブロックＤの集合の中から、利用者によってファイルで変更された変更箇所に対応するデータブロックＤを検出する。これにより、検出部６０１は、反映対象データブロックを検出できる。
【００５２】
検出部６０１は、データブロック集合の中から削除対象データブロックを検出する機能を有する。ここで、削除対象データブロックとは、利用者によってファイルから削除された削除箇所に対応するデータブロックＤである。具体的には、例えば、検出部６０１は、データブロックＤの集合の中から、利用者によってファイルから削除された削除箇所に対応するデータブロックＤを検出する。これにより、検出部６０１は、削除対象データブロックを検出できる。
【００５３】
検出部６０１は、データブロック集合の中から追加対象データブロックを検出する機能を有する。ここで、追加対象データブロックとは、利用者によってファイルに追加された追加箇所に対応するデータブロックＤである。具体的には、例えば、検出部６０１は、データブロックＤの集合の中から、利用者によってファイルに追加された追加箇所に対応するデータブロックＤを検出する。なお、検出されたデータブロックＤは、ＲＡＭ２０３、磁気ディスク２０４、光ディスク２０５などの記憶領域に記憶される。これにより、検出部６０１は、追加対象データブロックがデータブロックＤの集合の中にないことを検出できる。
【００５４】
特定部６０２は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、反映対象データブロックを含むデータブロック群を指定する第１の指定情報群を特定する機能を有する。ここで、データブロック集合のデータブロック群とは、情報処理装置１００が記憶しているデータブロックＤの集合の中で、１つのファイルに含まれるデータブロックＤ群である。データブロック群を指定する指定情報群とは、１つのファイルに含まれるデータブロックＤ群を指定するポインタＰ群の情報であり、上述したポインタ群情報であり、上述したスナップショットである。具体的には、例えば、特定部６０２は、変更箇所に対応するデータブロックＤを含む、利用者によって変更された変更箇所があるファイルに含まれるデータブロックＤ群を指定するポインタＰ群を特定する。これにより、特定部６０２は、利用者により変更された変更箇所があるファイルに対応するスナップショットを特定できる。
【００５５】
特定部６０２は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、削除対象データブロックを含むデータブロック群を指定する第１の指定情報群を特定する機能を有する。具体的には、例えば、特定部６０２は、削除箇所に対応するデータブロックＤを含む、利用者によって削除された削除箇所があるファイルに含まれるデータブロックＤ群を指定するポインタＰ群を特定する。これにより、特定部６０２は、利用者により削除された削除箇所があるファイルに対応するスナップショットを特定できる。
【００５６】
特定部６０２は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、追加対象データブロック群を指定する第１の指定情報群を特定する機能を有する。具体的には、例えば、特定部６０２は、追加箇所に対応するデータブロックＤを含まない、利用者によって追加される追加箇所があるファイルに含まれるデータブロックＤ群を指定するポインタＰ群を特定する。なお、特定結果は、ＲＡＭ２０３、磁気ディスク２０４、光ディスク２０５などの記憶領域に記憶される。これにより、特定部６０２は、利用者により追加される追加箇所があるファイルに対応するスナップショットを特定できる。
【００５７】
複製部６０３は、特定部６０２によって特定された第１の指定情報群を複製する機能を有する。具体的には、例えば、複製部６０３は、特定部６０２によって特定されたポインタＰ群を複製する。これにより、複製部６０３は、変更の反映前のファイルに対応するスナップショットを残しておくことができる。
【００５８】
複製部６０３は、特定部６０２によって特定された第１の指定情報群を複製する機能を有する。具体的には、例えば、複製部６０３は、特定部６０２によって特定されたポインタＰ群を複製する。これにより、複製部６０３は、削除前のファイルに対応するスナップショットを残しておくことができる。
【００５９】
複製部６０３は、特定部６０２によって特定された第１の指定情報群を複製する機能を有する。具体的には、例えば、複製部６０３は、特定部６０２によって特定されたポインタＰ群を複製する。これにより、複製部６０３は、追加前のファイルに対応するスナップショットを残しておくことができる。なお、複製結果は、ＲＡＭ２０３、磁気ディスク２０４、光ディスク２０５などの記憶領域に記憶される。
【００６０】
更新部６０４は、検出部６０１によって反映対象データブロックが検出された場合、複製部６０３によって第１の指定情報群から複製された第２の指定情報群のうち反映対象データブロックを指定する指定情報を削除し、反映対象データブロックから反映処理された反映後のデータブロックＤを指定する指定情報を第２の指定情報群に追加する機能を有する。具体的には、例えば、更新部６０４は、検出部６０１によって変更箇所に対応するデータブロックＤが検出された場合、複製部６０３によって複製されたポインタＰ群のうち、変更箇所に対応するデータブロックＤを指定するポインタＰを削除し、複製部６０３によって複製されたポインタＰ群に、変更箇所に対応するデータブロックＤに変更を反映させた変更後のデータブロックＤを指定するポインタＰを追加する。これにより、更新部６０４は、変更後のファイルに対応するスナップショットを作成できる。
【００６１】
更新部６０４は、検出部６０１によって削除対象データブロックが検出された場合、複製部６０３によって第１の指定情報群から複製された第２の指定情報群のうち削除対象データブロックを指定する指定情報を削除する機能を有する。具体的には、例えば、更新部６０４は、検出部６０１によって削除箇所に対応するデータブロックＤが検出された場合、複製部６０３によって複製されたポインタＰ群のうち、削除箇所に対応するデータブロックＤを指定するポインタＰを削除する。これにより、更新部６０４は、削除後のファイルに対応するスナップショットを作成できる。
【００６２】
更新部６０４は、検出部６０１によって追加対象データブロックが検出されなかった場合、複製部６０３によって第１の指定情報群から複製された第２の指定情報群に追加対象データブロックを指定する指定情報を追加する機能を有する。具体的には、例えば、更新部６０４は、検出部６０１によって追加箇所に対応するデータブロックＤが検出されなかった場合、複製部６０３によって複製されたポインタＰ群に、追加箇所に対応するデータブロックＤを指定するポインタＰを追加する。これにより、更新部６０４は、追加後のファイルに対応するスナップショットを作成できる。
【００６３】
更新部６０４は、反映処理された場合、反映後のデータブロックＤの指定先を反映後のデータブロックＤに対応付けて第１のデータベースに追加する機能を有する。また、更新部６０４は、反映後のデータブロックＤについて第１の指定情報群で指定されない状態および第２の指定情報群で指定される状態と、反映後のデータブロックＤの指定先と、を対応付けて第２のデータベースに追加する機能を有する。また、更新部６０４は、第１のデータベースのうち反映対象データブロックの指定先を新たな指定先に更新する機能を有する。また、更新部６０４は、反映対象データブロックについて第１の指定情報群で指定される状態および第２の指定情報群で指定されない状態と、反映対象データブロックの新たな指定先と、を対応付けて第２のデータベースに追加する機能を有する。
【００６４】
具体的には、例えば、更新部６０４は、反映処理された場合、反映後のデータブロックＤとポインタとを対応付けてデータファイル２３０に追加する。また、更新部６０４は、反映後のデータブロックＤの各スナップショットからの指定の状態と、データファイル２３０に追加したポインタと、を対応付けて補助テーブル５００に追加する。また、更新部６０４は、反映箇所に対応するデータブロックＤに対応付けられているポインタを新たなポインタに更新する。また、更新部６０４は、反映箇所に対応するデータブロックＤの各スナップショットからの指定の状態と、データファイル２３０で更新した新たなポインタと、を対応付けて補助テーブル５００に追加する。これにより、更新部６０４は、データファイル２３０と、補助テーブル５００と、を更新できる。
【００６５】
更新部６０４は、反映処理された場合、反映後のデータブロックＤについて第１の指定情報群で指定されない状態および第２の指定情報群で指定される状態に対応付けて第２のデータベースに記憶された指定先を反映後のデータブロックＤに対応付けて第１のデータベースに追加する機能を有する。また、更新部６０４は、第１のデータベースのうち反映対象データブロックの指定先を、反映対象データブロックについて第１の指定情報群で指定される状態および第２の指定情報群で指定されない状態に対応付けて第２のデータベースに記憶された指定先に更新する機能を有する。
【００６６】
具体的には、例えば、更新部６０４は、反映処理された場合、反映後のデータブロックＤと、補助テーブル５００で反映後のデータブロックＤの各スナップショットからの指定の状態に対応付けられているポインタと、を対応付けてデータファイル２３０に追加する。また、更新部６０４は、反映処理された場合、データファイル２３０で反映箇所に対応するデータブロックＤに対応付けられているポインタを、補助テーブル５００で反映箇所に対応するデータブロックＤの各スナップショットからの指定の状態に対応付けられているポインタへと更新する。これにより、更新部６０４は、データファイル２３０を更新できる。
【００６７】
更新部６０４は、削除対象データブロックを指定する指定情報が削除された場合、第１のデータベースのうち削除対象データブロックの指定先を新たな指定先に更新する機能を有する。また、更新部６０４は、削除対象データブロックについて第１の指定情報群で指定される状態および第２の指定情報群で指定されない状態と、削除対象データブロックの新たな指定先と、を対応付けて第２のデータベースに追加する機能を有する。これにより、更新部６０４は、データファイル２３０と、補助テーブル５００と、を更新できる。
【００６８】
具体的には、例えば、更新部６０４は、削除箇所に対応するデータブロックＤを指定するポインタＰが削除された場合、データファイル２３０で削除箇所に対応するデータブロックＤに対応付けられているポインタを新たなポインタに更新する。また、更新部６０４は、削除箇所に対応するデータブロックＤの各スナップショットからの指定の状態と、データファイル２３０で更新した新たなポインタと、を対応付けて補助テーブル５００に追加する。これにより、更新部６０４は、データファイル２３０と、補助テーブル５００と、を更新できる。
【００６９】
更新部６０４は、削除対象データブロックを指定する指定情報が削除された場合、第１のデータベースのうち削除対象データブロックの指定先を、削除対象データブロックについて第１の指定情報群で指定される状態および第２の指定情報群で指定されない状態に対応付けて第２のデータベースに記憶された指定先に更新する機能を有する。
【００７０】
具体的には、例えば、更新部６０４は、削除箇所に対応するデータブロックＤを指定するポインタＰが削除された場合、データファイル２３０で削除箇所に対応するデータブロックＤに対応付けられているポインタを、削除箇所に対応するデータブロックＤの各スナップショットからの指定の状態に対応付けて補助テーブル５００に記憶されたポインタへと更新する。これにより、更新部６０４は、データファイル２３０を更新できる。
【００７１】
更新部６０４は、追加対象データブロックが追加された場合、追加対象データブロックの指定先を追加対象データブロックに対応付けて第１のデータベースに追加する機能を有する。また、更新部６０４は、追加対象データブロックについて第１の指定情報群で指定されない状態および第２の指定情報群で指定される状態と、追加対象データブロックの指定先と、を対応付けて第２のデータベースに追加する機能を有する。
【００７２】
具体的には、例えば、更新部６０４は、追加箇所に対応するデータブロックＤが追加された場合、追加箇所に対応するデータブロックＤとポインタと、を対応付けてデータファイル２３０に追加する。また、更新部６０４は、追加箇所に対応するデータブロックＤの各スナップショットからの指定の状態と、データファイル２３０に追加したポインタと、を対応付けて補助テーブル５００に追加する。これにより、更新部６０４は、データファイル２３０と、補助テーブル５００と、を更新できる。
【００７３】
更新部６０４は、追加対象データブロックが追加された場合、追加対象データブロックについて第１の指定情報群で指定されない状態および第２の指定情報群で指定される状態に対応付けて第２のデータベースに記憶された指定先を追加対象データブロックに対応付けて第１のデータベースに追加する機能を有する。
【００７４】
具体的には、例えば、更新部６０４は、追加箇所に対応するデータブロックＤが追加された場合、追加箇所に対応するデータブロックＤと、補助テーブル５００で追加箇所に対応するデータブロックＤの各スナップショットからの指定の状態に対応付けられているポインタと、を対応付けてデータファイル２３０に追加する。これにより、更新部６０４は、データファイル２３０を更新できる。
【００７５】
格納部６０５は、反映後のデータブロックＤをデータブロック集合に格納するとともに、更新部６０４による更新後の第２の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部６０５は、変更箇所に対応するデータブロックＤとは別に、変更箇所に対応するデータブロックＤに変更を反映させた変更後のデータブロックＤを、データブロックＤの集合に格納する。また、格納部６０５は、更新部６０４によって更新されたポインタＰ群を、ポインタＰ群の集合に格納する。これにより、格納部６０５は、変更前のデータブロックＤを残したまま、変更後のデータブロックＤを格納しておくことができる。また、格納部６０５は、新たに作成したスナップショットを格納しておくことができる。
【００７６】
格納部６０５は、更新部６０４による更新後の第２の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部６０５は、更新部６０４によって更新されたポインタＰ群を、ポインタＰ群の集合に格納する。これにより、格納部６０５は、新たに作成したスナップショットを格納しておくことができる。
【００７７】
格納部６０５は、追加対象データブロックをデータブロック集合に格納するとともに、更新部６０４による更新後の第２の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部６０５は、追加箇所に対応するデータブロックＤを、データブロックＤの集合に格納する。また、格納部６０５は、更新部６０４によって更新されたポインタＰ群を、ポインタＰ群の集合に格納する。これにより、格納部６０５は、追加されたデータブロックＤを格納しておくことができる。また、格納部６０５は、新たに作成したスナップショットを格納しておくことができる。
【００７８】
削除部６０６は、第１のデータベースと第２のデータベースとを参照して、データブロック集合の中で指定情報群の集合の中のいずれの指定情報でも指定されていない未指定データを、データブロック集合から削除する機能を有する。具体的には、例えば、削除部６０６は、データファイル２３０と、補助テーブル５００と、を参照して、いずれのスナップショットからも指定されていないデータブロックＤを削除する。これにより、削除部６０６は、ガーベージコレクションを実行できる。
【００７９】
（分岐可能なスナップショットの一例）
次に、図７〜図１０を用いて、分岐可能なスナップショットの一例について説明する。
【００８０】
図７〜図１０は、分岐可能なスナップショットの一例を示す説明図である。図７では、データブロックＤ１とデータブロックＤ２とを含むファイルＦについて、スナップショットＡが作成されている。スナップショットＡには、データブロックＤ１へのポインタＰ１と、データブロックＤ２へのポインタＰ２と、が含まれる。
【００８１】
図７に示すように、（１）まず、情報処理装置１００の利用者は、スナップショットＡを複製しておく。そして、情報処理装置１００の利用者は、情報処理装置１００を使用して、スナップショットＡの対象であるファイルＦのうち、データブロックＤ１の部分を変更する。ここで、情報処理装置１００は、変更前のファイルＦを対象にするスナップショットＡを残したまま、複製したスナップショットＢを変更後のファイルＦ’を対象にするスナップショットＢに更新する。具体的には、情報処理装置１００は、スナップショットＡを複製したスナップショットＢから変更前のデータブロックＤ１を指定するポインタＰ１を削除し、スナップショットＢに変更後のデータブロックＤ１’を指定するポインタＰ３を追加する。ここで、情報処理装置１００のユーザインターフェースには、スナップショットＢの対象であるファイルＦ’が表示される。
【００８２】
（２）次に、情報処理装置１００の利用者は、スナップショットＢを複製しておく。そして、情報処理装置１００の利用者は、情報処理装置１００を使用して、スナップショットＢの対象であるファイルＦ’に、データブロックＤ４を追加する。ここで、情報処理装置１００は、追加前のファイルＦ’を対象にするスナップショットＢを残したまま、複製したスナップショットＢ’を追加後のファイルＦ’’を対象にするスナップショットＢ’に更新する。具体的には、情報処理装置１００は、スナップショットＢを複製したスナップショットＢ’に、追加されたデータブロックＤ４を指定するポインタＰ４を追加する。ここで、情報処理装置１００のユーザインターフェースには、スナップショットＢ’の対象であるファイルＦ’’が表示される。
【００８３】
図８に示すように、（１）情報処理装置１００の利用者は、スナップショットＢ’の対象であるファイルＦ’’からスナップショットＡの対象であるファイルＦを復元する。具体的には、情報処理装置１００は、ユーザインターフェースに表示するデータブロックＤを、スナップショットＢ’で指定されるデータブロックＤ群から、スナップショットＡで指定されるデータブロックＤ群に変更する。ここで、情報処理装置１００のユーザインターフェースには、ファイルＦが表示される。
【００８４】
図９に示すように、（１）情報処理装置１００の利用者は、スナップショットＡを複製しておく。そして、情報処理装置１００の利用者は、情報処理装置１００を使用して、スナップショットＡの対象であるファイルＦに、データブロックＤ３を追加する。ここで、情報処理装置１００は、追加前のファイルＦを対象にするスナップショットＡを残したまま、複製したスナップショットＡ’を追加後のファイルＦ’’’を対象にするスナップショットＡ’に更新する。具体的には、情報処理装置１００は、スナップショットＡを複製したスナップショットＡ’に、追加されたデータブロックＤ３を指定するポインタＰ５を追加する。ここで、情報処理装置１００のユーザインターフェースには、ファイルＦ’’’が表示される。
【００８５】
（２）次に、情報処理装置１００の利用者は、スナップショットＡ’を複製しておく。そして、情報処理装置１００の利用者は、情報処理装置１００を使用して、スナップショットＡ’の対象であるファイルＦ’’’のうち、データブロックＤ２の部分を削除する。ここで、情報処理装置１００は、変更前のファイルＦ’’’を対象にするスナップショットＡ’を残したまま、複製したスナップショットＡ’’を変更後のファイルＦ’’’’を対象にするスナップショットＡ’’に更新する。具体的には、情報処理装置１００は、スナップショットＡ’を複製したスナップショットＡ’’から、削除されたデータブロックＤ２を指定するポインタＰ２を削除する。ここで、情報処理装置１００のユーザインターフェースには、ファイルＦ’’’’が表示される。
【００８６】
図１０に示すように、（１）情報処理装置１００の利用者は、スナップショットＡ’’の対象であるファイルＦ’’’’からスナップショットＢの対象であるファイルＦ’を復元する。具体的には、情報処理装置１００は、ユーザインターフェースに表示するデータブロックＤを、スナップショットＡ’’で指定されるデータブロックＤ群から、スナップショットＢで指定されるデータブロックＤ群に変更する。ここで、情報処理装置１００のユーザインターフェースには、ファイルＦ’が表示される。
【００８７】
（２）そして、情報処理装置１００の利用者は、スナップショットＢを複製しておく。そして、情報処理装置１００の利用者は、情報処理装置１００を使用して、スナップショットＢの対象であるファイルＦ’を変更する。そして、情報処理装置１００は、複製したスナップショットから、さらにスナップショットを分岐させていくことができる。
【００８８】
このように、情報処理装置１００は、利用者によってファイルが削除、追加、または変更される際に、スナップショットを更新することができる。なお、情報処理装置１００は、利用者によってファイルが削除、追加、または変更されるごとに、自動的にスナップショットを複製していってもよいし、利用者から複製を要求された時点のスナップショットのみを複製していってもよい。
【００８９】
また、このように、情報処理装置１００は、ファイルの状態を、スナップショットの作成時点のファイルの状態に復元することができる。このとき、情報処理装置１００は、保存されている他のスナップショットに影響を与えることがないため、スナップショットを併存させることができる。また、情報処理装置１００は、過去のスナップショットから新たに分岐させたスナップショットを作成することもできる。
【００９０】
（スナップショットを作成する際のポインタＰの具体例）
次に、図１１〜図１３を用いて、スナップショットを作成する際のポインタＰの具体例について説明する。
【００９１】
図１１〜図１３は、スナップショットを作成する際のポインタＰの具体例を示す説明図である。ここでは、スナップショットＡからスナップショットＢを作成する場合を例に挙げて、作成されたスナップショットＢのポインタＰの具体例について説明する。
【００９２】
図１１に示すように、情報処置装置１００には、ファイルに含まれるデータブロックＤ１０００〜データブロックＤ１００７が記憶されている。また、情報処理装置１００には、データブロックＤ１０００〜データブロックＤ１００７へのブロックマップとなるデータブロックＤ１００８〜データブロックＤ１０１０が記憶されている。
【００９３】
情報処理装置１００には、ブロックマップの先頭データブロックＤへのポインタＰとなり、ファイルの識別子となるポインタＰ（エントリ）が、データブロックＤ１０１１（以下、「ｉｆｉｌｅ」という）に記憶されている。また、情報処理装置１００には、スナップショットになるポインタＰが、データブロックＤ１０１２に記憶されている。スナップショットになるポインタＰは、エントリを指定するポインタＰである。例えば、スナップショットの中のＩＮＯ番号＝１００のポインタＰは、ＲＩＮＯ番号＝１００のポインタＰを指定している。このとき、磁気ディスク２０４上では、データブロックＤ１０００〜データブロックＤ１０１２は、連続した領域に記憶されている。
【００９４】
次に、図１２に示すように、情報処理装置１００は、スナップショットＡを複製して、スナップショットＢを作成する。スナップショットＢになるポインタＰは、データブロックＤ１０１３に記憶されている。スナップショットＢの作成では、スナップショットＡのポインタＰを複製し、データブロックＤやブロックマップは変更しない。そのため、情報処理装置１００は、スナップショットの複製を高速に実行できる。このとき、情報処理装置１００は、ログ構造ファイルシステムを採用しているため、磁気ディスク２０４上でデータブロックＤ１０００〜データブロックＤ１０１２と連続する領域に、新たなデータブロックＤ１０１３を記憶する。
【００９５】
そして、図１３に示すように、情報処理装置１００は、データブロックＤ１００１がデータブロックＤ１０１４に変更される場合、変更前のデータブロックＤ１００１を残したまま、変更されたデータブロックＤ１０１４を記憶する。
【００９６】
次に、情報処理装置１００は、変更されたデータブロックＤ１０１４へのポインタＰになるデータブロックＤ１０１５およびデータブロックＤ１０１６を含む新たなブロックマップを作成する。そして、情報処理装置１００は、新たなブロックマップの先頭データブロックＤ１０１６へのポインタＰとなるＲＩＮＯ番号＝１０１のエントリおよびデータブロックＤ１０１１（ｉｆｉｌｅ）に含まれるＲＩＮＯ番号＝１００のエントリを含むデータブロックＤ１０１７（新たなｉｆｉｌｅ）を作成する。次に、情報処理装置１００は、スナップショットＢのポインタＰを、新たなＲＩＮＯ番号＝１０１のエントリを指定するポインタＰに更新したスナップショットＢ’を、データブロックＤ１０１８に記憶する。
【００９７】
このとき、情報処理装置１００は、ログ構造ファイルシステムを採用しているため、磁気ディスク２０４上でデータブロックＤ１０００〜データブロックＤ１０１３と連続する領域に、新たなデータブロックＤ１０１４〜データブロックＤ１０１８を記憶する。結果として、磁気ディスク２０４上では、ファイルに含まれるデータブロックＤ、ブロックマップとなるデータブロックＤ、およびスナップショットとなるデータブロックＤは、物理的に連続した領域に記憶される。
【００９８】
このように、情報処理装置１００は、ファイルが変更される際に、スナップショットのポインタＰ群を複製して、複製したスナップショットのポインタＰ群の指定するデータブロックＤ群を変更して新たなスナップショットを作成できる。また、情報処理装置１００は、スナップショットから、スナップショットに対応するファイルを特定して、データを読み出すことができる。例えば、情報処理装置１００は、スナップショットＡのポインタから、指定先をたどっていくことで、スナップショットＡに対応するファイルに含まれるデータブロックＤを特定して、データを読み出すことができる。
【００９９】
また、情報処理装置１００は、ログ構造ファイルシステムを採用しているため、ファイルに含まれるデータブロックＤ、ブロックマップとなるデータブロックＤ、およびスナップショットとなるデータブロックＤは、記憶領域上で物理的に連続した領域に記憶される。これにより、情報処理装置１００がファイルに対する処理を実行する際の磁気ディスク２０４のリード／ライトを制御するヘッドの移動を少なくすることができる。そのため、情報処理装置における磁気ディスク２０４へのリード／ライトの性能を向上できる。
【０１００】
なお、データの読み出しについては、図１６を用いて後述する。ファイルが変更される際のデータブロックＤ、ブロックマップ、ｉｆｉｌｅ、およびスナップショットの更新については、図２０および図２１に後述する。
【０１０１】
（情報処理装置１００によるガーベージコレクションの具体例）
次に、図１４を用いて、情報処理装置１００によるガーベージコレクションの具体例について説明する。図１４では、図５に示したデータファイル２３０と補助テーブル５００とを使用してガーベージコレクションを実行する例を示す。なお、図３または図４に示したデータファイル２３０を使用してガーベージコレクションを実行してもよい。
【０１０２】
図１４は、情報処理装置１００によるガーベージコレクションの具体例を示す説明図である。情報処理装置１００は、記憶領域の残りサイズが閾値以下になると、ガーベージコレクションを実行し、不要なデータブロックＤを削除する。なお、情報処理装置１００は、ガーベージコレクションを、一定時間ごとに実行してもよい。
【０１０３】
情報処理装置１００では、複数のスナップショットが併存し、それぞれのスナップショットからデータブロックＤが指定されている。そのため、情報処理装置１００は、一つのスナップショットから指定されていないデータブロックＤであっても、他のスナップショットから指定されている場合は、削除することができない。
【０１０４】
情報処理装置１００は、データファイル２３０（および補助テーブル５００）を参照することにより、複数のスナップショットの中のいずれのスナップショットからも指定されていないデータブロックＤを特定できる。そして、情報処理装置１００は、特定したデータブロックＤを削除することで、ガーベージコレクションを実行する。
【０１０５】
以下では、情報処理装置１００が、データブロックＤ１〜データブロックＤ３を含むファイルに対応するスナップショットＡおよびスナップショットＢについてのデータファイル２３０および補助テーブル５００を記憶している場合を例に挙げる。ここで、データファイル２３０および補助テーブル５００の組み合わせによって、データブロックＤごとに各スナップショットから指定されている状態か否かが記憶されている。
【０１０６】
（１）スナップショットＡにおいて、データブロックＤ１がデータブロックＤ１’に変更される場合、データファイル２３０には、データブロックＤ１のレコードが残ったまま、データブロックＤ１’のレコードが追加される。ここで、補助テーブル５００には、データブロックＤ１の状態を示すレコードが追加される。補助テーブル５００には、データブロックＤ１’の状態を示すレコードが記憶されている。そして、データファイル２３０では、データブロックＤ１のレコードの状態記憶先として、補助テーブル５００に追加されたレコードへのポインタ「００３」が記憶される。また、データファイル２３０では、データブロックＤ１’のレコードの状態記憶先として、補助テーブル５００に記憶されているレコードへのポインタ「００２」が記憶される。
【０１０７】
（２）次に、スナップショットＡにおいて、データブロックＤ４が追加される場合、データファイル２３０には、データブロックＤ４のレコードが追加される。ここで、補助テーブル５００には、データブロックＤ４の状態を示すレコードが記憶されている。そして、データファイル２３０では、データブロックＤ４のレコードの状態記憶先として、補助テーブル５００に記憶されているレコードへのポインタ「００２」が記憶される。また、スナップショットＢにおいて、データブロックＤ１が削除される場合、補助テーブル５００には、データブロックＤ１の新たな状態を示すレコードが追加される。そして、データファイル２３０では、データブロックＤ１のレコードの状態記憶先として、補助テーブル５００に追加されたレコードへのポインタ「００４」が記憶される。
【０１０８】
（３）このとき、情報処理装置１００はガーベージコレクションを実行する。情報処理装置１００は、データファイル２３０と補助テーブル５００とを参照して、各スナップショットから指定されていないデータブロックＤ１を特定する。そして、情報処理装置１００は、データブロックＤ１を削除して、残りのデータブロックＤは削除せずに記憶領域上で整理しておく。
【０１０９】
これにより、情報処理装置１００は、不要なデータブロックＤを削除し、記憶領域を開放することができる。また、情報処理装置１００は、ガーベージコレクションの実行時に、スナップショットから指定されているデータブロックＤを削除してしまい、スナップショットからのファイルの復元ができなくなるといった不具合を回避することができる。
【０１１０】
（スナップショットのユーザインターフェースの一例）
次に、図１５を用いて、スナップショットのユーザインターフェースの一例について説明する。
【０１１１】
図１５は、スナップショットのユーザインターフェースの一例を示す説明図である。図１５に示すように、情報処理装置１００は、スナップショットの管理アプリケーションを表示する。スナップショットの管理アプリケーションには、保存されているスナップショットが木構造として表示されている。また、スナップショットの管理アプリケーションには、「保存」ボタンと「削除」ボタンと「復元」ボタンとが表示されている。
【０１１２】
「保存」ボタンは、現在のファイルの状態をスナップショットとして保存する処理を、情報処理装置１００に実行させるボタンである。「削除」ボタンは、表示されているスナップショットの中から選択されたスナップショットを削除する処理を、情報処理装置１００に実行させるボタンである。「復元」ボタンは、表示されているスナップショットの中から選択されたスナップショットの状態に復元する処理を、情報処理装置１００に実行させるボタンである。
【０１１３】
このように、情報処理装置１００の利用者は、スナップショットに基づいて、スナップショットの作成時点でのファイルの状態に復元することができる。このとき、ファイルの状態が過去の状態に復元されたとしても、スナップショットは併存することができる。また、情報処理装置１００の利用者は、現在のファイルの状態を、スナップショットとして保存しておくことができる。また、情報処理装置１００の利用者は、不要なスナップショットを削除することができる。
【０１１４】
（スナップショットからのデータ読み出し処理の処理内容）
次に、図１６を用いて、スナップショットからのデータ読み出し処理の処理内容について説明する。
【０１１５】
図１６は、データ読み出し処理の処理内容を示すフローチャートである。まず、ＣＰＵ２０１は、エントリ取り出し処理を実行する（ステップＳ１６０１）。次に、ＣＰＵ２０１は、エントリ取り出し処理によって取り出されたＩＮＯ番号のエントリが有効か否かを判定する（ステップＳ１６０２）。
【０１１６】
ここで、エントリが有効でない場合（ステップＳ１６０２：Ｎｏ）、ＣＰＵ２０１は、スナップショットにはＩＮＯ番号のファイルはないと判定して（ステップＳ１６０３）、データ読み出し処理を終了する。
【０１１７】
一方、エントリが有効である場合（ステップＳ１６０２：Ｙｅｓ）、ＣＰＵ２０１は、データブロック取り出し処理を実行する（ステップＳ１６０４）。次に、ＣＰＵ２０１は、ブロックマップ検索処理を実行する（ステップＳ１６０５）。そして、ＣＰＵ２０１は、ブロックマップ検索処理によって検索した結果、データブロックＤが存在するか否かを判定する（ステップＳ１６０６）。
【０１１８】
ここで、データブロックＤが存在しない場合（ステップＳ１６０６：Ｎｏ）、ＣＰＵ２０１は、スナップショットにはＩＮＯ番号のファイルはないと判定して（ステップＳ１６０７）、データ読み出し処理を終了する。
【０１１９】
一方、データブロックＤが存在する場合（ステップＳ１６０６：Ｙｅｓ）、ＣＰＵ２０１は、ＯＳに読み出し依頼をして（ステップＳ１６０８）、データ読み出し処理を終了する。
【０１２０】
これにより、情報処理装置１００は、スナップショットから、スナップショットに対応するファイルを特定して、データを読み出すことができる。
【０１２１】
（エントリ取り出し処理の処理内容）
次に、図１７を用いて、図１６のステップＳ１６０１で実行したエントリ取り出し処理の処理内容について説明する。
【０１２２】
図１７は、エントリ取り出し処理の処理内容を示すフローチャートである。まず、ＣＰＵ２０１は、ＩＮＯ番号のエントリが含まれるブロック番号を算出する（ステップＳ１７０１）。次に、ＣＰＵ２０１は、スナップショットにエントリが存在するか否かを判定する（ステップＳ１７０２）。ここで、エントリが存在しない場合（ステップＳ１７０２：Ｎｏ）、ＣＰＵ２０１は、エントリが無効と判定して（ステップＳ１７０３）、エントリ取り出し処理を終了する。
【０１２３】
一方、エントリが存在する場合（ステップＳ１７０２：Ｙｅｓ）、ＣＰＵ２０１は、ＯＳに読み出し依頼をしてブロック番号ｘを読み込み（ステップＳ１７０４）、エントリを取り出す（ステップＳ１７０５）。次に、ＣＰＵ２０１は、エントリが有効か否かを判定する（ステップＳ１７０６）。ここで、エントリが有効ではない場合（ステップＳ１７０６：Ｎｏ）、ＣＰＵ２０１は、エントリが無効と判定して（ステップＳ１７０３）、エントリ取り出し処理を終了する。
【０１２４】
一方、エントリが有効である場合（ステップＳ１７０６：Ｙｅｓ）、ＣＰＵ２０１は、エントリが有効と判定して（ステップＳ１７０７）、エントリ取り出し処理を終了する。
【０１２５】
（データブロック取り出し処理の処理内容）
次に、図１８を用いて、図１６のステップＳ１６０４で実行したデータブロック取り出し処理の処理内容について説明する。
【０１２６】
図１８は、データブロック取り出し処理の処理内容を示すフローチャートである。まず、ＣＰＵ２０１は、ｉｆｉｌｅの中で、ＲＩＮＯ番号のエントリが含まれるブロック番号ｘを算出する（ステップＳ１８０１）。次に、ＣＰＵ２０１は、ＯＳに読み出し依頼をしてブロック番号ｘのデータブロックＤを読み込み（ステップＳ１８０２）、ＲＩＮＯ番号のエントリを取り出す（ステップＳ１８０３）。そして、ＣＰＵ２０１は、データブロック取り出し処理を終了する。
【０１２７】
（ブロックマップ検索処理の処理内容）
次に、図１９を用いて、図１６のステップＳ１６０５で実行したブロックマップ検索処理の処理内容について説明する。
【０１２８】
図１９は、ブロックマップ検索処理の処理内容を示すフローチャートである。まず、ＣＰＵ２０１は、ＲＩＮＯ番号のメタ情報からブロックマップの段数を取得する（ステップＳ１９０１）。次に、ＣＰＵ２０１は、ＲＩＮＯ番号のメタ情報から先頭ブロックの番号を取得し、取得した先頭ブロックの番号をｘと設定する（ステップＳ１９０２）。そして、ＣＰＵ２０１は、ＯＳに読み出し依頼をして、ｘ番のブロックを読み込む（ステップＳ１９０３）。
【０１２９】
次に、ＣＰＵ２０１は、指定オフセットのエントリを取り出す（ステップＳ１９０４）。そして、ＣＰＵ２０１は、取り出したエントリが有効か否かを判定する（ステップＳ１９０５）。ここで、エントリが有効ではない場合（ステップＳ１９０５：Ｎｏ）、ＣＰＵ２０１は、ブロックマップ検索処理を終了する。
【０１３０】
一方、エントリが有効である場合（ステップＳ１９０５：Ｙｅｓ）、ＣＰＵ２０１は、段数を一段進め（ステップＳ１９０６）、最後の段か否かを判定する（ステップＳ１９０７）。ここで、最後の段でない場合（ステップＳ１９０７：Ｎｏ）、ＣＰＵ２０１は、取り出したエントリの中のブロック番号をｘに設定し（ステップＳ１９０８）、ステップＳ１９０４に戻る。
【０１３１】
一方、最後の段である場合（ステップＳ１９０７：Ｙｅｓ）、ＣＰＵ２０１は、取り出したエントリの内容はブロック番号であると判定して（ステップＳ１９０９）、ブロックマップ検索処理を終了する。
【０１３２】
（データ書き込み処理の処理内容）
次に、図２０および図２１を用いて、データ書き込み処理の処理内容について説明する。
【０１３３】
図２０および図２１は、データ書き込み処理の処理内容を示すフローチャートである。図２０において、まず、ＣＰＵ２０１は、スナップショットのＩＮＯ番号についてエントリ取り出し処理を実行する（ステップＳ２００１）。次に、ＣＰＵ２０１は、取り出したエントリが有効か否かを判定する（ステップＳ２００２）。
【０１３４】
ここで、エントリが有効ではない場合（ステップＳ２００２：Ｎｏ）、ＣＰＵ２０１は、データブロックＤに変更を反映し、ブロックマップを更新する（ステップＳ２００３）。次に、ＣＰＵ２０１は、データファイル２３０での変更を反映したデータブロックＤに関するレコードを更新し、補助テーブル５００を更新する。
【０１３５】
具体的には、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００にあれば、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００にあるレコードへのポインタに更新する。一方、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００になければ、補助テーブル５００に、当該指定の状態を示すレコードを追加する。そして、ＣＰＵ２０１は、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００に追加したレコードへのポインタに更新する（ステップＳ２００４）。そして、ＣＰＵ２０１は、データ書き込み処理を終了する。
【０１３６】
一方、エントリが有効である場合（ステップＳ２００２：Ｙｅｓ）、ＣＰＵ２０１は、データブロック取り出し処理を実行する（ステップＳ２００５）。次に、ＣＰＵ２０１は、取り出したデータブロックＤのＲＩＮＯ番号を他のスナップショットと共有しているか否かを判定する（ステップＳ２００６）。ここで、共有していない場合（ステップＳ２００６：Ｎｏ）、ＣＰＵ２０１は、ステップＳ２００３に移行する。
【０１３７】
一方、共有している場合（ステップＳ２００６：Ｙｅｓ）、ＣＰＵ２０１は、ＲＩＮＯを更新する（ステップＳ２００７）。次に、ＣＰＵ２０１は、ブロックマップ検索処理を実行し（ステップＳ２００８）、図２１のステップＳ２１０１に移行する。
【０１３８】
図２１において、ＣＰＵ２０１は、データブロックＤが存在するか否かを判定する（ステップＳ２１０１）。ここで、データブロックＤが存在しない場合（ステップＳ２１０１：Ｎｏ）、ＣＰＵ２０１は、データブロックＤを追加し、ブロックマップを更新する（ステップＳ２１０２）。次に、ＣＰＵ２０１は、追加したデータブロックＤに関するレコードをデータファイル２３０に追加し、補助テーブル５００を更新する。
【０１３９】
具体的には、ＣＰＵ２０１は、追加したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００にあれば、追加したデータブロックＤと補助テーブル５００にあるレコードへのポインタとを関連付けたレコードをデータファイル２３０に追加する。一方、ＣＰＵ２０１は、追加したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００になければ、補助テーブル５００に、当該指定の状態を示すレコードを追加する。そして、ＣＰＵ２０１は、追加したデータブロックＤと補助テーブル５００に追加したレコードへのポインタとを関連付けたレコードをデータファイル２３０に追加し（ステップＳ２１０３）、データ書き込み処理を終了する。
【０１４０】
一方、データブロックＤが存在する場合（ステップＳ２１０１：Ｙｅｓ）、ＣＰＵ２０１は、データファイル２３０と補助テーブル５００を参照し（ステップＳ２１０４）、データブロックＤを他のスナップショットと共有しているか否かを判定する（ステップＳ２１０５）。
【０１４１】
ここで、共有していない場合（ステップＳ２１０５：Ｎｏ）、ＣＰＵ２０１は、データブロックＤに変更を反映し、ブロックマップを更新する（ステップＳ２１０６）。次に、ＣＰＵ２０１は、データファイル２３０での変更を反映したデータブロックＤに関するレコードを更新し、補助テーブル５００を更新する。
【０１４２】
具体的には、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００にあれば、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００にあるレコードへのポインタに更新する。一方、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００になければ、補助テーブル５００に、当該指定の状態を示すレコードを追加する。そして、ＣＰＵ２０１は、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００に追加したレコードへのポインタに更新し（ステップＳ２１０７）、データ書き込み処理を終了する。
【０１４３】
一方、共有している場合（ステップＳ２１０５：Ｙｅｓ）、ＣＰＵ２０１は、データブロックＤを残したまま、データブロックＤに変更を反映した反映後のデータブロックＤを作成し、ブロックマップを更新する（ステップＳ２１０８）。次に、ＣＰＵ２０１は、変更を反映したデータブロックＤに関するレコードをデータファイル２３０に追加し、データファイル２３０での複製元のデータブロックＤに関するレコードを更新し、補助テーブル５００を更新する。
【０１４４】
具体的には、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００にあれば、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００にあるレコードへのポインタに更新する。一方、ＣＰＵ２０１は、変更を反映したデータブロックＤの各スナップショットからの指定の状態を示すレコードが補助テーブル５００になければ、補助テーブル５００に、当該指定の状態を示すレコードを追加する。そして、ＣＰＵ２０１は、データファイル２３０での変更を反映したデータブロックＤのポインタを、補助テーブル５００に追加したレコードへのポインタに更新し（ステップＳ２１０９）、データ書き込み処理を終了する。
【０１４５】
これにより、情報処理装置１００は、ファイルに変更があった場合、変更後のファイルに対応するデータブロックＤを記憶し、新たなブロックマップと新たなエントリとを作成し、データファイル２３０と補助テーブル５００とを更新することができる。また、情報処理装置１００は、ファイルに削除があった場合、新たなブロックマップと新たなエントリとを作成し、データファイル２３０と補助テーブル５００とを更新することができる。また、情報処理装置１００は、ファイルに追加があった場合、ファイルに追加されるデータブロックＤを記憶し、新たなブロックマップと新たなエントリとを作成し、データファイル２３０と補助テーブル５００とを更新することができる。
【０１４６】
以上説明したように、情報処理装置１００は、ファイルに変更があった場合、ファイルの変更箇所に対応するデータブロックＤを残したまま、変更箇所に対応するデータブロックＤに変更を反映させた変更後のデータブロックＤを記憶しておく。そして、情報処理装置１００は、変更前のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを残したまま、変更後のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを記憶しておく。
【０１４７】
また、情報処理装置１００は、ファイルに追加があった場合、ファイルの追加箇所に対応するデータブロックＤを記憶しておく。そして、情報処理装置１００は、追加前のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを残したまま、追加後のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを記憶しておく。
【０１４８】
また、情報処理装置１００は、ファイルに削除があった場合、ファイルの削除箇所に対応するデータブロックＤを残しておく。そして、情報処理装置１００は、削除前のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを残したまま、削除後のファイルに含まれるデータブロックＤ群を指定するポインタＰ群になるスナップショットを記憶しておく。
【０１４９】
そのため、情報処理装置１００は、スナップショットを複数併存させることができる。結果として、情報処理装置１００は、ファイルを、いずれのスナップショットの状態にも切り替えることができる。また、情報処理装置１００は、時系列に沿った一連のスナップショットを保持したまま、時系列に沿った一連のスナップショットのどの位置からでも新たに分岐させたスナップショットを作成できる。
【０１５０】
また、スナップショットはそれぞれ独立しており、他のスナップショットが操作されても影響を受けない。そのため、情報処理装置１００は、ファイルを、いずれかのスナップショットの状態に復元しても、復元前のスナップショットの状態に戻すことができる。また、情報処理装置１００は、ファイルを、分岐した並列する複数のスナップショットのそれぞれの状態に切り替えて使用することができる。
【０１５１】
また、情報処理装置１００は、データブロックＤごとに、すべてのスナップショットのそれぞれから指定されているか否かを記憶しておき、ガーベージコレクションの実行の際、いずれのスナップショットからも指定されていないデータブロックＤを削除する。そのため、情報処理装置１００は、ガーベージコレクションを実行しても、スナップショットに不具合を生じることがない。
【０１５２】
また、情報処理装置１００は、ログ構造ファイルシステムを採用しているため、ファイルへの書き込みがあると、変更部分をログとして記憶領域となるディスク上の連続した領域に書き込む。そのため、ログ構造でないファイルシステムと比して、ランダムライトにおいても磁気ディスク２０４に対するヘッドの移動が少なくなり、ランダムライトがシーケンシャルライトに近い性能を発揮できる。
【０１５３】
なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。
【０１５４】
上述した実施の形態に関し、さらに以下の付記を開示する。
【０１５５】
（付記１）格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う制御部を備え、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理装置。
【０１５６】
（付記２）データブロック集合のデータブロックごとに、指定先を記憶する第１のデータベースと、
前記指定先ごとに、指定元の状態を記憶する第２のデータベースと、を備え、
前記制御部は、
前記更新処理により削除される削除データ部分が存在する場合には、前記第１のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、前記削除データ部分を格納していたデータブロックについて前記第１のポインタ群情報で指定される状態および前記第２のポインタ群情報で指定されない状態と、前記削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて前記第２のデータベースに追加し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックの指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第１のデータベースに追加し、前記追加データ部分の格納先となったデータブロックについて前記第１のポインタ群情報で指定されない状態および前記第２のポインタ群情報で指定される状態と、前記追加データ部分の格納先となったデータブロックの指定先と、を対応付けて前記第２のデータベースに追加することを特徴とする付記１に記載の情報処理装置。
【０１５７】
（付記３）データブロック集合のデータブロックごとに、指定先を記憶する第１のデータベースと、
前記指定先ごとに、指定元の状態を記憶する第２のデータベースと、を備え、
前記制御部は、
前記更新処理により削除される削除データ部分が存在する場合には、前記第１のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を、前記削除データ部分を格納していたデータブロックについて前記第１のポインタ群情報で指定される状態および前記第２のポインタ群情報で指定されない状態に対応付けて前記第２のデータベースに記憶された指定先に更新し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックについて前記第１のポインタ群情報で指定されない状態および前記第２のポインタ群情報で指定される状態に対応付けて前記第２のデータベースに記憶された指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第１のデータベースに追加することを特徴とする付記１に記載の情報処理装置。
【０１５８】
（付記４）前記制御部は、
前記第１のデータベースと前記第２のデータベースとを参照して、前記データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、前記データブロック集合から削除することを特徴とする付記２または３に記載の情報処理装置。
【０１５９】
（付記５）コンピュータが、
格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行し、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理方法。
【０１６０】
（付記６）コンピュータに、
格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第１のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第２のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行させ、
前記第２のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第２のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第２のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、
ことを特徴とする情報処理プログラム。
【符号の説明】
【０１６１】
１００  情報処理装置
６００  制御部
６０１  検出部
６０２  特定部
６０３  複製部
６０４  更新部
６０５  格納部
６０６  削除部
【図１】
2013073403.tif 000003
【図２】
2013073403.tif 000004
【図３】
2013073403.tif 000005
【図４】
2013073403.tif 000006
【図５】
2013073403.tif 000007
【図６】
2013073403.tif 000008
【図７】
2013073403.tif 000009
【図８】
2013073403.tif 000010
【図９】
2013073403.tif 000011
【図１０】
2013073403.tif 000012
【図１１】
2013073403.tif 000013
【図１２】
2013073403.tif 000014
【図１３】
2013073403.tif 000015
【図１４】
2013073403.tif 000016
【図１５】
2013073403.tif 000017
【図１６】
2013073403.tif 000018
【図１７】
2013073403.tif 000019
【図１８】
2013073403.tif 000020
【図１９】
2013073403.tif 000021
【図２０】
2013073403.tif 000022
【図２１】
2013073403.tif 000023