(57)【要約】【課題】オペレーション回数の削減。【解決手段】情報処理装置１０は、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで複数のファイルに対する更新を示す変更ログを生成し、変更ログに世代を示す情報を設定する。情報処理装置１０は、記憶装置４０に接続された管理装置３０に変更ログを送信する。情報処理装置２０は、管理装置３０から変更ログを取得し、世代の順に変更ログを参照して更新が行われた複数のファイルを認識する。【選択図】図１
2019204278.tif 000002
【特許請求の範囲】
【請求項１】
複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムであって、
ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで前記複数のファイルに対する更新を示す変更ログを生成し、前記変更ログに世代を示す情報を設定し、前記記憶装置に接続された管理装置に前記変更ログを送信する第１の情報処理装置と、
前記管理装置から前記変更ログを取得し、前記世代の順に前記変更ログを参照して更新が行われた前記複数のファイルを認識する第２の情報処理装置と、
を有する情報処理システム。
【請求項２】
前記第２の情報処理装置は、前記複数のファイルを参照するファイルシステムを有し、前記変更ログに基づいて前記複数のファイルの更新を前記ファイルシステムに反映する、
請求項１記載の情報処理システム。
【請求項３】
前記第２の情報処理装置は、前記管理装置により保持される前記変更ログの前記世代のリストを前記管理装置から取得し、前記リストと前記第２の情報処理装置に反映済の前記変更ログの前記世代とに基づいて、前記管理装置から取得する前記変更ログの前記世代を判定する、
請求項１記載の情報処理システム。
【請求項４】
前記第２の情報処理装置は、前記管理装置により保持される前記変更ログの前記世代と、前記第２の情報処理装置に反映済の前記変更ログの前記世代との間に欠落した前記世代がある場合、前記複数のファイルに含まれるファイルの属性情報と前記ファイルに属する全てのチャンクを示す情報とを前記管理装置から取得する処理を、前記ファイル毎に個別に実行する、
請求項１記載の情報処理システム。
【請求項５】
前記第１の情報処理装置は、更新されたファイルのうち、更新された部分に対応するチャンクを示す情報のみを前記マップ情報に格納する、
請求項１記載の情報処理システム。
【請求項６】
前記第１の情報処理装置は、更新されたファイルのうち、更新された部分に対応する更新前のチャンクを示す情報と更新後のチャンクを示す情報とを前記マップ情報に格納し、復元先の世代を取得すると、複数の世代の前記変更ログに基づいて、前記複数のファイルの状態を現在の世代から１世代ずつ順番に復元することで、前記復元先の世代の前記複数のファイルの状態を復元する、
請求項１記載の情報処理システム。
【請求項７】
前記第１の情報処理装置および前記第２の情報処理装置は、前記第１の情報処理装置と前記第２の情報処理装置との通信を行わない、
請求項１記載の情報処理システム。
【請求項８】
前記複数のファイルの更新は、新規ファイルの作成、既存ファイルの更新および既存ファイルの削除を含む、
請求項１記載の情報処理システム。
【請求項９】
複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムに用いられる情報処理装置であって、
前記複数のファイルの更新を示す変更ログを記憶する記憶部と、
ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで前記変更ログを生成し、前記変更ログに世代を示す情報を設定し、前記記憶装置に接続された管理装置に前記変更ログを送信する処理部と、
を有する情報処理装置。
【請求項１０】
複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムに用いられるコンピュータに、
ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで前記複数のファイルに対する更新を示す変更ログを生成し、前記変更ログに世代を示す情報を設定し、
前記記憶装置に接続された管理装置に前記変更ログを送信する、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は情報処理システム、情報処理装置およびプログラムに関する。
【背景技術】
【０００２】
情報処理の分野では、ネットワークに接続されたコンピュータによりファイル共有のサービスを提供するシステムが利用されている。例えば、ファイルまたはディレクトリであるオブジェクトの履歴を、クライアントにより表示する計算機システムの提案がある。提案の計算機システムでは、オブジェクト履歴表示のためにリストアされるオブジェクトが属するスナップショット世代を、管理されている全世代ではなく、所定のポリシーに従うスナップショット世代に絞ることで、リストア対象オブジェクトを削減する。
【０００３】
また、データのリストア時、ＮＡＳ（Network Attached Storage）装置により世代ＩＤ（IDentifier）と、その世代に存在する対象ファイルの更新時刻とを対応付けたリストを表示させることで、ユーザにより対象ファイルの更新時刻を把握可能にする提案もある。
【０００４】
更に、第１のサブ計算機システムがデータセンタにアーカイブまたはバックアップしたファイル群の一覧をＣＡＳ（Content Addressed Storage）デバイスが更新リストとして作成し、第２の計算機システムに転送するファイルシステムの提案もある。第２のサブ計算機システムは、更新リストを用いてファイルの有効性の可否を判定して、拠点間ファイル同期処理におけるレスポンス時間を削減可能にする。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】国際公開第２０１７／１２２３１３号
【特許文献２】特開２０１０−４９４８８号公報
【特許文献３】国際公開第２０１２／１３７２６２号
【発明の概要】
【発明が解決しようとする課題】
【０００６】
複数の情報処理装置により、記憶装置に格納された複数のファイルを共有可能にするシステムが考えられる。このようなシステムでは、複数のファイルをチャンクと呼ばれる単位に分割し、チャンクの重複を排除して記憶装置に格納することで、各ファイルを構成する共通のチャンクの重複した保存数を抑え、記憶装置の容量を節約することがある。
【０００７】
当該システムでは、ファイルとファイルを構成する複数のチャンクとを関連付けるメタ情報が用いられる。ファイルを参照する情報処理装置は、メタ情報によりファイルの識別やファイルに関連付けられたチャンクの特定を行う。この場合、情報処理装置はファイルの更新をメタ情報により認識する。例えば、ある情報処理装置によりファイルの更新が行われると、他の情報処理装置は、更新後のファイルを示すメタ情報を、記憶装置に接続された管理装置から取得して、更新後のファイルに関連するチャンクを認識し得る。
【０００８】
このため、ある情報処理装置により複数のファイルに対する更新が行われると、他の情報処理装置では、複数のファイルそれぞれに対するメタ情報を個別に取得することになり、メタ情報の取得に伴うオペレーション回数が増えるという問題がある。
【０００９】
１つの側面では、本発明は、オペレーション回数を削減できる情報処理システム、情報処理装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
１つの態様では、複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムが提供される。この情報処理システムは、第１の情報処理装置と第２の情報処理装置とを有する。第１の情報処理装置は、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで複数のファイルに対する更新を示す変更ログを生成し、変更ログに世代を示す情報を設定し、記憶装置に接続された管理装置に変更ログを送信する。第２の情報処理装置は、管理装置から変更ログを取得し、世代の順に変更ログを参照して更新が行われた複数のファイルを認識する。
【００１１】
また、１つの態様では、複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムに用いられる情報処理装置が提供される。この情報処理装置は、記憶部と処理部とを有する。記憶部は、複数のファイルの更新を示す変更ログを記憶する。処理部は、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで変更ログを生成し、変更ログに世代を示す情報を設定し、記憶装置に接続された管理装置に変更ログを送信する。
【００１２】
また、１つの態様では、プログラムが提供される。このプログラムは、複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置に格納する情報処理システムに用いられるコンピュータに、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで複数のファイルに対する更新を示す変更ログを生成し、変更ログに世代を示す情報を設定し、記憶装置に接続された管理装置に変更ログを送信する、処理を実行させる。
【発明の効果】
【００１３】
１つの側面では、オペレーション回数を削減できる。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の情報処理システムを示す図である。
【図２】変更ログの例を示す図である。
【図３】情報処理システムの他の処理例を示す図である。
【図４】第２の実施の形態の情報処理システムの例を示す図である。
【図５】更新サーバのハードウェア例を示すブロック図である。
【図６】重複排除の例を示す図である。
【図７】オブジェクトストレージに対するアクセス例を示す図である。
【図８】更新サイトと参照サイトとの関係の例を示す図である。
【図９】情報処理システムの機能例を示す図である。
【図１０】ファイル管理のためのデータ構造例を示す図である。
【図１１】変更ログのデータ構造例を示す図である。
【図１２】変更ログのアップロード例を示す図である。
【図１３】変更ログのダウンロード例を示す図である。
【図１４】変更ログ生成の例を示すフローチャートである。
【図１５】ファイル更新の例を示すフローチャートである。
【図１６】変更ログ削除の例を示すフローチャートである。
【図１７】チャンクの被参照数の例を示す図である。
【図１８】ファイルシステム最新化の例を示すフローチャートである。
【図１９】オペレーション回数の削減例（その１）を示す図である。
【図２０】オペレーション回数の削減例（その２）を示す図である。
【図２１】変更ログに含まれるチャンクマップの例を示す図である。
【図２２】復元の例を示すフローチャートである。
【図２３】ファイルの操作および復元の例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１６】
図１は、第１の実施の形態の情報処理システムを示す図である。情報処理システム１は、情報処理装置１０，２０、管理装置３０および記憶装置４０を有する。情報処理装置１０は、記憶装置４０に記憶されたファイルを情報処理装置１０，２０により共有可能にする。情報処理システム１は、複数のファイルをチャンク単位に分割し、チャンクの重複を排除して記憶装置４０に格納する。管理装置３０は、ファイルと当該ファイルを構成するチャンクとを関連付けるメタ情報を管理し、情報処理装置１０，２０に提供する。例えば、チャンクやメタ情報は、オブジェクトと呼ばれるデータ単位で管理される。
【００１７】
ここで、情報処理システム１では、情報処理装置１０が、ファイルおよび更新したファイルのメタ情報の更新を行う。情報処理装置１０は、更新後のファイルのチャンクおよび更新後のファイルのメタ情報を管理装置３０に送信する。管理装置３０は、更新後のファイルのチャンクやメタ情報を受信し、記憶装置４０に格納する。
【００１８】
また、情報処理システム１では、情報処理装置１０，２０が、管理装置３０に格納されたファイルを参照可能である。情報処理装置１０，２０は、管理装置３０を介して、記憶装置４０に格納されたメタ情報を取得する。情報処理装置１０，２０は、メタ情報に基づいてファイルを認識し、当該ファイルを構成するチャンクを、管理装置３０を介して記憶装置４０から取得する。
【００１９】
情報処理システム１において、情報処理装置１０が複数のファイルの更新を行ったとき、情報処理装置２０により更新後の各ファイルに対応するメタ情報を個別に取得すると、情報処理装置２０による管理装置３０に対するオペレーション回数が増える可能性がある。そこで、情報処理システム１では、参照側の情報処理装置（例えば、情報処理装置２０）により、更新後の各ファイルを効率的に認識可能にする機能を提供する。
【００２０】
情報処理装置１０は、記憶部１１および処理部１２を有する。情報処理装置２０は、記憶部２１および処理部２２を有する。記憶部１１，２１は、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。処理部１２，２２は、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１２，２２はプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００２１】
記憶部１１は、複数のファイルの更新を示す変更ログＬ１を記憶する。変更ログＬ１は、更新されたファイルの属性情報と、当該ファイルにおける更新されたチャンクを示すマップ情報とを含む。ここで、ファイルの更新は、新規ファイルの作成、既存ファイルの更新および既存ファイルの削除を含むと考えてもよい。新規ファイルの作成、既存ファイルの更新および既存ファイルの削除を総称して、ファイルに対する操作ということもできる。
【００２２】
属性情報は、例えば、ファイルの識別情報（ｉｎｏｄｅ番号やファイル名など）、親ディレクトリ名、更新日時およびサイズなどのファイルの属性を示す情報である。マップ情報は、該当のファイルにおいて更新された部分のチャンクを示す情報である。新規にファイルが作成された場合、マップ情報は、作成されたファイルを構成する全てのチャンクを示す情報を含む。既存のファイルが更新された場合、マップ情報は、更新されたファイルのうち、更新された部分のチャンクを示す情報のみを含み、更新されていない部分のチャンクを示す情報を含まない。既存のファイルが削除された場合、マップ情報は、削除されたファイルを構成する全てのチャンクを示す情報を含む。チャンクは、各ファイルからの被参照数を示す情報に対応付けられる。例えば、被参照数が０になったチャンクは、記憶装置４０から削除される。
【００２３】
処理部１２は、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とを記録することで変更ログＬ１を生成し、記憶部１１に格納する。更新の対象となるファイルは、記憶装置４０に格納されている、情報処理装置１０，２０により共有されるファイルである。処理部１２は、変更ログＬ１に世代を示す情報を設定する。処理部１２は、記憶装置４０に接続された管理装置に変更ログＬ１を送信する。例えば、処理部１２は、所定時間、複数のファイルに対する更新を変更ログＬ１に記録し、所定時間の経過後に変更ログＬ１を管理装置３０に送信する。すると、処理部１２は、変更ログＬ１の次の世代の変更ログの生成を開始する。なお、処理部１２が変更ログＬ１を記録し、管理装置３０に送信するタイミングは、上記のように所定の時間間隔で周期的に行う他、変更ログＬ１のサイズが一定サイズに達したタイミングなど、他のタイミングも考えられる。
【００２４】
記憶部２１は、管理装置３０から受信した変更ログＬ１を記憶する。
処理部２２は、管理装置３０から変更ログＬ１を取得し、記憶部２１に格納する。処理部２２が管理装置３０から変更ログＬ１を取得するタイミングは、例えば、情報処理装置１０が管理装置３０に変更ログＬ１を送信する周期でもよいし、管理装置３０から変更ログＬ１の取得指示を受け付けたタイミングなどでもよい。
【００２５】
処理部２２は、世代の順に変更ログＬ１を参照して、更新が行われた複数のファイルを認識する。例えば、処理部２２は、変更ログＬ１の前の世代の変更ログを取得している場合、前の世代の変更ログを参照した後に、変更ログＬ１を参照することになる。また、処理部２２は、変更ログＬ１の次の世代の変更ログを取得した場合、変更ログＬ１を参照した後に、次の世代の変更ログを参照することになる。なぜなら、各変更ログにおけるマップ情報は、更新されたファイルについて、更新された部分のチャンクを示す情報を含み、更新されていない部分のチャンクを示す情報を含まないからである。処理部２２は、あるファイルに対して複数の世代で複数の更新が行われた場合に、世代の順に変更ログを参照することで、該当のファイルを構成するチャンクを適切に特定することができる。また、更新されていない部分のチャンクを示す情報を変更ログに含めないことで、変更ログのサイズを抑えられる利点もある。
【００２６】
ここで、情報処理装置１０，２０それぞれが認識するファイルを例示し、情報処理システム１における処理の一例を説明する。ディレクトリ構造Ｋ１は、情報処理装置１０のファイルシステムが認識するディレクトリおよびファイルの構造（ツリー構造）の例を示す。ディレクトリ構造Ｋ２は、情報処理装置２０のファイルシステムが認識するディレクトリおよびファイルの構造（ツリー構造）の例を示す。例えば、情報処理装置１０，２０それぞれのファイルシステムは、各ディレクトリや各ファイルの属性情報に基づいて、ディレクトリ構造Ｋ１，Ｋ２を認識する。以下の説明において、時刻を表す「Ｔ」の文字の後ろの数値が大きいほど、未来の時刻を示すものとする。
【００２７】
時刻Ｔ１において、ディレクトリ構造Ｋ１，Ｋ２は一致している。具体的には、ディレクトリ構造Ｋ１，Ｋ２では、ディレクトリ「ｄｉｒ」の配下にファイル「ｆｉｌｅ＿Ｘ」およびファイル「ｆｉｌｅ＿Ｙ」を含む。図１では、「更新前のファイル」と「更新後のファイル」とを区別するため、各ファイルのアイコンの下に、「更新前」または「更新後」の文字列を付している。
【００２８】
時刻Ｔ２において、処理部１２は、ファイル「ｆｉｌｅ＿Ｘ」およびファイル「ｆｉｌｅ＿Ｙ」を更新する。処理部１２は、これらのファイルの更新により、各ファイルの属性情報や各ファイルについて更新された部分のチャンクを示すマップ情報を変更ログＬ１に記録する。処理部１２は、各ファイルのメタ情報や更新された部分のチャンクを管理装置３０に送信する。この段階において、ディレクトリ構造Ｋ１のディレクトリ「ｄｉｒ」の配下には、更新後のファイル「ｆｉｌｅ＿Ｘ」および更新後のファイル「ｆｉｌｅ＿Ｙ」が認識されている。処理部１２は、作成した変更ログＬ１を管理装置３０に送信する。なお、処理部１２は、各ファイルのメタ情報や更新された部分のチャンクの送信と、変更ログＬ１の送信とを非同期に行うことができる。この段階において、ディレクトリ構造Ｋ２のディレクトリ「ｄｉｒ」の配下には、更新前のファイル「ｆｉｌｅ＿Ｘ」および更新前のファイル「ｆｉｌｅ＿Ｙ」が認識されている。
【００２９】
時刻Ｔ３において、処理部２２は、管理装置３０から変更ログＬ１を取得する。処理部２２は、変更ログＬ１に含まれるファイル「ｆｉｌｅ＿Ｘ」に関する属性情報およびマップ情報に基づいて、ファイル「ｆｉｌｅ＿Ｘ」の更新後の属性情報や更新された部分のチャンクを特定し、更新後のファイル「ｆｉｌｅ＿Ｘ」を認識する。また、処理部２２は、変更ログＬ１に含まれるファイル「ｆｉｌｅ＿Ｙ」に関する属性情報およびマップ情報に基づいて、ファイル「ｆｉｌｅ＿Ｙ」の更新後の属性情報や更新された部分のチャンクを特定し、更新後のファイル「ｆｉｌｅ＿Ｙ」を認識する。この段階において、ディレクトリ構造Ｋ２のディレクトリ「ｄｉｒ」の配下には、更新後のファイル「ｆｉｌｅ＿Ｘ」および更新後のファイル「ｆｉｌｅ＿Ｙ」が認識されており、ディレクトリ構造Ｋ１，Ｋ２が同期された状態となる。
【００３０】
次に、変更ログＬ１の例を説明する。
図２は、変更ログの例を示す図である。
変更ログＬ１は、第Ｎ（Ｎは１以上の整数）世代の変更ログであるとする。変更ログＬ１の前の世代は第Ｎ−１世代である。変更ログＬ１の次の世代は第Ｎ＋１世代である。また、ファイル「ｆｉｌｅ＿Ｘ」を「ファイルＸ」、ファイル「ｆｉｌｅ＿Ｙ」を「ファイルＹ」と略記することがある。また、説明を簡単にするため、ファイルＸ，Ｙそれぞれは、３つのチャンクに分割されているとする。更に、図中の角括弧記号（［］）で括られた数値は、ファイルの先頭からのオフセット位置を示す。
【００３１】
第Ｎ−１世代では、記憶装置４０には、チャンクＯ１，Ｏ２，Ｏ３，Ｏ１１，Ｏ１２が格納されている。チャンクＯ１は、データ「Ａ」である。チャンクＯ２は、データ「Ｂ」である。チャンクＯ３は、データ「Ｃ」である。チャンクＯ１１は、データ「Ｇ」である。チャンクＯ１２は、データ「Ｈ」である。
【００３２】
第Ｎ−１世代におけるファイルＸのメタ情報は、次の通りである。オフセット［０］がチャンクＯ１、オフセット［１］がチャンクＯ２、オフセット［３］がチャンクＯ３を示す。このように、ファイルのオフセット位置に対応するチャンクを示す情報が管理される。チャンクを示す情報は、チャンクの識別名（例えば、当該チャンクに対応するオブジェクト名でもよい）や、チャンクの格納位置を示すポインタなどでもよい。
【００３３】
第Ｎ−１世代におけるファイルＹのメタ情報は、次の通りである。オフセット［０］がチャンクＯ１１、オフセット［１］がチャンクＯ２、オフセット［３］がチャンクＯ１２を示す。第Ｎ−１世代において、ファイルＸ，Ｙのオフセット［１］の部分がそれぞれチャンクＯ２を参照している。記憶装置４０では、チャンクＯ２について重複が排除される（例えば、ファイルＸ，Ｙに対して、チャンクＯ２を１つ格納する）。
【００３４】
情報処理装置１０，２０それぞれの時刻Ｔ１のディレクトリ構造Ｋ１，Ｋ２は、第Ｎ−１世代のファイルＸ，Ｙを含む。
第Ｎ世代では、処理部１２は、ファイルＸのオフセット［０］の部分の参照先を、チャンクＯ１からチャンクＯ４に更新する。チャンクＯ４は、データ「Ｄ」である。また、第Ｎ世代では、処理部１２は、ファイルＹのオフセット［０］の部分の参照先を、チャンクＯ１１からチャンクＯ１３に更新する。チャンクＯ１３は、データ「Ｉ」である。更に、第Ｎ世代では、処理部１２は、ファイルＹのオフセット［１］の部分の参照先を、チャンクＯ２からチャンクＯ１４に更新する。チャンクＯ１４は、データ「Ｊ」である。
【００３５】
この場合、処理部１２は、第Ｎ世代の変更ログＬ１に次の情報を含める。
第１には、ファイルＸの属性情報（図中「Ｘ」と表記）、および、当該属性情報に関連付けられたファイルＸのマップ情報である。ファイルＸのマップ情報は、ファイルＸのオフセット［０］の部分の参照先をチャンクＯ１からチャンクＯ４に更新したことを示す。
【００３６】
第２には、ファイルＹの属性情報（図中「Ｙ」と表記）、および、当該属性情報に関連付けられたファイルＹのマップ情報である。ファイルＹのマップ情報は、ファイルＹのオフセット［０］の部分の参照先をチャンクＯ１１からチャンクＯ１３に更新したこと、および、ファイルＹのオフセット「１」の部分の参照先をチャンクＯ２からチャンクＯ１４に更新したことを示す。
【００３７】
前述の時刻Ｔ３では、処理部２２は、変更ログＬ１に含まれるファイルＸ，Ｙそれぞれの属性情報およびマップ情報に基づいて、ファイルＸ，Ｙの更新を認識し、ディレクトリ構造Ｋ２の内容を更新する。その結果、ディレクトリ構造Ｋ２は、ディレクトリ構造Ｋ１に同期される。
【００３８】
次に、第Ｎ＋１世代の変更ログＬ２について説明する。
例えば、時刻Ｔ３の後、処理部１２は、ファイルＸのオフセット［１］の部分の参照先を、チャンクＯ２からチャンクＯ５に更新する。チャンクＯ５は、データ「Ｅ」である。また、処理部１２は、ファイルＸのオフセット［２］の部分の参照先を、チャンクＯ３からチャンクＯ６に更新する。チャンクＯ６は、データ「Ｆ」である。更に、処理部１２は、ファイルＹのオフセット［２］の部分の参照先を、チャンクＯ１２からチャンクＯ１５に更新する。チャンクＯ１５は、データ「Ｋ」である。
【００３９】
この場合、処理部１２は、第Ｎ＋１世代の変更ログＬ２に次の情報を含める。
第１には、ファイルＸの属性情報、および、当該属性情報に関連付けられたファイルＸのマップ情報である。ファイルＸのマップ情報は、ファイルＸのオフセット［１］の部分の参照先をチャンクＯ２からチャンクＯ５に更新したこと、および、ファイルＸのオフセット［２］の部分の参照先をチャンクＯ３からチャンクＯ６に更新したことを示す。
【００４０】
第２には、ファイルＹの属性情報、および、当該属性情報に関連付けられたファイルＹのマップ情報である。ファイルＹのマップ情報は、ファイルＹのオフセット［２］の部分の参照先をチャンクＯ１２からチャンクＯ１５に更新したことを示す。処理部１２は、変更ログＬ２を管理装置３０に送信する。
【００４１】
例えば、時刻Ｔ４において、処理部２２は変更ログＬ２を管理装置３０から取得する。処理部２２は、変更ログＬ２に含まれるファイルＸ，Ｙそれぞれの属性情報およびマップ情報に基づいて、ファイルＸ，Ｙの更新を認識し、ディレクトリ構造Ｋ２の内容を更新する。
【００４２】
なお、上記のように、更新前のチャンクを示す情報をマップ情報に含めることで、当該マップ情報による該当ファイルの該当部分の復元が可能になる。例えば、処理部１２は、変更ログＬ２に含まれるマップ情報を基に、ファイルＸ，Ｙの各部分の参照先のチャンクを戻すことで、第Ｎ世代の状態を復元可能である。更に、処理部１２は、変更ログＬ１に含まれるマップ情報を基に、ファイルＸ，Ｙの各部分の参照先のチャンクを戻すことで、第Ｎ世代の状態から第Ｎ−１世代の状態を復元可能である。この場合、変更ログＬ１，Ｌ２による参照も各チャンクの被参照数に含めて管理される。
【００４３】
上記の例では、ファイルの更新を主に例示したが、情報処理装置１０，２０は、ファイルの作成やファイルの削除についても、次のように同様に処理する。
図３は、情報処理システムの他の処理例を示す図である。
【００４４】
ディレクトリ構造Ｋ３は、情報処理装置１０のファイルシステムが認識するディレクトリおよびファイルの構造の他の例を示す。ディレクトリ構造Ｋ４は、情報処理装置２０のファイルシステムが認識するディレクトリおよびファイルの構造の他の例を示す。
【００４５】
時刻Ｔ１０において、ディレクトリ構造Ｋ３，Ｋ４は一致している。具体的には、ディレクトリ構造Ｋ３，Ｋ４では、ディレクトリ「ｄｉｒ」の配下にファイル「ｆｉｌｅ＿ｘ」のみを有する。
【００４６】
時刻Ｔ１１において、処理部１２は、ディレクトリ「ｄｉｒ」の配下にファイル「ｆｉｌｅ＿ｙ」を作成する。処理部１２は、ファイルの作成により、当該ファイルの属性情報や当該ファイルのチャンクを示すマップ情報を変更ログＬ３に記録する。処理部１２は、当該ファイルのメタ情報や新規作成したチャンクを管理装置３０に送信する。この段階において、ディレクトリ構造Ｋ３のディレクトリ「ｄｉｒ」の配下には、ファイル「ｆｉｌｅ＿ｘ」および作成されたファイル「ｆｉｌｅ＿ｙ」が認識されている。また、ディレクトリ構造Ｋ４のディレクトリ「ｄｉｒ」の配下には、ファイル「ｆｉｌｅ＿ｘ」のみが認識されている。
【００４７】
時刻Ｔ１２において、処理部１２は、ファイル「ｆｉｌｅ＿ｘ」を削除する。処理部１２は、ファイルの削除により、削除対象のファイルの属性情報や当該ファイルのチャンクを示すマップ情報を変更ログＬ３に記録する。処理部１２は、削除対象の当該ファイルのメタ情報を管理装置３０に送信する。また、処理部１２は、時刻Ｔ１２の後、時刻Ｔ１３の前に、変更ログＬ３を管理装置３０に送信する。この段階において、ディレクトリ構造Ｋ３のディレクトリ「ｄｉｒ」の配下には、ファイル「ｆｉｌｅ＿ｙ」のみが認識されている。また、ディレクトリ構造Ｋ４のディレクトリ「ｄｉｒ」の配下には、ファイル「ｆｉｌｅ＿ｘ」のみが認識されている。
【００４８】
時刻Ｔ１３において、処理部２２は、管理装置３０から変更ログＬ３を取得する。処理部２２は、変更ログＬ３に含まれるファイル「ｆｉｌｅ＿ｘ」に関する属性情報およびマップ情報に基づいて、削除されたファイル「ｆｉｌｅ＿ｘ」を認識する。また、処理部２２は、変更ログＬ３に含まれるファイル「ｆｉｌｅ＿ｙ」に関する属性情報およびマップ情報に基づいて、作成されたファイル「ｆｉｌｅ＿ｙ」および当該ファイルに関連付けられた各チャンクを認識する。この段階において、ディレクトリ構造Ｋ４のディレクトリ「ｄｉｒ」の配下には、ファイル「ｆｉｌｅ＿ｙ」のみが認識されており、ディレクトリ構造Ｋ３，Ｋ４が同期された状態となる。
【００４９】
このように、情報処理装置１０により、ファイルが更新されると、更新後のファイルの属性情報と更新後のファイルのうち更新されたチャンクを示すマップ情報とが記録されることで複数のファイルに対する更新を示す変更ログが生成される。情報処理装置１０により、変更ログに世代を示す情報が設定され、記憶装置４０に接続された管理装置３０に変更ログが送信される。情報処理装置２０により、管理装置３０から変更ログが取得され、世代の順に変更ログが参照されて、更新が行われた複数のファイルが認識される。
【００５０】
情報処理システム１によれば、オペレーション回数を削減できる。例えば、図１，２で例示したように、情報処理装置２０は、変更ログＬ１により、ファイルＸ（ファイル「ｆｉｌｅ＿Ｘ」）およびファイルＹ（ファイル「ｆｉｌｅ＿Ｙ」）の両方の更新を認識できる。このため、情報処理装置２０は、ファイルＸ，Ｙそれぞれのメタ情報を管理装置３０から個別に取得せずに済む。個別にメタ情報を取得する場合、ファイルＸ，Ｙに対して、合計で２回のオペレーションを行うことになる。一方、変更ログＬ１を用いることで、変更ログＬ１を１回取得すれば済み、オペレーション回数を削減できる。
【００５１】
すなわち、情報処理装置２０は、複数のファイルを参照するファイルシステムを有し、変更ログＬ１に基づいて複数のファイルの更新を当該ファイルシステムに反映する。これにより、情報処理装置１０，２０のファイルシステムが効率的に同期される。
【００５２】
変更ログＬ２，Ｌ３それぞれについても同様である。例えば、情報処理装置２０は、変更ログＬ２により、ファイルＸ（ファイル「ｆｉｌｅ＿Ｘ」）およびファイルＹ（ファイル「ｆｉｌｅ＿Ｙ」）の両方の更新を認識できる。このため、情報処理装置２０は、ファイルＸ，Ｙそれぞれのメタ情報を管理装置３０から個別に取得せずに済む。個別にメタ情報を取得する場合、２つのファイルＸ，Ｙに対して、合計で２回のオペレーションを行うことになる。一方、変更ログＬ２を用いることで、変更ログＬ２を１回取得すれば済み、オペレーション回数を削減できる。また、例えば、情報処理装置２０は、変更ログＬ３により、ファイル「ｆｉｌｅ＿ｘ」の削除およびファイル「ｆｉｌｅ＿ｙ」の作成という両方の更新を認識できる。このため、情報処理装置２０は、ファイル「ｆｉｌｅ＿ｘ」およびファイル「ｆｉｌｅ＿ｙ」それぞれのメタ情報を管理装置３０から個別に取得せずに済む。個別にメタ情報を取得する場合、ファイル「ｆｉｌｅ＿ｘ」およびファイル「ｆｉｌｅ＿ｙ」に対して、合計で２回のオペレーションを行うことになる。一方、変更ログＬ３を用いることで、変更ログＬ３を１回取得すれば済み、オペレーション回数を削減できる。
【００５３】
変更ログには、新規のファイルの作成、既存のファイルの更新および既存のファイルの削除が記録され得る。例えば、新規ファイルの作成と、既存ファイルの更新とが記録されることもあれば、ある既存ファイルの更新と、別の既存ファイルの削除とが記録されることもある。あるいは、新規ファイルの作成と、ある既存ファイルの更新と、別の既存ファイルの削除とが記録されることもある。また、変更ログには３以上のファイルに対する操作（作成、更新および削除）が記録されることもある。
【００５４】
ここで、情報処理システム１の運用上、情報処理装置１０，２０から管理装置３０への単位時間当たりのオペレーション回数が制限されることもある。例えば、管理装置３０および記憶装置４０がオブジェクトストレージとして利用される場合、「バケット」と呼ばれる論理的な領域に対する単位時間当たりのオペレーション回数が制限され得る。よって、情報処理装置１０が複数のファイルを更新し、情報処理装置２０が各ファイルのメタ情報を個別に管理装置３０から取得して、情報処理装置１０，２０のファイルシステムを同期させようとすると、オペレーション回数の制限により当該同期が遅延し得る。
【００５５】
そこで、情報処理装置１０，２０により、変更ログを用いて、複数のファイルに対する更新を一括して認識することで、オペレーション回数を削減し、オペレーション回数の制限がある場合でも、情報処理装置１０，２０のファイルシステムの同期を高速化できる。
【００５６】
また、前述のように、情報処理装置１０は、更新されたファイルのうち、更新された部分に対応する更新前のチャンクを示す情報と更新後のチャンクを示す情報とをマップ情報に格納する。情報処理装置１０は、当該マップ情報に基づいて、更新されたファイルを、変更ログの世代よりも１つ前の世代の状態に復元する。これにより、記憶装置４０に格納されたファイルに対して別途バックアップを取得しなくても、ファイルの復元を行える。
【００５７】
例えば、情報処理装置１０は、復元先の世代を示す情報を取得すると、複数の世代の変更ログに基づいて、複数のファイルの状態を現在の世代から１世代ずつ順番に復元することで、復元先の世代の複数のファイルの状態を復元する。複数の世代の変更ログを順に遡ることで、複数の世代を隔てた過去の世代における複数のファイルの状態を復元可能になる。
【００５８】
以下では、オブジェクトストレージを提供するシステムを例示して、情報処理装置１０，２０の機能を詳細に説明する。
［第２の実施の形態］
次に、第２の実施の形態を説明する。
【００５９】
図４は、第２の実施の形態の情報処理システムの例を示す図である。
第２の実施の形態の情報処理システムは、更新サーバ１００、参照サーバ２００，３００およびオブジェクトストレージ４００を有する。更新サーバ１００、参照サーバ２００，３００およびオブジェクトストレージ４００は、ネットワーク５０に接続されている。ネットワーク５０は、例えば、ＷＡＮ（Wide Area Network）やインターネットなどである。更新サーバ１００は、ネットワーク６０に接続されている。ネットワーク６０は、例えばＬＡＮ（Local Area Network）である。ネットワーク６０には、クライアント６１，６２が接続されている。参照サーバ２００は、ネットワーク７０に接続されている。ネットワーク７０は、例えばＬＡＮである。ネットワーク７０には、クライアント７１，７２が接続されている。参照サーバ３００は、ネットワーク８０に接続されている。ネットワーク８０は、例えばＬＡＮである。ネットワーク８０には、クライアント８１，８２が接続されている。
【００６０】
更新サーバ１００および参照サーバ２００，３００は、オブジェクトストレージ４００に格納されたファイルを、クライアント６１，６２，７１，７２，８１，８２により共有可能にするサーバコンピュータである。更新サーバ１００および参照サーバ２００，３００は、各クライアントに対してＮＡＳあるいはファイルサーバ（ただし、ファイルはオブジェクトストレージ４００に一元的に格納される）の機能を提供するとも言える。
【００６１】
更新サーバ１００は、オブジェクトストレージ４００に格納されたファイルの更新および参照が許可されているサーバである。更新サーバ１００は、例えば、システム内に１つ設けられる。更新サーバ１００が設けられた拠点を、「更新サイト」と言うことがある。参照サーバ２００，３００は、オブジェクトストレージ４００に格納されたファイルの参照が許可されているが、当該ファイルの更新が許可されていないサーバである。参照サーバ２００，３００は、システム内に複数設けられる（３以上設けられてもよい）。参照サーバ２００，３００それぞれが設けられた各拠点を、「参照サイト」と言うことがある。
【００６２】
オブジェクトストレージ４００は、ファイルをオブジェクトと呼ばれる単位で管理する。オブジェクトストレージ４００は、例えば、管理サーバ５００およびストレージ装置６００により実現される。管理サーバ５００は、更新サーバ１００および参照サーバ２００，３００による要求を受け付け、要求に応じて、ストレージ装置６００に対するファイルの格納や、ストレージ装置６００からのファイルの取得を中継するサーバコンピュータである。ストレージ装置６００は、複数の記憶装置（例えば、ＨＤＤやＳＳＤ（Solid State Drive）など）を備え、大容量の記憶領域を提供するストレージである。
【００６３】
クライアント６１，６２は、更新サーバ１００を介して、オブジェクトストレージ４００に格納されたファイルにアクセスするクライアントコンピュータである。クライアント６１，６２は、ファイルの更新の指示や、ファイルの参照の指示を更新サーバ１００に送信する。クライアント６１，６２は、例えば、オブジェクトストレージ４００上に作成されたディレクトリ構造を操作するためのＵＩ（User Interface）をユーザに提供する。当該ＵＩは、ＧＵＩ（Graphical User Interface）でもよいし、ＣＵＩ（Character User Interface）でもよい。ユーザは、当該ＵＩを用いて、ファイルに対する操作（作成、更新および削除）やファイルの参照を行える。
【００６４】
クライアント７１，７２は、参照サーバ２００を介して、オブジェクトストレージ４００に格納されたファイルにアクセスするクライアントコンピュータである。クライアント７１，７２は、ファイルの参照の指示を参照サーバ２００に送信する。クライアント７１，７２は、例えば、オブジェクトストレージ４００上に作成されたディレクトリ構造を参照するためのＵＩ（ＧＵＩやＣＵＩ）をユーザに提供する。ユーザは、当該ＵＩを操作して、ファイルの参照を行える。
【００６５】
クライアント８１，８２は、参照サーバ３００を介して、オブジェクトストレージ４００に格納されたファイルにアクセスするクライアントコンピュータである。クライアント８１，８２は、ファイルの参照の指示を参照サーバ３００に送信する。クライアント８１，８２は、例えば、オブジェクトストレージ４００上に作成されたディレクトリ構造を参照するためのＵＩ（ＧＵＩやＣＵＩ）をユーザに提供する。ユーザは、当該ＵＩを操作して、ファイルの参照を行える。
【００６６】
図５は、更新サーバのハードウェア例を示すブロック図である。
更新サーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ１０３、画像信号処理部１０４、入力信号処理部１０５、媒体リーダ１０６および通信インタフェース１０７，１０８を有する。なお、ＣＰＵ１０１は、第１の実施の形態の処理部１２に対応する。ＲＡＭ１０２またはＨＤＤ１０３は、第１の実施の形態の記憶部１１に対応する。
【００６７】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されたプログラムやデータの少なくとも一部をＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、更新サーバ１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００６８】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。なお、更新サーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えてもよい。
【００６９】
ＨＤＤ１０３は、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。なお、更新サーバ１００は、フラッシュメモリやＳＳＤなどの他の種類の記憶装置を備えてもよく、複数の不揮発性の記憶装置を備えてもよい。
【００７０】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、更新サーバ１００に接続されたディスプレイ１１１に画像を出力する。ディスプレイ１１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）など、任意の種類のディスプレイを用いることができる。
【００７１】
入力信号処理部１０５は、更新サーバ１００に接続された入力デバイス１１２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス１１２としては、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。また、更新サーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００７２】
媒体リーダ１０６は、記録媒体１１３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体１１３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、例えば、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００７３】
媒体リーダ１０６は、例えば、記録媒体１１３から読み取ったプログラムやデータを、ＲＡＭ１０２やＨＤＤ１０３などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体１１３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体１１３やＨＤＤ１０３を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００７４】
通信インタフェース１０７は、ネットワーク５０に接続され、ネットワーク５０を介してオブジェクトストレージ４００と通信を行うインタフェースである。通信インタフェース１０７は、例えば、ネットワーク５０に属するスイッチやルータなどの通信装置とケーブルで接続される。
【００７５】
通信インタフェース１０８は、ネットワーク６０に接続され、ネットワーク６０を介してクライアント６１，６２と通信を行うインタフェースである。通信インタフェース１０８は、例えば、ネットワーク６０に属するスイッチやルータなどの通信装置とケーブルで接続される。
【００７６】
なお、参照サーバ２００，３００、管理サーバ５００およびクライアント６１，６２，７１，７２，８１，８２も、更新サーバ１００と同様のハードウェアにより実現できる。
ここで、更新サーバ１００および参照サーバ２００，３００は、オブジェクトストレージ４００をバックエンドにもつ重複排除を行うファイルシステムとして機能する。
【００７７】
図６は、重複排除の例を示す図である。
ファイルＦ１，Ｆ２がオブジェクトストレージ４００に格納される場合を考える。ファイルＦ１，Ｆ２は、チャンクと呼ばれるデータ単位に分割される。各チャンクのサイズは異なっていてもよい。例えば、ファイルＦ１は、５つのチャンクＡ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１に分割される。また、例えば、ファイルＦ２は、４つのチャンクＡ２，Ｂ１，Ｃ２，Ｄ１に分割される。各チャンクは、チャンクストア（すなわち、オブジェクトストレージ４００）に重複を排除して格納される。すなわち、ファイルＦ１，Ｆ２の例では、２つのチャンクＢ１，Ｄ１がファイルＦ１，Ｆ２の両方に含まれる。この場合、チャンクＢ１，Ｄ１は、参照元のファイルＦ１，Ｆ２の数よりも少ない数だけ保持される。例えば、チャンクＢ１は、２つのファイルＦ１，Ｆ２に対して１つだけ保持される。また、例えば、チャンクＤ１は、２つのファイルＦ１，Ｆ２に対して１つだけ保持される。これにより、オブジェクトストレージ４００の記憶領域を節約できる。
【００７８】
この場合、ファイルＦ１とファイルＦ１を構成する各チャンクを関連付けるチャンクマップＭ１が作成される。また、ファイルＦ２とファイルＦ２を構成する各チャンクを関連付けるチャンクマップＭ２が作成される。例えば、チャンクマップＭ１は、ファイルＦ１がチャンクＡ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１により構成されることを示す情報を含む。また、チャンクマップＭ２は、ファイルＦ２がチャンクＡ２，Ｂ１，Ｃ２，Ｄ１により構成されることを示す情報を含む。各チャンクやチャンクマップＭ１，Ｍ２は、オブジェクトとして管理される。
【００７９】
更新サーバ１００および参照サーバ２００，３００は、チャンクマップＭ１に基づいて、ファイルＦ１を構成するチャンクＡ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１を特定することができる。同様に、更新サーバ１００および参照サーバ２００，３００は、チャンクマップＭ２に基づいて、ファイルＦ２を構成する各チャンクを特定することができる。
【００８０】
例えば、更新サーバ１００は、チャンクマップＭ１に基づいて、ファイルＦ１を構成するチャンクＡ１，Ｂ１，Ｃ１，Ｄ１，Ｅ１をオブジェクトストレージ４００からダウンロードし、クライアント６１，６２にファイルＦ１の本体データを提供する。更新サーバ１００は、クライアント６１，６２によるファイルＦ１の更新を受け付けることもできる。
【００８１】
また、例えば、参照サーバ２００は、チャンクマップＭ２に基づいて、ファイルＦ２を構成するチャンクＡ２，Ｂ１，Ｃ２，Ｄ１をオブジェクトストレージ４００からダウンロードし、クライアント７１，７２にファイルＦ２の本体データを提供する。参照サーバ３００も参照サーバ２００と同様に機能する。
【００８２】
図７は、オブジェクトストレージに対するアクセス例を示す図である。
更新サーバ１００のファイルシステムは、あるファイルに対するｒｅａｄ（読み出し）要求をクライアント６１，６２から受け付ける。すると、更新サーバ１００のファイルシステムは、オブジェクトストレージ４００に対し、当該ファイルに対応するオブジェクトのｋｅｙを指定することで、オブジェクトストレージ４００からデータ（ｖａｌｕｅ）を取得する。ｗｒｉｔｅ（書き込み）要求を受け付けた場合も、更新サーバ１００は、ｒｅａｄ要求の場合と同様にして、オブジェクトストレージ４００からデータを取得する。また、参照サーバ２００，３００も更新サーバ１００と同様にして、クライアントから受け付けたｒｅａｄ要求に応じたデータを、オブジェクトストレージ４００から取得する。
【００８３】
図８は、更新サイトと参照サイトとの関係の例を示す図である。
前述のように、更新サイトにおける更新サーバ１００は、オブジェクトストレージ４００に対するｒｅａｄ／ｗｒｉｔｅが可能である。すなわち、更新サーバ１００は、ｗｒｉｔｅ対象のオブジェクトをオブジェクトストレージ４００にアップロードすることがある。また、更新サーバ１００は、ｒｅａｄ対象のオブジェクトをオブジェクトストレージ４００からダウンロードすることがある。
【００８４】
参照サイトにおける参照サーバ２００，３００は、オブジェクトストレージ４００に対するｒｅａｄのみが可能である。すなわち、参照サーバ２００，３００は、ｒｅａｄ対象のオブジェクトをオブジェクトストレージ４００からダウンロードすることがある。
【００８５】
更に、更新サーバ１００および参照サーバ２００は、更新サーバ１００と参照サーバ２００との通信を行わない。また、更新サーバ１００および参照サーバ３００は、更新サーバ１００と参照サーバ３００との通信を行わない。
【００８６】
図９は、情報処理システムの機能例を示す図である。
更新サーバ１００は、記憶部１２０、ファイルシステム１３０およびＮＡＳサービス提供部１４０を有する。記憶部１２０は、ＲＡＭ１０２またはＨＤＤ１０３の記憶領域を用いて実現される。ファイルシステム１３０およびＮＡＳサービス提供部１４０は、ＲＡＭ１０２に記憶されたプログラムをＣＰＵ１０１が実行することで実現される。
【００８７】
記憶部１２０は、変更ログを記憶する。変更ログは、複数のファイルの作成、更新および削除などの履歴を示す履歴情報である。また、記憶部１２０は、チャンクに対して各ファイルからの被参照数の情報を記憶する。
【００８８】
ファイルシステム１３０は、ファイルをチャンク単位に分割し、各ファイルのチャンクの重複を排除してオブジェクトストレージ４００に格納する。例えば、オブジェクトストレージ４００に対するデータの書き込みにはＰＵＴコマンドが用いられ、データの読み出しにはＧＥＴコマンドが用いられる。１つのファイルは、複数のオブジェクトから構成されることになる。ファイルシステム１３０は、ＮＡＳサービス提供部１４０に対して、オブジェクトストレージ４００に格納されたファイルを提供する。ファイルシステム１３０は、ログ生成部１３１、ログ送信部１３２および復元部１３３を有する。
【００８９】
ログ生成部１３１は、複数のファイルそれぞれの作成、更新、削除を行うたびに当該ファイルの属性情報と更新後のファイルに関連するチャンクを示すマップ情報とを記録することで、当該複数のファイルに対する作成、更新、削除を示す変更ログを生成する。ログ生成部１３１は、変更ログに世代を示す情報を付与する。ログ生成部１３１は、変更ログを記憶部１２０に格納する。
【００９０】
ログ送信部１３２は、所定期間、変更ログに対する記録が行われると、当該変更ログを管理サーバ５００に送信する。ログ送信部１３２による変更ログの送信が行われると、ログ生成部１３１により、次の世代の変更ログの生成が開始される。
【００９１】
復元部１３３は、記憶部１２０に格納された変更ログに基づいて、オブジェクトストレージ４００に格納されたファイルを、過去の世代の状態に復元する。
ＮＡＳサービス提供部１４０は、クライアント６１，６２に対するＮＡＳサービスを提供する。ＮＡＳサービス提供部１４０は、例えば、ＮＦＳ（Network File System）やＳａｍｂａにより実現されてもよい。ＮＡＳサービス提供部１４０は、ファイルシステム１３０を介して、オブジェクトストレージ４００に格納されたファイルにアクセスする（ｒｅａｄ／ｗｒｉｔｅが可能である）。
【００９２】
参照サーバ２００は、記憶部２２０、ファイルシステム２３０およびＮＡＳサービス提供部２４０を有する。記憶部２２０は、参照サーバ２００が備えるＲＡＭまたはＨＤＤの記憶領域を用いて実現される。ファイルシステム２３０およびＮＡＳサービス提供部１４０は、参照サーバ２００が備えるＲＡＭに記憶されたプログラムを、参照サーバ２００が備えるＣＰＵが実行することで実現される。
【００９３】
記憶部２２０は、変更ログを記憶する。記憶部２２０に格納される変更ログは、ファイルシステム２３０により管理サーバ５００から取得される。
ファイルシステム２３０は、ＮＡＳサービス提供部２４０に対して、オブジェクトストレージ４００に格納されたファイルを提供する。ファイルシステム２３０は、ログ受信部２３１およびログ処理部２３２を有する。
【００９４】
ログ受信部２３１は、管理サーバ５００から変更ログを受信する。ログ受信部２３１は、例えば、ログ送信部１３２により変更ログが送信される周期で、管理サーバ５００から変更ログを受信する。ログ受信部２３１は、受信した変更ログを記憶部２２０に格納する。
【００９５】
ログ処理部２３２は、変更ログを処理する。ログ処理部２３２は、変更ログに基づいて、新規に作成されたファイル、更新された既存ファイル、および、削除された既存ファイルを認識する。ログ処理部２３２は、ファイルの作成、更新および削除に応じた変更後のディレクトリ構造の情報を、ＮＡＳサービス提供部２４０に提供する。
【００９６】
ＮＡＳサービス提供部２４０は、クライアント７１，７２に対するＮＡＳサービスを提供する。ＮＡＳサービス提供部２４０は、例えば、ＮＦＳやＳａｍｂａにより実現されてもよい。ＮＡＳサービス提供部１４０は、ファイルシステム２３０を介して、オブジェクトストレージ４００に格納されたファイルにアクセスする（ｒｅａｄのみが可能である）。
【００９７】
なお、参照サーバ３００も参照サーバ２００と同様の機能を有する。また、図９では図示を省略しているが、ファイルシステム１３０は、ログ処理部２３２の機能も有する。
管理サーバ５００は、記憶部５２０および管理部５３０を有する。記憶部５２０は、管理サーバ５００が備えるＲＡＭまたはＨＤＤの記憶領域を用いて実現される。管理部５３０は、管理サーバ５００が備えるＲＡＭに記憶されたプログラムを、管理サーバ５００が備えるＣＰＵが実行することで実現される。
【００９８】
記憶部５２０は、更新サーバ１００から受信した変更ログを記憶する。
管理部５３０は、更新サーバ１００からファイル毎のオブジェクトを受信し、ストレージ装置６００に格納する。また、管理部５３０は、更新サーバ１００から変更ログを受信し、記憶部５２０に格納する。管理部５３０は、ストレージ装置６００に変更ログを格納してもよい。管理部５３０は、更新サーバ１００および参照サーバ２００，３００に対して、変更ログの提供や各種オブジェクトの提供を行う。
【００９９】
ここで、前述のように１つのファイルは複数のオブジェクトから構成される。オブジェクトの種類には、主に次の３つがある。
第１の種類のオブジェクトは、ｉｎｏｄｅオブジェクト（inodeObject）である。ｉｎｏｄｅオブジェクトは、ファイルのｉｎｏｄｅ情報を管理する。ｉｎｏｄｅ情報は、第１の実施の形態の「属性情報」の一例である。例えば、ｉｎｏｄｅオブジェクトのサイズは、１ファイル当たり４００バイト（Bytes）程度である。
【０１００】
第２の種類のオブジェクトは、チャンクマップオブジェクト（chunkmapObject）である。チャンクマップオブジェクトは、ファイルのチャンクデータのマッピング情報である。例えば、チャンクマップオブジェクトのサイズは、ファイル１ギガバイト（Giga Bytes）当たり６キロバイト（Kilo Bytes）程度である。ファイル全体に対するチャンクマップオブジェクトは、第１の実施の形態の「メタ情報」の一例である。また、変更ログにチャンクマップオブジェクトが含まれることがある。変更ログに含まれるチャンクマップオブジェクトは、第１の実施の形態の「マップ情報」の一例である。チャンクマップオブジェクトを単に「チャンクマップ」と言うことがある。
【０１０１】
第３の種類のオブジェクトは、チャンクデータオブジェクト（chunkdataObject）である。チャンクデータオブジェクトは、オブジェクトストレージ４００にアクセスする各ファイルシステムにおいてユニークなチャンクデータ（chunkdata）を管理するための情報である。チャンクデータオブジェクトのサイズは、１オブジェクト当たり１２５メガバイト（Mega Bytes）程度である。チャンクデータを単に「チャンク」と言うことがある。
【０１０２】
例えば、更新サーバ１００によりファイルのｗｒｉｔｅが行われると、ｉｎｏｄｅオブジェクト、チャンクマップオブジェクトおよびチャンクデータオブジェクトが、更新サーバ１００から管理サーバ５００にアップロードされる。ｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトが、参照サーバ２００により管理サーバ５００からダウンロードされると、両オブジェクトを基に、参照サーバ２００のファイルシステム２３０で当該ｗｒｉｔｅされたファイルが認識される。参照サーバ２００は、チャンクマップオブジェクトに基づいて、チャンクデータを管理サーバ５００からダウンロードすることで、該当のファイルの本体データを取得し、ＮＡＳサービス提供部２４０に提供する。
【０１０３】
図１０は、ファイル管理のためのデータ構造例を示す図である。
ここでは、前述の３つのオブジェクトに対応するクラス間の関係を示す。クラス７１０は、ｉｎｏｄｅオブジェクトの基となるクラスである。クラス７１０のインスタンスが、ｉｎｏｄｅオブジェクトに相当する。クラス７１０は、ｉｎｏｄｅ番号、親ディレクトリｉｎｏｄｅ番号、ファイル名、ファイル種別、ファイルサイズおよびファイル変更時刻などの情報を含む。ここで、ファイル種別は、当該ｉｎｏｄｅオブジェクトがディレクトリ（ｄｉｒ）を示すか、ファイル（ｆｉｌｅ）を示すかを識別するための情報である。
【０１０４】
クラス７２０は、チャンクマップオブジェクトの基となるクラスである。クラス７２０のインスタンスが、チャンクマップオブジェクトに相当する。ファイルにおけるチャンクの並びは、チャンクマップオブジェクトにより管理される。クラス７２０の１レコードは、［ｆｉｌｅ＿ｏｆｆｓｅｔ］、［ｃｈｕｎｋ＿ｓｉｚｅ］、［ｃｈｕｎｋｄａｔａ＿ｉｎｄｅｘ］を含む。チャンクマップオブジェクトは、複数のレコードを含み得る。
【０１０５】
［ｆｉｌｅ＿ｏｆｆｓｅｔ］は、該当のファイルにおける先頭からのオフセット位置を示す。［ｃｈｕｎｋ＿ｓｉｚｅ］は、当該オフセット位置に相当するチャンクデータのサイズを示す。［ｃｈｕｎｋｄａｔａ＿ｉｎｄｅｘ］は、当該オフセット位置に相当するチャンクデータのインデックスを示す。チャンクマップオブジェクトからは、チャンクデータオブジェクトにおけるＮ（Ｎは１以上の整数）個のレコードが参照され得る。
【０１０６】
ここで、ｉｎｏｄｅオブジェクトと、チャンクマップオブジェクトとは、関連情報７３０により関連付けられる。例えば、関連情報７３０は、ｉｎｏｄｅオブジェクトに含まれるｉｎｏｄｅ番号とチャンクマップオブジェクトとの関連を示す。
【０１０７】
クラス７４０は、チャンクデータオブジェクトの基となるクラスである。クラス７４０のインスタンスがチャンクデータオブジェクトに相当する。チャンクは、チャンクデータオブジェクトにより、ハッシュ化した情報とともに管理される。クラス７４０の１レコードは、ｃｈｕｎｋｍｅｔａ［ｉｎｄｅｘ］およびｃｈｕｎｋｄａｔａ［ｉｎｄｅｘ］を含む。
【０１０８】
ｃｈｕｎｋｍｅｔａ［ｉｎｄｅｘ］は、チャンクメタ（chunkmeta）のオブジェクトを示す。ｃｈｕｎｋｄａｔａ［ｉｎｄｅｘ］は、チャンクデータのオブジェクトを示す。インデックス（ｉｎｄｅｘ）により、チャンクメタとチャンクデータとが対応付けられる。
【０１０９】
クラス７５０は、チャンクメタの基となるクラスである。クラス７５０のインスタンスがチャンクメタのオブジェクトに相当する。チャンクメタは、ｈａｓｈ＿ｋｅｙやｃｈｕｎｋ＿ｓｉｚｅなどの情報を含む。ｈａｓｈ＿ｋｅｙは、チャンクの要約である。ｃｈｕｎｋ＿ｓｉｚｅは、チャンクのサイズである。ｈａｓｈ＿ｋｅｙおよびｃｈｕｎｋ＿ｓｉｚｅにより、チャンクのユニーク性が確認され、重複の識別が行われる。
【０１１０】
クラス７６０は、チャンクデータの基となるクラスである。クラス７６０のインスタンスがチャンクデータのオブジェクトに相当する。チャンクデータは、チャンクのデータ本体（図中、ｄａｔａと表記している）である。
【０１１１】
図１１は、変更ログのデータ構造例を示す図である。
クラス８１０は、変更ログ（図中、changelogObjectまたはchangelogと表記することがある）の基になるクラスである。クラス８１０のインスタンスが変更ログに相当する。変更ログは、ｃｒｅａｔｅｌｏｇ、ｍｏｄｉｆｙｌｏｇ、ｄｅｌｅｔｅｌｏｇ、および、ｍｏｄｉｆｙｓｙｓｔｅｍの各オブジェクトへの参照を含む。ｃｒｅａｔｅｌｏｇは、作成された新規ファイルを示すオブジェクトである。ｍｏｄｉｆｙｌｏｇは、更新された既存ファイルを示すオブジェクトである。ｄｅｌｅｔｅｌｏｇは、削除された既存ファイルを示すオブジェクトである。ｍｏｄｉｆｙｓｙｓｔｅｍは、情報処理システムにおける設定変更（例えば、変更ログのアップロード／ダウンロード周期の変更など）を、更新サーバ１００から参照サーバ２００，３００に通知するためのオブジェクトである。
【０１１２】
クラス８２０は、ｃｒｅａｔｅｌｏｇの基になるクラスである。クラス８２０のインスタンスがｃｒｅａｔｅｌｏｇに相当する。クラス８２０は、ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ、ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ、ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］およびｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］を含む。
【０１１３】
ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍは、ｃｒｅａｔｅｌｏｇにエントリされているｉｎｏｄｅオブジェクトの数を示す。ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍは、ｃｒｅａｔｅｌｏｇにエントリされているチャンクマップオブジェクトの数を示す。ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｃｒｅａｔｅｌｏｇにおけるｉｎｏｄｅオブジェクトのリストである。ｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｃｒｅａｔｅｌｏｇにおけるチャンクマップオブジェクトのリストである。
【０１１４】
クラス８３０は、ｍｏｄｉｆｙｌｏｇの基になるクラスである。クラス８３０のインスタンスがｍｏｄｉｆｙｌｏｇに相当する。クラス８３０は、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅおよびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒの各オブジェクトへの参照を含む。ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅは、更新された既存ファイルに関する更新前のチャンクを示すオブジェクトである。ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒは、更新された既存ファイルに関する更新後のチャンクを示すオブジェクトである。
【０１１５】
クラス８４０は、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅの基になるクラスである。クラス８４０のインスタンスがｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅに相当する。クラス８４０は、ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ、ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ、ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］およびｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］を含む。
【０１１６】
ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍは、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅにエントリされているｉｎｏｄｅオブジェクトの数を示す。ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍは、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅにエントリされているチャンクマップオブジェクトの数を示す。ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅにおけるｉｎｏｄｅオブジェクトのリストである。ｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅにおけるチャンクマップオブジェクトのリストである。
【０１１７】
クラス８５０は、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒの基になるクラスである。クラス８５０のインスタンスがｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒに相当する。クラス８５０は、ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ、ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ、ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］およびｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］を含む。
【０１１８】
ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍは、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒにエントリされているｉｎｏｄｅオブジェクトの数を示す。ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍは、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒにエントリされているチャンクマップオブジェクトの数を示す。ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒにおけるｉｎｏｄｅオブジェクトのリストである。ｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒにおけるチャンクマップオブジェクトのリストである。
【０１１９】
ここで、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅおよびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒそれぞれのチャンクマップオブジェクトには、該当のファイルのうち、更新されたチャンクに関する情報のみが登録され、更新されていないチャンクに関する情報は登録されない。これにより、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅおよびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒのサイズが削減され、その結果、変更ログのサイズが削減される。
【０１２０】
クラス８６０は、ｄｅｌｅｔｅｌｏｇの基になるクラスである。クラス８６０のインスタンスがｄｅｌｅｔｅｌｏｇに相当する。クラス８６０は、ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ、ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ、ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］およびｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］を含む。
【０１２１】
ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍは、ｄｅｌｅｔｅｌｏｇにエントリされているｉｎｏｄｅオブジェクトの数を示す。ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍは、ｄｅｌｅｔｅｌｏｇにエントリされているチャンクマップオブジェクトの数を示す。ｉｎｏｄｅＯｂｊｅｃｔ［ｉｎｏｄｅ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｄｅｌｅｔｅｌｏｇにおけるｉｎｏｄｅオブジェクトのリストである。ｃｈｕｎｋｍａｐＯｂｊｅｃｔ［ｃｈｕｎｋｍａｐ＿ｅｎｔｒｙ＿ｎｕｍ］は、ｄｅｌｅｔｅｌｏｇにおけるチャンクマップオブジェクトのリストである。
【０１２２】
クラス８７０は、ｍｏｄｉｆｙｓｙｓｔｅｍの基になるクラスである。クラス８７０のインスタンスがｍｏｄｉｆｙｓｙｓｔｅｍに相当する。クラス８７０は、ｃｏｎｆｉｇｕｒａｔｉｏｎを含む。ｃｏｎｆｉｇｕｒａｔｉｏｎは、前述のようにシステムの設定変更を示す情報である。システムの設定変更の内容としては、例えば、変更ログのアップロードの周期およびダウンロードの周期の変更が考えられる。
【０１２３】
なお、変更ログは、ｃｒｅａｔｅｌｏｇ、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ、ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒおよびｄｅｌｅｔｅｌｏｇそれぞれに含まれるｉｎｏｄｅオブジェクトとチャンクマップオブジェクトとを関連付ける関連情報７３０を含む。
【０１２４】
また、変更ログおよび図１１で示した変更ログに内包される各オブジェクトは、変更ログという１つのオブジェクトに纏められて１回のオペレーションでのアップロードまたはダウンロードが可能である。また、変更ログおよび変更ログに内包される各オブジェクトのオブジェクト名には、世代を示す共通の番号が付与される。
【０１２５】
次に、更新サーバ１００による変更ログのアップロード例を説明する。
図１２は、変更ログのアップロード例を示す図である。
一例として、新規にファイルが作成される場合を考える。ディレクトリ構造Ｋ１１は、ファイルシステム１３０が認識するディレクトリ構造である。ディレクトリ構造Ｋ１２は、ファイルシステム２３０が認識するディレクトリ構造である。ディレクトリ構造Ｋ１１，Ｋ１２では、当初、ｒｏｏｔディレクトリの配下にディレクトリ「ｄｉｒ＿１」およびディレクトリ「ｄｉｒ＿２」が存在している。また、ディレクトリ「ｄｉｒ＿２」の配下にファイル「ｆｉｌｅ＿Ａ」が存在している。
【０１２６】
なお、更新サーバ１００は、変更ログ８１１，８１２をオブジェクトストレージ４００にアップロード済である。また、参照サーバ２００は、変更ログ８１１，８１２をオブジェクトストレージ４００からダウンロード済である。変更ログ８１１のオブジェクト名は、「ｃｈａｎｇｅｌｏｇ．１」である。変更ログ８１２のオブジェクト名は、「ｃｈａｎｇｅｌｏｇ．２」である。オブジェクト名の末尾の番号は世代を示す。世代を示す番号が大きいほど未来の世代を示し、世代を示す番号が小さいほど過去の世代を示す。すなわち、ファイルシステム２３０が認識するディレクトリ構造Ｋ１２には、世代番号「２」の変更ログ８１２までが反映されていることになる。ファイルシステム１３０は、アップロード済の変更ログも、記憶部１２０に格納する。
【０１２７】
この状態から、ファイルシステム１３０は、ディレクトリ「ｄｉｒ＿２」の配下におけるファイル「ｆｉｌｅ＿Ｂ」の作成を受け付ける（ステップＳＴ１）。例えば、更新サイトのユーザは、クライアント６１を操作して、ディレクトリ「ｄｉｒ＿２」の配下におけるファイル「ｆｉｌｅ＿Ｂ」の作成指示を更新サーバ１００に送信する。すると、ファイルシステム１３０は、ＮＡＳサービス提供部１４０を介して、当該作成指示を受け付ける。
【０１２８】
ファイルシステム１３０は、世代番号「３」の変更ログ８１３に、ディレクトリ「ｄｉｒ＿２」配下にファイル「ｆｉｌｅ＿Ｂ」を作成した旨の情報（具体的には、ｃｒｅａｔｅｌｏｇの情報）を追加する（ステップＳＴ２）。なお、例えば、ファイルが新規に作成されて、ファイルのデータ本体が未作成の場合は、ｉｎｏｄｅオブジェクトのみが作成されることになる。この場合、データ本体が作成されたときにチャンクデータやチャンクマップオブジェクトが作成される。また、ディレクトリやシンボリックリンクなどもｉｎｏｄｅオブジェクトのみが作成されることになる。変更ログ８１３のオブジェクト名は、「ｃｈａｎｇｅｌｏｇ．３」である。なお、この段階では、ディレクトリ構造Ｋ１１において、ディレクトリ「ｄｉｒ＿２」の配下に、ファイル「ｆｉｌｅ＿Ｂ」が作成された状態となる。
【０１２９】
ファイルシステム１３０は、変更ログに追加した情報をオブジェクトストレージ４００にアップロードする（ステップＳＴ３）。なお、ファイル「ｆｉｌｅ＿Ｂ」のデータ本体が作成されると、当該データ本体がチャンク単位に分割されて生成されたチャンクデータ、チャンクデータオブジェクトおよびチャンクマップオブジェクトが、オブジェクトストレージ４００にアップロードされる。
【０１３０】
ファイルシステム１３０は、前回のアップロードから一定時間、変更ログ８１３に変更内容を蓄積した後に、オブジェクトストレージ４００に変更ログ８１３をアップロードする（ステップＳＴ４）。
【０１３１】
次に、参照サーバ２００による変更ログのダウンロード例を説明する。
図１３は、変更ログのダウンロード例を示す図である。
ファイルシステム１３０は、変更ログ８１３をアップロードしたので、次に、変更ログ８１４の作成を開始する。変更ログ８１４のオブジェクト名は「ｃｈａｎｇｅｌｏｇ．４」である。
【０１３２】
ファイルシステム２３０は、前回の変更ログ８１２のダウンロードから一定時間が経過すると、未ダウンロードの世代に対応する変更ログ８１３をオブジェクトストレージ４００からダウンロードする（ステップＳＴ１０）。
【０１３３】
ファイルシステム２３０は、変更ログ８１３のｃｒｅａｔｅｌｏｇに基づいて、ファイル「ｆｉｌｅ＿Ｂ」の作成を、ディレクトリ構造Ｋ１２に反映させる（ステップＳＴ１１）。ファイルシステム２３０は、反映後のディレクトリ構造Ｋ１２を、ＮＡＳサービス提供部２４０を介して、クライアント７１に提供する。
【０１３４】
すると、参照サイトのユーザは、クライアント７１により、ディレクトリ構造Ｋ１２を確認し、ファイル「ｆｉｌｅ＿Ｂ」が新規に作成したことを把握することができる。これにより、ユーザは、クライアント７１を用いて、ファイル「ｆｉｌｅ＿Ｂ」の読み出しが可能になる（ステップＳＴ１２）。例えば、ファイルシステム２３０は、ＮＡＳサービス提供部２４０を介して、ファイル「ｆｉｌｅ＿Ｂ」のｒｅａｄ要求を受け付ける。すると、ファイルシステム２３０は、変更ログ８１３のｃｒｅａｔｅｌｏｇに含まれるチャンクマップオブジェクトに基づいて、ファイル「ｆｉｌｅ＿Ｂ」を構成するチャンクデータをオブジェクトストレージ４００からダウンロードする。ファイルシステム２３０は、ダウンロードしたチャンクデータに基づいて、ファイル「ｆｉｌｅ＿Ｂ」を、ＮＡＳサービス提供部２４０を介して、クライアント７１に提供する。
【０１３５】
次に、以上で説明した更新サーバ１００および参照サーバ２００の処理手順を説明する。まず、更新サーバ１００による変更ログ生成の手順を説明する。
図１４は、変更ログ生成の例を示すフローチャートである。
【０１３６】
（Ｓ１０）ファイルシステム１３０は、自身が動作中であるか否かを判定する。ファイルシステム１３０が動作中の場合、ステップＳ１１に処理が進む。ファイルシステム１３０が動作中でない場合（例えば、ファイルシステム１３０の動作停止の指示を受け付けた場合など）、変更ログ生成が終了する。
【０１３７】
（Ｓ１１）ログ生成部１３１は、クラス８１０に基づいて、世代番号を付与した新規変更ログを生成する。
（Ｓ１２）ログ生成部１３１は、現時刻が変更ログのアップロード時刻に達したか否かを判定する。現時刻がアップロード時刻に達した場合、ステップＳ１５に処理が進む。現時刻がアップロード時刻に達していない場合、ステップＳ１３に処理が進む。
【０１３８】
（Ｓ１３）ログ生成部１３１は、ファイル更新があるか否かを判定する。ファイル更新がある場合、ステップＳ１４に処理が進む。ファイル更新がない場合、ステップＳ１２に処理が進む。ここで、ファイル更新は、新規ファイルの作成、既存ファイルの更新および既存ファイルの削除を含む。
【０１３９】
（Ｓ１４）ログ生成部１３１は、ファイル更新処理を実行する。ファイル更新処理の詳細は、後述される。そして、ステップＳ１２に処理が進む。
（Ｓ１５）ログ送信部１３２は、現世代の変更ログをアップロードする。変更ログのアップロードは、次の世代の変更ログの生成と非同期に行われる。そして、ステップＳ１０に処理が進む。
【０１４０】
次に、更新サーバ１００によるファイル更新の手順を説明する。
図１５は、ファイル更新の例を示すフローチャートである。
ファイル更新の処理は、ステップＳ１４で実行される。
【０１４１】
（Ｓ２０）ファイルシステム１３０は、重複排除によりチャンクデータ（図中、chunkdataと表記している）およびチャンクマップオブジェクト（図中、chunkmapと表記している）を生成する。重複排除の方法は、図６で説明した通りである。
【０１４２】
（Ｓ２１）ファイルシステム１３０は、該当のファイルのｉｎｏｄｅオブジェクト（図中、inodeと表記している）を更新する。例えば、ファイルシステム１３０は、該当のｉｎｏｄｅオブジェクトにおける更新日時やサイズなどの情報を更新する。
【０１４３】
（Ｓ２２）ログ生成部１３１は、ファイルシステム１３０により生成・更新されたｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトを変更ログに追加する。前述のように、新規ファイルの作成の場合、ログ生成部１３１は、変更ログのｃｒｅａｔｅｌｏｇにｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトを追加する。既存ファイルの更新の場合、ログ生成部１３１は、変更ログのｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅおよびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒにｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトを追加する。なお、既存ファイルの更新の場合、ログ生成部１３１は、更新されたチャンクの情報のみをｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅおよびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒのチャンクマップオブジェクトに追加する。既存ファイルの削除の場合、ログ生成部１３１は、変更ログのｄｅｌｅｔｅｌｏｇにｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトを追加する。
【０１４４】
（Ｓ２３）ファイルシステム１３０は、生成・更新されたｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトをオブジェクトストレージ４００にアップロードする。また、ファイルシステム１３０は、新たに生成されたチャンクデータもオブジェクトストレージ４００にアップロードする。ステップＳ２３のアップロードは、変更ログの生成とは非同期に行われる。そして、ファイル更新が終了する。
【０１４５】
なお、ファイルの削除の場合、ファイルシステム１３０は、該当のファイルに対応するｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトの削除をオブジェクトストレージに通知する。ログ生成部１３１は、当該削除の内容を変更ログのｄｅｌｅｔｅｌｏｇに追加することになる。
【０１４６】
次に、更新サーバ１００による変更ログ削除の手順を説明する。
図１６は、変更ログ削除の例を示すフローチャートである。
（Ｓ３０）ファイルシステム１３０は、自身が動作中であるか否かを判定する。ファイルシステム１３０が動作中の場合、ステップＳ３１に処理が進む。ファイルシステム１３０が動作中でない場合（例えば、ファイルシステム１３０の動作停止の指示を受け付けた場合など）、変更ログ削除が終了する。
【０１４７】
（Ｓ３１）ログ生成部１３１は、変更ログの削除条件が満たされたか否かを判定する。変更ログの削除条件が満たされた場合、ステップＳ３２に処理が進む。変更ログの削除条件が満たされていない場合、ステップＳ３０に処理が進む。
【０１４８】
ここで、ログ生成部１３１は、所定の削除条件が満たされたタイミングで変更ログを削除する。例えば、ログ生成部１３１は、変更ログのアップロードの周期と、保持容量により、削除する時間間隔を決定する。削除条件としては、次の条件が考えられる。第１に、全変更ログの最大保持サイズを「Ｎ［ＧＢ］」とし、全変更ログの合計サイズが最大保持サイズを超えた場合に、ログ生成部１３１は、最も古い世代の変更ログを削除することが考えられる。第２に、全変更ログの最大保持数を「Ｎ世代」とし、全変更ログの保持数が最大保持数を超えた場合に、ログ生成部１３１は、最も古い世代の変更ログを削除することが考えられる。特に、第２の条件の例として、１世代１０分間隔とし、２４時間分保持するとして、最大保持数を１４４世代としてもよい。
【０１４９】
（Ｓ３２）ログ生成部１３１は、削除候補の変更ログに含まれるチャンクマップオブジェクト（chunkmap）が参照しているチャンク（chunk）の被参照数を減算する。削除候補の変更ログは、ステップＳ３１で説明した削除条件に基づいて決定される。
【０１５０】
（Ｓ３３）ログ生成部１３１は、削除候補の変更ログを削除する。そして、ステップＳ３０に処理が進む。
ここで、チャンクの被参照数について説明する。
【０１５１】
図１７は、チャンクの被参照数の例を示す図である。
例えば、チャンクマップオブジェクト７２１は、ファイル「ｆｉｌｅ＿Ｒ」のチャンクマップである。例えば、チャンクマップオブジェクト７２１は、チャンクＡ，Ｂ，Ｃ，Ｄへの参照を含む。チャンクマップオブジェクト７２２は、ファイル「ｆｉｌｅ＿Ｓ」のチャンクマップである。チャンクマップオブジェクト７２２は、チャンクＡ，Ｄ，Ｅに対する参照を含む。
【０１５２】
更に、変更ログ８１５は、チャンクマップオブジェクト７２１に相当するチャンクマップオブジェクトと、チャンクマップオブジェクト７２２に相当するチャンクマップオブジェクトとを含む。
【０１５３】
この場合、他にファイルが存在しないとすると、例えば、チャンクＡの被参照数は４である。例えば、ファイル「ｆｉｌｅ＿Ｒ」やファイル「ｆｉｌｅ＿Ｓ」の削除や変更ログ８１５の削除により、チャンクＡの被参照数が０になると、チャンクＡを削除してよいことになる。したがって、上記ステップＳ３２において、あるチャンクの被参照数を減算した結果、該当のチャンクの被参照数が０になると、ログ生成部１３１は、当該チャンクの削除をオブジェクトストレージ４００に指示する。
【０１５４】
次に、参照サーバ２００によるファイルシステム最新化の手順を説明する。
図１８は、ファイルシステム最新化の例を示すフローチャートである。
参照サーバ２００は、所定の周期（例えば、更新サーバ１００による変更ログのアップロード周期）で下記の手順を実行する。
【０１５５】
（Ｓ４０）ログ受信部２３１は、オブジェクトストレージ４００から現存する変更ログの世代のリストを取得する。例えば、管理サーバ５００は、管理サーバ５００が保持する変更ログの世代のリストを記憶する。ログ受信部２３１は、管理サーバ５００から当該リストをダウンロードすることができる。
【０１５６】
（Ｓ４１）ログ受信部２３１は、ステップＳ４０で取得したリストと、ダウンロード済の変更ログの世代とを比較して、ファイルシステム２３０に未反映の世代の変更ログがあるか否かを判定する。未反映の世代の変更ログがある場合、ステップＳ４２に処理が進む。未反映の世代の変更ログがない場合、ファイルシステム最新化が終了する。
【０１５７】
（Ｓ４２）ログ受信部２３１は、欠番の変更ログがあるか否かを判定する。欠番の変更ログがある場合、ステップＳ４５に処理が進む。欠番の変更ログがない場合、ステップＳ４３に処理が進む。ここで、ダウンロード済の変更ログの世代と、ステップＳ４１で判定された未反映の世代のうちの最古の世代との間で、世代番号が欠落している場合に、ログ受信部２３１は、欠番の変更ログがあると判定する。第２の実施の形態の例では、世代番号が１ずつ昇順に付与されるので、ダウンロード済の変更ログの世代の世代番号と、未反映の世代のうちの最古の世代の世代番号との世代番号差が２以上の場合に、世代番号が欠落していることになる。それ以外の場合（例えば、当該世代番号差が１の場合）、ログ受信部２３１は、欠番の変更ログがないと判定する。例えば、参照サーバ２００が変更ログの最大保持期間を超えて停止していた場合などに、欠番の変更ログが生じる可能性がある。
【０１５８】
（Ｓ４３）ログ受信部２３１は、未反映の世代の変更ログをオブジェクトストレージ４００からダウンロードする。
（Ｓ４４）ログ処理部２３２は、ダウンロードした変更ログを、世代の順に参照して、各世代の変更ログの内容をディレクトリ構造に反映させ、ファイルシステム２３０を最新化する。こうして、ログ処理部２３２は、更新サーバ１００によるファイルの作成、更新および削除を認識する。そして、ファイルシステム最新化が終了する。
【０１５９】
（Ｓ４５）ファイルシステム２３０は、差分のｉｎｏｄｅオブジェクト（inode）およびチャンクマップオブジェクト（chunkmap）を全てダウンロードする。そして、ファイルシステム２３０は、ダウンロードしたｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトに基づいて、各ファイルの最新の状態をディレクトリ構造に反映させる。そして、ファイルシステム最新化が終了する。ここで、ダウンロードの対象となる「差分」は、ステップＳ４５の直前にファイルシステム２３０が認識していたディレクトリやファイルと、オブジェクトストレージ４００で管理される最新のディレクトリやファイルとの差分である。ダウンロードのオペレーションは、ファイルのｉｎｏｄｅオブジェクトやファイルの全体のチャンクマップオブジェクトの単位で行われる。
【０１６０】
このように、参照サーバ２００は、管理サーバ５００により保持される変更ログの世代のリストを管理サーバ５００から取得し、当該リストと参照サーバ２００に反映済の変更ログの世代とに基づいて、管理サーバ５００から取得する変更ログの世代を判定する。これにより、参照サーバ２００は、未反映の世代の変更ログをダウンロードすればよく、反映済の世代の変更ログが重複してダウンロードされることを防げる。
【０１６１】
また、参照サーバ２００は、管理サーバ５００により保持される世代と、参照サーバ２００に反映済の変更ログの世代との間に欠落した世代があるか否かを判定する。そして、参照サーバ２００は、欠落した世代がある場合、例えば、複数のファイルに含まれるファイルの属性情報と当該ファイルに属する全てのチャンクを示す情報とを管理サーバ５００から取得する処理を、ファイル毎に個別に実行する。これにより、参照サーバ２００は、変更ログによってファイルシステム２３０を最新化できない場合でも、ファイルシステム２３０を適切に最新化することができる。
【０１６２】
次に、参照サーバ２００におけるダウンロードのオペレーション回数の削減例を説明する。以下では、参照サーバ２００を例示して説明するが、参照サーバ３００も参照サーバ２００と同様の手順を実行する。
【０１６３】
図１９は、オペレーション回数の削減例（その１）を示す図である。
図１９（Ａ）は、変更ログを用いない場合の比較例である。比較例では、更新サイト側のファイルシステムをファイルシステムＦＳ１とし、参照サイト側のファイルシステムをファイルシステムＦＳ２とする。
【０１６４】
一例として、更新サイトで１００個のファイルが作成された場合を考える。
比較例の場合、ファイルシステムＦＳ１は、１００個のファイルの作成に応じて、１００個のｉｎｏｄｅオブジェクト（「ｉｎｏｄｅ．０」〜「ｉｎｏｄｅ．９９」）を作成して、オブジェクトストレージ４００にアップロードする。そして、ファイルシステムＦＳ２は、アップロードされた１００個のｉｎｏｄｅオブジェクトをそれぞれダウンロードすることで、作成された１００個のファイルを認識する。
【０１６５】
この場合、ファイルシステムＦＳ１によるアップロードのオペレーション回数は１００である。また、ファイルシステムＦＳ２によるダウンロードのオペレーション回数は１００である。
【０１６６】
図１９（Ｂ）は、変更ログを用いるファイルシステム１３０，２３０の場合を例示している。図１９（Ａ）と同様に、更新サイトで１００個のファイルが作成された場合を考える。
【０１６７】
ファイルシステム１３０は、１００個のファイルの作成に応じて、１００個のｉｎｏｄｅオブジェクト（「ｉｎｏｄｅ．０」〜「ｉｎｏｄｅ．９９」）と、１個の変更ログ（「ｉｎｏｄｅ．０」〜「ｉｎｏｄｅ．９９」を含むｃｈａｎｇｅｌｏｇ）とを作成する。ファイルシステム１３０は、１００個のｉｎｏｄｅオブジェクトと１個の変更ログとをオブジェクトストレージ４００にアップロードする。
【０１６８】
そして、ファイルシステム２３０は、アップロードされた１個の変更ログをダウンロードすることで、ファイルシステム１３０により新たに作成された１００個のファイルを認識する。
【０１６９】
この場合、ファイルシステム１３０によるアップロードのオペレーション回数は１００＋１＝１０１である。また、ファイルシステム２３０によるダウンロードのオペレーション回数は１である。すなわち、参照サイトにおけるダウンロードのオペレーション回数が、（比較例における）１００から１に削減される。また、アップロードおよびダウンロードのトータルのオペレーション回数が、（比較例における）２００から１０２に削減される。すなわち、更新サイト側と参照サイト側とで、合計で、２００−１０２＝９８回のオペレーション数の削減が可能である。このように、更新サーバ１００および参照サーバ２００によれば、オペレーション回数を削減することができる。
【０１７０】
図２０は、オペレーション回数の削減例（その２）を示す図である。
図１９（Ｂ）で例示したファイルシステム２３０による変更ログ（「ｉｎｏｄｅ．０」〜「ｉｎｏｄｅ．９９」を含むｃｈａｎｇｅｌｏｇ）のダウンロードの後、ファイルシステム１３０により更に９００個のファイルの作成が行われた場合を考える。この場合、ファイルシステム１３０は、作成した９００個のファイルに対応するｉｎｏｄｅオブジェクト（「ｉｎｏｄｅ．１００」〜「ｉｎｏｄｅ．９９９」）をオブジェクトストレージ４００にアップロードする。また、説明を簡単にするために、作成されたファイル１００個に対して１つの変更ログが作成されたものとする。この場合、ファイルシステム１３０は、作成した９００個のファイルに対して、９個の変更ログを作成し、オブジェクトストレージ４００にアップロードする。
【０１７１】
そして、ファイルシステム２３０は、アップロードされた９個の変更ログをダウンロードすることで、ファイルシステム１３０により新たに作成された９００個のファイルを認識する。
【０１７２】
この場合、ファイルシステム２３０によるダウンロードのオペレーション回数は９である。すなわち、ファイルシステム２３０は、作成された９００個のファイルに対応するｉｎｏｄｅオブジェクトについて、合計で９００回のダウンロードオペレーションを行わずに済み、オペレーション回数を大幅に削減できる。
【０１７３】
ここで、図１９（Ａ）の比較例で示したように、参照サーバ２００，３００が、更新サーバ１００により更新された各ファイルのｉｎｏｄｅオブジェクトなどを個別にダウンロードして、ファイルシステムを最新の状態に同期させることも考えられる。ところが、オブジェクトストレージ４００の運用では、更新サーバ１００および参照サーバ２００，３００からオブジェクトストレージ４００への単位時間当たりのオペレーション回数が制限されることがある。例えば、オブジェクトストレージ４００が提供する「バケット」と呼ばれる論理的な領域に対する単位時間当たりのオペレーション回数が制限され得る。この場合、更新された各ファイルのｉｎｏｄｅオブジェクトなどを個別にダウンロードしていると、オペレーション回数の制限により各サーバのファイルシステム間の同期が遅延し得る。この問題は、参照サーバの数が多くなるほど顕著になる。
【０１７４】
そこで、参照サーバ２００，３００は、更新サーバ１００により作成された変更ログを用いて、複数のファイルに対する更新を一括して認識する。これにより、オペレーション回数を削減し、オペレーション回数の制限がある場合でも、更新サーバ１００および参照サーバ２００，３００の各ファイルシステムの同期を高速化できる。
【０１７５】
ところで、更新サーバ１００により生成される変更ログには、既存ファイルの更新の場合、更新前のチャンクに関するチャンクマップオブジェクトと、更新後のチャンクに関するチャンクマップオブジェクトとが含まれる。このため、更新サーバ１００は、ある世代の変更ログを用いて、当該世代よりも１つ前の世代の各ファイルの状態を復元することができる。そこで、以下では、復元の機能について説明する。まず、変更ログに含まれるチャンクマップオブジェクトの具体例を説明する。
【０１７６】
図２１は、変更ログに含まれるチャンクマップの例を示す図である。
ここでは、世代１，２，３，４という４つの世代における、あるファイルの変遷を考える。世代１では、当該ファイルは存在していない。世代２で、当該ファイルが新規に作成される。このため、当該ファイルのｉｎｏｄｅオブジェクト７１１と、チャンクマップオブジェクト７２３とが生成される。チャンクマップオブジェクト７２３は、３つのチャンクＡ，Ａ’，Ａ”を示す情報を含む。この場合、世代２の変更ログのｃｒｅａｔｅｌｏｇに、ｉｎｏｄｅオブジェクト７１１とチャンクマップオブジェクト７２３とが登録される。
【０１７７】
世代３で、当該ファイルのチャンクＡ，Ａ’の部分がチャンクＢに更新される。すると、更新後の当該ファイルのｉｎｏｄｅオブジェクト７１２と更新後の当該ファイルの全体に関するチャンクマップオブジェクト（図示を省略している）とが生成される。この場合、世代３の変更ログのｍｏｄｉｆｙｌｏｇにおけるｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅに、ｉｎｏｄｅオブジェクト７１１と、チャンクマップオブジェクト７２４とが登録される。チャンクマップオブジェクト７２４は、該当のファイルの更新された部分に対応する更新前のチャンクＡ，Ａ’を示す。また、世代３の変更ログのｍｏｄｉｆｙｌｏｇにおけるｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒに、ｉｎｏｄｅオブジェクト７１２と、チャンクマップオブジェクト７２５とが登録される。チャンクマップオブジェクト７２５は、該当のファイルの更新された部分に対応する更新後のチャンクＢを示す。一方、該当のファイルの未更新部分Ｐ１（チャンクＡ”に相当する部分）のメタ（すなわち、当該ファイル全体のチャンクマップオブジェクトにおける未更新部分Ｐ１に相当する部分の情報）は、変更ログに格納されない。
【０１７８】
世代４で、当該ファイルのチャンクＡ”の部分がチャンクＣに更新される。すると、更新後の当該ファイルのｉｎｏｄｅオブジェクト７１３と、更新後の当該ファイルの全体に関するチャンクマップオブジェクト（図示を省略している）とが生成される。この場合、世代４の変更ログのｍｏｄｉｆｙｌｏｇにおけるｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅに、ｉｎｏｄｅオブジェクト７１２と、チャンクマップオブジェクト７２６とが登録される。チャンクマップオブジェクト７２６は、該当のファイルの更新された部分に対応する更新前のチャンクＡ”を示す。また、世代４の変更ログのｍｏｄｉｆｙｌｏｇにおけるｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒに、ｉｎｏｄｅオブジェクト７１３と、チャンクマップオブジェクト７２７とが登録される。チャンクマップオブジェクト７２７は、該当のファイルの更新された部分に対応する更新後のチャンクＣを示す。世代３の場合と同様に、該当のファイルの未更新部分Ｐ２（チャンクＢに相当する部分）のメタは、変更ログに格納されない。
【０１７９】
ここで、ファイルサイズが大きいほど、ファイル全体を表すチャンクマップオブジェクトのサイズは大きくなる。例えば、ファイルサイズがペタバイト（Peta Bytes）のオーダーになると、ファイル全体を表すチャンクマップオブジェクトのサイズは、１ギガバイト程度になることもある。そこで、変更ログのチャンクマップオブジェクトには、該当のファイルのうち、更新のあった部分に対応する情報のみを保持することで、変更ログのサイズを削減する。
【０１８０】
例えば、世代４の変更ログは、当該ファイルのチャンクＣの部分について、世代３の状態であるチャンクＡ”を示す情報を保持する。このため、更新サーバ１００は、世代４の状態から、世代４の変更ログを逆に適用することで、当該ファイルの世代３の状態を復元することができる。同様に、世代３の変更ログは、チャンクＢの部分について、世代２の状態であるチャンクＡ，Ａ’を示す情報を保持する。このため、更新サーバ１００は、世代３の状態から、世代３の変更ログを逆に適用することで、当該ファイルの世代２の状態を復元することができる。よって、更新サーバ１００は、世代４の状態から、世代４，３と逆順に適用することで、当該ファイルの世代２の状態を復元することができる。
【０１８１】
次に、更新サーバ１００による復元の手順を説明する。
図２２は、復元の例を示すフローチャートである。
（Ｓ５０）復元部１３３は、復元先世代（Ｍ−１）（Ｍは１以上の整数）を取得する。ここで、世代０はオブジェクトストレージ４００に格納されたディレクトリおよびファイルの初期状態を示す。例えば、更新サイトのユーザは、クライアント６１を用いて、復元先世代を更新サーバ１００に入力する。
【０１８２】
（Ｓ５１）復元部１３３は、記憶部１２０に格納された各世代の変更ログを参照して、現世代Ｎ（ＮはＭ以上の整数）から世代Ｍまでの全ての世代の変更ログがあるか否かを判定する。現世代Ｎから世代Ｍまでの全ての世代の変更ログがある場合、ステップＳ５３に処理が進む。現世代Ｎから世代Ｍまでの少なくとも何れかの世代の変更ログがない場合、ステップＳ５２に処理が進む。なお、復元部１３３は、オブジェクトストレージ４００に現世代Ｎから世代Ｍまでの変更ログがあるか否かを問い合わせることで、ステップＳ５１の判定を行ってもよい。例えば、復元部１３３は、オブジェクトストレージ４００から現世代Ｎから世代Ｍまでの変更ログをダウンロードして、ステップＳ５３以降の処理を実行することもできる。また、現世代Ｎと世代Ｍとが一致することもある。この場合、ステップＳ５１の判定では、「現世代Ｎの変更ログがあるか否かを判定する」ことになる。
【０１８３】
（Ｓ５２）復元部１３３は、指定された復元先世代への復元不可を通知する。例えば、復元部１３３は、復元先世代の指示を受け付けたクライアント６１に復元不可を通知する。そして、復元処理が終了する。
【０１８４】
（Ｓ５３）復元部１３３は、世代Ｎから世代Ｍまでの変更ログを全て反映済であるか否かを判定する。全て反映済である場合、復元処理が終了する。未反映の世代の変更ログがある場合、ステップＳ５４に処理が進む。
【０１８５】
（Ｓ５４）復元部１３３は、世代Ｎから世代Ｍまで順に（すなわち、未来の世代から過去の世代に向かって順番に）１つずつ選択する。復元部１３３は、選択した１つの世代の変更ログについて、ステップＳ５５以降の処理を実行する。
【０１８６】
（Ｓ５５）復元部１３３は、選択した世代の変更ログにｄｅｌｅｔｅｌｏｇがあるか否かを判定する。ｄｅｌｅｔｅｌｏｇがある場合、ステップＳ５６に処理が進む。ｄｅｌｅｔｅｌｏｇがない場合、ステップＳ５７に処理が進む。
【０１８７】
（Ｓ５６）復元部１３３は、ｄｅｌｅｔｅｌｏｇの情報（すなわち、削除されたファイルのｉｎｏｄｅオブジェクトおよび削除されたファイル全体のチャンクマップオブジェクト）を作成し、オブジェクトストレージ４００に送信する。
【０１８８】
（Ｓ５７）復元部１３３は、選択した世代の変更ログにｍｏｄｉｆｙｌｏｇがあるか否かを判定する。ｍｏｄｉｆｙｌｏｇがある場合、ステップＳ５８に処理が進む。ｍｏｄｉｆｙｌｏｇがない場合、ステップＳ５９に処理が進む。
【０１８９】
（Ｓ５８）復元部１３３は、選択した世代の変更ログに含まれるｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒで示される部分を、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅで示されるチャンクに変更するように該当のファイルのチャンクマップオブジェクトを変更する。また、復元部１３３は、選択した世代の変更ログに含まれるｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒで示されるｉｎｏｄｅオブジェクトを、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅで示されるｉｎｏｄｅオブジェクトに変更する。１つの世代の中で、１つのファイルに対する複数の更新が発生している場合、復元部１３３は、当該複数の更新を未来（ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒの状態）から過去（ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅの状態）へ順に戻す。
【０１９０】
（Ｓ５９）復元部１３３は、選択した世代の変更ログにｃｒｅａｔｅｌｏｇがあるか否かを判定する。ｃｒｅａｔｅｌｏｇがある場合、ステップＳ６０に処理が進む。ｃｒｅａｔｅｌｏｇがない場合、ステップＳ５３に処理が進む。
【０１９１】
（Ｓ６０）復元部１３３は、ｃｒｅａｔｅｌｏｇの情報（すなわち、作成されたファイルのｉｎｏｄｅオブジェクトおよび作成されたファイル全体のチャンクマップオブジェクト）をオブジェクトストレージ４００から削除する。そして、ステップＳ５３に処理が進む。
【０１９２】
図２３は、ファイルの操作および復元の例を示す図である。
図２３（Ａ）は、ファイルＸの作成・更新・削除のフローの例である。まず、世代（Ｎ−３）において、ファイルシステム１３０は、ファイルＸを作成する。ファイルシステム１３０は、ファイルＸの作成を、世代（Ｎ−３）の変更ログ８１６に含まれるｃｒｅａｔｅｌｏｇ８２１に記録する（ステップＳＴ２０）。この段階では、ファイルＸの中身のデータ（データ本体）は未作成であり、ｃｒｅａｔｅｌｏｇ８２１には、ファイルＸのｉｎｏｄｅオブジェクトのみが記録される。
【０１９３】
世代（Ｎ−２）において、ファイルシステム１３０は、ファイルＸのデータ本体を作成する（新規書き込み）。すると、ファイルシステム１３０は、ファイルＸのデータ本体の作成を、世代（Ｎ−２）の変更ログ８１７に含まれるｃｒｅａｔｅｌｏｇ８２２に記録する（ステップＳＴ２１）。ｃｒｅａｔｅｌｏｇ８２２には、更新後のファイルＸのｉｎｏｄｅオブジェクトおよびチャンクマップオブジェクトが記録される。
【０１９４】
世代（Ｎ−１）において、ファイルシステム１３０は、ファイルＸの一部を更新する（更新書き込み）。すると、ファイルシステム１３０は、ファイルＸの一部の更新を、世代（Ｎ−１）の変更ログ８１８に含まれるｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ８４１およびｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒ８５１に記録する（ステップＳＴ２２）。ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ８４１には、更新前のファイルＸのｉｎｏｄｅオブジェクトと、ファイルＸの更新された部分に対応する更新前のチャンクを示すチャンクマップオブジェクトとが記録される。ｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒ８５１には、更新後のファイルＸのｉｎｏｄｅオブジェクトと、ファイルＸの更新された部分に対応する更新後のチャンクを示すチャンクマップオブジェクトとが記録される。
【０１９５】
世代Ｎにおいて、ファイルシステム１３０は、ファイルＸを削除する。すると、ファイルシステム１３０は、ファイルＸの削除を、世代Ｎの変更ログ８１９に含まれるｄｅｌｅｔｅｌｏｇ８６１に記録する（ステップＳＴ２３）。ｄｅｌｅｔｅｌｏｇ８６１には、削除されたファイルＸのｉｎｏｄｅオブジェクトとファイルＸの全体のチャンクマップオブジェクトとが記録される。
【０１９６】
図２３（Ｂ）は、世代（Ｎ−４）の静止点を復元するためのフローの例である。「静止点」は、復元先世代におけるディレクトリやファイルの状態を示す。図２３（Ｂ）では、一例として、ファイルシステム１３０が変更ログ８１９，８１８，８１７，８１６をこの順に参照することで、ファイルＸの世代（Ｎ−４）の状態を復元する例を示す。ファイルＸは、世代（Ｎ−３）で生成されたファイルであり、世代（Ｎ−４）の段階では存在していない。したがって、ファイルＸを世代（Ｎ−４）の状態に戻すことは、最終的には、ファイルＸを削除することを意味する。
【０１９７】
まず、ファイルシステム１３０は、変更ログ８１９のｄｅｌｅｔｅｌｏｇ８６１に基づいて、削除されたファイルＸのｉｎｏｄｅオブジェクトと、ファイルＸの全体のチャンクマップオブジェクトとを作成する（ステップＳＴ３０）。ファイルシステム１３０は、作成したｉｎｏｄｅオブジェクトとチャンクマップオブジェクトとをオブジェクトストレージ４００に送信する（ステップＳＴ３０）。これにより、ファイルＸの世代（Ｎ−１）の状態が復元される。
【０１９８】
次に、ファイルシステム１３０は、変更ログ８１８のｍｏｄｉｆｙｌｏｇ＿ａｆｔｅｒ８５１およびｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ８４１に基づいて、ファイルＸを世代（Ｎ−２）の状態に復元する（ステップＳＴ３１）。具体的には、ファイルシステム１３０は、世代（Ｎ−１）のファイルＸのｉｎｏｄｅオブジェクトを、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ８４１に含まれる世代（Ｎ−２）のファイルＸのｉｎｏｄｅオブジェクトに変更する。また、ファイルシステム１３０は、世代（Ｎ−１）におけるファイルＸの全体のチャンクマップオブジェクトのうち更新された部分を、ｍｏｄｉｆｙｌｏｇ＿ｂｅｆｏｒｅ８４１に含まれるファイルＸのチャンクマップオブジェクトで示されるチャンクに変更する。ファイルシステム１３０は、ステップＳＴ３１におけるこれらの変更内容をオブジェクトストレージ４００に指示する。
【０１９９】
次に、ファイルシステム１３０は、変更ログ８１７のｃｒｅａｔｅｌｏｇ８２２に基づいて、ファイルＸを世代（Ｎ−３）の状態に復元する（ステップＳＴ３２）。具体的には、ファイルシステム１３０は、世代（Ｎ−２）のファイルＸのｉｎｏｄｅオブジェクトを、ｃｒｅａｔｅｌｏｇ８２２に含まれる世代（Ｎ−３）のファイルＸのｉｎｏｄｅオブジェクトに変更するようにオブジェクトストレージ４００に指示する。また、ファイルシステム１３０は、ファイルＸのチャンクマップオブジェクトの削除をオブジェクトストレージ４００に指示する。
【０２００】
そして、ファイルシステム１３０は、変更ログ８１６のｃｒｅａｔｅｌｏｇ８２１に基づいて、ファイルＸを世代（Ｎ−４）の状態に復元する（ステップＳＴ３３）。具体的には、ファイルシステム１３０は、ファイルＸのｉｎｏｄｅオブジェクトの削除を、オブジェクトストレージ４００に指示する。
【０２０１】
ファイルシステム１３０は、他のファイルについても同様にして、変更ログに基づき、過去の世代の状態を復元することができる。ただし、保存されている変更ログの世代に応じて復元可能な世代は制限される。図２３（Ｂ）の例において、仮に、変更ログが世代Ｎから世代（Ｎ−２）までしか存在しない場合、復元可能な最も過去の世代は世代（Ｎ−３）までとなり、世代（Ｎ−４）の状態へは戻れないことになる。
【０２０２】
このように、更新サーバ１００は、オブジェクトストレージ４００について別途バックアップを取得しなくても、変更ログに基づいて、過去の任意の世代の状態を復元することができる。
【０２０３】
なお、第１の実施の形態の情報処理は、処理部１２または処理部２２にプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体１１３に記録できる。
【０２０４】
例えば、プログラムを記録した記録媒体１１３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体１１３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【符号の説明】
【０２０５】
１０，２０  情報処理装置
１１，２１  記憶部
１２，２２  処理部
３０  管理装置
４０  記憶装置
Ｋ１，Ｋ２  ディレクトリ構造
Ｌ１  変更ログ
【図１】
2019204278.tif 000003
【図２】
2019204278.tif 000004
【図３】
2019204278.tif 000005
【図４】
2019204278.tif 000006
【図５】
2019204278.tif 000007
【図６】
2019204278.tif 000008
【図７】
2019204278.tif 000009
【図８】
2019204278.tif 000010
【図９】
2019204278.tif 000011
【図１０】
2019204278.tif 000012
【図１１】
2019204278.tif 000013
【図１２】
2019204278.tif 000014
【図１３】
2019204278.tif 000015
【図１４】
2019204278.tif 000016
【図１５】
2019204278.tif 000017
【図１６】
2019204278.tif 000018
【図１７】
2019204278.tif 000019
【図１８】
2019204278.tif 000020
【図１９】
2019204278.tif 000021
【図２０】
2019204278.tif 000022
【図２１】
2019204278.tif 000023
【図２２】
2019204278.tif 000024
【図２３】
2019204278.tif 000025