(57)【要約】【課題】データの更新内容を転送先に確実に反映させる。【解決手段】制御部１ｂは、データ群３ａに対する第１の操作を行うと、データ群３ａに対応する操作情報４ａを転送制御情報４に登録し、データ群３ａが転送対象として抽出されると、操作情報４ａを操作情報４ａ１として一時的に保持するとともに、データ群３ａをストレージ装置２に転送し、データ群３ａの転送中にデータ群３ａに対する第２の操作を行った場合、転送制御情報４に登録された操作情報４ａを更新し、データ群３ａの転送が完了すると、転送制御情報４に登録された操作情報４ａと、保持された操作情報４ａ１とを比較し、これらが一致しない場合、データ群３ａをストレージ装置２に再転送する。【選択図】図１
2019095925.tif 000002
【特許請求の範囲】
【請求項１】
外部ストレージ装置に対する転送単位ごとにそれぞれ分類された複数のデータ群と、前記複数のデータ群のいずれかにそれぞれ対応する１以上の操作情報が登録される転送制御情報とを記憶する記憶部と、制御部とを有し、
前記制御部は、
前記複数のデータ群のうち第１のデータ群に対する第１の操作を行うと、前記第１のデータ群に対応する第１の操作情報を前記転送制御情報に登録し、
前記第１のデータ群が転送対象として抽出されると、前記第１のデータ群に対応する前記第１の操作情報を保持情報として一時的に保持するとともに、前記第１のデータ群を前記外部ストレージ装置に転送し、
前記外部ストレージ装置に対する前記第１のデータ群の転送中に前記第１のデータ群に対する第２の操作を行った場合、前記転送制御情報に登録された前記第１の操作情報を更新し、
前記外部ストレージ装置に対する前記第１のデータ群の転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、
前記第１の操作情報と前記保持情報とが一致しない場合、前記第１の操作情報に対応する前記第１のデータ群を前記外部ストレージ装置に再転送する、
情報処理装置。
【請求項２】
前記第１の操作情報の登録では、前記第１の操作情報に所定のカウント値を設定し、
前記第１の操作情報の更新では、前記カウント値を更新し、
前記第１の操作情報と前記保持情報との比較では、前記第１の操作情報に含まれる前記カウント値と前記保持情報に含まれる前記カウント値とを比較する、
請求項１に記載の情報処理装置。
【請求項３】
前記第１の操作情報の登録では、前記第１の操作情報に前記第１の操作を示す第１の操作内容を設定し、
前記第１のデータ群の転送では、前記第１の操作情報に設定された前記第１の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送し、
前記第１の操作情報の更新では、前記第１の操作情報に前記第２の操作を示す第２の操作内容を設定し、
前記第１のデータ群の再転送では、前記第１の操作情報に設定された前記第２の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送する、
請求項１または２に記載の情報処理装置。
【請求項４】
前記第１の操作情報の更新では、前記第１の操作情報に対して前記第２の操作内容を追加的に設定し、
前記第１のデータ群の再転送では、前記第１の操作情報に前記第１の操作内容と前記第２の操作内容とが設定されている場合、前記第１の操作内容に基づいて前記第１のデータ群の中から抽出されたデータと、前記第２の操作内容に基づいて前記第１のデータ群の中から抽出されたデータとを前記外部ストレージ装置に転送する、
請求項３に記載の情報処理装置。
【請求項５】
前記第１のデータ群の再転送では、前記転送制御情報に登録された前記第１の操作情報を前記保持情報として一時的に保持し、
前記制御部は、さらに、前記第１のデータ群の再転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、前記第１の操作情報と前記保持情報とが一致した場合、前記第１の操作情報を前記転送制御情報から削除する、
請求項１乃至４のいずれか１項に記載の情報処理装置。
【請求項６】
前記転送制御情報からは、前記操作情報が登録順に取得される、
請求項１乃至５のいずれか１項に記載の情報処理装置。
【請求項７】
前記複数のデータ群はそれぞれ、外部情報処理装置から前記外部ストレージ装置に対して書き込みが要求されたファイルに関する管理データ群であり、
前記第１の操作と前記第２の操作は、前記外部情報処理装置から前記第１のデータ群に対応する第１のファイルの書き込みが要求されてから書き込み処理の完了を前記外部情報処理装置に応答するまでの間に、前記第１のファイルに対応する前記管理データ群に対して段階的に実行される操作である、
請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項８】
前記制御部は、さらに、前記外部情報処理装置から書き込みが要求された各ファイルのデータを分割して分割領域に割り当て、前記分割領域にそれぞれ含まれる分割データを、重複を排除した状態で前記記憶部に格納し、
前記第１のデータ群に対応する前記管理データ群は、前記第１のファイルを分割して生成された前記分割領域と、生成された前記分割領域にそれぞれ含まれる前記分割データの前記記憶部における格納場所との対応関係を示すデータと、前記第１のファイルのメタデータとを含み、
前記第１の操作は、前記メタデータの書き込み操作であり、前記第２の操作は、前記対応関係を示すデータの書き込み操作である、
請求項７に記載の情報処理装置。
【請求項９】
前記制御部は、さらに、外部情報処理装置から前記外部ストレージ装置に対して書き込みが要求されたファイルのデータを分割して分割領域に割り当て、前記分割領域にそれぞれ含まれる分割データを、重複を排除した状態で前記記憶部に格納し、
前記分割データの格納では、１以上の前記分割データをグループ化して生成された分割データ群を、それぞれ前記複数のデータ群に含まれるデータ群の１つとして前記記憶部に格納する、
請求項１乃至６のいずれか１項に記載の情報処理装置。
【請求項１０】
コンピュータに、
記憶部に記憶された、外部ストレージ装置に対する転送単位ごとにそれぞれ分類された複数のデータ群のうち、第１のデータ群に対する第１の操作を行うと、前記記憶部に記憶された、前記複数のデータ群のいずれかにそれぞれ対応する１以上の操作情報が登録される転送制御情報に対して、前記第１のデータ群に対応する第１の操作情報を登録し、
前記第１のデータ群が転送対象として抽出されると、前記第１のデータ群に対応する前記第１の操作情報を保持情報として一時的に保持するとともに、前記第１のデータ群を前記外部ストレージ装置に転送し、
前記外部ストレージ装置に対する前記第１のデータ群の転送中に前記第１のデータ群に対する第２の操作を行った場合、前記転送制御情報に登録された前記第１の操作情報を更新し、
前記外部ストレージ装置に対する前記第１のデータ群の転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、
前記第１の操作情報と前記保持情報とが一致しない場合、前記第１の操作情報に対応する前記第１のデータ群を前記外部ストレージ装置に再転送する、
処理を実行させる情報処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置および情報処理プログラムに関する。
【背景技術】
【０００２】
オンラインストレージサービス、クラウドストレージサービスなど、ネットワークを介してストレージ領域を提供するストレージサービスが普及している。また、このようなストレージサービスと顧客のコンピュータとの間でゲートウェイとして機能するストレージゲートウェイがある。
【０００３】
例えば、クラウドストレージゲートウェイは、顧客のコンピュータとクラウドストレージシステムとの間で、書き込みデータを中継する。より具体的な例としては、クラウドストレージゲートウェイは、顧客のコンピュータからファイル単位で書き込みデータとその書き込み要求を受け付け、書き込みデータをオブジェクト単位でクラウドストレージに転送する。
【０００４】
また、関連技術の例として、オンラインストレージ上にデータを保存する次のようなファイルサーバが提案されている。このファイルサーバでは、ファイルを分割したブロックの構成やファイル構成、メタ情報が格納されるデータベースが、複数の分割データベースに分割され、分割データベースを単位としてデータベース内の情報がオンラインストレージにアップロードされる。また、各分割データベースは、その内容が更新されたか否かを示すＤｉｒｔｙフラグを有し、Ｄｉｒｔｙフラグに基づいて、各分割データベースの内容がオンラインストレージへのアップロード対象かが判定される。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特表２０１４−５２９１１１号公報
【特許文献２】特開２０１２−１４１７３８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
ところで、上記のストレージゲートウェイは、ストレージサービスに転送するデータを一旦ローカルストレージに格納し、ローカルストレージに格納されたデータの中から転送すべきデータを抽出する。この処理では、ローカルストレージへのデータの格納処理と、ローカルストレージからの転送すべきデータの抽出およびその転送処理とが、非同期で行われる場合がある。
【０００７】
このようなストレージゲートウェイでは、ローカルストレージに格納されたデータの中から、転送すべきデータをどのようにして高効率かつ正確に抽出するか、という点に課題がある。例えば、転送すべきデータを効率よく抽出するために、上記のＤｉｒｔｙフラグのような更新の有無を示すフラグを、外部ストレージに転送する単位となるデータ群ごとに記録しておく方法が考えられる。しかし、この方法では、フラグに基づいてデータ群をストレージサービスに転送している間に、ローカルストレージ内の元のデータ群が更新された場合、転送処理を実行する処理モジュールはその更新の発生を認識できない。そのため、データ群の更新内容をストレージサービスに正確に反映できない可能性がある。
【０００８】
なお、このような問題点は、ストレージゲートウェイに限らず、記憶されたデータを外部のストレージ装置に転送する情報処理装置において発生し得る。
１つの側面では、本発明は、データの更新内容を転送先に確実に反映させることが可能な情報処理装置および情報処理プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの案では、記憶部と制御部とを有する情報処理装置が提供される。この情報処理装置において、記憶部は、外部ストレージ装置に対する転送単位ごとにそれぞれ分類された複数のデータ群と、複数のデータ群のいずれかにそれぞれ対応する１以上の操作情報が登録される転送制御情報とを記憶する。制御部は、複数のデータ群のうち第１のデータ群に対する第１の操作を行うと、第１のデータ群に対応する第１の操作情報を転送制御情報に登録し、第１のデータ群が転送対象として抽出されると、第１のデータ群に対応する第１の操作情報を保持情報として一時的に保持するとともに、第１のデータ群を外部ストレージ装置に転送し、外部ストレージ装置に対する第１のデータ群の転送中に第１のデータ群に対する第２の操作を行った場合、転送制御情報に登録された第１の操作情報を更新し、外部ストレージ装置に対する第１のデータ群の転送が完了すると、転送制御情報に登録された第１の操作情報と、保持情報とを比較し、第１の操作情報と保持情報とが一致しない場合、第１の操作情報に対応する第１のデータ群を外部ストレージ装置に再転送する。
【００１０】
また、１つの案では、上記の情報処理装置と同様の処理をコンピュータに実行させる情報処理プログラムが提供される。
【発明の効果】
【００１１】
１つの側面では、データの更新内容を転送先に確実に反映させることができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。
【図２】第２の実施の形態に係る情報処理システムの構成例を示す図である。
【図３】クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。
【図４】クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。
【図５】ディレクトリテーブルを説明するための図である。
【図６】エントリテーブルのデータ構成例を示す図である。
【図７】チャンクマップテーブルのデータ構成例を示す図である。
【図８】チャンクテーブルのデータ構成例を示す図である。
【図９】チャンクグループテーブルのデータ構成例を示す図である。
【図１０】チャンクグループの構成例を示す図である。
【図１１】ファイルオブジェクトおよびチャンクマップオブジェクトのデータ構造の例を示す図である。
【図１２】チャンクグループオブジェクトのデータ構造の例を示す図である。
【図１３】操作ログの登録およびオブジェクトの送信についての第１の処理例を示す図である。
【図１４】操作ログの登録およびオブジェクトの送信についての第２の処理例を示す図である。
【図１５】操作ログテーブルのデータ構成例を示す図である。
【図１６】ファイル操作ログの登録処理例を示す図である。
【図１７】データ操作ログの登録処理例を示す図である。
【図１８】ファイル書き込みが要求された場合のファイルシステム処理部の処理例を示すフローチャートである。
【図１９】ファイル作成開始処理の例を示すフローチャートである。
【図２０】データ書き込み処理の例を示すフローチャートである。
【図２１】チャンク書き込み処理の例を示すフローチャートである。
【図２２】ファイル作成完了処理の例を示すフローチャートである。
【図２３】ファイル更新が要求された場合のデータ書き込み処理の例を示すフローチャートである。
【図２４】クラウド転送処理部の処理例を示すフローチャートである。
【図２５】ファイル操作ログに基づくクラウド転送処理の例を示すフローチャート（その１）である。
【図２６】ファイル操作ログに基づくクラウド転送処理の例を示すフローチャート（その２）である。
【図２７】データ操作ログに基づくクラウド転送処理の例を示すフローチャートである。
【発明を実施するための形態】
【００１３】
以下、本発明の実施の形態について図面を参照して説明する。
〔第１の実施の形態〕
図１は、第１の実施の形態に係る情報処理システムの構成例および処理例を示す図である。図１に示す情報処理システムは、情報処理装置１と、情報処理装置１の外部に接続されたストレージ装置２とを有する。
【００１４】
ストレージ装置２は、情報処理装置１から転送されたデータを記憶する。なお、ストレージ装置２の記憶領域は、単体のストレージ装置によって実現されてもよいし、複数のストレージ装置によって実現されてもよい。
【００１５】
情報処理装置１は、記憶部１ａと制御部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）やＨＤＤ（Hard Disk Drive）など、情報処理装置１が備える記憶装置の記憶領域によって実現される。制御部１ｂは、例えば、情報処理装置１が備えるプロセッサとして実現される。
【００１６】
記憶部１ａには、ストレージ装置２に転送されるデータが、ストレージ装置２に対する転送単位ごとにデータ群３ａ，３ｂ，３ｃ，・・・として分類された状態で記憶されている。また、記憶部１ａには、転送制御情報４が記憶される。この転送制御情報４には、データ群３ａ，３ｂ，３ｃ，・・・のいずれかにそれぞれ対応する１以上の操作情報が登録される。
【００１７】
制御部１ｂは、あるデータ群に対して操作を行うと、そのデータ群に対応する操作情報を転送制御情報４に登録する。また、制御部１ｂは、転送制御情報４から操作情報を取得し、取得された操作情報に対応するデータ群をストレージ装置２に転送する。これにより、制御部１ｂは、データ群に対する操作と、ストレージ装置２に対するデータ群の転送処理とを、非同期で実行できる。そして、制御部１ｂは、転送制御情報４に登録された操作情報を取得することで、ストレージ装置２に転送すべきデータ群を判別できる。なお、制御部１ｂは、転送制御情報４からその登録順に操作情報を取得する。
【００１８】
以下、制御部１ｂの処理の具体例について説明する。
まず、制御部１ｂは、データ群３ａに対する第１の操作を行ったとする（ステップＳ１）。すると、制御部１ｂは、操作対象であるデータ群３ａに対応する操作情報４ａを、転送制御情報４に登録する（ステップＳ２）。なお、この第１の操作とは、例えば、データ群３ａに含まれるデータの少なくとも一部を更新する操作であってもよいし、データ群３ａ自体を新規に記憶部１ａに格納する操作であってもよい。
【００１９】
その後、制御部１ｂは、データ群３ａが転送対象として抽出されると、転送制御情報４からデータ群３ａに対応する操作情報４ａを取得し、取得された操作情報４ａを記憶部１ａの一時格納領域に一時的に保持する（ステップＳ３）。ここでは、保持された操作情報４ａを「操作情報４ａ１」として区別して表す。また、これとともに、制御部１ｂは、取得された操作情報４ａに対応するデータ群３ａを、ストレージ装置２に転送する（ステップＳ４）。
【００２０】
ここで、制御部１ｂは、ストレージ装置２へのデータ群３ａの転送中に、データ群３ａに対する第２の操作を行ったとする（ステップＳ５）。この場合、制御部１ｂは、転送制御情報４に登録された、操作対象のデータ群３ａに対応する操作情報４ａを更新する（ステップＳ６）。
【００２１】
また、制御部１ｂは、ストレージ装置２へのデータ群３ａの転送が完了すると、この時点で転送制御情報４に登録されている操作情報４ａと、保持されている操作情報４ａ１とを比較する（ステップＳ７）。ここで、操作情報４ａと操作情報４ａ１とが一致している場合、制御部１ｂは、データ群３ａが更新されていないと判断して、データ転送処理を終了する。このとき、例えば、制御部１ｂは、操作情報４ａを転送制御情報４から削除する。一方、操作情報４ａと操作情報４ａ１とが一致していない場合、制御部１ｂは、データ群３ａが更新されたと判断して、データ群３ａをストレージ装置２に対して再転送する（ステップＳ８）。
【００２２】
以上のように、制御部１ｂは、あるデータ群のストレージ装置２への転送中にそのデータ群に対する操作を行うと、転送制御情報４に登録された、そのデータ群に対応する操作情報を更新する。また、制御部１ｂは、そのデータ群のストレージ装置２の転送が完了すると、転送制御情報４から再度操作情報を取得し、取得された操作情報と、転送前に保持しておいた操作情報とを比較する。この比較により、制御部１ｂは、データ群の転送中にそのデータ群が更新されたか否かを判断できる。そして、制御部１ｂは、各操作情報が一致しない場合に、データ群が更新されたと判断して、データ群をストレージ装置２に再転送する。これにより、制御部１ｂは、データ群の転送中にそのデータ群が更新された場合でも、データ群の更新内容をストレージ装置２に確実に反映させることができる。
【００２３】
〔第２の実施の形態〕
図２は、第２の実施の形態に係る情報処理システムの構成例を示す図である。図２に示す情報処理システムは、クラウドストレージゲートウェイ１００、ＮＡＳ（Network Attached Storage）クライアント２１０およびストレージシステム２２０を有する。クラウドストレージゲートウェイ１００は、ネットワーク２３１を介してＮＡＳクライアント２１０と接続し、また、ネットワーク２３２を介してストレージシステム２２０と接続する。ネットワークは、例えばＬＡＮ（Local Area Network）であり、ネットワークは、例えばＷＡＮ（Wide Area Network）である。
【００２４】
ストレージシステム２２０は、ネットワーク２３２を介してクラウドストレージサービスを提供する。以下の説明では、ストレージシステム２２０が提供するクラウドストレージサービスによってサービス利用者（ここではクラウドストレージゲートウェイ１００）が利用可能な記憶領域を、「クラウドストレージ」と記載する場合がある。
【００２５】
また、本実施の形態では例として、ストレージシステム２２０は、データがオブジェクト単位で管理されるオブジェクトストレージによって実現される。例えば、ストレージシステム２２０は、制御サーバ２２１ａとストレージ装置２２１ｂとをそれぞれ含むストレージノード２２１を複数有する、分散型のストレージシステムとして実現される。この場合、各ストレージノード２２１において、制御サーバ２２１ａはストレージ装置２２１ｂに対するアクセスを制御し、ストレージ装置２２１ｂの記憶領域によってクラウドストレージの一部が実現される。また、サービス利用者（クラウドストレージゲートウェイ１００）からのオブジェクトの格納先とされるストレージノード２２１は、オブジェクト固有の情報に基づいて決定される。
【００２６】
一方、ＮＡＳクライアント２１０は、クラウドストレージゲートウェイ１００を、ファイルシステムによって管理される記憶領域を提供するＮＡＳサーバとして認識する。この記憶領域とは、ストレージシステム２２０によって提供されるクラウドストレージによる記憶領域である。そして、ＮＡＳクライアント２１０は、例えばＮＦＳ（Network File System）プロトコルやＣＩＦＳ（Common Internet File System）プロトコルにしたがって、クラウドストレージゲートウェイ１００に対してファイル単位でデータの読み書きを要求する。すなわち、ＮＡＳクライアント２１０は、クラウドストレージゲートウェイ１００のＮＡＳサーバ機能により、クラウドストレージを大容量の仮想的なネットワークファイルシステムとして利用できるようになる。
【００２７】
ＮＡＳクライアント２１０は、例えば、データバックアップのためのバックアップソフトウェアを実行する。これによりＮＡＳクライアント２１０は、ＮＡＳクライアント２１０に記憶されたファイル、またはＮＡＳクライアント２１０に接続されたサーバ（例えば業務サーバ）に記憶されたファイルを、ＮＡＳサーバから提供される記憶領域にバックアップする。
【００２８】
クラウドストレージゲートウェイ１００は、図１に示した情報処理装置１の一例である。クラウドストレージゲートウェイ１００は、ＮＡＳクライアント２１０とクラウドストレージとの間で転送されるデータを中継する。例えば、クラウドストレージゲートウェイ１００は、ＮＡＳサーバ機能により、ＮＡＳクライアント２１０からファイルの書き込み要求を受信し、書き込みが要求されたファイルを内部にキャッシュする。クラウドストレージゲートウェイ１００は、書き込みが要求されたファイルをチャンク単位に分割して、クラウドストレージに格納する。このとき、合計サイズが一定サイズを超える複数のチャンクが「チャンクグループ」としてグループ化され、チャンクグループがオブジェクトとしてクラウドストレージに転送される。
【００２９】
また、クラウドストレージゲートウェイ１００は、ファイルをキャッシュする時点で、ファイルをチャンク単位に分割し、同一内容のチャンクが重複して保存されないようにする「重複排除」を行う。さらに、分割されたチャンクのデータは圧縮された状態で格納される。例えば、クラウドストレージサービスでは、格納されるデータ量に応じて課金が行われる場合がある。重複排除やデータ圧縮を行うことで、クラウドストレージに格納されるデータ量を削減し、サービス利用コストを抑制することができる。
【００３０】
図３は、クラウドストレージゲートウェイのハードウェア構成例を示すブロック図である。クラウドストレージゲートウェイ１００は、例えば、図３に示すようなコンピュータとして実現される。
【００３１】
クラウドストレージゲートウェイ１００は、プロセッサ１０１によって装置全体が制御されている。プロセッサ１０１は、例えばＣＰＵ（Central Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、またはＰＬＤ（Programmable Logic Device）である。また、プロセッサ１０１は、ＣＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００３２】
プロセッサ１０１には、バス１０８を介して、ＲＡＭ１０２と複数の周辺機器が接続されている。
ＲＡＭ１０２は、クラウドストレージゲートウェイ１００の主記憶装置として使用される。ＲＡＭ１０２には、プロセッサ１０１に実行させるＯＳ（Operating System）プログラムやアプリケーションプログラムの少なくとも一部が一時的に格納される。また、ＲＡＭ１０２には、プロセッサ１０１による処理に必要な各種データが格納される。
【００３３】
バス１０８に接続されている周辺機器としては、ＨＤＤ１０３、グラフィック処理装置１０４、入力インタフェース１０５、読み取り装置１０６および通信インタフェース１０７がある。
【００３４】
ＨＤＤ１０３は、クラウドストレージゲートウェイ１００の補助記憶装置として使用される。ＨＤＤ１０３には、ＯＳプログラム、アプリケーションプログラム、および各種データが格納される。なお、補助記憶装置としては、ＳＳＤ（Solid State Drive）などの他の種類の不揮発性記憶装置を使用することもできる。
【００３５】
グラフィック処理装置１０４には、表示装置１０４ａが接続されている。グラフィック処理装置１０４は、プロセッサ１０１からの命令にしたがって、画像を表示装置１０４ａに表示させる。表示装置としては、液晶ディスプレイや有機ＥＬ（Electroluminescence）ディスプレイなどがある。
【００３６】
入力インタフェース１０５には、入力装置１０５ａが接続されている。入力インタフェース１０５は、入力装置１０５ａから出力される信号をプロセッサ１０１に送信する。入力装置１０５ａとしては、キーボードやポインティングデバイスなどがある。ポインティングデバイスとしては、マウス、タッチパネル、タブレット、タッチパッド、トラックボールなどがある。
【００３７】
読み取り装置１０６には、可搬型記録媒体１０６ａが脱着される。読み取り装置１０６は、可搬型記録媒体１０６ａに記録されたデータを読み取ってプロセッサ１０１に送信する。可搬型記録媒体１０６ａとしては、光ディスク、光磁気ディスク、半導体メモリなどがある。
【００３８】
通信インタフェース１０７は、ネットワーク１０７ａを介して他の装置との間でデータの送受信を行う。
以上のようなハードウェア構成によって、クラウドストレージゲートウェイ１００の処理機能を実現することができる。なお、ＮＡＳクライアント２１０や制御サーバ２２１ａも、図３と同様のハードウェア構成を有するコンピュータとして実現可能である。
【００３９】
図４は、クラウドストレージゲートウェイが備える処理機能の構成例を示すブロック図である。クラウドストレージゲートウェイ１００は、データ管理部１１０、操作ログ管理部１２０、ＮＡＳサービス処理部１３１、ファイルシステム処理部１３２およびクラウド転送処理部１３３を有する。
【００４０】
なお、データ管理部１１０および操作ログ管理部１２０は、例えば、ＲＡＭ１０２やＨＤＤ１０３など、クラウドストレージゲートウェイ１００が備える記憶装置の記憶領域として実現される。また、ＮＡＳサービス処理部１３１、ファイルシステム処理部１３２およびクラウド転送処理部１３３の処理は、例えば、プロセッサ１０１が所定のプログラムを実行することで実現される。
【００４１】
ＮＡＳサービス処理部１３１は、ＮＡＳサーバとしてのインタフェース処理を実行する。すなわち、ＮＡＳサービス処理部１３１は、ＮＡＳクライアント２１０からのファイルの読み書きや削除の要求を受け付け、要求された内容をファイルシステム処理部１３２に伝達する。そして、ＮＡＳサービス処理部１３１はファイルシステム処理部１３２による処理結果に基づいて、ＮＡＳクライアント２１０に応答する。
【００４２】
ファイルシステム処理部１３２は、データ管理部１１０および操作ログ管理部１２０にアクセスしながら、ＮＡＳクライアント２１０からの要求に応じた処理を実行する。例えば、新たなファイルの書き込みが要求された場合、ファイルシステム処理部１３２は、ファイルの実データをチャンク単位に分割し、分割された実データを重複を排除しながらデータ管理部１１０に格納する。このとき、ファイルシステム処理部１３２は、実データ以外のファイルに関する情報もデータ管理部１１０に登録する。また、ファイルシステム処理部１３２は、ファイルの書き込み処理が終了するまでに段階的に行った、ファイルやチャンクに関する操作のログを、操作ログ管理部１２０に登録していく。
【００４３】
データ管理部１１０は、ファイルシステム上のファイルのディレクトリ情報、ファイルとチャンクおよびチャンクグループとの関係を示す情報など、ファイルに関する管理情報と、ファイルに含まれる実データとを記憶する。一方、操作ログ管理部１２０は、クラウドストレージ２４０に転送すべきオブジェクトを判別するためにクラウド転送処理部１３３によって参照される操作ログを記憶する。
【００４４】
ここで、データ管理部１１０に記憶される情報について説明する。データ管理部１１０には、ディレクトリテーブル１１１、エントリテーブル１１２、チャンクマップテーブル１１３、チャンクテーブル１１４およびチャンクグループテーブル１１５が記憶される。これらを大別すると、ディレクトリテーブル１１１およびエントリテーブル１１２は、ファイルシステム上のディレクトリ構造に関する情報を保持し、チャンクマップテーブル１１３、チャンクテーブル１１４およびチャンクグループテーブル１１５は、チャンクに関する情報を保持する。
【００４５】
図５は、ディレクトリテーブルを説明するための図である。図５（Ａ）は、ディレクトリテーブル１１１のデータ構成例を示し、図５（Ｂ）は、ディレクトリ構造の例を示す。
ディレクトリテーブル１１１は、ディレクトリの階層構造を表現するための管理情報である。図５（Ａ）に示すように、ディレクトリテーブル１１１には、「ｐａｒｅｎｔ」「ｎａｍｅ」「ｉｎｏ」の各項目を有するレコードが登録される。各レコードは、ディレクトリ構造上の１つのディレクトリ（フォルダ）、またはディレクトリ内の１つのファイルに対応付けられている。「ｐａｒｅｎｔ」は、親ディレクトリのｉｎｏｄｅ番号を示し、「ｎａｍｅ」は、レコードに対応するディレクトリまたはファイルの名称を示し、「ｉｎｏ」は、レコードに対応するディレクトリまたはファイルのｉｎｏｄｅ番号を示す。
【００４６】
図５（Ｂ）は、図５（Ａ）に例示されたレコード１１１ａ〜１１１ｇに基づくディレクトリ構造を示している。この例では、ｉｎｏｄｅ番号「１」のルートディレクトリの配下に、ディレクトリ名「Ａ」、ｉｎｏｄｅ番号「２」のサブディレクトリと、ディレクトリ名「Ｂ」、ｉｎｏｄｅ番号「４」のサブディレクトリとが生成されている。ディレクトリ名「Ａ」のサブディレクトリの配下には、ファイル名「Ｘ」、ｉｎｏｄｅ番号「３」のファイルが格納されている。ディレクトリ名「Ｂ」のサブディレクトリの配下には、ディレクトリ名「Ｃ」、ｉｎｏｄｅ番号「５」のサブディレクトリが生成されている。このサブディレクトリの配下には、ファイル名「Ｙ」、ｉｎｏｄｅ番号「６」のファイルと、ファイル名「Ｚ」、ｉｎｏｄｅ番号「７」のファイルとが格納されている。
【００４７】
図６は、エントリテーブルのデータ構成例を示す図である。エントリテーブル１１２は、ディレクトリまたはファイルのメタデータを保持するための管理情報である。エントリテーブル１１２には、「ｉｎｏ」「ｍｏｄｅ」「ｎｌｉｎｋ」「ｕｉｄ」「ｇｉｄ」「ｓｉｚｅ」「ａｔｉｍｅ」「ｍｔｉｍｅ」「ｃｔｉｍｅ」の各項目を有するレコードが登録される。各レコードは、１つのディレクトリまたはファイルに対応付けられている。
【００４８】
「ｉｎｏ」は、ディレクトリまたはファイルのｉｎｏｄｅ番号を示す。「ｍｏｄｅ」は、権限情報を示す。「ｎｌｉｎｋ」は、ハードリンクの数を示す。「ｕｉｄ」は、所有者のユーザＩＤを示し、「ｇｉｄ」は、所有者のグループＩＤを示す。「ｓｉｚｅ」は、ファイルのサイズを示す。「ａｔｉｍｅ」は、最終アクセス時刻を示し、「ｍｔｉｍｅ」は、最終更新時刻を示し、「ｃｔｉｍｅ」は、最終状態変更時刻を示す。
【００４９】
以上のディレクトリテーブル１１１およびエントリテーブル１１２には、ＮＡＳクライアント２１０から新規ファイルの書き込みが要求されたとき、ファイルシステム処理部１３２によってそのファイルに対応するレコードがそれぞれ追加される。
【００５０】
図７は、チャンクマップテーブルのデータ構成例を示す図である。チャンクマップテーブル１１３は、ファイルとチャンクとを関連付けるための管理情報である。チャンクマップテーブル１１３には、「ｉｎｏ」「ｏｆｆｓｅｔ」「ｓｉｚｅ」「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目を有するレコードが登録される。各レコードは、ファイルの実データを分割して生成された１つのチャンクに対応付けられている。
【００５１】
「ｉｎｏ」は、チャンクが含まれるファイルのｉｎｏｄｅ番号を示す。「ｏｆｆｓｅｔ」は、ファイルの実データの先頭からチャンクの先頭までのオフセット量を示す。「ｉｎｏ」と「ｏｆｆｓｅｔ」の組み合わせによって、ファイル内のチャンクが一意に識別される。
【００５２】
「ｓｉｚｅ」は、チャンクのサイズを示す。本実施の形態では例として、チャンクのサイズは可変であるものとする。例えば、ファイルシステム処理部１３２は、所定の演算規則にしたがい、同一データを含むチャンクが生成されやすいようにファイルの実データの分割位置を決定する。これにより、可変長のチャンクが生成される。
【００５３】
「ｇｎｏ」は、チャンク内の実データ（以下、「チャンクデータ」と記載する）が属するチャンクグループのグループ番号を示し、「ｇｉｎｄｅｘ」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。レコードに「ｉｎｏ」および「ｏｆｆｓｅｔ」と「ｇｎｏ」および「ｇｉｎｄｅｘ」とが登録されることで、チャンクとチャンクデータとが関連付けられる。
【００５４】
図７の例では、ｉｎｏｄｅ番号「ｉ１」のファイルは、２つのチャンクに分割されており、ｉｎｏｄｅ番号「ｉ２」のファイルは、４つのチャンクに分割されている。また、前者のファイルに含まれる２つのチャンクのデータと、後者のファイルに含まれるチャンクのうち先頭から２つのチャンクのデータとが、グループ番号「ｇ１」のチャンクグループに属するチャンクデータとしてデータ管理部１１０に格納されている。さらに、後者のファイルに含まれるチャンクのうち先頭から３番目および４番目のチャンクのデータは、グループ番号「ｇ２」のチャンクグループに属するチャンクデータとしてデータ管理部１１０に格納されている。
【００５５】
図８は、チャンクテーブルのデータ構成例を示す図である。チャンクテーブル１１４は、個々のチャンクデータに関する情報を保持するための管理情報である。チャンクテーブル１１４には、「ｈａｓｈ」「ｓｉｚｅ」「ｒｅｆｃｎｔ」「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目を有するレコードが登録される。各レコードは、１つのチャンクデータに対応付けられている。
【００５６】
「ｈａｓｈ」は、チャンクデータから算出されたハッシュ値を示す。「ｓｉｚｅ」は、チャンクデータのサイズを示す。「ｇｎｏ」は、チャンクデータが属するチャンクグループの番号を示し、「ｇｉｎｄｅｘ」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。「ｇｎｏ」と「ｇｉｎｄｅｘ」の組み合わせにより、１つのチャンクデータが識別される。
【００５７】
「ｒｅｆｃｎｔ」は、「参照カウンタ」の値を示し、この値とは、チャンクデータを参照している、ファイル内のチャンクの数を示す。すなわち、「ｒｅｆｃｎｔ」は、チャンクデータがいくつのチャンクの間で重複しているかを示す。
【００５８】
例えば、あるファイルから生成されたチャンクのデータと、別のファイルから生成されたチャンクのデータとが同一の場合、それらのデータは共通のチャンクデータに関連付けられる。この場合、そのチャンクデータに対応する１つのレコードがチャンクテーブル１１４に登録され、「ｒｅｆｃｎｔ」には参照カウンタの値として「２」が登録される。なお、このケースでは、各チャンクに対応するレコードがチャンクマップテーブル１１３に登録され、それらのレコードには、上記のチャンクデータを示す共通のグループ番号（ｇｎｏ）およびインデックス番号（ｇｉｎｄｅｘ）が登録される。
【００５９】
図９は、チャンクグループテーブルのデータ構成例を示す図である。チャンクグループテーブル１１５は、個々のチャンクグループに関する情報を保持するとともに、チャンクグループに含まれる各チャンクデータを保持するための管理情報である。チャンクグループテーブル１１５には、「ｇｎｏ」「ｇｉｎｄｅｘ」「ｄａｔａ」の各項目を有するレコードが登録される。各レコードは、１つのチャンクデータに対応付けられている。
【００６０】
「ｇｎｏ」は、チャンクデータが属するチャンクグループのグループ番号を示し、「ｇｉｎｄｅｘ」は、チャンクグループにおけるチャンクデータのインデックス番号を示す。「ｄａｔａ」は、チャンクデータそのものを示す。図９の例では、グループ番号「ｇ１」のチャンクグループに、インデックス番号「ｘ１」〜「ｘ４」の４つのチャンクデータが含まれている。また、グループ番号「ｇ２」のチャンクグループに、少なくとも、インデックス番号「ｘ１」「ｘ２」の２つのチャンクデータが含まれている。
【００６１】
図１０は、チャンクグループの構成例を示す図である。この図１０を用いて、チャンクおよびチャンクグループの生成方法について説明する。
なお、図１０に示すテーブル１１５ａは、チャンクグループテーブル１１５から、グループ番号「１」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。同様に、図１０に示すテーブル１１５ｂは、チャンクグループテーブル１１５から、グループ番号「２」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。また、図１０に示すテーブル１１５ｃは、チャンクグループテーブル１１５から、グループ番号「３」のチャンクグループに属するチャンクデータに対応するレコードを抽出したものである。
【００６２】
ＮＡＳクライアント２１０から新規のファイルの書き込みや、既存のファイルの更新が要求されると、ファイルシステム処理部１３２は、ファイルの実データをチャンク単位に分割する。図１０の例では、ファイルの実データが１３個のチャンクに分割されたものとする。各チャンクのデータを先頭から順にデータＤ１〜Ｄ１３と表す。なお、ここでは説明を簡単にするために、データＤ１〜Ｄ１３の内容はすべて異なる（すなわち、重複していない）ものとする。この場合、データＤ１〜Ｄ１３にそれぞれ対応するチャンクデータが個別に格納される。
【００６３】
各チャンクデータには、グループ番号（ｇｎｏ）と、その番号が示すチャンクグループにおけるインデックス番号（ｇｉｎｄｅｘ）とが割り当てられる。インデックス番号は、ファイルの分割によって重複していないチャンクデータが生成された順に割り当てられる。また、同じグループ番号に割り当てられたチャンクデータの合計サイズが一定量に達すると、グループ番号がカウントアップされ、次のチャンクデータにはカウントアップ後のグループ番号が割り当てられる。
【００６４】
なお、チャンクデータの合計サイズが一定量に達していないチャンクグループの状態を、次のチャンクデータを受け入れ可能な「アクティブ」と呼ぶことにする。また、チャンクデータの合計サイズが一定量に達したチャンクグループの状態を、次のチャンクデータを受け入れ不可能な「非アクティブ」と呼ぶことにする。
【００６５】
図１０の例では、まず、データＤ１〜Ｄ５がグループ番号「１」のチャンクグループに割り当てられる。そして、この段階で、グループ番号「１」のチャンクグループのサイズが一定量に達し、このチャンクグループが非アクティブになったとする。すると、次のデータＤ６には、新たなグループ番号「２」が割り当てられる。
【００６６】
この後、データＤ６〜Ｄ１１が、グループ番号「２」のチャンクグループに割り当てられ、この段階でこのチャンクグループが非アクティブになったとする。すると、次のデータＤ６には、新たなグループ番号「３」が割り当てられる。図１０の例では、データＤ１２，Ｄ１３がグループ番号「３」のチャンクグループに割り当てられるが、この段階ではこのチャンクグループはアクティブの状態である。この場合、次に生成されるチャンクデータ（図示せず）には、グループ番号「３」とインデックス番号「３」とが割り当てられることになる。
【００６７】
非アクティブ化されたチャンクグループは、ファイル内の実データがクラウドストレージ２４０に転送される際のデータ単位となる。あるチャンクグループが非アクティブになると、そのチャンクグループから１つのオブジェクト（後述するデータオブジェクト）が生成されて、クラウドストレージ２４０に転送される。
【００６８】
以下、図４に戻って説明を続ける。
クラウド転送処理部１３３は、ファイルシステム処理部１３２によるデータ管理部１１０に対するデータ操作とは非同期に、データ管理部１１０に記憶された各種のデータをクラウドストレージ２４０に転送する。前述のように、クラウドストレージ２４０に対してはオブジェクト単位でデータが転送される。
【００６９】
図４に示すように、クラウド転送処理部１３３は、ファイルオブジェクト１４１、チャンクマップオブジェクト１４２、チャンクグループオブジェクト１４３という３種類のオブジェクトを生成して、クラウドストレージ２４０に転送する。ここで、図１１、図１２を用いて、ファイルオブジェクト１４１、チャンクマップオブジェクト１４２、チャンクグループオブジェクト１４３のデータ構造について説明する。
【００７０】
図１１は、ファイルオブジェクトおよびチャンクマップオブジェクトのデータ構造の例を示す図である。図１１（Ａ）は、ファイルオブジェクト１４１を示し、図１１（Ｂ）は、チャンクマップオブジェクト１４２を示す。
【００７１】
ファイルオブジェクト１４１とは、ディレクトリテーブル１１１およびエントリテーブル１１２に登録された情報を、ファイル単位でクラウドストレージ２４０に格納するためのオブジェクトである。図１１（Ａ）に示すように、ファイルオブジェクト１４１は、オブジェクト名を示す項目として「ｐａｒｅｎｔ」「ｎａｍｅ」を含む。「ｐａｒｅｎｔ」「ｎａｍｅ」の各項目には、ディレクトリテーブル１１１のレコードのうち、対応するファイルのレコードに含まれる同名の項目から、登録された情報がコピーされる。したがってこの例では、「ｐａｒｅｎｔ」「ｎａｍｅ」によってファイルオブジェクト１４１に対応するファイルが識別される。
【００７２】
また、ファイルオブジェクト１４１は、オブジェクト値を示す項目として「ｉｎｏ」「ｍｏｄｅ」「ｎｌｉｎｋ」「ｕｉｄ」「ｇｉｄ」「ｓｉｚｅ」「ａｔｉｍｅ」「ｍｔｉｍｅ」「ｃｔｉｍｅ」を含む。「ｉｎｏ」の項目には、ディレクトリテーブル１１１のレコードのうち、オブジェクト名の「ｐａｒｅｎｔ」「ｎａｍｅ」が示すファイルのレコードに含まれる「ｉｎｏ」の項目から、登録された情報がコピーされる。「ｍｏｄｅ」「ｎｌｉｎｋ」「ｕｉｄ」「ｇｉｄ」「ｓｉｚｅ」「ａｔｉｍｅ」「ｍｔｉｍｅ」「ｃｔｉｍｅ」の各項目には、エントリテーブル１１２のレコードのうち、「ｉｎｏ」が示すファイルのレコードに含まれる同名の項目から、登録された情報がコピーされる。
【００７３】
一方、チャンクマップオブジェクト１４２は、チャンクマップテーブル１１３およびチャンクテーブル１１４に登録された情報を、ファイル単位でクラウドストレージ２４０に格納するためのオブジェクトである。図１１（Ｂ）に示すように、チャンクマップオブジェクト１４２は、オブジェクト名を示す項目として「ｉｎｏ」を含む。「ｉｎｏ」の項目には、チャンクマップテーブル１１３のレコードのうち、対応するファイルを示すレコードに含まれる「ｉｎｏ」の項目から、登録された情報がコピーされる。したがってこの例では、「ｉｎｏ」によってチャンクマップオブジェクト１４２に対応するファイルが識別される。
【００７４】
また、チャンクマップオブジェクト１４２は、オブジェクト値を示す項目として「ｏｆｆｓｅｔ」「ｓｉｚｅ」「ｈａｓｈ」「ｇｎｏ」「ｇｉｎｄｅｘ」を含む。「ｏｆｆｓｅｔ」「ｓｉｚｅ」「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目には、チャンクマップテーブル１１３のレコードのうち、「ｉｎｏ」が示すファイルに対応するレコードに含まれる同名の項目から、登録された情報がコピーされる。「ｈａｓｈ」の項目には、チャンクテーブル１１４のレコードのうち、「ｇｎｏ」「ｇｉｎｄｅｘ」が示すチャンクグループのレコードに含まれる「ｈａｓｈ」の項目から、登録されたハッシュ値がコピーされる。
【００７５】
チャンクマップテーブル１１３には、通常、「ｉｎｏ」で識別される１つのファイルに関連付けられた複数のチャンクのそれぞれに対応するレコードが含まれる。そのため、チャンクマップオブジェクト１４２のオブジェクト値には、ファイルに関連付けられたすべてのチャンクについて、上記各項目の登録情報が含められる。
【００７６】
以上のようなファイルオブジェクト１４１およびチャンクマップオブジェクト１４２が、クラウドストレージ２４０に転送される。これにより、ファイルの実データだけでなく、ファイルのメタデータやファイルに関連付けられたチャンクの構成情報などの管理情報も、クラウドストレージ２４０に保存することができる。そのため、例えば、クラウドストレージゲートウェイ１００の動作が異常によって停止した場合でも、ファイルのディレクトリ構造やチャンクの構成を復元することができる。
【００７７】
図１２は、チャンクグループオブジェクトのデータ構造の例を示す図である。チャンクグループオブジェクト１４３は、チャンクグループテーブル１１５に登録された、ファイルの実データを含む情報を、チャンクグループ単位でクラウドストレージ２４０に格納するためのオブジェクトである。図１２に示すように、チャンクグループオブジェクト１４３には、オブジェクト名を示す項目として「ｇｎｏ」を含む。「ｇｎｏ」の項目には、チャンクグループテーブル１１５のレコードのうち、対応するチャンクグループを示すレコードに含まれる「ｇｎｏ」の項目から、登録された情報がコピーされる。したがって、この「ｇｎｏ」によってチャンクグループオブジェクト１４３に対応するチャンクグループが識別される。
【００７８】
また、チャンクグループオブジェクト１４３には、オブジェクト値として「ｈｅａｄｅｒ」「ｄａｔａｌｉｓｔ」が含まれる。チャンクグループテーブル１１５には、通常、１つのチャンクグループに含まれる複数のチャンクデータのそれぞれに対応するレコードが含まれる。図１２では、オブジェクト名の「ｇｎｏ」が示すチャンクグループにｎ個のチャンクデータが含まれるものとして表している。
【００７９】
「ｄａｔａｌｉｓｔ」の項目には、チャンクグループテーブル１１５のレコードのうち、オブジェクト名の「ｇｎｏ」が示すチャンクグループに含まれる各チャンクデータに対応するレコードから、「ｄａｔａ」の項目に登録された情報がコピーされる。図１２の例では、インデックス番号（ｇｉｎｄｅｘ）「０」〜「ｎ−１」にそれぞれ対応するチャンクデータ＃０〜＃ｎ−１が、「ｄａｔａｌｉｓｔ」の項目に設定されている。このように、「ｄａｔａ」の項目にチャンクデータ（ファイルの実データ）がオブジェクト値として設定されることで、これらのチャンクデータがクラウドストレージ２４０に転送されて格納される。
【００８０】
「ｈｅａｄｅｒ」の項目には、まず、「ｄａｔａｌｉｓｔ」に設定されたチャンクデータの数、すなわち、対応するチャンクグループに含まれるチャンクデータの数が設定される。さらに、「ｈｅａｄｅｒ」の項目には、「ｄａｔａｌｉｓｔ」に設定された各チャンクデータについての、チャンクグループの先頭からのオフセット量が設定される。
【００８１】
ここで、図４に戻り、図１１、図１２に示したようなオブジェクトをクラウド転送処理部１３３が生成する上での課題について説明する。
クラウド転送処理部１３３は、データ管理部１１０に登録された情報の中から、オブジェクトとしてクラウドストレージ２４０に転送すべき情報を判別する必要がある。この判別方法の例としては、クラウド転送処理部１３３が、データ管理部１１０の登録情報全体を監視する方法がある。クラウド転送処理部１３３は、データ管理部１１０の登録情報を更新するファイルシステム処理部１３２とは非同期に動作するので、登録情報の更新箇所の通知を、ファイルシステム処理部１３２から直接受け付けることは難しい。そこで、データ管理部１１０の登録情報全体を監視することで、クラウド転送処理部１３３は、登録情報の更新箇所を認識して、クラウドストレージ２４０に転送すべき情報を判別できる。しかし、この方法では、データ管理部１１０に登録情報全体を監視するための処理負荷が高く、処理効率が低いという問題がある。
【００８２】
また、前述の特許文献２には、オンラインストレージにアップデートするデータの転送単位となる分割データベースごとに、その内容が更新されたか否かを示すＤｉｒｔｙフラグが記録されている。この技術を利用して、データ管理部１１０の登録情報のうち、オブジェクトに含める情報群ごとに内容が更新されたか否かを示すフラグを設ける方法が考えられる。この方法によれば、各情報群に対応するフラグを参照するだけで転送対象とすべき情報群を判別できるので、処理効率は向上する。しかし、転送対象でないものを含めてすべての情報群のフラグを参照しなければならない点で、処理効率が高いとは言えない。
【００８３】
さらに、フラグを用いた上記方法では、クラウド転送処理部１３３がオブジェクトの転送処理中に、オブジェクトに対応する元の情報群がファイルシステム処理部１３２によって更新された場合、クラウド転送処理部１３３はその更新の発生を認識できない。そのため、情報群の更新内容をクラウドストレージ２４０に正確に反映できない可能性がある、という問題もある。
【００８４】
そこで、本実施の形態では、クラウド転送処理部１３３が転送すべき情報を高効率かつ正確に判別できるように、操作ログ管理部１２０が利用される。図４に示すように、操作ログ管理部１２０には、操作ログテーブル１２１が記憶される。操作ログテーブル１２１には、データ管理部１１０の登録情報のうち、オブジェクトに含める情報群ごとに、それぞれ操作ログを示すレコードがＦＩＦＯ（First In／First Out）方式で登録される。また、操作ログには、ファイル操作ログ１２２とデータ操作ログ１２３の２種類がある。
【００８５】
操作ログに対応する情報群には、ファイルに関する情報群と、チャンクグループに関する情報群の２種類がある。ファイルに関する情報群とは、ファイルオブジェクト１４１およびチャンクマップオブジェクト１４２を生成するための情報群であり、ファイル単位で生成され、更新される。この情報群には、ディレクトリテーブル１１１、エントリテーブル１１２、チャンクマップテーブル１１３およびチャンクテーブル１１４に登録された、１つのファイルに関する情報が含まれる。そして、この情報群に対応する操作ログが上記のファイル操作ログ１２２であり、ファイル操作ログ１２２は、ファイル単位のオブジェクトであるファイルオブジェクト１４１およびチャンクマップオブジェクト１４２の送信要否を判別するために参照される。
【００８６】
一方、チャンクグループに関する情報群とは、チャンクグループオブジェクト１４３を生成するための情報群であり、チャンクグループ単位で生成され、更新される。この情報群にはそれぞれ、チャンクグループテーブル１１５に登録された、１つのチャンクグループに関する情報が含まれ、その中にはチャンクデータ（ファイルの実データ）も含まれる。そして、この情報群に対応する操作ログが上記のデータ操作ログ１２３であり、データ操作ログ１２３は、チャンクグループ単位のオブジェクトであるチャンクグループオブジェクト１４３の送信要否を判別するために参照される。
【００８７】
また、各操作ログには、更新カウンタの値が記録される。更新カウンタの値は、ファイルシステム処理部１３２が対応する情報群に対して操作を行うたびにカウントアップされる。そして、クラウドストレージ２４０へのオブジェクトの送信処理の前後で更新カウンタの値が比較されることで、送信処理中における元の情報群の更新発生を認識可能にする。
【００８８】
なお、クラウド転送処理部１３３は、操作ログに記録された更新カウンタの値を、カウント値保存部１３３ａに一時的に保存する。カウント値保存部１３３ａは、例えばＲＡＭ１０２によって実現される一時記憶領域である。
【００８９】
図１３は、操作ログの登録およびオブジェクトの送信についての第１の処理例を示す図である。図１３の例では、まず、ファイルシステム処理部１３２が、データ管理部１１０内のある情報群に対する操作を行ったとする。この情報群とは、前述したファイルに関する情報群とチャンクグループに関する情報群のいずれかである。
【００９０】
この時点で、操作対象の情報群に対応する操作ログが操作ログテーブル１２１に存在しない場合には、ファイルシステム処理部１３２は、その情報群に対応する操作ログ１２１ａを新たに生成し、操作ログテーブル１２１に登録する（ステップＳ１１）。このとき、操作ログ１２１ａには、情報群に対する操作内容がログ情報として記録されるとともに、更新カウンタ１２１ｂの値として初期値「１」が記録される。
【００９１】
操作ログテーブル１２１には、操作ログがＦＩＦＯ方式で登録される。クラウド転送処理部１３３は、操作ログテーブル１２１の先頭から順に操作ログを取得することで、オブジェクトとして送信すべき情報群を特定する。図１３の例では、クラウド転送処理部１３３が操作ログ１２１ａを取得したとする。このとき、クラウド転送処理部１３３は、操作ログ１２１ａに記録された更新カウンタ１２１ｂの値「１」を、カウント値保存部１３３ａに一時的に保存する（ステップＳ１２）。そして、クラウド転送処理部１３３は、操作ログ１２１ａに記録された操作内容に基づいてオブジェクトを生成し、クラウドストレージ２４０に送信する（ステップＳ１３）。詳しくは後述するが、クラウド転送処理部１３３は、操作ログ１２１ａに記録された操作内容に応じて、対応する情報群からどの情報を抽出してどの種類のオブジェクトを送信すればよいかを判定できる。
【００９２】
クラウドストレージ２４０に対するオブジェクトの送信処理が完了すると、クラウド転送処理部１３３は、同じ操作ログ１２１ａを再度参照して、更新カウンタ１２１ｂの値を取得する。クラウド転送処理部１３３は、取得された更新カウンタ１２１ｂの値と、ステップＳ１２でカウント値保存部１３３ａに保存された更新カウンタの値とを比較する（ステップＳ１４）。
【００９３】
図１３の例では、これらの値は同一である。この場合、クラウド転送処理部１３３は、操作ログ１２１ａに記録された操作内容に対応するオブジェクト送信処理が完了したと判断し、操作ログ１２１ａを操作ログテーブル１２１から削除する（ステップＳ１５）。そして、クラウド転送処理部１３３は、操作ログテーブル１２１から次の操作ログを取得し、その内容に応じたオブジェクト送信処理を実行する。
【００９４】
図１４は、操作ログの登録およびオブジェクトの送信についての第２の処理例を示す図である。図１４の例では、図１３の例と同様に、まず、ファイルシステム処理部１３２が、データ管理部１１０内のある情報群に対する操作を行い、この時点で、操作対象の情報群に対応する操作ログが操作ログテーブル１２１に存在しなかったものとする。この場合、ファイルシステム処理部１３２は、その情報群に対応する操作ログ１２１ａを新たに生成し、操作ログテーブル１２１に登録する（ステップＳ２１）。操作ログ１２１ａには、情報群に対する操作内容がログ情報として記録されるとともに、更新カウンタ１２１ｂの値として初期値「１」が記録される。
【００９５】
また、クラウド転送処理部１３３は、操作ログ１２１ａを取得し、操作ログ１２１ａに記録された更新カウンタ１２１ｂの値「１」を、カウント値保存部１３３ａに一時的に保存する（ステップＳ２２）。そして、クラウド転送処理部１３３は、操作ログ１２１ａに記録された操作内容に基づいてオブジェクトを生成し、クラウドストレージ２４０に送信する（ステップＳ２３）。
【００９６】
ここで、オブジェクトの送信が完了する前に、ファイルシステム処理部１３２が、操作ログ１２１ａに対応する情報群に対する操作をさらに行ったとする。このとき、ファイルシステム処理部１３２は、操作ログテーブル１２１を参照し、操作対象の情報群に対応する操作ログが操作ログテーブル１２１に登録されているかを判定する。そして、該当する操作ログ１２１ａが登録されていると判定すると、ファイルシステム処理部１３２は、操作ログ１２１ａに対して操作内容を記録するとともに、更新カウンタ１２１ｂの値を「２」にカウントアップする（ステップＳ２４）。
【００９７】
一方、クラウドストレージ２４０に対するオブジェクトの送信処理が完了すると、クラウド転送処理部１３３は、同じ操作ログ１２１ａを再度参照し、更新カウンタ１２１ｂの値を取得する。クラウド転送処理部１３３は、取得された更新カウンタ１２１ｂの値と、ステップＳ２２でカウント値保存部１３３ａに保存された更新カウンタの値とを比較する（ステップＳ２５）。
【００９８】
図１４の例では、これらの値は異なる。この場合、クラウド転送処理部１３３は、操作ログ１２１ａに記録された操作内容に対応するオブジェクト送信処理が完了していないと判断する。すると、クラウド転送処理部１３３は、操作ログテーブル１２１から操作ログ１２１ａを再度取得し、取得された操作ログ１２１ａに記録されている更新カウンタ１２１ｂの値「２」を、カウント値保存部１３３ａに一時的に保存する（ステップＳ２６）。そして、クラウド転送処理部１３３は、取得された操作ログ１２１ａに記録された操作内容に基づいてオブジェクトを生成し、クラウドストレージ２４０に送信する（ステップＳ２７）。
【００９９】
クラウド転送処理部１３３は、カウント値保存部１３３ａに保存された更新カウンタの値と、操作ログテーブル１２１から再取得された更新カウンタ１２１ｂの値とが一致するまで、ステップＳ２４〜Ｓ２７の処理を繰り返す。そして、クラウド転送処理部１３３は、これらの値が一致すると、操作ログ１２１ａを操作ログテーブル１２１から削除する。
【０１００】
以上の図１３、図１４に示した処理によれば、操作ログテーブル１２１には、１つの情報群に対応する操作ログは１つしか登録されない。また、ある情報群に対応するファイル操作ログが操作ログテーブル１２１に登録されている状態で、同じ情報群に対してさらに操作が行われた場合、その操作内容は登録済みの操作ログに記録される。さらに、操作ログに記録されたすべての操作内容に対応するオブジェクトの送信処理が完了すると、その操作ログは操作ログテーブル１２１から削除される。
【０１０１】
このような方法により、操作ログテーブル１２１の記憶容量を削減できる。また、このような操作ログがＦＩＦＯ方式で操作ログテーブル１２１に登録されることで、クラウド転送処理部１３３は、操作ログテーブル１２１の先頭から順に操作ログを参照するだけで、オブジェクトとして送信すべき情報群を特定できる。したがって、クラウド転送処理部１３３の処理負荷を軽減し、その処理効率を向上させることができる。
【０１０２】
さらに、図１３、図１４に示したように更新カウンタの値が利用されることで、ある情報群に含まれる情報がオブジェクトとして送信されている間に、元の情報群が更新された場合でも、その更新内容をオブジェクトとしてクラウドストレージ２４０に送信することができる。具体的には、クラウド転送処理部１３３は、図１４のステップＳ２５において、再取得された更新カウンタ１２１ｂの値とカウント値保存部１３３ａに保存された更新カウンタの値とが一致しないことで、対応する情報群が更新されたことを認識できる。そして、クラウド転送処理部１３３は、ステップＳ２７において、最新の操作ログ１２１ａの内容に基づいて、情報群の更新内容を含めたオブジェクトを生成し、クラウドストレージ２４０に送信できる。このような処理により、情報群の更新内容をクラウドストレージ２４０に正確に反映できる。
【０１０３】
なお、ファイルシステム処理部１３２は、既存の操作ログに対して新たな操作内容を記録する際に、その操作ログにすでに記録されている操作内容に対して新たな操作内容を上書きせずに、新たな操作内容を追加的に記録する場合がある。例えば、図１４のステップＳ２４において、操作ログ１２１ａに対応する情報群に含まれる第１の情報が更新されたとする。このとき、更新カウンタ１２１ｂの値は「２」にカウントアップされる。また、ステップＳ２３によるオブジェクトの送信処理が完了する前に、同じ情報群に含まれる、第１の情報とは異なる第２の情報が更新されたとする。このとき、更新カウンタ１２１ｂの値は「３」にカウントアップされる。
【０１０４】
このような場合、ファイルシステム処理部１３２は、第１の情報を更新すると、この第１の情報を含めたオブジェクトに対応する第１の操作内容を操作ログ１２１ａに記録する。また、ファイルシステム処理部１３２は、第２の情報を更新すると、この第２の情報を含めたオブジェクトに対応する第２の操作内容を、第１の操作内容を残したまま操作ログ１２１ａに追加的に記録する。
【０１０５】
これにより、クラウド転送処理部１３３は、オブジェクトの送信が完了して操作ログ１２１ａを再取得したとき、第１の操作内容に対応するオブジェクトと、第２の操作内容に対応するオブジェクトの両方を生成し、クラウドストレージ２４０に送信する。すなわち、第１の操作内容が消去されずに操作ログ１２１ａに残ることで、第２の情報の更新内容だけでなく、その更新前に更新された第１の情報の更新内容を、クラウドストレージ２４０に正確に反映させることができる。
【０１０６】
次に、図１５〜図１７を用いて、操作ログについて具体的に説明する。
図１５は、操作ログテーブルのデータ構成例を示す図である。操作ログテーブル１２１のレコードのうち、ファイル操作ログを示すレコードは、「ｃｏｕｎｔｅｒ」「ｔｙｐｅ」「ｉｎｏ」「ａｃｔｉｏｎ」「ｕｐｄａｔｅ」の各項目を有する。また、操作ログテーブル１２１のレコードのうち、データ操作ログを示すレコードは、「ｃｏｕｎｔｅｒ」「ｔｙｐｅ」「ｇｎｏ」「ａｃｔｉｏｎ」「ｕｐｄａｔｅ」の各項目を有する。
【０１０７】
「ｃｏｕｎｔｅｒ」は、レコード（すなわち操作ログ）の識別番号を示す。この識別番号は、操作ログテーブル１２１に対する登録順に付与される。「ｔｙｐｅ」は、操作ログがファイル操作ログとデータ操作ログのどちらであるかを示す。図１５の例では、操作ログ１２１−１，１２１−３はファイル操作ログであり、操作ログ１２１−２，１２１−４はデータ操作ログである。
【０１０８】
「ｉｎｏ」は、ファイル操作ログに対応するｉｎｏｄｅ番号を示し、このｉｎｏｄｅ番号によってファイル操作ログとファイルとが関連付けられる。「ｇｎｏ」は、データ操作ログに対応するチャンクグループのグループ番号を示し、このグループ番号によってデータ操作ログとチャンクグループとが関連付けられる。
【０１０９】
「ａｃｔｉｏｎ」は、ファイルシステム処理部１３２によって行われた操作の内容を示す。「ａｃｔｉｏｎ」に記録される操作内容ごとに、送信すべきオブジェクトの種類や、データ管理部１１０からそのオブジェクトにコピーすべき情報が、あらかじめ決められている。したがって、クラウド転送処理部１３３は、「ａｃｔｉｏｎ」に記録された操作の内容から、必要なオブジェクトを生成してクラウドストレージ２４０に送信することができる。
【０１１０】
「ｕｐｄａｔｅ」は、前述した更新カウンタの値を示す。更新カウンタの初期値は「１」であり、この値は、ファイルシステム処理部１３２によって対応する情報群に対する操作が行われるたびにカウントアップされる。
【０１１１】
ここで、「ａｃｔｉｏｎ」に記録される操作の内容の詳細について説明する。まず、ファイル操作ログの「ａｃｔｉｏｎ」に記録される操作内容について説明する。この操作内容としては、「ファイル作成中」「ファイル更新」「ファイル作成完了」「ファイル削除」がある。
【０１１２】
「ファイル作成中」は、ＮＡＳクライアント２１０からのファイル操作要求に応じてディレクトリテーブル１１１およびエントリテーブル１１２の登録情報が更新されたときに記録されるログ情報である。ここで言う「ファイル操作要求」とは、ＮＡＳクライアント２１０からの新規のファイルの書き込み、そのファイルの更新、そのファイルの削除のいずれかの要求である。「ファイル作成中」が記録された時点では、ディレクトリテーブル１１１およびエントリテーブル１１２に登録された、上記ファイルに対応するレコードの情報が、ファイルオブジェクト１４１による転送対象となる。
【０１１３】
「ファイル更新」は、「ファイル作成中」に対応する操作に続いて、ファイルの実データに関する管理情報が更新されたときに記録されるログ情報である。「ファイル更新」が記録された時点では、「ファイル作成中」が記録された時点から、エントリテーブル１１２に登録された、上記ファイルに対応するレコードの情報の一部が更新されている。したがって、この時点では、エントリテーブル１１２に登録された、上記ファイルに対応するレコードの情報が、ファイルオブジェクト１４１による転送対象となる。
【０１１４】
「ファイル作成完了」は、ＮＡＳクライアント２１０からのファイル操作要求に応じた処理がすべて完了したときに記録されるログ情報である。この時点では、チャンクマップテーブル１１３およびチャンクテーブル１１４に登録された、上記ファイルに対応するレコードの情報が、チャンクマップオブジェクト１４２による転送対象となる。
【０１１５】
以上の「ファイル作成中」「ファイル更新」「ファイル作成完了」は、ＮＡＳクライアント２１０から新規ファイルの書き込みまたはファイルの更新が要求された場合に、要求に応じた処理が完了されるまでの間にファイルシステム処理部１３２によって段階的に行われる操作の内容を示す。
【０１１６】
一方、ＮＡＳクライアント２１０からファイルの削除が要求された場合、「ａｃｔｉｏｎ」には「ファイル削除」が記録される。この場合、ディレクトリテーブル１１１、エントリテーブル１１２およびチャンクマップテーブル１１３からは、削除対象のファイルに関連付けられたレコードが削除される。そのため、「ファイル削除」が記録された場合、削除対象のファイルを示すオブジェクト名をそれぞれ指定したファイルオブジェクト１４１およびチャンクマップオブジェクト１４２の削除要求が、クラウドストレージ２４０に送信される。
【０１１７】
図１６は、ファイル操作ログの登録処理例を示す図である。ＮＡＳクライアント２１０から新規のファイルの書き込みが要求されると、ファイルシステム処理部１３２は、このファイルに対応するファイル操作ログ１２２ａを操作ログテーブル１２１に登録する（ステップＳ３１）。このとき、「ａｃｔｉｏｎ」には「ファイル作成中」が記録され、「ｕｐｄａｔｅ」には更新カウンタの値「１」が記録される。
【０１１８】
また、ファイルシステム処理部１３２は、ファイルの書き込み要求に続いて、そのファイルの実データをＮＡＳクライアント２１０から受信し、データ管理部１１０に格納していく。一方、この時点で、クラウド転送処理部１３３がファイル操作ログ１２２ａを取得したとする。この場合、クラウド転送処理部１３３は、ファイル操作ログ１２２ａの「ｉｎｏ」から対象のファイルを認識する。また、クラウド転送処理部１３３は、「ファイル作成中」から決定される必要な情報をデータ管理部１１０から読み出し、読み出した情報を含めたファイルオブジェクト１４１を生成して、クラウドストレージ２４０に送信する。
【０１１９】
ここで、ファイルオブジェクト１４１の送信が完了する前に、ファイルの実データをデータ管理部１１０に格納する処理が完了したとする。この場合、ファイルシステム処理部１３２は、ファイル操作ログ１２２ａの「ａｃｔｉｏｎ」に「ファイル更新」を追加的に記録し、「ｕｐｄａｔｅ」の値を「２」にカウントアップする（ステップＳ３２）。
【０１２０】
さらに、ファイルオブジェクト１４１の送信が完了する前に、ＮＡＳクライアント２１０からの書き込み要求に応じた応答処理全体が完了したとする。あるいは、「ファイル更新」に基づくファイルオブジェクト１４１の送信が完了する前に、応答処理全体が完了したとする。これらの場合、ファイルシステム処理部１３２は、ファイル操作ログ１２２ａの「ａｃｔｉｏｎ」に「ファイル作成完了」を追加的に記録し、「ｕｐｄａｔｅ」の値を「３」にカウントアップする（ステップＳ３３）。
【０１２１】
なお、「ａｃｔｉｏｎ」には、例えば、「ファイル作成中」を示す値として「０ｘ０１」が登録され、「ファイル更新」を示す値として「０ｘ０２」が登録され、「ファイル作成完了」を示す値として「０ｘ０４」が登録される。そして、「ａｃｔｉｏｎ」に対して値を記録する際には、新たに記録する値と、「ａｃｔｉｏｎ」に記録済みの値との論理和が算出され、算出された値が「ａｃｔｉｏｎ」に上書きされる。例えば、ステップＳ３２の状態では、「ファイル作成中」を示す「０ｘ０１」と「ファイル更新」を示す「０ｘ０２」との論理和「０ｘ０３」が、「ａｃｔｉｏｎ」に記録される。すなわち、この例では、「ａｃｔｉｏｎ」には「ファイル作成中」「ファイル更新」「ファイル作成完了」にそれぞれ対応するビットを有するビット列が記録される。そして、これらのいずれかの操作内容を記録する際には、操作内容に対応するビットが「０」から「１」に更新される。
【０１２２】
次に、「ファイル作成中」または「ファイル更新」に基づくファイルオブジェクト１４１の送信が完了する前に、ＮＡＳクライアント２１０からファイルの削除が要求されたとする。あるいは、「ファイル作成完了」に基づくチャンクマップオブジェクト１４２の送信が完了する前に、ＮＡＳクライアント２１０からファイルの削除が要求されたとする。これらの場合、ファイルシステム処理部１３２は、ファイル操作ログ１２２ａの「ａｃｔｉｏｎ」に「ファイル削除」を記録し、「ｕｐｄａｔｅ」の値を「４」にカウントアップする（ステップＳ３４）。
【０１２３】
「ファイル削除」が記録された場合、削除対象のファイルを示すオブジェクト名がそれぞれ指定されたファイルオブジェクト１４１およびチャンクマップオブジェクト１４２が、クラウドストレージ２４０から削除される。このため、「ファイル削除」は、「ａｃｔｉｏｎ」に記録済みの情報を上書きして記録されればよい。
【０１２４】
次に、データ操作ログの「ａｃｔｉｏｎ」に記録される操作内容について説明する。この操作内容としては、「データ書き込み中」「データ書き込み完了」「データ削除」がある。
【０１２５】
「データ書き込み中」は、チャンクグループに含まれるチャンクデータの合計サイズが所定サイズに達していない状態、すなわち、チャンクグループがアクティブであることを示す。「データ書き込み中」が記録されている状態では、クラウドストレージ２４０に送信すべきオブジェクトは生成されない。クラウド転送処理部１３３は、データ操作ログの「ａｃｔｉｏｎ」に「データ書き込み中」が登録されている場合、そのデータ操作ログに基づく処理をスキップして、操作ログテーブル１２１に記録された次のデータ操作ログを取得する。
【０１２６】
「データ書き込み完了」は、チャンクグループに含まれるチャンクデータの合計サイズが所定サイズに達している状態、すなわち、チャンクグループが非アクティブであることを示す。この場合、チャンクグループテーブル１１５に登録された、チャンクグループに対応するレコードの情報が、チャンクグループオブジェクト１４３による転送対象となる。
【０１２７】
「データ削除」は、チャンクグループが削除されることを示す。この状態は、ファイルの削除や更新に伴って、チャンクグループに含まれるすべてのチャンクデータが無効になっている（すなわち、すべてのチャンクデータに対応する参照カウンタの値が「０」になっている）状態である。この場合、チャンクマップテーブル１１３からは、削除対象のチャンクグループに関連付けられたレコードが削除される。そのため、「データ削除」が記録された場合、削除対象のチャンクグループを示すオブジェクト名を指定したチャンクグループオブジェクト１４３の削除要求が、クラウドストレージ２４０に送信される。
【０１２８】
図１７は、データ操作ログの登録処理例を示す図である。ＮＡＳクライアント２１０からのファイルの書き込みや更新の要求に伴って新たなチャンクグループを生成すると、ファイルシステム処理部１３２は、このチャンクグループに対応するデータ操作ログ１２３ａを操作ログテーブル１２１に登録する（ステップＳ４１）。このとき、「ａｃｔｉｏｎ」には「データ書き込み中」が記録され、「ｕｐｄａｔｅ」には更新カウンタの初期値「１」が記録される。
【０１２９】
その後、上記のチャンクグループに含まれるチャンクデータの合計サイズが所定サイズに達したとする。このとき、ファイルシステム処理部１３２は、データ操作ログ１２３ａの「ａｃｔｉｏｎ」に「データ書き込み完了」を上書きして記録し、「ｕｐｄａｔｅ」の値を「２」にカウントアップする（ステップＳ４２）。
【０１３０】
ここで、クラウド転送処理部１３３が、データ操作ログ１２３ａを取得し、「ａｃｔｉｏｎ」に「データ書き込み完了」が記録されていることを認識したとする。この場合、クラウド転送処理部１３３は、データ操作ログ１２３ａの「ｇｎｏ」から対象のチャンクグループを認識する。また、クラウド転送処理部１３３は、チャンクグループテーブル１１５に登録された該当チャンクグループのレコードから情報を読み出し、読み出した情報を含めたチャンクグループオブジェクト１４３を生成して、クラウドストレージ２４０に送信する。
【０１３１】
ここで、チャンクグループオブジェクト１４３の送信が完了する前に、データ操作ログ１２３ａに対応するチャンクグループに含まれるすべてのチャンクデータが無効になったとする。この場合、ファイルシステム処理部１３２は、データ操作ログ１２３ａの「ａｃｔｉｏｎ」に「データ削除」を上書きして記録し、「ｕｐｄａｔｅ」の値を「３」にカウントアップする（ステップＳ４３）。クラウド転送処理部１３３は、チャンクグループオブジェクト１４３の送信完了後にデータ操作ログ１２３ａを再取得することで、該当チャンクグループが不要になったことを認識できる。そして、クラウド転送処理部１３３は、このチャンクグループに対応するチャンクグループオブジェクト１４３をクラウドストレージ２４０から削除できる。これにより、チャンクグループの削除に伴うチャンクグループテーブル１１５における更新内容を、クラウドストレージ２４０に反映させることができる。
【０１３２】
次に、クラウドストレージゲートウェイ１００の処理について、フローチャートを用いて説明する。まず、図１８〜図２２を用いて、ＮＡＳクライアント２１０から新規のファイルの書き込みが要求された場合の処理について説明する。
【０１３３】
図１８は、ファイル書き込みが要求された場合のファイルシステム処理部の処理例を示すフローチャートである。
［ステップＳ１０１］ファイルシステム処理部１３２は、ＮＡＳクライアント２１０からのファイルの書き込み要求を、ＮＡＳサービス処理部１３１を介して受信する。このとき、ファイルの書き込み先を示すディレクトリ情報、ファイル名、ファイルサイズが指定される。ファイルシステム処理部１３２は、書き込み要求を受信すると、ファイル作成開始処理を実行する。
【０１３４】
［ステップＳ１０２］ファイルシステム処理部１３２は、書き込みが要求されたファイルの実データを、ＮＡＳサービス処理部１３１を介して受信すると、データ書き込み処理を実行する。
【０１３５】
［ステップＳ１０３］データ書き込み処理が完了すると、ファイルシステム処理部１３２は、書き込み完了を示す応答情報を、ＮＡＳサービス処理部１３１を介してＮＡＳクライアント２１０に送信する。これとともに、ファイルシステム処理部１３２は、ファイル作成完了処理を実行する。
【０１３６】
図１９は、ファイル作成開始処理の例を示すフローチャートである。この図１９の処理は、図１８のステップＳ１０１の処理に対応する。
［ステップＳ１１１］ファイルシステム処理部１３２は、ディレクトリテーブル１１１に対して、書き込みが要求されたファイルに対応するレコードを追加する。
【０１３７】
［ステップＳ１１２］ファイルシステム処理部１３２は、エントリテーブル１１２に対して、書き込みが要求されたファイルに対応するレコードを追加する。追加されたレコードにおいては、例えば、「ｉｎｏ」「ｓｉｚｅ」の各項目に情報が登録される。
【０１３８】
［ステップＳ１１３］ファイルシステム処理部１３２は、操作ログテーブル１２１に対して、書き込みが要求されたファイルに対応するファイル操作ログを追加する。追加されたファイル操作ログにおいては、「ａｃｔｉｏｎ」の項目に「ファイル作成中」が記録され、「ｕｐｄａｔｅ」の項目に更新カウンタの値として「１」が記録される。
【０１３９】
図２０は、データ書き込み処理の例を示すフローチャートである。この図２０の処理は、図１８のステップＳ１０２の処理に対応する。
［ステップＳ１２１］ファイルシステム処理部１３２は、ＮＡＳクライアント２１０から受信したファイルの実データを、チャンク単位に分割する。
【０１４０】
［ステップＳ１２２］ファイルシステム処理部１３２は、ステップＳ１２４のループ端までの処理を、分割によって生成された各チャンクについて実行する。
［ステップＳ１２３］ファイルシステム処理部１３２は、処理対象のチャンクについて、チャンク書き込み処理を実行する。
【０１４１】
［ステップＳ１２４］ファイルシステム処理部１３２は、ステップＳ１２３の処理をすべてのチャンクについて実行すると、ステップＳ１２５の処理を実行する。
［ステップＳ１２５］ファイルシステム処理部１３２は、エントリテーブル１１２に登録された、書き込みが要求されたファイルに対応するレコードを更新する。この処理では、例えば、「ｍｏｄｅ」「ｎｌｉｎｋ」「ｕｉｄ」「ｇｉｄ」「ａｔｉｍｅ」「ｍｔｉｍｅ」「ｃｔｉｍｅ」の各項目に情報が登録される。
【０１４２】
［ステップＳ１２６］ファイルシステム処理部１３２は、操作ログテーブル１２１を参照し、書き込みが要求されたファイルに対応するファイル操作ログが存在するかを判定する。ファイルシステム処理部１３２は、該当するファイル操作ログが見つかった場合、ステップＳ１２８の処理を実行し、該当するファイル操作ログが存在しない場合、ステップＳ１２７の処理を実行する。
【０１４３】
［ステップＳ１２７］ファイルシステム処理部１３２は、操作ログテーブル１２１に対して、書き込みが要求されたファイルに対応するファイル操作ログを追加する。このとき、追加されたファイル操作ログにおいては、「ａｃｔｉｏｎ」の項目に「ファイル更新」が記録され、「ｕｐｄａｔｅ」の項目に更新カウンタの値として「１」が記録される。
【０１４４】
［ステップＳ１２８］ファイルシステム処理部１３２は、操作ログテーブル１２１から見つかったファイル操作ログを更新する。具体的には、「ａｃｔｉｏｎ」の項目に「ファイル更新」が追加的に記録され、「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値がカウントアップされる。
【０１４５】
図２１は、チャンク書き込み処理の例を示すフローチャートである。この図２１の処理は、図２０のステップＳ１２３の処理に対応する。
［ステップＳ１３１］ファイルシステム処理部１３２は、処理対象のチャンクのデータを基にハッシュ値を算出する。
【０１４６】
［ステップＳ１３２］ファイルシステム処理部１３２は、チャンクマップテーブル１１３に対して、処理対象のチャンクに対応するレコードを追加する。このとき、追加されるレコードにおいては、「ｉｎｏ」「ｏｆｆｓｅｔ」「ｓｉｚｅ」の各項目に情報が登録される。
【０１４７】
［ステップＳ１３３］ファイルシステム処理部１３２は、チャンクテーブル１１４を参照し、「ｈａｓｈ」の項目にステップＳ１３１で算出されたハッシュ値が登録されたレコードが存在するかを判定する。ファイルシステム処理部１３２は、該当するレコードが見つかった場合、ステップＳ１３４の処理を実行し、該当するレコードが存在しない場合、ステップＳ１３５の処理を実行する。
【０１４８】
［ステップＳ１３４］ファイルシステム処理部１３２は、ステップＳ１３３でチャンクテーブル１１４から見つかったレコードを参照し、「ｒｅｆｃｎｔ」の項目に記録された参照カウンタの値をカウントアップする。また、ファイルシステム処理部１３２は、ステップＳ１３２でチャンクマップテーブル１１３に追加したレコードの「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目に、チャンクテーブル１１４から見つかったレコードの「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目に登録された情報を登録する。
【０１４９】
［ステップＳ１３５］ファイルシステム処理部１３２は、チャンクグループテーブル１１５を参照し、最後尾のレコードに登録されたグループ番号（すなわち、現時点で最大のグループ番号）を取得する。
【０１５０】
［ステップＳ１３６］ファイルシステム処理部１３２は、ステップＳ１３５で取得されたグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。ファイルシステム処理部１３２は、合計サイズが所定値以上である場合、ステップＳ１３７の処理を実行し、合計サイズが所定値未満である場合、ステップＳ１３９の処理を実行する。
【０１５１】
［ステップＳ１３７］ファイルシステム処理部１３２は、ステップＳ１３５で取得されたグループ番号をカウントアップすることで、新たなグループ番号を生成する。
［ステップＳ１３８］ファイルシステム処理部１３２は、操作ログテーブル１２１に対してデータ操作ログを追加する。このとき、追加されたデータ操作ログにおいては、「ｇｎｏ」の項目に、ステップＳ１３７で生成されたグループ番号が記録され、「ａｃｔｉｏｎ」の項目に「データ書き込み中」が記録され、「ｕｐｄａｔｅ」の項目に、更新カウンタの値として「１」が記録される。
【０１５２】
［ステップＳ１３９］ファイルシステム処理部１３２は、チャンクテーブル１１４に対してレコードを追加する。このとき、追加されるレコードにおいては、「ｈａｓｈ」の項目に、ステップＳ１３１で算出されたハッシュ値が記録され、「ｓｉｚｅ」の項目に、対応するチャンクのサイズが記録され、「ｒｅｆｃｎｔ」の項目に、参照カウンタの値として「１」が記録される。また、ステップＳ１３６でＹｅｓと判定された場合、「ｇｎｏ」の項目には、ステップＳ１３７で生成されたグループ番号が記録され、「ｇｉｎｄｅｘ」の項目には、先頭のチャンクを示すインデックス番号が記録される。一方、ステップＳ１３６でＮｏと判定された場合、「ｇｎｏ」の項目には、ステップＳ１３５で取得されたグループ番号が記録される。また、「ｇｉｎｄｅｘ」の項目には、このグループ番号に対応するチャンクグループに含まれている最後尾のチャンクデータの次の順番を示すインデックス番号が記録される。
【０１５３】
［ステップＳ１４０］ファイルシステム処理部１３２は、チャンクグループテーブル１１５に対してレコードを追加する。このとき、追加されるレコードにおいては、「ｇｎｏ」「ｇｉｎｄｅｘ」の各項目に、ステップＳ１３９で同名の項目に記録された情報と同じ情報が記録され、「ｄａｔａ」の項目に、チャンクデータが圧縮された状態で記録される。
【０１５４】
［ステップＳ１４１］ファイルシステム処理部１３２は、ステップＳ１３９でレコードに記録したグループ番号のチャンクグループに含まれるチャンクデータの合計サイズが、所定値以上であるかを判定する。ファイルシステム処理部１３２は、合計サイズが所定値以上である場合、ステップＳ１４２の処理を実行し、合計サイズが所定値未満である場合、チャンク書き込み処理を終了する。
【０１５５】
［ステップＳ１４２］このケースでは、操作ログテーブル１２１には、ステップＳ１３９，Ｓ１４０でレコードに記録したグループ番号が記録され、かつ、「ａｃｔｉｏｎ」の項目に「データ書き込み中」が記録されたデータ操作ログが存在している。ファイルシステム処理部１３２は、このデータ操作ログについて、「ａｃｔｉｏｎ」の項目に「データ書き込み完了」を上書きして記録し、「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値をカウントアップする。
【０１５６】
図２２は、ファイル作成完了処理の例を示すフローチャートである。この図２２の処理は、図１８のステップＳ１０３の処理に対応する。
［ステップＳ１５１］ファイルシステム処理部１３２は、操作ログテーブル１２１を参照し、書き込みが要求されたファイルに対応するファイル操作ログが存在するかを判定する。ファイルシステム処理部１３２は、該当するファイル操作ログが見つかった場合、ステップＳ１５３の処理を実行し、該当するファイル操作ログが存在しない場合、ステップＳ１５２の処理を実行する。
【０１５７】
［ステップＳ１５２］ファイルシステム処理部１３２は、操作ログテーブル１２１に対して、書き込みが要求されたファイルに対応するファイル操作ログを追加する。このとき、追加されたファイル操作ログにおいては、「ａｃｔｉｏｎ」の項目に「ファイル作成完了」が記録され、「ｕｐｄａｔｅ」の項目に更新カウンタの値として「１」が記録される。
【０１５８】
［ステップＳ１５３］ファイルシステム処理部１３２は、操作ログテーブル１２１から見つかったファイル操作ログを更新する。具体的には、「ａｃｔｉｏｎ」の項目に「ファイル作成完了」が追加的に記録され、「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値がカウントアップされる。
【０１５９】
次に、ＮＡＳクライアント２１０から既存のファイルの更新が要求された場合の処理について説明する。ファイルの更新が要求された場合、ファイルシステム処理部１３２は基本的に、図１８に示したステップＳ１０１，Ｓ１０２，Ｓ１０３のような３段階の処理を実行する。以下、各段階における、新規ファイルの書き込みが要求された場合との処理の違いについて説明する。
【０１６０】
まず、ステップＳ１０１に対応する第１段階の処理では、次のような処理が実行される。ファイルシステム処理部１３２は、エントリテーブル１１２に登録された、更新が要求されたファイルに対応するレコードを更新する。この更新では、「ｓｉｚｅ」の項目に記録された値が、更新後のファイルのサイズによって更新される。
【０１６１】
次に、ファイルシステム処理部１３２は、操作ログテーブル１２１を参照して、更新が要求されたファイルに対応するファイル操作ログが存在するかを判定する。該当するファイル操作ログが存在した場合、ファイルシステム処理部１３２は、そのファイル操作ログの「ａｃｔｉｏｎ」の項目に「ファイル作成中」を記録し、「ｕｐｄａｔｅ」の項目に記録された値をカウントアップする。一方、該当するファイル操作ログが存在しない場合、ファイルシステム処理部１３２は、操作ログテーブル１２１に対して、書き込みが要求されたファイルに対応するファイル操作ログを追加する。追加されたファイル操作ログにおいては、「ａｃｔｉｏｎ」の項目に「ファイル作成中」が記録され、「ｕｐｄａｔｅ」の項目に更新カウンタの値として「１」が記録される。
【０１６２】
次に、ステップＳ１０２に対応する第２段階の処理では、次の図２３に示すようなデータ書き込み処理が実行される。
図２３は、ファイル更新が要求された場合のデータ書き込み処理の例を示すフローチャートである。
【０１６３】
［ステップＳ１６１］ファイルシステム処理部１３２は、チャンクマップテーブル１１３に登録された、更新前のファイル（旧ファイル）に対応するレコードの位置を、ＲＡＭ１０２に保存する。
【０１６４】
［ステップＳ１６２］ファイルシステム処理部１３２は、ＮＡＳクライアント２１０から受信した更新後のファイルの実データを処理対象として、図２０の処理を実行する。これにより、更新後のファイルの実データがチャンク単位に分割され、各チャンクについての情報がチャンクマップテーブル１１３、チャンクテーブル１１４およびチャンクグループテーブル１１５に登録される。
【０１６５】
［ステップＳ１６３］ファイルシステム処理部１３２は、ステップＳ１６１で保存された位置が示すレコードの内容に基づいて、ステップＳ１６９のループ端までの処理を、旧ファイルの各チャンクについて実行する。
【０１６６】
［ステップＳ１６４］ファイルシステム処理部１３２は、チャンクテーブル１１４に登録された、処理対象のチャンクに対応するチャンクデータが格納されたレコードを参照し、「ｒｅｆｃｎｔ」の項目に記録された参照カウンタの値をカウントダウンする。
【０１６７】
［ステップＳ１６５］ファイルシステム処理部１３２は、ステップＳ１６４で参照したレコードからグループ番号（ｇｎｏ）を取得する。ファイルシステム処理部１３２は、チャンクテーブル１１４から、このグループ番号が示すチャンクグループに属するすべてのチャンクデータに対応する参照カウンタの値を取得する。
【０１６８】
［ステップＳ１６６］ファイルシステム処理部１３２は、ステップＳ１６５で取得された参照カウンタの値がすべて「０」の場合、ステップＳ１６７の処理を実行し、それらの値のうち少なくとも１つが「１」以上の場合、ステップＳ１６８の処理を実行する。
【０１６９】
［ステップＳ１６７］このケースでは、ステップＳ１６５で取得されたグループ番号が示すチャンクグループに含まれるすべてのチャンクデータが、いずれのチャンクからも参照されていない無効な状態となっている。このため、ファイルシステム処理部１３２は、チャンクグループテーブル１１５から、このチャンクグループに対応するレコードを削除する。これにより、チャンクグループが削除される。
【０１７０】
また、ファイルシステム処理部１３２は、操作ログテーブル１２１に対して、このチャンクグループの情報をクラウドストレージ２４０から削除するためのデータ操作ログを登録する。すなわち、このデータ操作ログにおいては、「ａｃｔｉｏｎ」の項目に「データ削除」が記録され、「ｕｐｄａｔｅ」の項目に、更新カウンタの値として「１」が記録される。なお、すでに該当チャンクグループに対応するデータ操作ログが登録されている場合、ファイルシステム処理部１３２は、そのデータ操作ログの「ａｃｔｉｏｎ」の項目に「データ削除」を上書きして記録し、「ｕｐｄａｔｅ」の項目に記録された値をカウントアップする。
【０１７１】
［ステップＳ１６８］ファイルシステム処理部１３２は、チャンクマップテーブル１１３から、ステップＳ１６１で保存された位置が示すレコードを削除する。
また、ステップＳ１６６で「Ｎｏ」と判定され、かつ、ステップＳ１６４でカウントダウン後の参照カウンタの値が「０」になった場合、ファイルシステム処理部１３２は、この参照カウンタを含むレコードをチャンクテーブル１１４から削除してもよい。また、ステップＳ１６６で「Ｙｅｓ」と判定された場合、ファイルシステム処理部１３２は、チャンクテーブル１１４から、ステップＳ１６７で削除されたチャンクグループに属するすべてのチャンクデータのレコードを削除してもよい。
【０１７２】
［ステップＳ１６９］ファイルシステム処理部１３２は、ステップＳ１６４〜Ｓ１６８の処理を旧ファイルのすべてのチャンクについて実行すると、データ書き込み処理を終了する。
【０１７３】
最後に、ステップＳ１０３に対応する第３段階の処理では、ファイルシステム処理部１３２は、更新が要求されたファイルに対応するファイル操作ログを処理対象として、図２２と同様の処理を実行する。
【０１７４】
以上の手順により、ＮＡＳクライアント２１０から既存のファイルの更新が要求された場合のファイルシステム処理部１３２の処理が完了する。
なお、ＮＡＳクライアント２１０からファイルの削除が要求された場合には、次のような処理が実行される。ファイルシステム処理部１３２は、削除対象のファイルに含まれる各チャンクを処理対象として、図２３のステップＳ１６４〜Ｓ１６８の処理を実行する。これにより、削除対象のファイルに関連付けられたチャンクデータの参照カウンタの値が更新される。また、すべてのチャンクデータの参照カウンタが「０」になったチャンクグループが出現した場合、そのチャンクグループに関する情報群をクラウドストレージ２４０から削除するためのデータ操作ログが、操作ログテーブル１２１に登録される。
【０１７５】
その後、ファイルシステム処理部１３２は、ディレクトリテーブル１１１およびエントリテーブル１１２から、削除対象のファイルに対応するレコードを削除する。さらに、ファイルシステム処理部１３２は、次のようなファイル操作ログの登録処理を実行する。
【０１７６】
この登録処理では、削除対象のファイルに対応するファイル操作ログが操作ログテーブル１２１に存在しない場合、ファイルシステム処理部１３２は、削除対象のファイルのｉｎｏｄｅ番号を指定したファイル操作ログを操作ログテーブル１２１に登録する。このファイル操作ログにおいては、「ａｃｔｉｏｎ」の項目に「ファイル削除」が記録され、「ｕｐｄａｔｅ」の項目に「１」が記録される。一方、削除対象のファイルに対応するファイル操作ログが操作ログテーブル１２１に存在する場合、ファイルシステム処理部１３２は、このファイル操作ログにおける「ａｃｔｉｏｎ」の項目に「ファイル削除」が上書きして記録され、「ｕｐｄａｔｅ」の項目の値がカウントアップされる。このような登録処理により、削除対象のファイルに関する情報群をクラウドストレージ２４０から削除するためのファイル操作ログが、操作ログテーブル１２１に登録される。
【０１７７】
次に、クラウド転送処理部１３３の処理について説明する。図２４は、クラウド転送処理部の処理例を示すフローチャートである。
［ステップＳ２０１］クラウド転送処理部１３３は、操作ログテーブル１２１から先頭の操作ログ（すなわち、「ｃｏｕｎｔｅｒ」の項目に記録された値が最も小さいレコード）を取得する。
【０１７８】
［ステップＳ２０２］クラウド転送処理部１３３は、取得された操作ログの「ｔｙｐｅ」の項目に基づいて、操作ログの種別を判定する。クラウド転送処理部１３３は、取得された操作ログがファイル操作ログの場合、ステップＳ２０３の処理を実行し、取得された操作ログがデータ操作ログの場合、ステップＳ２０４の処理を実行する。
【０１７９】
［ステップＳ２０３］クラウド転送処理部１３３は、ファイル操作ログに基づくクラウド転送処理を実行する。
［ステップＳ２０４］クラウド転送処理部１３３は、データ操作ログに基づくクラウド転送処理を実行する。
【０１８０】
図２５、図２６は、ファイル操作ログに基づくクラウド転送処理の例を示すフローチャートである。この図２５、図２６の処理は、図２４のステップＳ２０３の処理に対応する。
【０１８１】
［ステップＳ２１１］クラウド転送処理部１３３は、ファイル操作ログから「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値を抽出し、カウント値保存部１３３ａに保存する。この値の抽出元となるファイル操作ログは、図２４のステップＳ２０２の次にステップＳ２１１が実行される場合、図２４のステップＳ２０２で取得されたファイル操作ログである、一方、後述する図２６のステップＳ２２７の次にステップＳ２１１が実行される場合、ステップＳ２２７で再取得されたファイル操作ログである。
【０１８２】
［ステップＳ２１２］クラウド転送処理部１３３は、取得された操作ログの「ａｃｔｉｏｎ」の項目に「ファイル作成中」が含まれている場合、ステップＳ２１３の処理を実行し、「ファイル作成中」が含まれていない場合、ステップＳ２１４の処理を実行する。
【０１８３】
［ステップＳ２１３］クラウド転送処理部１３３は、取得されたファイル操作ログに対応するファイルの「ｐａｒｅｎｔ」「ｎａｍｅ」をオブジェクト名とするファイルオブジェクトを生成する。このとき、ファイルオブジェクトのオブジェクト値の各項目には、ディレクトリテーブル１１１およびエントリテーブル１１２に登録された、上記ファイルに対応するレコードから情報がコピーされる。クラウド転送処理部１３３は、生成されたファイルオブジェクトをクラウドストレージ２４０に送信する。
【０１８４】
［ステップＳ２１４］クラウド転送処理部１３３は、取得された操作ログの「ａｃｔｉｏｎ」の項目に「ファイル更新」が含まれている場合、ステップＳ２１５の処理を実行し、「ファイル更新」が含まれていない場合、図２６のステップＳ２２１の処理を実行する。
【０１８５】
［ステップＳ２１５］クラウド転送処理部１３３は、取得されたファイル操作ログに対応するファイルの「ｐａｒｅｎｔ」「ｎａｍｅ」をオブジェクト名とするファイルオブジェクトを生成する。このとき、ファイルオブジェクトのオブジェクト値の各項目には、ディレクトリテーブル１１１およびエントリテーブル１１２に登録された、上記ファイルに対応するレコードから情報がコピーされる。
【０１８６】
クラウド転送処理部１３３は、生成されたファイルオブジェクトをクラウドストレージ２４０に送信する。このケースでは、クラウドストレージ２４０に対して、同じファイルに対応するファイルオブジェクトの更新が要求されることになる。
【０１８７】
以下、図２６を参照して説明を続ける。
［ステップＳ２２１］クラウド転送処理部１３３は、取得された操作ログの「ａｃｔｉｏｎ」の項目に「ファイル作成完了」が含まれている場合、ステップＳ２２２の処理を実行し、「ファイル作成完了」が含まれていない場合、ステップＳ２２３の処理を実行する。
【０１８８】
［ステップＳ２２２］クラウド転送処理部１３３は、取得されたファイル操作ログに対応するファイルのｉｎｏｄｅ番号をオブジェクト名とするチャンクマップオブジェクトを生成する。このとき、チャンクマップオブジェクトのオブジェクト値の各項目には、チャンクマップテーブル１１３およびチャンクテーブル１１４に登録された、上記ファイルに対応するレコードから情報がコピーされる。クラウド転送処理部１３３は、生成されたチャンクマップオブジェクトをクラウドストレージ２４０に送信する。
【０１８９】
なお、例えば、このステップＳ２２２に進んだ時点で「Ａｃｔｉｏｎ」の項目に「ファイル作成完了」とともに「ファイル作成」や「ファイル更新」が記録されている場合には、直前のステップＳ２１２またはステップＳ２１５において、「ファイル作成」や「ファイル更新」に基づいてファイルオブジェクトがクラウドストレージ２４０に送信される。このように、「ファイル作成」や「ファイル更新」という操作内容を上書きせずに「ファイル作成完了」が記録されることで、「ファイル作成」や「ファイル更新」という操作内容に応じた必要な情報を、データ管理部１１０からクラウドストレージ２４０に対して確実に転送できる。
【０１９０】
［ステップＳ２２３］クラウド転送処理部１３３は、取得された操作ログの「ａｃｔｉｏｎ」の項目に「ファイル削除」が含まれている場合、ステップＳ２２４の処理を実行し、「ファイル削除」が含まれていない場合、ステップＳ２２５の処理を実行する。
【０１９１】
［ステップＳ２２４］クラウド転送処理部１３３は、取得されたファイル操作ログに対応するファイルの識別情報をオブジェクト名とするファイルオブジェクトおよびチャンクマップオブジェクトを生成する。これらのファイルオブジェクトおよびチャンクマップオブジェクトは、該当ファイルに対応する格納済みのファイルオブジェクトおよびチャンクマップオブジェクトを、クラウドストレージ２４０から削除するように要求するためのオブジェクトである。クラウド転送処理部１３３は、生成されたファイルオブジェクトおよびチャンクマップオブジェクトをクラウドストレージ２４０に送信する。
【０１９２】
［ステップＳ２２５］クラウド転送処理部１３３は、操作ログテーブル１２１を参照し、図２４のステップＳ２０２と同じファイル操作ログから、「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値を再取得する。
【０１９３】
［ステップＳ２２６］クラウド転送処理部１３３は、ステップＳ２１１でカウント値保存部１３３ａに保存された更新カウンタの値と、ステップＳ２２５で再取得された更新カウンタの値とを比較する。クラウド転送処理部１３３は、これらの値が同一の場合、ステップＳ２２８の処理を実行し、これらの値が異なる場合、ステップＳ２２７の処理を実行する。
【０１９４】
［ステップＳ２２７］クラウド転送処理部１３３は、ステップＳ２２５での参照先のファイル操作ログを操作ログテーブル１２１から再取得する。この後、図２５のステップＳ２１１に進み、再取得されたファイル操作ログに基づいて処理が継続される。すなわち、ステップＳ２２６において更新カウンタの値が一致するまで、ステップＳ２２７，Ｓ２１１〜Ｓ２１５，Ｓ２２１〜Ｓ２２６の処理が繰り返される。
【０１９５】
［ステップＳ２２８］クラウド転送処理部１３３は、ステップＳ２２５で参照されたファイル操作ログを操作ログテーブル１２１から削除する。
図２７は、データ操作ログに基づくクラウド転送処理の例を示すフローチャートである。この図２７の処理は、図２４のステップＳ２０４の処理に対応する。
【０１９６】
［ステップＳ２３１］クラウド転送処理部１３３は、データ操作ログから「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値を抽出し、カウント値保存部１３３ａに保存する。この値の抽出元となるデータ操作ログは、図２４のステップＳ２０２の次にステップＳ２３１が実行される場合、図２４のステップＳ２０２で取得されたデータ操作ログである、一方、後述するステップＳ２３９の次にステップＳ２３１が実行される場合、ステップＳ２３９で再取得されたデータ操作ログである。
【０１９７】
［ステップＳ２３２］クラウド転送処理部１３３は、取得されたデータ操作ログの「ａｃｔｉｏｎ」の項目に「データ書き込み中」が記録されている場合、ステップＳ２３３の処理を実行し、それ以外の情報が記録されている場合、ステップＳ２３４の処理を実行する。
【０１９８】
［ステップＳ２３３］クラウド転送処理部１３３は、取得されたデータ操作ログの作成から一定時間が経過しているかを判定する。クラウド転送処理部１３３が、一定時間が経過している場合、ステップＳ２３５の処理を実行し、一定時間が経過していない場合、処理を終了する。
【０１９９】
［ステップＳ２３４］クラウド転送処理部１３３は、取得されたデータ操作ログの「ａｃｔｉｏｎ」の項目に「データ書き込み完了」が記録されている場合、ステップＳ２３５の処理を実行する。一方、クラウド転送処理部１３３は、当該項目に「データ削除」が記録されている場合、ステップＳ２３６の処理を実行する。
【０２００】
［ステップＳ２３５］クラウド転送処理部１３３は、取得されたデータ操作ログに記録されたグループ番号をオブジェクト名とするチャンクグループオブジェクトを生成する。このとき、クラウド転送処理部１３３は、上記グループ番号に対応するチャンクグループテーブル１１５のレコードからチャンクデータを取得し、チャンクグループオブジェクトの「ｄａｔａｌｉｓｔ」の項目に格納する。また、クラウド転送処理部１３３は、これらのチャンクデータに基づいて、チャンクグループオブジェクトの「ｈｅａｄｅｒ」の項目に必要な情報を格納する。クラウド転送処理部１３３は、生成されたチャンクグループオブジェクトをクラウドストレージ２４０に送信する。
【０２０１】
［ステップＳ２３６］クラウド転送処理部１３３は、取得されたデータ操作ログに記録されたグループ番号をオブジェクト名とするチャンクグループオブジェクトを生成する。このチャンクグループオブジェクトは、該当グループ番号に対応する格納済みのチャンクグループオブジェクトを、クラウドストレージ２４０から削除するように要求するためのオブジェクトである。クラウド転送処理部１３３は、生成されたチャンクグループオブジェクトをクラウドストレージ２４０に送信する。
【０２０２】
［ステップＳ２３７］クラウド転送処理部１３３は、操作ログテーブル１２１を参照し、図２４のステップＳ２０２と同じデータ操作ログから、「ｕｐｄａｔｅ」の項目に記録された更新カウンタの値を再取得する。
【０２０３】
［ステップＳ２３８］クラウド転送処理部１３３は、ステップＳ２３１でカウント値保存部１３３ａに保存された更新カウンタの値と、ステップＳ２３７で再取得された更新カウンタの値とを比較する。クラウド転送処理部１３３は、これらの値が同一の場合、ステップＳ２４０の処理を実行し、これらの値が異なる場合、ステップＳ２３９の処理を実行する。
【０２０４】
［ステップＳ２３９］クラウド転送処理部１３３は、ステップＳ２３７での参照先のデータ操作ログを操作ログテーブル１２１から再取得する。この後、ステップＳ２３１に進み、再取得されたデータ操作ログに基づいて処理が継続される。すなわち、ステップＳ２３８において更新カウンタの値が一致するまで、ステップＳ２３９，Ｓ２３１〜Ｓ２３８の処理が繰り返される。
【０２０５】
［ステップＳ２４０］クラウド転送処理部１３３は、ステップＳ２３７で参照されたデータ操作ログを操作ログテーブル１２１から削除する。
なお、上記の各実施の形態に示した装置（情報処理装置１、クラウドストレージゲートウェイ１００）の処理機能は、コンピュータによって実現することができる。その場合、各装置が有すべき機能の処理内容を記述したプログラムが提供され、そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリなどがある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープなどがある。光ディスクには、ＣＤ（Compact Disc）、ＤＶＤ（Digital Versatile Disc）、ブルーレイディスク（ＢＤ）などがある。光磁気記録媒体には、ＭＯ（Magneto-Optical disk）などがある。
【０２０６】
プログラムを流通させる場合には、例えば、そのプログラムが記録されたＤＶＤ、ＣＤなどの可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０２０７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムまたはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムにしたがった処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムにしたがった処理を実行することもできる。また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送されるごとに、逐次、受け取ったプログラムにしたがった処理を実行することもできる。
【０２０８】
以上の各実施の形態に関し、さらに以下の付記を開示する。
（付記１）  外部ストレージ装置に対する転送単位ごとにそれぞれ分類された複数のデータ群と、前記複数のデータ群のいずれかにそれぞれ対応する１以上の操作情報が登録される転送制御情報とを記憶する記憶部と、制御部とを有し、
前記制御部は、
前記複数のデータ群のうち第１のデータ群に対する第１の操作を行うと、前記第１のデータ群に対応する第１の操作情報を前記転送制御情報に登録し、
前記第１のデータ群が転送対象として抽出されると、前記第１のデータ群に対応する前記第１の操作情報を保持情報として一時的に保持するとともに、前記第１のデータ群を前記外部ストレージ装置に転送し、
前記外部ストレージ装置に対する前記第１のデータ群の転送中に前記第１のデータ群に対する第２の操作を行った場合、前記転送制御情報に登録された前記第１の操作情報を更新し、
前記外部ストレージ装置に対する前記第１のデータ群の転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、
前記第１の操作情報と前記保持情報とが一致しない場合、前記第１の操作情報に対応する前記第１のデータ群を前記外部ストレージ装置に再転送する、
情報処理装置。
【０２０９】
（付記２）  前記第１の操作情報の登録では、前記第１の操作情報に所定のカウント値を設定し、
前記第１の操作情報の更新では、前記カウント値を更新し、
前記第１の操作情報と前記保持情報との比較では、前記第１の操作情報に含まれる前記カウント値と前記保持情報に含まれる前記カウント値とを比較する、
付記１記載の情報処理装置。
【０２１０】
（付記３）  前記第１の操作情報の登録では、前記第１の操作情報に前記第１の操作を示す第１の操作内容を設定し、
前記第１のデータ群の転送では、前記第１の操作情報に設定された前記第１の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送し、
前記第１の操作情報の更新では、前記第１の操作情報に前記第２の操作を示す第２の操作内容を設定し、
前記第１のデータ群の再転送では、前記第１の操作情報に設定された前記第２の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送する、
付記１または２に記載の情報処理装置。
【０２１１】
（付記４）  前記第１の操作情報の更新では、前記第１の操作情報に対して前記第２の操作内容を追加的に設定し、
前記第１のデータ群の再転送では、前記第１の操作情報に前記第１の操作内容と前記第２の操作内容とが設定されている場合、前記第１の操作内容に基づいて前記第１のデータ群の中から抽出されたデータと、前記第２の操作内容に基づいて前記第１のデータ群の中から抽出されたデータとを前記外部ストレージ装置に転送する、
付記３に記載の情報処理装置。
【０２１２】
（付記５）  前記第１のデータ群の再転送では、前記転送制御情報に登録された前記第１の操作情報を前記保持情報として一時的に保持し、
前記制御部は、さらに、前記第１のデータ群の再転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、前記第１の操作情報と前記保持情報とが一致した場合、前記第１の操作情報を前記転送制御情報から削除する、
付記１乃至４のいずれか１つに記載の情報処理装置。
【０２１３】
（付記６）  前記転送制御情報からは、前記操作情報が登録順に取得される、
付記１乃至５のいずれか１つに記載の情報処理装置。
（付記７）  前記複数のデータ群はそれぞれ、外部情報処理装置から前記外部ストレージ装置に対して書き込みが要求されたファイルに関する管理データ群であり、
前記第１の操作と前記第２の操作は、前記外部情報処理装置から前記第１のデータ群に対応する第１のファイルの書き込みが要求されてから書き込み処理の完了を前記外部情報処理装置に応答するまでの間に、前記第１のファイルに対応する前記管理データ群に対して段階的に実行される操作である、
付記１乃至６のいずれか１つに記載の情報処理装置。
【０２１４】
（付記８）  前記制御部は、さらに、前記外部情報処理装置から書き込みが要求された各ファイルのデータを分割して分割領域に割り当て、前記分割領域にそれぞれ含まれる分割データを、重複を排除した状態で前記記憶部に格納し、
前記第１のデータ群に対応する前記管理データ群は、前記第１のファイルを分割して生成された前記分割領域と、生成された前記分割領域にそれぞれ含まれる前記分割データの前記記憶部における格納場所との対応関係を示すデータと、前記第１のファイルのメタデータとを含み、
前記第１の操作は、前記メタデータの書き込み操作であり、前記第２の操作は、前記対応関係を示すデータの書き込み操作である、
付記７に記載の情報処理装置。
【０２１５】
（付記９）  前記制御部は、さらに、外部情報処理装置から前記外部ストレージ装置に対して書き込みが要求されたファイルのデータを分割して分割領域に割り当て、前記分割領域にそれぞれ含まれる分割データを、重複を排除した状態で前記記憶部に格納し、
前記分割データの格納では、１以上の前記分割データをグループ化して生成された分割データ群を、それぞれ前記複数のデータ群に含まれるデータ群の１つとして前記記憶部に格納する、
付記１乃至６のいずれか１つに記載の情報処理装置。
【０２１６】
（付記１０）  コンピュータに、
記憶部に記憶された、外部ストレージ装置に対する転送単位ごとにそれぞれ分類された複数のデータ群のうち、第１のデータ群に対する第１の操作を行うと、前記記憶部に記憶された、前記複数のデータ群のいずれかにそれぞれ対応する１以上の操作情報が登録される転送制御情報に対して、前記第１のデータ群に対応する第１の操作情報を登録し、
前記第１のデータ群が転送対象として抽出されると、前記第１のデータ群に対応する前記第１の操作情報を保持情報として一時的に保持するとともに、前記第１のデータ群を前記外部ストレージ装置に転送し、
前記外部ストレージ装置に対する前記第１のデータ群の転送中に前記第１のデータ群に対する第２の操作を行った場合、前記転送制御情報に登録された前記第１の操作情報を更新し、
前記外部ストレージ装置に対する前記第１のデータ群の転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、
前記第１の操作情報と前記保持情報とが一致しない場合、前記第１の操作情報に対応する前記第１のデータ群を前記外部ストレージ装置に再転送する、
処理を実行させる情報処理プログラム。
【０２１７】
（付記１１）  前記第１の操作情報の登録では、前記第１の操作情報に所定のカウント値を設定し、
前記第１の操作情報の更新では、前記カウント値を更新し、
前記第１の操作情報と前記保持情報との比較では、前記第１の操作情報に含まれる前記カウント値と前記保持情報に含まれる前記カウント値とを比較する、
付記１０に記載の情報処理プログラム。
【０２１８】
（付記１２）  前記第１の操作情報の登録では、前記第１の操作情報に前記第１の操作を示す第１の操作内容を設定し、
前記第１のデータ群の転送では、前記第１の操作情報に設定された前記第１の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送し、
前記第１の操作情報の更新では、前記第１の操作情報に前記第２の操作を示す第２の操作内容を設定し、
前記第１のデータ群の再転送では、前記第１の操作情報に設定された前記第２の操作内容に基づいて前記第１のデータ群の中から抽出されたデータを前記外部ストレージ装置に転送する、
付記１０または１１に記載の情報処理プログラム。
【０２１９】
（付記１３）  前記第１のデータ群の再転送では、前記転送制御情報に登録された前記第１の操作情報を前記保持情報として一時的に保持し、
前記コンピュータに、
前記第１のデータ群の再転送が完了すると、前記転送制御情報に登録された前記第１の操作情報と、前記保持情報とを比較し、前記第１の操作情報と前記保持情報とが一致した場合、前記第１の操作情報を前記転送制御情報から削除する、
処理をさらに実行させる、
付記１０乃至１２のいずれか１つに記載の情報処理プログラム。
【０２２０】
（付記１４）  前記複数のデータ群はそれぞれ、外部情報処理装置から前記外部ストレージ装置に対して書き込みが要求されたファイルに関する管理データ群であり、
前記第１の操作と前記第２の操作は、前記外部情報処理装置から前記第１のデータ群に対応する第１のファイルの書き込みが要求されてから書き込み処理の完了を前記外部情報処理装置に応答するまでの間に、前記第１のファイルに対応する前記管理データ群に対して段階的に実行される操作である、
付記１０乃至１３のいずれか１つに記載の情報処理プログラム。
【０２２１】
（付記１５）  前記外部情報処理装置から書き込みが要求された各ファイルのデータを分割して分割領域に割り当て、前記分割領域にそれぞれ含まれる分割データを、重複を排除した状態で前記記憶部に格納する、
処理を前記コンピュータにさらに実行させ、
前記第１のデータ群に対応する前記管理データ群は、前記第１のファイルを分割して生成された前記分割領域と、生成された前記分割領域にそれぞれ含まれる前記分割データの前記記憶部における格納場所との対応関係を示すデータと、前記第１のファイルのメタデータとを含み、
前記第１の操作は、前記メタデータの書き込み操作であり、前記第２の操作は、前記対応関係を示すデータの書き込み操作である、
付記１４に記載の情報処理プログラム。
【符号の説明】
【０２２２】
１  情報処理装置
１ａ  記憶部
１ｂ  制御部
２  ストレージ装置
３ａ，３ｂ，３ｃ  データ群
４  転送制御情報
４ａ，４ａ１  操作情報
【図１】
2019095925.tif 000003
【図２】
2019095925.tif 000004
【図３】
2019095925.tif 000005
【図４】
2019095925.tif 000006
【図５】
2019095925.tif 000007
【図６】
2019095925.tif 000008
【図７】
2019095925.tif 000009
【図８】
2019095925.tif 000010
【図９】
2019095925.tif 000011
【図１０】
2019095925.tif 000012
【図１１】
2019095925.tif 000013
【図１２】
2019095925.tif 000014
【図１３】
2019095925.tif 000015
【図１４】
2019095925.tif 000016
【図１５】
2019095925.tif 000017
【図１６】
2019095925.tif 000018
【図１７】
2019095925.tif 000019
【図１８】
2019095925.tif 000020
【図１９】
2019095925.tif 000021
【図２０】
2019095925.tif 000022
【図２１】
2019095925.tif 000023
【図２２】
2019095925.tif 000024
【図２３】
2019095925.tif 000025
【図２４】
2019095925.tif 000026
【図２５】
2019095925.tif 000027
【図２６】
2019095925.tif 000028
【図２７】
2019095925.tif 000029