格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う制御部を備え、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理装置。データブロック集合のデータブロックごとに、指定先を記憶する第1のデータベースと、前記指定先ごとに、指定元の状態を記憶する第2のデータベースと、を備え、前記制御部は、前記更新処理により削除される削除データ部分が存在する場合には、前記第1のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、前記削除データ部分を格納していたデータブロックについて前記第1のポインタ群情報で指定される状態および前記第2のポインタ群情報で指定されない状態と、前記削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて前記第2のデータベースに追加し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックの指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第1のデータベースに追加し、前記追加データ部分の格納先となったデータブロックについて前記第1のポインタ群情報で指定されない状態および前記第2のポインタ群情報で指定される状態と、前記追加データ部分の格納先となったデータブロックの指定先と、を対応付けて前記第2のデータベースに追加することを特徴とする請求項1に記載の情報処理装置。前記制御部は、前記第1のデータベースと前記第2のデータベースとを参照して、前記データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、前記データブロック集合から削除することを特徴とする請求項2に記載の情報処理装置。コンピュータが、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行し、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理方法。コンピュータに、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行させ、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理プログラム。しかしながら、上述した従来技術では、作成されるスナップショットは時系列に沿った一連のスナップショットいわゆる読み込みのみのスナップショットである。そのため、過去のファイルやディレクトリは取り出しのみが可能となる。したがって、ファイルやディレクトリの状態を復元した状態と復元する前の状態とで切り替えて使用することができない。本発明は、1つの側面では、ファイルやディレクトリなどのデータについて、処理前の状態と処理後の状態とで切り替えて使用することを可能とすることを目的とする。本発明の一側面によれば、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う情報処理装置、情報処理方法、および情報処理プログラムが提案される。本発明の一側面によれば、ファイルやディレクトリなどのデータについて、処理前の状態と処理後の状態とで切り替えて使用することができる。以下に添付図面を参照して、この発明にかかる情報処理装置、情報処理方法、および情報処理プログラムの実施の形態を詳細に説明する。情報処理装置は、リソース記憶領域の操作方法として、ログ構造ファイルシステムを採用している。情報処理装置は、ログ構造ファイルシステムでは、記憶領域をデータブロックに分割しており、1または複数のデータブロックを使用してデータ例えばファイルやディレクトリを記憶している。また、情報処理装置は、情報処理装置の記憶するファイルが変更される場合、ファイルに含まれる変更を反映させる対象のデータブロック以下、反映対象データブロックというを残しておく。そして、情報処理装置は、反映対象データブロックとは別に、反映対象データブロックに変更を反映させた反映後のデータブロックを新たに記憶する。ここで、情報処理装置は、ログ構造ファイルシステムを採用しつつ、複数のスナップショットを作成して併存できるようにする。また、情報処理装置は、1つのスナップショットから複数のスナップショットを分岐させて作成できるようにする。そのために、情報処理装置は、ファイルに含まれるデータブロック群を指定するポインタ群を、ファイルに対応するスナップショットとして保存する。そして、情報処理装置は、ファイルが変更される場合、変更前のファイルに対応するスナップショットを残したまま、変更後のファイルに対応するスナップショットを新たに記憶する。新たなスナップショットとは、変更前のファイルに対応するスナップショットのうち、反映対象データブロックを指定するポインタを反映後のデータブロックを指定するポインタに置き換えた、スナップショットである。このように、情報処理装置は、複数のスナップショットを併存させることができる。また、情報処理装置は、不要なデータブロックを削除し、リソースを解放するガーベージコレクションを実行する。情報処理装置は、ガーベージコレクションの実行の際に、保存しているいずれのスナップショットでも指定していないデータブロックを削除する。これにより、情報処理装置は、ログ構造ファイルシステムに対して、分岐が可能なスナップショットを作成することができる。スナップショットの作成の内容まず、図1を用いて、スナップショットの作成の内容について説明する。図1は、スナップショットの作成の内容を示す説明図である。ここで、情報処理装置100の記憶領域101には、ファイルFに含まれるデータブロックD1~データブロックD3が記憶されている。また、情報処理装置100の記憶領域102には、ファイルFに含まれるデータブロックD群を指定するポインタP群を保存したスナップショットAが記憶されている。スナップショットAには、データブロックD1へのポインタP1と、データブロックD2へのポインタP2と、データブロックD3へのポインタP3と、が含まれている。情報処理装置100のユーザインターフェースでは、データブロックD1~データブロックD3を組み合わせたファイルFが表示される。そして、情報処理装置100の利用者は、ファイルFに対して、データの削除、追加、または変更の処理を実行する。1まず、情報処理装置100は、スナップショットAを複製し、ファイルFを対象にするスナップショットBを作成する。スナップショットBには、データブロックD1へのポインタP1と、データブロックD2へのポインタP2と、データブロックD3へのポインタP3と、が含まれている。2次に、スナップショットBからファイルFの内容を変更する。情報処理装置100は、データブロックD1が変更される際に、変更前のデータブロックD1とは別に、変更後のデータブロックD1’を記憶しておく。3次に、情報処理装置100は、複製したスナップショットBのうち、変更前のデータブロックD1へのポインタP1を削除する。また、情報処理装置100は、複製したスナップショットBに、新たに変更後のデータブロックD1’へのポインタP4を追加する。これにより、変更後のファイルF’に含まれるデータブロックD群を指定するポインタP群となるスナップショットB’が作成され、スナップショットAとスナップショットB’とが併存する。結果として、利用者は、スナップショットAのポインタPが指定するデータブロックDを組み合わせれば変更前のファイルFを使用することができ、スナップショットB’のポインタPが指定するデータブロックDを組み合わせれば変更後のファイルF’を使用することができる。このように、利用者は、スナップショットが併存することによって、変更前後のファイルを切り替えて使用することができる。また、利用者は、スナップショットAとスナップショットB’を残したまま、さらに、スナップショットAからスナップショットB’とは異なるスナップショットを作成することができる。情報処理装置100のハードウェア構成例図2は、実施の形態にかかる情報処理装置100のハードウェア構成例を示すブロック図である。図2において、情報処理装置100は、CPUCentralProcessingUnit201と、ROMRead‐OnlyMemory202と、RAMRandomAccessMemory203と、磁気ディスク204と、光ディスク205と、ディスプレイ206と、I/FInterface207と、キーボード208と、マウス209と、スキャナ210と、プリンタ211と、を備えている。また、各構成部はバス200によってそれぞれ接続されている。ここで、CPU201は、情報処理装置100の全体の制御を司る。ROM202は、ブートプログラムなどのプログラムを記憶している。RAM203は、CPU201のワークエリアとして使用される。磁気ディスク204は、CPU201の制御によりデータのリード/ライトが行われる記憶媒体である。磁気ディスク204は、CPU201の制御により書き込まれたデータを記憶する。例えば、磁気ディスク204に、ログ構造ファイルシステムが作成され、データブロックDが記憶される。また、磁気ディスク204は、情報処理装置100によるガーベージコレクションの実行の際に、情報処理装置100に参照されるデータファイル230を記憶している。データファイル230の記憶内容については、図3~図5を用いて説明する。光ディスク205は、CPU201の制御によりデータのリード/ライトが行われる記憶媒体である。光ディスク205は、CPU201の制御により書き込まれたデータを記憶したり、光ディスク205に記憶されたデータをコンピュータに読み取らせたりする。ディスプレイ206は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ206は、例えば、CRT、TFT液晶ディスプレイ、プラズマディスプレイなどを採用することができる。インターフェース以下、I/Fと略する。207は、通信回線を通じてLANLocalAreaNetwork、WANWideAreaNetwork、インターネットなどのネットワーク212に接続され、このネットワーク212を介して他の装置に接続される。そして、I/F207は、ネットワーク212と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F207には、例えばモデムやLANアダプタなどを採用することができる。キーボード208は、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。また、タッチパネル式の入力パッドやテンキーなどであってもよい。マウス209は、カーソルの移動や範囲選択、あるいはウィンドウの移動やサイズの変更などを行う。ポインティングデバイスとして同様に機能を備えるものであれば、トラックボールやジョイスティックなどであってもよい。スキャナ210は、画像を光学的に読み取り、情報処理装置100内に画像データを取り込む。なお、スキャナ210は、OCROpticalCharacterReader機能を持たせてもよい。また、プリンタ211は、画像データや文書データを印刷する。プリンタ211には、例えば、レーザプリンタやインクジェットプリンタを採用することができる。また、情報処理装置100は、ストレージアダプタによって接続された外部の記憶装置にログ構造ファイルシステムを作成してもよい。データファイル230の具体例1次に、図3を用いて、磁気ディスク204に記憶されているデータファイル230の具体例1について説明する。図3は、データファイル230の具体例1を示す説明図である。図3に示すように、データファイル230は、スナップショットごとに作成される。また、データファイル230は、ブロック番号項目のそれぞれに対応付けて、作成CNOCheckpointNumber項目と、削除CNO項目と、を有し、データブロックDの作成ごとにレコードを構成し、データブロックDの削除ごとにレコードを更新する。ブロック番号項目には、データブロックDの作成順に付与された、データブロックDを特定する識別子が記憶される。作成CNO項目には、データブロックDが作成されたときのCNOが記憶される。削除CNO項目には、データブロックDが削除されたときのCNOが記憶される。CNOは、データブロックDを変更、生成、または削除したときに、インクリメントされるカウンタである。データファイル230の具体例2次に、図4を用いて、磁気ディスク204に記憶されているデータファイル230の具体例2について説明する。図4は、データファイル230の具体例2を示す説明図である。図4に示すように、データファイル230は、ブロック番号項目のそれぞれに対応付けて、作成CNO項目と、スナップショットごとの削除CNO項目ここでは、スナップショットA-削除CNO項目とスナップショットB-削除CNO項目と、を有する。そして、データファイル230は、データブロックDの作成ごとにレコードを構成し、データブロックDの削除ごとにレコードを更新する。また、スナップショットごとの削除CNO項目は、スナップショットが作成されるごとに項目を増加させる。ブロック番号項目には、データブロックDの作成順に付与された、データブロックDを特定する識別子が記憶される。作成CNO項目には、データブロックDが作成されたときのCNOが記憶される。スナップショットA-削除CNO項目には、スナップショットAにおいて、データブロックDが削除されたときのCNOが記憶される。スナップショットB-削除CNO項目には、スナップショットBにおいて、データブロックDが削除されたときのCNOが記憶される。データファイル230の具体例3次に、図5を用いて、磁気ディスク204に記憶されているデータファイル230の具体例3について説明する。図5に示すように、磁気ディスク204には、データファイル230と、データファイル230を補助する補助テーブル500と、が記憶されている。図5は、データファイル230の具体例3を示す説明図である。データファイル230は、ブロック番号項目のそれぞれに対応付けて、作成CNO項目と、状態記憶先項目と、を有し、データブロックDの作成ごとにレコードを構成し、データブロックDの削除ごとにレコードを更新する。ブロック番号項目には、データブロックDの作成順に付与された、データブロックDを特定する識別子が記憶される。作成CNO項目には、データブロックDが作成されたときのCNOが記憶される。状態記憶先項目には、各スナップショットにおいてデータブロックDが指定されている状態か否かを記憶する補助テーブル500のレコードへのポインタが記憶される。また、図5に示すように、補助テーブル500は、ポインタ項目のそれぞれに対応付けて、指定状態項目を有し、データブロックDの生成ごとにレコードを構成し、データブロックDの削除ごとにレコードを更新する。ポインタ項目には、データブロックDの生成または削除ごとに付与された識別子が記憶される。指定状態項目には、データブロックDが生成または削除された時点で、各スナップショットにおいてデータブロックDが指定されている状態か否かが記憶される。このように、補助テーブル500を使用することでデータファイル230と補助テーブル500とが固定列となり、図3または図4に示したデータファイル230の場合に比して、データファイル230と補助テーブル500との作成および更新が容易になる。また、スナップショットの複製時に、データファイル230を複製しなくてよいため、情報処理装置100の処理量が削減される。情報処理装置100の機能的構成例次に、図6を用いて、情報処理装置100の機能的構成例について説明する。図6は、情報処理装置100の機能的構成例を示すブロック図である。情報処理装置100は、検出部601と、特定部602と、複製部603と、更新部604と、格納部605と、削除部606と、を含む構成である。この制御部600となる機能検出部601~削除部606は、具体的には、例えば、図2に示したROM202、RAM203、磁気ディスク204、光ディスク205などの記憶装置に記憶されたプログラムをCPU201に実行させることにより、または、I/F207により、その機能を実現する。制御部600は、複数のデータブロックDに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の複数のデータブロックDのそれぞれを示す複数のポインタPを含む第1のポインタ群情報と、更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタPを含む第2のポインタ群情報とが記憶装置に記憶された状態となるように記憶制御を行う機能を有する。ここで、データとは、例えば、利用者によって更新処理されたファイルである。ポインタ群情報とは、1つのファイルに含まれるデータブロックD群を指定するポインタP群であり、上述したスナップショットである。第2のポインタ群情報とは、更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックDを示すポインタPを含まないスナップショットである。また、第2のポインタ群情報とは、更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックDを示すポインタPを含むスナップショットである。また、第2のポインタ群情報とは、更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックDを示すポインタPを含むスナップショットである。以下では、削除データ部分を格納していたデータブロックDを削除対象データブロックという。また、追加データ部分の格納先となったデータブロックDを追加対象データブロックという。また、更新処理により変更されたデータブロックDを反映対象データブロックという。また、制御部600は、更新処理により削除される削除データ部分が存在する場合には、第1のデータベースのうち削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、削除データ部分を格納していたデータブロックについて第1のポインタ群情報で指定される状態および第2のポインタ群情報で指定されない状態と、削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて第2のデータベースに追加する機能を有する。制御部600は、更新処理により追加される追加データ部分が存在する場合には、新たに追加データ部分の格納先となったデータブロックの指定先を追加データ部分の格納先となったデータブロックに対応付けて第1のデータベースに追加し、追加データ部分の格納先となったデータブロックについて第1のポインタ群情報で指定されない状態および第2のポインタ群情報で指定される状態と、追加データ部分の格納先となったデータブロックの指定先と、を対応付けて第2のデータベースに追加する機能を有する。制御部600は、更新処理により削除される削除データ部分が存在する場合には、第1のデータベースのうち削除データ部分を格納していたデータブロックの指定先を、削除データ部分を格納していたデータブロックについて第1のポインタ群情報で指定される状態および第2のポインタ群情報で指定されない状態に対応付けて第2のデータベースに記憶された指定先に更新する機能を有する。制御部600は、更新処理により追加される追加データ部分が存在する場合には、新たに追加データ部分の格納先となったデータブロックについて第1のポインタ群情報で指定されない状態および第2のポインタ群情報で指定される状態に対応付けて第2のデータベースに記憶された指定先を追加データ部分の格納先となったデータブロックに対応付けて第1のデータベースに追加する機能を有する。また、制御部600は、第1のデータベースと第2のデータベースとを参照して、データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、データブロック集合から削除する機能を有する。以下では、制御部600となる機能検出部601~削除部606について、具体的に説明する。検出部601は、データブロック集合の中から反映対象データブロックを検出する機能を有する。ここで、データブロック集合とは、情報処理装置100により、RAM203、磁気ディスク204、光ディスク205などの記憶領域に記憶されているデータブロックDの集合である。反映対象データブロックとは、利用者によってファイルで変更された変更箇所に対応するデータブロックDであり、変更を反映させる対象になるデータブロックDである。具体的には、例えば、検出部601は、データブロックDの集合の中から、利用者によってファイルで変更された変更箇所に対応するデータブロックDを検出する。これにより、検出部601は、反映対象データブロックを検出できる。検出部601は、データブロック集合の中から削除対象データブロックを検出する機能を有する。ここで、削除対象データブロックとは、利用者によってファイルから削除された削除箇所に対応するデータブロックDである。具体的には、例えば、検出部601は、データブロックDの集合の中から、利用者によってファイルから削除された削除箇所に対応するデータブロックDを検出する。これにより、検出部601は、削除対象データブロックを検出できる。検出部601は、データブロック集合の中から追加対象データブロックを検出する機能を有する。ここで、追加対象データブロックとは、利用者によってファイルに追加された追加箇所に対応するデータブロックDである。具体的には、例えば、検出部601は、データブロックDの集合の中から、利用者によってファイルに追加された追加箇所に対応するデータブロックDを検出する。なお、検出されたデータブロックDは、RAM203、磁気ディスク204、光ディスク205などの記憶領域に記憶される。これにより、検出部601は、追加対象データブロックがデータブロックDの集合の中にないことを検出できる。特定部602は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、反映対象データブロックを含むデータブロック群を指定する第1の指定情報群を特定する機能を有する。ここで、データブロック集合のデータブロック群とは、情報処理装置100が記憶しているデータブロックDの集合の中で、1つのファイルに含まれるデータブロックD群である。データブロック群を指定する指定情報群とは、1つのファイルに含まれるデータブロックD群を指定するポインタP群の情報であり、上述したポインタ群情報であり、上述したスナップショットである。具体的には、例えば、特定部602は、変更箇所に対応するデータブロックDを含む、利用者によって変更された変更箇所があるファイルに含まれるデータブロックD群を指定するポインタP群を特定する。これにより、特定部602は、利用者により変更された変更箇所があるファイルに対応するスナップショットを特定できる。特定部602は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、削除対象データブロックを含むデータブロック群を指定する第1の指定情報群を特定する機能を有する。具体的には、例えば、特定部602は、削除箇所に対応するデータブロックDを含む、利用者によって削除された削除箇所があるファイルに含まれるデータブロックD群を指定するポインタP群を特定する。これにより、特定部602は、利用者により削除された削除箇所があるファイルに対応するスナップショットを特定できる。特定部602は、データブロック集合の中のデータブロック群ごとにデータブロック群を指定する指定情報群の集合の中から、追加対象データブロック群を指定する第1の指定情報群を特定する機能を有する。具体的には、例えば、特定部602は、追加箇所に対応するデータブロックDを含まない、利用者によって追加される追加箇所があるファイルに含まれるデータブロックD群を指定するポインタP群を特定する。なお、特定結果は、RAM203、磁気ディスク204、光ディスク205などの記憶領域に記憶される。これにより、特定部602は、利用者により追加される追加箇所があるファイルに対応するスナップショットを特定できる。複製部603は、特定部602によって特定された第1の指定情報群を複製する機能を有する。具体的には、例えば、複製部603は、特定部602によって特定されたポインタP群を複製する。これにより、複製部603は、変更の反映前のファイルに対応するスナップショットを残しておくことができる。複製部603は、特定部602によって特定された第1の指定情報群を複製する機能を有する。具体的には、例えば、複製部603は、特定部602によって特定されたポインタP群を複製する。これにより、複製部603は、削除前のファイルに対応するスナップショットを残しておくことができる。複製部603は、特定部602によって特定された第1の指定情報群を複製する機能を有する。具体的には、例えば、複製部603は、特定部602によって特定されたポインタP群を複製する。これにより、複製部603は、追加前のファイルに対応するスナップショットを残しておくことができる。なお、複製結果は、RAM203、磁気ディスク204、光ディスク205などの記憶領域に記憶される。更新部604は、検出部601によって反映対象データブロックが検出された場合、複製部603によって第1の指定情報群から複製された第2の指定情報群のうち反映対象データブロックを指定する指定情報を削除し、反映対象データブロックから反映処理された反映後のデータブロックDを指定する指定情報を第2の指定情報群に追加する機能を有する。具体的には、例えば、更新部604は、検出部601によって変更箇所に対応するデータブロックDが検出された場合、複製部603によって複製されたポインタP群のうち、変更箇所に対応するデータブロックDを指定するポインタPを削除し、複製部603によって複製されたポインタP群に、変更箇所に対応するデータブロックDに変更を反映させた変更後のデータブロックDを指定するポインタPを追加する。これにより、更新部604は、変更後のファイルに対応するスナップショットを作成できる。更新部604は、検出部601によって削除対象データブロックが検出された場合、複製部603によって第1の指定情報群から複製された第2の指定情報群のうち削除対象データブロックを指定する指定情報を削除する機能を有する。具体的には、例えば、更新部604は、検出部601によって削除箇所に対応するデータブロックDが検出された場合、複製部603によって複製されたポインタP群のうち、削除箇所に対応するデータブロックDを指定するポインタPを削除する。これにより、更新部604は、削除後のファイルに対応するスナップショットを作成できる。更新部604は、検出部601によって追加対象データブロックが検出されなかった場合、複製部603によって第1の指定情報群から複製された第2の指定情報群に追加対象データブロックを指定する指定情報を追加する機能を有する。具体的には、例えば、更新部604は、検出部601によって追加箇所に対応するデータブロックDが検出されなかった場合、複製部603によって複製されたポインタP群に、追加箇所に対応するデータブロックDを指定するポインタPを追加する。これにより、更新部604は、追加後のファイルに対応するスナップショットを作成できる。更新部604は、反映処理された場合、反映後のデータブロックDの指定先を反映後のデータブロックDに対応付けて第1のデータベースに追加する機能を有する。また、更新部604は、反映後のデータブロックDについて第1の指定情報群で指定されない状態および第2の指定情報群で指定される状態と、反映後のデータブロックDの指定先と、を対応付けて第2のデータベースに追加する機能を有する。また、更新部604は、第1のデータベースのうち反映対象データブロックの指定先を新たな指定先に更新する機能を有する。また、更新部604は、反映対象データブロックについて第1の指定情報群で指定される状態および第2の指定情報群で指定されない状態と、反映対象データブロックの新たな指定先と、を対応付けて第2のデータベースに追加する機能を有する。具体的には、例えば、更新部604は、反映処理された場合、反映後のデータブロックDとポインタとを対応付けてデータファイル230に追加する。また、更新部604は、反映後のデータブロックDの各スナップショットからの指定の状態と、データファイル230に追加したポインタと、を対応付けて補助テーブル500に追加する。また、更新部604は、反映箇所に対応するデータブロックDに対応付けられているポインタを新たなポインタに更新する。また、更新部604は、反映箇所に対応するデータブロックDの各スナップショットからの指定の状態と、データファイル230で更新した新たなポインタと、を対応付けて補助テーブル500に追加する。これにより、更新部604は、データファイル230と、補助テーブル500と、を更新できる。更新部604は、反映処理された場合、反映後のデータブロックDについて第1の指定情報群で指定されない状態および第2の指定情報群で指定される状態に対応付けて第2のデータベースに記憶された指定先を反映後のデータブロックDに対応付けて第1のデータベースに追加する機能を有する。また、更新部604は、第1のデータベースのうち反映対象データブロックの指定先を、反映対象データブロックについて第1の指定情報群で指定される状態および第2の指定情報群で指定されない状態に対応付けて第2のデータベースに記憶された指定先に更新する機能を有する。具体的には、例えば、更新部604は、反映処理された場合、反映後のデータブロックDと、補助テーブル500で反映後のデータブロックDの各スナップショットからの指定の状態に対応付けられているポインタと、を対応付けてデータファイル230に追加する。また、更新部604は、反映処理された場合、データファイル230で反映箇所に対応するデータブロックDに対応付けられているポインタを、補助テーブル500で反映箇所に対応するデータブロックDの各スナップショットからの指定の状態に対応付けられているポインタへと更新する。これにより、更新部604は、データファイル230を更新できる。更新部604は、削除対象データブロックを指定する指定情報が削除された場合、第1のデータベースのうち削除対象データブロックの指定先を新たな指定先に更新する機能を有する。また、更新部604は、削除対象データブロックについて第1の指定情報群で指定される状態および第2の指定情報群で指定されない状態と、削除対象データブロックの新たな指定先と、を対応付けて第2のデータベースに追加する機能を有する。これにより、更新部604は、データファイル230と、補助テーブル500と、を更新できる。具体的には、例えば、更新部604は、削除箇所に対応するデータブロックDを指定するポインタPが削除された場合、データファイル230で削除箇所に対応するデータブロックDに対応付けられているポインタを新たなポインタに更新する。また、更新部604は、削除箇所に対応するデータブロックDの各スナップショットからの指定の状態と、データファイル230で更新した新たなポインタと、を対応付けて補助テーブル500に追加する。これにより、更新部604は、データファイル230と、補助テーブル500と、を更新できる。更新部604は、削除対象データブロックを指定する指定情報が削除された場合、第1のデータベースのうち削除対象データブロックの指定先を、削除対象データブロックについて第1の指定情報群で指定される状態および第2の指定情報群で指定されない状態に対応付けて第2のデータベースに記憶された指定先に更新する機能を有する。具体的には、例えば、更新部604は、削除箇所に対応するデータブロックDを指定するポインタPが削除された場合、データファイル230で削除箇所に対応するデータブロックDに対応付けられているポインタを、削除箇所に対応するデータブロックDの各スナップショットからの指定の状態に対応付けて補助テーブル500に記憶されたポインタへと更新する。これにより、更新部604は、データファイル230を更新できる。更新部604は、追加対象データブロックが追加された場合、追加対象データブロックの指定先を追加対象データブロックに対応付けて第1のデータベースに追加する機能を有する。また、更新部604は、追加対象データブロックについて第1の指定情報群で指定されない状態および第2の指定情報群で指定される状態と、追加対象データブロックの指定先と、を対応付けて第2のデータベースに追加する機能を有する。具体的には、例えば、更新部604は、追加箇所に対応するデータブロックDが追加された場合、追加箇所に対応するデータブロックDとポインタと、を対応付けてデータファイル230に追加する。また、更新部604は、追加箇所に対応するデータブロックDの各スナップショットからの指定の状態と、データファイル230に追加したポインタと、を対応付けて補助テーブル500に追加する。これにより、更新部604は、データファイル230と、補助テーブル500と、を更新できる。更新部604は、追加対象データブロックが追加された場合、追加対象データブロックについて第1の指定情報群で指定されない状態および第2の指定情報群で指定される状態に対応付けて第2のデータベースに記憶された指定先を追加対象データブロックに対応付けて第1のデータベースに追加する機能を有する。具体的には、例えば、更新部604は、追加箇所に対応するデータブロックDが追加された場合、追加箇所に対応するデータブロックDと、補助テーブル500で追加箇所に対応するデータブロックDの各スナップショットからの指定の状態に対応付けられているポインタと、を対応付けてデータファイル230に追加する。これにより、更新部604は、データファイル230を更新できる。格納部605は、反映後のデータブロックDをデータブロック集合に格納するとともに、更新部604による更新後の第2の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部605は、変更箇所に対応するデータブロックDとは別に、変更箇所に対応するデータブロックDに変更を反映させた変更後のデータブロックDを、データブロックDの集合に格納する。また、格納部605は、更新部604によって更新されたポインタP群を、ポインタP群の集合に格納する。これにより、格納部605は、変更前のデータブロックDを残したまま、変更後のデータブロックDを格納しておくことができる。また、格納部605は、新たに作成したスナップショットを格納しておくことができる。格納部605は、更新部604による更新後の第2の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部605は、更新部604によって更新されたポインタP群を、ポインタP群の集合に格納する。これにより、格納部605は、新たに作成したスナップショットを格納しておくことができる。格納部605は、追加対象データブロックをデータブロック集合に格納するとともに、更新部604による更新後の第2の指定情報群を指定情報群の集合に格納する機能を有する。具体的には、例えば、格納部605は、追加箇所に対応するデータブロックDを、データブロックDの集合に格納する。また、格納部605は、更新部604によって更新されたポインタP群を、ポインタP群の集合に格納する。これにより、格納部605は、追加されたデータブロックDを格納しておくことができる。また、格納部605は、新たに作成したスナップショットを格納しておくことができる。削除部606は、第1のデータベースと第2のデータベースとを参照して、データブロック集合の中で指定情報群の集合の中のいずれの指定情報でも指定されていない未指定データを、データブロック集合から削除する機能を有する。具体的には、例えば、削除部606は、データファイル230と、補助テーブル500と、を参照して、いずれのスナップショットからも指定されていないデータブロックDを削除する。これにより、削除部606は、ガーベージコレクションを実行できる。分岐可能なスナップショットの一例次に、図7~図10を用いて、分岐可能なスナップショットの一例について説明する。図7~図10は、分岐可能なスナップショットの一例を示す説明図である。図7では、データブロックD1とデータブロックD2とを含むファイルFについて、スナップショットAが作成されている。スナップショットAには、データブロックD1へのポインタP1と、データブロックD2へのポインタP2と、が含まれる。図7に示すように、1まず、情報処理装置100の利用者は、スナップショットAを複製しておく。そして、情報処理装置100の利用者は、情報処理装置100を使用して、スナップショットAの対象であるファイルFのうち、データブロックD1の部分を変更する。ここで、情報処理装置100は、変更前のファイルFを対象にするスナップショットAを残したまま、複製したスナップショットBを変更後のファイルF’を対象にするスナップショットBに更新する。具体的には、情報処理装置100は、スナップショットAを複製したスナップショットBから変更前のデータブロックD1を指定するポインタP1を削除し、スナップショットBに変更後のデータブロックD1’を指定するポインタP3を追加する。ここで、情報処理装置100のユーザインターフェースには、スナップショットBの対象であるファイルF’が表示される。2次に、情報処理装置100の利用者は、スナップショットBを複製しておく。そして、情報処理装置100の利用者は、情報処理装置100を使用して、スナップショットBの対象であるファイルF’に、データブロックD4を追加する。ここで、情報処理装置100は、追加前のファイルF’を対象にするスナップショットBを残したまま、複製したスナップショットB’を追加後のファイルF’’を対象にするスナップショットB’に更新する。具体的には、情報処理装置100は、スナップショットBを複製したスナップショットB’に、追加されたデータブロックD4を指定するポインタP4を追加する。ここで、情報処理装置100のユーザインターフェースには、スナップショットB’の対象であるファイルF’’が表示される。図8に示すように、1情報処理装置100の利用者は、スナップショットB’の対象であるファイルF’’からスナップショットAの対象であるファイルFを復元する。具体的には、情報処理装置100は、ユーザインターフェースに表示するデータブロックDを、スナップショットB’で指定されるデータブロックD群から、スナップショットAで指定されるデータブロックD群に変更する。ここで、情報処理装置100のユーザインターフェースには、ファイルFが表示される。図9に示すように、1情報処理装置100の利用者は、スナップショットAを複製しておく。そして、情報処理装置100の利用者は、情報処理装置100を使用して、スナップショットAの対象であるファイルFに、データブロックD3を追加する。ここで、情報処理装置100は、追加前のファイルFを対象にするスナップショットAを残したまま、複製したスナップショットA’を追加後のファイルF’’’を対象にするスナップショットA’に更新する。具体的には、情報処理装置100は、スナップショットAを複製したスナップショットA’に、追加されたデータブロックD3を指定するポインタP5を追加する。ここで、情報処理装置100のユーザインターフェースには、ファイルF’’’が表示される。2次に、情報処理装置100の利用者は、スナップショットA’を複製しておく。そして、情報処理装置100の利用者は、情報処理装置100を使用して、スナップショットA’の対象であるファイルF’’’のうち、データブロックD2の部分を削除する。ここで、情報処理装置100は、変更前のファイルF’’’を対象にするスナップショットA’を残したまま、複製したスナップショットA’’を変更後のファイルF’’’’を対象にするスナップショットA’’に更新する。具体的には、情報処理装置100は、スナップショットA’を複製したスナップショットA’’から、削除されたデータブロックD2を指定するポインタP2を削除する。ここで、情報処理装置100のユーザインターフェースには、ファイルF’’’’が表示される。図10に示すように、1情報処理装置100の利用者は、スナップショットA’’の対象であるファイルF’’’’からスナップショットBの対象であるファイルF’を復元する。具体的には、情報処理装置100は、ユーザインターフェースに表示するデータブロックDを、スナップショットA’’で指定されるデータブロックD群から、スナップショットBで指定されるデータブロックD群に変更する。ここで、情報処理装置100のユーザインターフェースには、ファイルF’が表示される。2そして、情報処理装置100の利用者は、スナップショットBを複製しておく。そして、情報処理装置100の利用者は、情報処理装置100を使用して、スナップショットBの対象であるファイルF’を変更する。そして、情報処理装置100は、複製したスナップショットから、さらにスナップショットを分岐させていくことができる。このように、情報処理装置100は、利用者によってファイルが削除、追加、または変更される際に、スナップショットを更新することができる。なお、情報処理装置100は、利用者によってファイルが削除、追加、または変更されるごとに、自動的にスナップショットを複製していってもよいし、利用者から複製を要求された時点のスナップショットのみを複製していってもよい。また、このように、情報処理装置100は、ファイルの状態を、スナップショットの作成時点のファイルの状態に復元することができる。このとき、情報処理装置100は、保存されている他のスナップショットに影響を与えることがないため、スナップショットを併存させることができる。また、情報処理装置100は、過去のスナップショットから新たに分岐させたスナップショットを作成することもできる。スナップショットを作成する際のポインタPの具体例次に、図11~図13を用いて、スナップショットを作成する際のポインタPの具体例について説明する。図11~図13は、スナップショットを作成する際のポインタPの具体例を示す説明図である。ここでは、スナップショットAからスナップショットBを作成する場合を例に挙げて、作成されたスナップショットBのポインタPの具体例について説明する。図11に示すように、情報処置装置100には、ファイルに含まれるデータブロックD1000~データブロックD1007が記憶されている。また、情報処理装置100には、データブロックD1000~データブロックD1007へのブロックマップとなるデータブロックD1008~データブロックD1010が記憶されている。情報処理装置100には、ブロックマップの先頭データブロックDへのポインタPとなり、ファイルの識別子となるポインタPエントリが、データブロックD1011以下、ifileというに記憶されている。また、情報処理装置100には、スナップショットになるポインタPが、データブロックD1012に記憶されている。スナップショットになるポインタPは、エントリを指定するポインタPである。例えば、スナップショットの中のINO番号=100のポインタPは、RINO番号=100のポインタPを指定している。このとき、磁気ディスク204上では、データブロックD1000~データブロックD1012は、連続した領域に記憶されている。次に、図12に示すように、情報処理装置100は、スナップショットAを複製して、スナップショットBを作成する。スナップショットBになるポインタPは、データブロックD1013に記憶されている。スナップショットBの作成では、スナップショットAのポインタPを複製し、データブロックDやブロックマップは変更しない。そのため、情報処理装置100は、スナップショットの複製を高速に実行できる。このとき、情報処理装置100は、ログ構造ファイルシステムを採用しているため、磁気ディスク204上でデータブロックD1000~データブロックD1012と連続する領域に、新たなデータブロックD1013を記憶する。そして、図13に示すように、情報処理装置100は、データブロックD1001がデータブロックD1014に変更される場合、変更前のデータブロックD1001を残したまま、変更されたデータブロックD1014を記憶する。次に、情報処理装置100は、変更されたデータブロックD1014へのポインタPになるデータブロックD1015およびデータブロックD1016を含む新たなブロックマップを作成する。そして、情報処理装置100は、新たなブロックマップの先頭データブロックD1016へのポインタPとなるRINO番号=101のエントリおよびデータブロックD1011ifileに含まれるRINO番号=100のエントリを含むデータブロックD1017新たなifileを作成する。次に、情報処理装置100は、スナップショットBのポインタPを、新たなRINO番号=101のエントリを指定するポインタPに更新したスナップショットB’を、データブロックD1018に記憶する。このとき、情報処理装置100は、ログ構造ファイルシステムを採用しているため、磁気ディスク204上でデータブロックD1000~データブロックD1013と連続する領域に、新たなデータブロックD1014~データブロックD1018を記憶する。結果として、磁気ディスク204上では、ファイルに含まれるデータブロックD、ブロックマップとなるデータブロックD、およびスナップショットとなるデータブロックDは、物理的に連続した領域に記憶される。このように、情報処理装置100は、ファイルが変更される際に、スナップショットのポインタP群を複製して、複製したスナップショットのポインタP群の指定するデータブロックD群を変更して新たなスナップショットを作成できる。また、情報処理装置100は、スナップショットから、スナップショットに対応するファイルを特定して、データを読み出すことができる。例えば、情報処理装置100は、スナップショットAのポインタから、指定先をたどっていくことで、スナップショットAに対応するファイルに含まれるデータブロックDを特定して、データを読み出すことができる。また、情報処理装置100は、ログ構造ファイルシステムを採用しているため、ファイルに含まれるデータブロックD、ブロックマップとなるデータブロックD、およびスナップショットとなるデータブロックDは、記憶領域上で物理的に連続した領域に記憶される。これにより、情報処理装置100がファイルに対する処理を実行する際の磁気ディスク204のリード/ライトを制御するヘッドの移動を少なくすることができる。そのため、情報処理装置における磁気ディスク204へのリード/ライトの性能を向上できる。なお、データの読み出しについては、図16を用いて後述する。ファイルが変更される際のデータブロックD、ブロックマップ、ifile、およびスナップショットの更新については、図20および図21に後述する。情報処理装置100によるガーベージコレクションの具体例次に、図14を用いて、情報処理装置100によるガーベージコレクションの具体例について説明する。図14では、図5に示したデータファイル230と補助テーブル500とを使用してガーベージコレクションを実行する例を示す。なお、図3または図4に示したデータファイル230を使用してガーベージコレクションを実行してもよい。図14は、情報処理装置100によるガーベージコレクションの具体例を示す説明図である。情報処理装置100は、記憶領域の残りサイズが閾値以下になると、ガーベージコレクションを実行し、不要なデータブロックDを削除する。なお、情報処理装置100は、ガーベージコレクションを、一定時間ごとに実行してもよい。情報処理装置100では、複数のスナップショットが併存し、それぞれのスナップショットからデータブロックDが指定されている。そのため、情報処理装置100は、一つのスナップショットから指定されていないデータブロックDであっても、他のスナップショットから指定されている場合は、削除することができない。情報処理装置100は、データファイル230および補助テーブル500を参照することにより、複数のスナップショットの中のいずれのスナップショットからも指定されていないデータブロックDを特定できる。そして、情報処理装置100は、特定したデータブロックDを削除することで、ガーベージコレクションを実行する。以下では、情報処理装置100が、データブロックD1~データブロックD3を含むファイルに対応するスナップショットAおよびスナップショットBについてのデータファイル230および補助テーブル500を記憶している場合を例に挙げる。ここで、データファイル230および補助テーブル500の組み合わせによって、データブロックDごとに各スナップショットから指定されている状態か否かが記憶されている。1スナップショットAにおいて、データブロックD1がデータブロックD1’に変更される場合、データファイル230には、データブロックD1のレコードが残ったまま、データブロックD1’のレコードが追加される。ここで、補助テーブル500には、データブロックD1の状態を示すレコードが追加される。補助テーブル500には、データブロックD1’の状態を示すレコードが記憶されている。そして、データファイル230では、データブロックD1のレコードの状態記憶先として、補助テーブル500に追加されたレコードへのポインタ003が記憶される。また、データファイル230では、データブロックD1’のレコードの状態記憶先として、補助テーブル500に記憶されているレコードへのポインタ002が記憶される。2次に、スナップショットAにおいて、データブロックD4が追加される場合、データファイル230には、データブロックD4のレコードが追加される。ここで、補助テーブル500には、データブロックD4の状態を示すレコードが記憶されている。そして、データファイル230では、データブロックD4のレコードの状態記憶先として、補助テーブル500に記憶されているレコードへのポインタ002が記憶される。また、スナップショットBにおいて、データブロックD1が削除される場合、補助テーブル500には、データブロックD1の新たな状態を示すレコードが追加される。そして、データファイル230では、データブロックD1のレコードの状態記憶先として、補助テーブル500に追加されたレコードへのポインタ004が記憶される。3このとき、情報処理装置100はガーベージコレクションを実行する。情報処理装置100は、データファイル230と補助テーブル500とを参照して、各スナップショットから指定されていないデータブロックD1を特定する。そして、情報処理装置100は、データブロックD1を削除して、残りのデータブロックDは削除せずに記憶領域上で整理しておく。これにより、情報処理装置100は、不要なデータブロックDを削除し、記憶領域を開放することができる。また、情報処理装置100は、ガーベージコレクションの実行時に、スナップショットから指定されているデータブロックDを削除してしまい、スナップショットからのファイルの復元ができなくなるといった不具合を回避することができる。スナップショットのユーザインターフェースの一例次に、図15を用いて、スナップショットのユーザインターフェースの一例について説明する。図15は、スナップショットのユーザインターフェースの一例を示す説明図である。図15に示すように、情報処理装置100は、スナップショットの管理アプリケーションを表示する。スナップショットの管理アプリケーションには、保存されているスナップショットが木構造として表示されている。また、スナップショットの管理アプリケーションには、保存ボタンと削除ボタンと復元ボタンとが表示されている。保存ボタンは、現在のファイルの状態をスナップショットとして保存する処理を、情報処理装置100に実行させるボタンである。削除ボタンは、表示されているスナップショットの中から選択されたスナップショットを削除する処理を、情報処理装置100に実行させるボタンである。復元ボタンは、表示されているスナップショットの中から選択されたスナップショットの状態に復元する処理を、情報処理装置100に実行させるボタンである。このように、情報処理装置100の利用者は、スナップショットに基づいて、スナップショットの作成時点でのファイルの状態に復元することができる。このとき、ファイルの状態が過去の状態に復元されたとしても、スナップショットは併存することができる。また、情報処理装置100の利用者は、現在のファイルの状態を、スナップショットとして保存しておくことができる。また、情報処理装置100の利用者は、不要なスナップショットを削除することができる。スナップショットからのデータ読み出し処理の処理内容次に、図16を用いて、スナップショットからのデータ読み出し処理の処理内容について説明する。図16は、データ読み出し処理の処理内容を示すフローチャートである。まず、CPU201は、エントリ取り出し処理を実行するステップS1601。次に、CPU201は、エントリ取り出し処理によって取り出されたINO番号のエントリが有効か否かを判定するステップS1602。ここで、エントリが有効でない場合ステップS1602:No、CPU201は、スナップショットにはINO番号のファイルはないと判定してステップS1603、データ読み出し処理を終了する。一方、エントリが有効である場合ステップS1602:Yes、CPU201は、データブロック取り出し処理を実行するステップS1604。次に、CPU201は、ブロックマップ検索処理を実行するステップS1605。そして、CPU201は、ブロックマップ検索処理によって検索した結果、データブロックDが存在するか否かを判定するステップS1606。ここで、データブロックDが存在しない場合ステップS1606:No、CPU201は、スナップショットにはINO番号のファイルはないと判定してステップS1607、データ読み出し処理を終了する。一方、データブロックDが存在する場合ステップS1606:Yes、CPU201は、OSに読み出し依頼をしてステップS1608、データ読み出し処理を終了する。これにより、情報処理装置100は、スナップショットから、スナップショットに対応するファイルを特定して、データを読み出すことができる。エントリ取り出し処理の処理内容次に、図17を用いて、図16のステップS1601で実行したエントリ取り出し処理の処理内容について説明する。図17は、エントリ取り出し処理の処理内容を示すフローチャートである。まず、CPU201は、INO番号のエントリが含まれるブロック番号を算出するステップS1701。次に、CPU201は、スナップショットにエントリが存在するか否かを判定するステップS1702。ここで、エントリが存在しない場合ステップS1702:No、CPU201は、エントリが無効と判定してステップS1703、エントリ取り出し処理を終了する。一方、エントリが存在する場合ステップS1702:Yes、CPU201は、OSに読み出し依頼をしてブロック番号xを読み込みステップS1704、エントリを取り出すステップS1705。次に、CPU201は、エントリが有効か否かを判定するステップS1706。ここで、エントリが有効ではない場合ステップS1706:No、CPU201は、エントリが無効と判定してステップS1703、エントリ取り出し処理を終了する。一方、エントリが有効である場合ステップS1706:Yes、CPU201は、エントリが有効と判定してステップS1707、エントリ取り出し処理を終了する。データブロック取り出し処理の処理内容次に、図18を用いて、図16のステップS1604で実行したデータブロック取り出し処理の処理内容について説明する。図18は、データブロック取り出し処理の処理内容を示すフローチャートである。まず、CPU201は、ifileの中で、RINO番号のエントリが含まれるブロック番号xを算出するステップS1801。次に、CPU201は、OSに読み出し依頼をしてブロック番号xのデータブロックDを読み込みステップS1802、RINO番号のエントリを取り出すステップS1803。そして、CPU201は、データブロック取り出し処理を終了する。ブロックマップ検索処理の処理内容次に、図19を用いて、図16のステップS1605で実行したブロックマップ検索処理の処理内容について説明する。図19は、ブロックマップ検索処理の処理内容を示すフローチャートである。まず、CPU201は、RINO番号のメタ情報からブロックマップの段数を取得するステップS1901。次に、CPU201は、RINO番号のメタ情報から先頭ブロックの番号を取得し、取得した先頭ブロックの番号をxと設定するステップS1902。そして、CPU201は、OSに読み出し依頼をして、x番のブロックを読み込むステップS1903。次に、CPU201は、指定オフセットのエントリを取り出すステップS1904。そして、CPU201は、取り出したエントリが有効か否かを判定するステップS1905。ここで、エントリが有効ではない場合ステップS1905:No、CPU201は、ブロックマップ検索処理を終了する。一方、エントリが有効である場合ステップS1905:Yes、CPU201は、段数を一段進めステップS1906、最後の段か否かを判定するステップS1907。ここで、最後の段でない場合ステップS1907:No、CPU201は、取り出したエントリの中のブロック番号をxに設定しステップS1908、ステップS1904に戻る。一方、最後の段である場合ステップS1907:Yes、CPU201は、取り出したエントリの内容はブロック番号であると判定してステップS1909、ブロックマップ検索処理を終了する。データ書き込み処理の処理内容次に、図20および図21を用いて、データ書き込み処理の処理内容について説明する。図20および図21は、データ書き込み処理の処理内容を示すフローチャートである。図20において、まず、CPU201は、スナップショットのINO番号についてエントリ取り出し処理を実行するステップS2001。次に、CPU201は、取り出したエントリが有効か否かを判定するステップS2002。ここで、エントリが有効ではない場合ステップS2002:No、CPU201は、データブロックDに変更を反映し、ブロックマップを更新するステップS2003。次に、CPU201は、データファイル230での変更を反映したデータブロックDに関するレコードを更新し、補助テーブル500を更新する。具体的には、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500にあれば、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500にあるレコードへのポインタに更新する。一方、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500になければ、補助テーブル500に、当該指定の状態を示すレコードを追加する。そして、CPU201は、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500に追加したレコードへのポインタに更新するステップS2004。そして、CPU201は、データ書き込み処理を終了する。一方、エントリが有効である場合ステップS2002:Yes、CPU201は、データブロック取り出し処理を実行するステップS2005。次に、CPU201は、取り出したデータブロックDのRINO番号を他のスナップショットと共有しているか否かを判定するステップS2006。ここで、共有していない場合ステップS2006:No、CPU201は、ステップS2003に移行する。一方、共有している場合ステップS2006:Yes、CPU201は、RINOを更新するステップS2007。次に、CPU201は、ブロックマップ検索処理を実行しステップS2008、図21のステップS2101に移行する。図21において、CPU201は、データブロックDが存在するか否かを判定するステップS2101。ここで、データブロックDが存在しない場合ステップS2101:No、CPU201は、データブロックDを追加し、ブロックマップを更新するステップS2102。次に、CPU201は、追加したデータブロックDに関するレコードをデータファイル230に追加し、補助テーブル500を更新する。具体的には、CPU201は、追加したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500にあれば、追加したデータブロックDと補助テーブル500にあるレコードへのポインタとを関連付けたレコードをデータファイル230に追加する。一方、CPU201は、追加したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500になければ、補助テーブル500に、当該指定の状態を示すレコードを追加する。そして、CPU201は、追加したデータブロックDと補助テーブル500に追加したレコードへのポインタとを関連付けたレコードをデータファイル230に追加しステップS2103、データ書き込み処理を終了する。一方、データブロックDが存在する場合ステップS2101:Yes、CPU201は、データファイル230と補助テーブル500を参照しステップS2104、データブロックDを他のスナップショットと共有しているか否かを判定するステップS2105。ここで、共有していない場合ステップS2105:No、CPU201は、データブロックDに変更を反映し、ブロックマップを更新するステップS2106。次に、CPU201は、データファイル230での変更を反映したデータブロックDに関するレコードを更新し、補助テーブル500を更新する。具体的には、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500にあれば、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500にあるレコードへのポインタに更新する。一方、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500になければ、補助テーブル500に、当該指定の状態を示すレコードを追加する。そして、CPU201は、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500に追加したレコードへのポインタに更新しステップS2107、データ書き込み処理を終了する。一方、共有している場合ステップS2105:Yes、CPU201は、データブロックDを残したまま、データブロックDに変更を反映した反映後のデータブロックDを作成し、ブロックマップを更新するステップS2108。次に、CPU201は、変更を反映したデータブロックDに関するレコードをデータファイル230に追加し、データファイル230での複製元のデータブロックDに関するレコードを更新し、補助テーブル500を更新する。具体的には、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500にあれば、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500にあるレコードへのポインタに更新する。一方、CPU201は、変更を反映したデータブロックDの各スナップショットからの指定の状態を示すレコードが補助テーブル500になければ、補助テーブル500に、当該指定の状態を示すレコードを追加する。そして、CPU201は、データファイル230での変更を反映したデータブロックDのポインタを、補助テーブル500に追加したレコードへのポインタに更新しステップS2109、データ書き込み処理を終了する。これにより、情報処理装置100は、ファイルに変更があった場合、変更後のファイルに対応するデータブロックDを記憶し、新たなブロックマップと新たなエントリとを作成し、データファイル230と補助テーブル500とを更新することができる。また、情報処理装置100は、ファイルに削除があった場合、新たなブロックマップと新たなエントリとを作成し、データファイル230と補助テーブル500とを更新することができる。また、情報処理装置100は、ファイルに追加があった場合、ファイルに追加されるデータブロックDを記憶し、新たなブロックマップと新たなエントリとを作成し、データファイル230と補助テーブル500とを更新することができる。以上説明したように、情報処理装置100は、ファイルに変更があった場合、ファイルの変更箇所に対応するデータブロックDを残したまま、変更箇所に対応するデータブロックDに変更を反映させた変更後のデータブロックDを記憶しておく。そして、情報処理装置100は、変更前のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを残したまま、変更後のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを記憶しておく。また、情報処理装置100は、ファイルに追加があった場合、ファイルの追加箇所に対応するデータブロックDを記憶しておく。そして、情報処理装置100は、追加前のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを残したまま、追加後のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを記憶しておく。また、情報処理装置100は、ファイルに削除があった場合、ファイルの削除箇所に対応するデータブロックDを残しておく。そして、情報処理装置100は、削除前のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを残したまま、削除後のファイルに含まれるデータブロックD群を指定するポインタP群になるスナップショットを記憶しておく。そのため、情報処理装置100は、スナップショットを複数併存させることができる。結果として、情報処理装置100は、ファイルを、いずれのスナップショットの状態にも切り替えることができる。また、情報処理装置100は、時系列に沿った一連のスナップショットを保持したまま、時系列に沿った一連のスナップショットのどの位置からでも新たに分岐させたスナップショットを作成できる。また、スナップショットはそれぞれ独立しており、他のスナップショットが操作されても影響を受けない。そのため、情報処理装置100は、ファイルを、いずれかのスナップショットの状態に復元しても、復元前のスナップショットの状態に戻すことができる。また、情報処理装置100は、ファイルを、分岐した並列する複数のスナップショットのそれぞれの状態に切り替えて使用することができる。また、情報処理装置100は、データブロックDごとに、すべてのスナップショットのそれぞれから指定されているか否かを記憶しておき、ガーベージコレクションの実行の際、いずれのスナップショットからも指定されていないデータブロックDを削除する。そのため、情報処理装置100は、ガーベージコレクションを実行しても、スナップショットに不具合を生じることがない。また、情報処理装置100は、ログ構造ファイルシステムを採用しているため、ファイルへの書き込みがあると、変更部分をログとして記憶領域となるディスク上の連続した領域に書き込む。そのため、ログ構造でないファイルシステムと比して、ランダムライトにおいても磁気ディスク204に対するヘッドの移動が少なくなり、ランダムライトがシーケンシャルライトに近い性能を発揮できる。なお、本実施の形態で説明した情報処理方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本情報処理プログラムは、ハードディスク、フレキシブルディスク、CD-ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本情報処理プログラムは、インターネット等のネットワークを介して配布してもよい。上述した実施の形態に関し、さらに以下の付記を開示する。付記1格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う制御部を備え、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理装置。付記2データブロック集合のデータブロックごとに、指定先を記憶する第1のデータベースと、前記指定先ごとに、指定元の状態を記憶する第2のデータベースと、を備え、前記制御部は、前記更新処理により削除される削除データ部分が存在する場合には、前記第1のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を新たな指定先に更新し、前記削除データ部分を格納していたデータブロックについて前記第1のポインタ群情報で指定される状態および前記第2のポインタ群情報で指定されない状態と、前記削除データ部分を格納していたデータブロックの新たな指定先と、を対応付けて前記第2のデータベースに追加し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックの指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第1のデータベースに追加し、前記追加データ部分の格納先となったデータブロックについて前記第1のポインタ群情報で指定されない状態および前記第2のポインタ群情報で指定される状態と、前記追加データ部分の格納先となったデータブロックの指定先と、を対応付けて前記第2のデータベースに追加することを特徴とする付記1に記載の情報処理装置。付記3データブロック集合のデータブロックごとに、指定先を記憶する第1のデータベースと、前記指定先ごとに、指定元の状態を記憶する第2のデータベースと、を備え、前記制御部は、前記更新処理により削除される削除データ部分が存在する場合には、前記第1のデータベースのうち前記削除データ部分を格納していたデータブロックの指定先を、前記削除データ部分を格納していたデータブロックについて前記第1のポインタ群情報で指定される状態および前記第2のポインタ群情報で指定されない状態に対応付けて前記第2のデータベースに記憶された指定先に更新し、前記更新処理により追加される追加データ部分が存在する場合には、新たに前記追加データ部分の格納先となったデータブロックについて前記第1のポインタ群情報で指定されない状態および前記第2のポインタ群情報で指定される状態に対応付けて前記第2のデータベースに記憶された指定先を前記追加データ部分の格納先となったデータブロックに対応付けて前記第1のデータベースに追加することを特徴とする付記1に記載の情報処理装置。付記4前記制御部は、前記第1のデータベースと前記第2のデータベースとを参照して、前記データブロック集合の中でポインタ群情報の集合の中のいずれの指定情報でも指定されていない未指定データブロックを、前記データブロック集合から削除することを特徴とする付記2または3に記載の情報処理装置。付記5コンピュータが、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行し、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理方法。付記6コンピュータに、格納部に複数のデータブロックに分割して格納されたデータについての更新処理が行われる際に、該更新処理後において、該更新処理の前の前記複数のデータブロックのそれぞれを示す複数のポインタを含む第1のポインタ群情報と、前記更新処理の後のデータを分割して格納する複数のデータブロックのそれぞれを示す複数のポインタを含む第2のポインタ群情報とが記憶部に記憶された状態となるように記憶制御を行う処理を実行させ、前記第2のポインタ群情報は、前記更新処理により削除される削除データ部分が存在する場合には、該削除データ部分を格納していたデータブロックを示すポインタを含まず、また、前記第2のポインタ群情報は、前記更新処理により追加される追加データ部分が存在する場合には、新たに該追加データ部分の格納先となったデータブロックを示すポインタを含み、また、前記第2のポインタ群情報は、前記更新処理により変更されない無変更データ部分が存在する場合には、該無変更データ部分を格納していたデータブロックを示すポインタを含む、ことを特徴とする情報処理プログラム。