(57)【特許請求の範囲】
【請求項１】
ファイルを管理し、該ファイルをオブジェクトストレージに転送するファイルストレージであって、
通信ネットワークを通じてデータを送受信するネットワークインターフェース部と、
前記ファイルを管理するファイルシステム管理部と、
前記ファイルを複数のパートに分割し、前記複数のパートを前記オブジェクトストレージに送信するファイル転送部と、を有し、
前記ファイル転送部は、
前記複数のパートを前記オブジェクトストレージに送信している間に、前記オブジェクトストレージへ送信済みのパートが前記ファイルシステム管理部により更新されると、それまでに送信されたパートを結合することにより、前記送信済みで更新されたパートを含む一時的に生成されるオブジェクトである一時オブジェクトを生成するように、前記ネットワークインターフェース部を介して前記オブジェクトストレージに要求し、
前記送信済みで更新されたデータおよび未送信のデータが、送信済みで更新されていないデータとは異なるパートとなるように、前記ファイルを複数のパートに分割しなおし、
前記送信済みで更新されたデータまたは前記未送信のデータを含むパートを前記オブジェクトストレージに送信する、
ファイルストレージ。
【請求項２】
前記ファイル転送部は、
前記ファイルを、通し番号を付与した複数のパートに分割し、前記複数のパートを前記オブジェクトストレージに送信し、前記オブジェクトストレージに前記複数のパートを前記通し番号に従って結合するように要求し、
前記オブジェクトストレージに送信したパートが前記ファイルシステム管理部により更新されると、更新されたパートを含む一時オブジェクトを作成するように前記オブジェクトストレージに要求し、
前記更新されたデータのパートおよび未送信のデータのパートが更新されていないデータのパートと異なるパートとなるように、前記ファイルを通し番号を付加した複数のパートに分割しなおし、
前記更新されたデータのパートおよび前記未送信のデータのパートを前記オブジェクトストレージに送信し、
前記更新されていないデータのパートを前記一時オブジェクトから複製するように前記オブジェクトストレージに要求し、
前記更新されたデータのパートおよび前記未送信のデータのパートと前記更新されていないデータのパートを前記通し番号に従って結合するように前記オブジェクトストレージに要求する、
請求項１に記載のファイルストレージ。
【請求項３】
前記ファイル転送部は、
前記更新されたデータと更新されていないデータと未送信のデータとがそれぞれ異なるパートとなるように、前記一時オブジェクトを通し番号を付加した複数のパートに分割しなおし、
前記更新されたデータの第１パートと前記未送信のデータの第２パートとを前記オブジェクトストレージに送信し、
前記更新されていないデータの第３パートを前記一時オブジェクトから複製するように要求し、
前記第１パート、前記第２パート、および前記第３パートを前記通し番号に従って結合するように要求する、
請求項１に記載のファイルストレージ。
【請求項４】
前記ファイル転送部は、
前記オブジェクトストレージに送信したパートが前記ファイルシステム管理部により更新されると、前記更新されたパートを含む、それまでに転送された複数のパートを結合して前記一時オブジェクトを生成するように前記オブジェクトストレージに要求する、
請求項１に記載のファイルストレージ。
【請求項５】
前記ファイル転送部は、前記ファイルを複数のパートに分割しなおすと、前記複数のパートを順次処理対象とし、前記パートが更新されたデータのパートか否か判定し、前記処理対象のパートが更新されていないパートであれば前記オブジェクトストレージに前記一時オブジェクトから複製するように要求し、前記処理対象のパートが更新されたパートであれば前記パートを前記オブジェクトストレージに送信する、請求項１に記載のファイルストレージ。
【請求項６】
前記ファイル転送部は、前記ファイルを分割しなおした前記複数のパートを順次処理対象として処理している間に前記ファイルが更新された場合、それまでに転送されたパートを結合して一時オブジェクトを作成し、更新された部分を抽出しなおす、
請求項５に記載のファイルストレージ。
【請求項７】
前記一時オブジェクトには、一時オブジェクトであることが判別可能な所定の名称が付与される、
請求項１に記載のファイルストレージ。
【請求項８】
前記一時オブジェクトのメタデータには、一時オブジェクトであることを判別可能な所定の識別情報が付与される、
請求項１に記載のファイルストレージ。
【請求項９】
前記送信済みで更新されたデータおよび未送信のデータが、送信済みで更新されていないデータとは異なるパートとなるように、前記ファイルを複数のパートに分割しなおす際に、
更新されたデータまたは未送信のデータ区間に隣接する、予め定められた容量未満の更新されていないデータ区間を、更新されたデータおよび未送信と同じパートとして分割しなおす、
請求項１に記載のファイルストレージ。
【請求項１０】
ファイルを管理するファイルストレージから転送された該ファイルを格納するオブジェクトストレージであって、
通信ネットワークを通じてデータを送受信するネットワークインターフェース部と、
前記ファイルを管理するファイルシステム管理部と、
前記ファイルが前記ファイルストレージにより、複数のパートに分割され、前記複数のパートを前記ファイルストレージから受信するファイル転送部と、を有し、
前記ファイル転送部は、
前記複数のパートを前記ファイルストレージから受信している間に、前記ファイルストレージから受信したパートが前記ファイルストレージにて更新されると、転送済みで更新されたパートを含む一時的に生成されるオブジェクトである一時オブジェクトを作成するように前記ファイルストレージから前記ネットワークインターフェース部を介して要求を受信し、
前記ファイルストレージからの要求で前記一時オブジェクトを作成し、
前記ファイルストレージにて、前記転送済み更新されたデータのパートおよび未送信のデータのパートが転送済みで更新されていないデータのパートと異なるパートとなるように、前記一時オブジェクトが複数のパートに分割しなおされたうち、前記更新されたデータまたは前記未送信のデータを含むパートを前記ファイルストレージから受信する、
オブジェクトストレージ。
【請求項１１】
ファイルを管理するファイルストレージからオブジェクトストレージに前記ファイルを転送し、前記オブジェクトストレージにて格納するストレージシステムであって、
前記ファイルを複数のパートに分割し、前記複数のパートを前記オブジェクトストレージに送信している間に、前記オブジェクトストレージへ送信済みのパートが更新されると、それまでに送信されたパートを結合することにより、前記送信済みで更新されたパートを含む一時的に生成されるオブジェクトである一時オブジェクトを生成するように、前記オブジェクトストレージに要求し、前記送信済みで更新されたデータおよび未送信のデータが、送信済みで更新されていないデータとは異なるパートとなるように、前記ファイルを複数のパートに分割しなおし、前記送信済みで更新されたデータまたは前記未送信のデータを含むパートを前記オブジェクトストレージに送信するファイルストレージと、
前記ファイルが分割された前記複数のパートを前記ファイルストレージから受信し、前記ファイルストレージから受信したパートが前記ファイルストレージにて更新されると、前記転送済みで更新されたパートを含む一時オブジェクトを前記ファイルストレージからの要求で作成し、前記ファイルストレージにて、前記転送済みで更新されたデータのパートおよび前記未送信のデータのパートが前記転送済みで更新されていないデータのパートと異なるパートとなるように、前記一時オブジェクトを複数のパートに分割しなおされたうち、前記転送済みで更新されたデータまたは前記未送信のデータを含むパートを前記ファイルストレージから受信するオブジェクトストレージと、を有するストレージシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムに関する。
【背景技術】
【０００２】
パソコン等の情報機器からファイル単位で記録再生を行うネットワーク接続型のストレージＮＡＳ（Ｎｅｔｗｏｒｋ  Ａｔｔａｃｈｅｄ  Ｓｔｏｒａｇｅ）が、遠隔地にある他のストレージにデータのバックアップや共有目的でデータのコピーを行うための技術がある。【０００３】
特開２００５−２９２９５２（特許文献１）には「第１データ転送部は、第１運用ボリュームに書き込まれる更新データを第２データ転送部に送信し、第２データ転送部は、更新データを第２運用ボリュームに格納し、第２運用ボリュームの更新データの格納位置に書き込まれている差分データを第２差分ボリュームに格納し、第２管理情報保持部を更新し、その後、データ更新の完了を第１データ転送部に通知し、第１データ転送部は、第２データ転送部からのデータ更新完了通知を受信すると、更新データを第１運用ボリュームの更新位置に格納し、差分データを第１差分ボリュームに格納し、第１管理情報保持部を更新する。」と記載されている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００５−２９２９５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＨＴＴＰプロトコルを用いるＲＥＳＴインターフェースを持つオブジェクトストレージあるいはクラウドストレージでは、オブジェクト単位でデータを格納する。このオブジェクトストレージに大きなサイズなオブジェクトを格納するとき、Ｍｕｌｔｉｐａｒｔ  ＵｐｌｏａｄというＡＰＩを用いる場合がある。このＡＰＩはオブジェクトを複数のパートに分割し、パート毎にオブジェクトストレージにアップロードするものである。【０００６】
このＡＰＩでいうオブジェクトをパート分割して転送する技術（パート転送技術）と、背景技術で取り上げた差分データを転送する技術（差分アップロード技術）を組み合わせ、ファイルをオブジェクトとして扱うことで、予めオブジェクトストレージに更新前のファイルデータを格納した状態に、ＮＡＳからオブジェクトストレージにファイルの差分データのみをアップロードして、ＮＡＳの更新されたファイルをオブジェクトストレージにコピーすることが可能となる。前記差分データのみをアップロードしてファイルをコピーすることを差分アップロードと呼ぶ。【０００７】
実際の差分アップロード処理は、既にＮＡＳからオブジェクトストレージに転送され、オブジェクトストレージに格納されているオブジェクトに対応するファイルがＮＡＳ側で更新されたとき、更新された部分のデータだけをＮＡＳからオブジェクトストレージに転送し、転送されたデータを用いてオブジェクトストレージ内のオブジェクトを更新するものである。【０００８】
差分アップロード技術を用いた多くのオブジェクトストレージでは、ファイルを分割するパート数に上限が設けられている。また、パートのサイズを小さくするとデータ転送効率が低下する。そのためパートのサイズは大きい方が好ましい。【０００９】
しかし、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄに代表されるようなパート転送技術を用いる多くのＡＰＩでは、ＮＡＳに代表されるファイルストレージは、ファイルを複数のパートに分割し、各パートに通し番号を付与してオブジェクトストレージに送信する。そして、オブジェクトストレージは、パートを通し番号の順番に結合することによりファイルを復元する。そのため、オブジェクトストレージに既にアップロードしたパートはサイズを変更することが難しい。既にオブジェクトストレージが受信したパートのサイズが変更されると、通し番号が崩れたり、データが壊れたりするからである。【００１０】
そして、パートのサイズが変更できないため、オブジェクトストレージに既にアップロードした大きなサイズのパートの一部がＮＡＳにて更新されたとき、そのパート全体を再送しなければならず、更新されていないデータの再転送をするという無駄がある。【００１１】
本発明の目的は、ファイルをパート分割して転送するストレージシステムにおいて、転送済みのパートが更新された場合に効率よくデータを再送する技術を提供することである。
【課題を解決するための手段】
【００１２】
本発明の一態様によれば、ファイルを管理し、該ファイルをオブジェクトストレージに転送するファイルストレージは、通信ネットワークを通じてデータを送受信するネットワークインターフェース部と、前記ファイルを管理するファイルシステム管理部と、前記ファイルを複数のパートに分割し、前記複数のパートを前記オブジェクトストレージに送信するファイル転送部と、を有しており、前記ファイル転送部は、前記複数のパートを前記オブジェクトストレージに送信している間に、前記オブジェクトストレージへ送信済みのパートが前記ファイルシステム管理部により更新されると、それまでに送信されたパートを結合することにより、前記送信済みで更新されたパートを含む一時的に生成されるオブジェクトである一時オブジェクトを生成するように、前記ネットワークインターフェース部を介して前記オブジェクトストレージに要求し、前記送信済みで更新されたデータおよび未送信のデータが、送信済みで更新されていないデータとは異なるパートとなるように、前記ファイルを複数のパートに分割しなおし、前記送信済みで更新されたデータまたは前記未送信のデータを含むパートを前記オブジェクトストレージに送信する。【００１３】
このように、オブジェクトストレージに送信したパートが更新されると、更新されたパートを含む複数のパートを結合して一時オブジェクトを生成し、更新による差分となる転送済みで更新されたデータおよび未送信のデータが、転送済みで更新されていないデータと異なるパートとなるようにファイルを分割しなおし、差分のみを効率よく再送することができる。
【発明の効果】
【００１４】
ファイルをパート分割して転送するストレージシステムにおいて、転送済みのパートが更新された場合に効率よくデータを再送することができる。
【図面の簡単な説明】
【００１５】
【図１】実施例１の計算機システムの概略構成を示すブロック図である。
【図２】実施例１による計算機システムの処理の概要を説明するための図である。
【図３】ＮＡＳ３００の構成を示すブロック図である。
【図４】クラウドストレージ４００の構成を示すブロック図である。
【図５】実施例１における差分アップロード処理のフローチャートである。
【図６】実施例１におけるファイルのパート分割の一例を示す図である。
【図７】実施例１におけるファイルのパート分割の他の例を示す図である。
【図８】実施例２の計算機システムの概略構成を示すブロック図である。
【図９】クラウドストレージ９００の構成を示すブロック図である。
【図１０】レプリカ状態情報のテーブルの一例を示す図である。
【図１１】実施例２のレプリケーションおよびマイグレーションにおけるファイル転送処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下、ＮＡＳ、クライアントＰＣ、クラウドストレージを含む、計算機システムを例に、添付図面を参照して本発明の実施形態について説明する。ただし、本実施形態は本発明を実現するための一例に過ぎず、本発明の技術的範囲を限定するものではない。クラウドストレージはインターネットで接続されたデータセンタにあるオブジェクトストレージである。
【００１７】
以下の説明では、「×××情報」等の表現にて情報を説明することがあるが、情報は、どのようなデータ構造で表現されていてもよい。すなわち、このような情報は、「×××テーブル」、「×××データベース」等、他の名称で呼ばれることができる。また、以下の説明において、各情報の構成は一例であり、１つの情報は、２以上の情報に分割されてもよいし、２以上の情報の全部又は一部が１つの情報であってもよい。
【００１８】
また、以下の説明では、要素の識別情報として、ＩＤが使用されるが、それに代えて又は加えて他種の識別情報が使用されてもよい。
【００１９】
また、以下の説明では、同種の要素を区別しないで説明する場合には、参照符号又は参照符号における共通番号を使用し、同種の要素を区別して説明する場合は、その要素の参照符号を使用又は参照符号に代えてその要素に割り振られたＩＤを使用することがある。
【００２０】
また、以下の説明では、「プログラム」を主語として処理を説明する場合があるが、プログラムは、プロセッサ（例えばＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ））によって実行されることで、定められた処理を、適宜に記憶資源（例えばメモリ）及び／又はインターフェースデバイス（例えば通信ポート）等を用いながら行うため、処理の主語がプロセッサとされてもよい。プログラムを主語として説明された処理は、プロセッサあるいはそのプロセッサを有する装置が行う処理又はシステムとしてもよい。また、プロセッサは、処理の一部または全部を行うハードウェア回路を含んでもよい。プログラムは、プログラムソースから計算機のような装置にインストールされてもよい。プログラムソースは、例えば、プログラム配布サーバまたは計算機が読み取り可能な記憶メディアであってもよい。プログラムソースがプログラム配布サーバの場合、プログラム配布サーバはプロセッサ（例えばＣＰＵ）と記憶資源を含み、記憶資源はさらに配布プログラムと配布対象であるプログラムとを記憶してよい。そして、プログラム配布サーバのプロセッサが配布プログラムを実行することで、プログラム配布サーバのプロセッサは配布対象のプログラムを他の計算機に配布してよい。また、以下の説明において、２以上のプログラムが１つのプログラムとして実現されてもよいし、１つのプログラムが２以上のプログラムとして実現されてもよい。
【００２１】
また、本発明の実施形態は、後述されるように、汎用コンピュータ上で動作するソフトウェアで実装しても良いし、専用ハードウェアまたはソフトウェアとハードウェアの組み合わせで実装しても良い。
【００２２】
本発明の実施形態は、ＮＡＳとクラウドストレージの通信に利用される通信ネットワークはＷＡＮ（Ｗｏｒｌｄ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）に限定されず、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）など他の通信ネットワークであってもよい。
【００２３】
また、以下の説明では、データの管理単位としてのファイルとディレクトリの総称として、オブジェクトと呼称する。以下の説明において、ディレクトリに対する処理は、オブジェクトに対する処理であってもよい。言い換えれば、ディレクトリに対する処理と同様に、ファイルに対する処理を実行することができる。
【実施例１】
【００２４】
図１は、実施例１の計算機システムの概略構成を示すブロック図である。【００２５】
本実施例の計算機システムは、すくなくとも１つの拠点と、１つのデータセンタとに分散して配置され、拠点とデータセンタの間はＷＡＮ２０３を介して接続されている。図１では、拠点は、拠点Ｘと拠点Ｙの２拠点のみであるが、拠点数はいくつであっても良い。【００２６】
各拠点は、クライアントＰＣ２０１、ＮＡＳ３００、ＬＡＮ２０２を含む。【００２７】
クライアントＰＣ２０１は、ＮＡＳ３００が提供するファイル共有サービスを利用するために、エンドユーザが使用する計算機である。クライアントＰＣ２０１上では、ＮＡＳ３００と通信するためのクライアントプログラムなどが動作する。エンドユーザの操作に基づき、クライアントＰＣ２０１は、ＮＡＳ３００に対し、ファイルやディレクトリの作成、削除、移動、リネーム、データ読み込み、書き込み等の要求を発行する。【００２８】
ＬＡＮ２０２は、クライアントＰＣ２０１とＮＡＳ３００とを相互に接続する通信ネットワークである。【００２９】
ＮＡＳ３００は、エンドユーザに対してファイル共有サービスを提供する計算機である。ＮＡＳ３００の詳細な構成は後述する。【００３０】
ＷＡＮ２０３は、各拠点のＬＡＮ２０２とデータセンタを接続する通信ネットワークである。ＮＡＳ３００とクラウドストレージ４００は、この通信ネットワークを介して通信する。この通信には、例えば、ＨＴＴＰ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ）、ＨＴＴＰＳ（Ｈｙｐｅｒｔｅｘｔ  Ｔｒａｎｓｆｅｒ  Ｐｒｏｔｏｃｏｌ  Ｓｅｃｕｒｅ）等の通信プロトコルを用いる。【００３１】
データセンタは、クラウド上でファイルを保存するためのクラウドストレージ４００を有す。クラウドストレージ４００の詳細な構成は後述する。なお、クラウドストレージ４００は、複数のノードからなるクラスタ構成を採っても良い。【００３２】
図１に示したように、実施例１の計算機システムでは、ＮＡＳ３００とクラウドストレージ４００が通信ネットワークで接続されており、ＮＡＳ３００に格納されたファイルのデータはクラウドストレージ４００へ転送される。転送されるファイルの内、予め定められた任意のサイズ以上のサイズの大きなファイルは、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩを用いて転送される。【００３３】
Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩは、ファイルを複数のパートに分割して、パート毎に転送するＡＰＩである。このＡＰＩを用いてデータを転送する際は、ＮＡＳ３００は先ずＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのトランザクションを開始する要求をクラウドストレージ４００に対して送る。【００３４】
この開始要求が成功すると、クラウドストレージ４００は、開始するトランザクションの識別子をＮＡＳ３００に返す。ＮＡＳ３００は、データをパートに分割し、このパートに、トランザクションの識別子とパートの順序を示すパート番号を入れたヘッダを付加し、クラウドストレージ４００に転送する。クラウドストレージ４００は、パートの受信に成功すると、ＮＡＳ３００に、転送されたパートのデータのＥＴＡＧ（エンティティタグ）を返す。ＥＴＡＧは転送されたデータのハッシュ値である。【００３５】
ＮＡＳ３００は、ファイルの全てのデータのパートを転送したら、クラウドストレージ４００に結合要求を出す。この結合要求には、トランザクションの識別子と、各転送したパートのパート番号およびＥＴＡＧとが含まれる。クラウドストレージ４００は、結合要求を受けると、転送されたパートを一つのオブジェクトに結合し、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのトランザクションを終了する。【００３６】
なお、ここでは一例としてＥＴＡＧはデータのハッシュ値としたが、他の例として、クラウドストレージ４００がデータを識別可能な文字列をＥＴＡＧとしてもよい。また、ここでは、ファイルを分割した全てのパートを転送する例を示したが、他の例として、既にクラウドストレージ４００に格納されているデータから、ＮＡＳ３００から転送するのではなく、クラウドストレージ４００上のものをコピーすることにしても良い。【００３７】
例えば、１日目にＮＡＳ３００からクラウドストレージ４００に転送されたファイルが、２日目にＮＡＳ３００内で更新されて再度ＮＡＳ３００からクラウドストレージ４００に転送する場合を想定する。前記場合、１日目に格納したデータの内、更新されていない箇所についてはクラウドストレージ４００内のデータをコピーし、更新された箇所をＮＡＳ３００からクラウドストレージ４００に転送し、コピーしたデータと転送したデータを結合することにしてもよい。【００３８】
前記コピーを実施する際は、ＮＡＳ３００からクラウドストレージ４００に、トランザクション識別子と、コピーするデータのパート番号と、コピー元のクラウドストレージ４００上のオブジェクト名と、オブジェクト内のコピー範囲とを含むコピー要求を出す。クラウドストレージ４００は、コピー要求を受信するとＮＡＳ３００にＥＴＡＧを返す。【００３９】
図２は、実施例１による計算機システムの処理の概要を説明するための図である。図２を用いて、ＮＡＳ３００に格納された大きなサイズのファイル（以降では大ファイルと呼ぶ）１０２を、ＷＡＮ２０３を介して接続されたクラウドストレージ４００にアップロードする動作を説明する。ＮＡＳ３００は、大ファイル１０２をＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩを用いてクラウドストレージ４００にアップロードする。【００４０】
まず、ＮＡＳ３００は、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩを用いてアップロードする際は、先ず大ファイル１０２を複数のパートに分割し、複数のパートに分割された大ファイル１０４を作成する。そして、ＮＡＳ３００は、複数のパートをクラウドストレージに順次転送する（ステップ１０５）。【００４１】
前記転送（ステップ１０５）中の、ａパートとｂパートとｃパートの転送が完了し、ｄパートは未転送の状態の際に、アップロードしているファイルが更新されたものとする。更新された状態のファイルが大ファイル１０６である。図中のファイルのハッチングされた部分が更新された部分である。ａパートとｃパートに更新された部分がある。【００４２】
なお、前記「アップロードしているファイル」とは、ファイルの一部であるパートが転送中となっているファイルだけでなく、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄの開始要求が出されてから、そのファイルの結合要求が出されるまでの状態にあるファイルを指すものとする。例えば、アップロード処理を一時中断してパートの転送をしていない期間に更新されたファイルも「アップロードしているファイル」が更新された状態に含まれる。【００４３】
ＮＡＳ３００は、更新されたパートを含む複数のパートを結合し、一時的なオブジェクト（以下、一時オブジェクトと呼ぶ）１０７を作成することを要求する結合要求をクラウドストレージ４００に送る。ここではａパートとｂパートとｃパートを結合することが要求され、クラウドストレージ４００にそれらを結合した一時オブジェクト１０７が作成される。【００４４】
このように、既に転送したパートを一つのオブジェクトにまとめて一時オブジェクト１０７を作成することで、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのセッションを一旦終了することになるので、次に新たなＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのセッションを開始する際には、どのようにパートに分割するかというパート構成を任意に決めることができる。【００４５】
さらに、ＮＡＳ３００は、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩでファイルを複数のパートに分割し、クラウドストレージ４００にアップロードする。【００４６】
このとき、ＮＡＳ３００に格納されたファイルを以下のように複数のパートに分割してクラウドストレージ４００に転送する。【００４７】
クラウドストレージ４００に既にアップロードされたファイルが更新された場合は、更新された部分と未更新の部分を別のパートとして、更新された部分のみ転送し、未更新の部分はクラウドストレージ４００内の更新前にアップロードされたオブジェクトの未更新部分に相当する箇所からデータコピーしてパートを作成する。【００４８】
また、未転送の部分がある場合には、未転送の部分も、更新されていない部分と互いに異なるパートとなる様にファイルのパート構成が定められる。図２の例ではｄパートは未転送である。【００４９】
ＮＡＳ３００は、一時オブジェクト１０７における、転送済であり、かつ更新されていない部分を指定し、その部分を一時オブジェクト１０７から切り出す様にコピー要求を出す。クラウドストレージ４００では、パート１０９とパート１１０のコピーを要求するコピー要求が出される。【００５０】
また、ＮＡＳ３００内では、更新された部分と更新されていない部分が互いに異なるパートとなる様にファイルのパート分割が再構成される。パート分割を再構成したファイルが大ファイル１０８である。【００５１】
ＮＡＳ３００は、更新された部分については、パート再構成した大ファイル１０８から取り出してクラウドストレージ４００に転送する。このとき未転送の部分のパートもあれば、ＮＡＳ３００はクラウドストレージ４００に転送する。図２の例では、更新されたｅパートおよびｇパートと、未転送のｄパートとが転送される。【００５２】
最後に、ＮＡＳ３００は、コピーされたパート１０９（ｆパート）およびパート１１０（ｈパート）と、更新されたパート１１１（ｅパート）およびパート１１２（ｇパート）と、追加で転送されたパート１１３（ｄパート）を結合する要求を、クラウドストレージ４００に出し、クラウドストレージ４００におけるオブジェクト１１４を完成させる。【００５３】
最終的に結合されたオブジェクト１１４と一時オブジェクト１０７は、異なるオブジェクト名とする。あるいは、一時オブジェクト１０７がオブジェクト１１４と同じオブジェクト名の場合は互いに異なるバージョンを付与することにしても良い。【００５４】
バージョンとは、既にクラウドストレージ４００に存在するオブジェクトを上書きする様に、既に存在するオブジェクトと同じオブジェクト名で他のオブジェクトをアップロードした際に、上書き前のデータを過去のバージョンとして保管し、アクセス可能とする機能であり、クラウドストレージ４００にて提供される。【００５５】
バージョン機能において、オブジェクトの持つバージョンの一覧を取得したり、任意のバージョンの番号を指定して、任意のバージョンのデータを取得したりできる。また、コピー要求では、コピー元として任意のバージョンを指定することができる。【００５６】
また、本実施例では、一時オブジェクトは、クライアントから不可視となる様に、ＮＡＳ３００が制御する。【００５７】
図３は、ＮＡＳ３００の構成を示すブロック図である。【００５８】
ＮＡＳ３００は、ＮＡＳコントローラ３０１と、記憶装置３２２とを含む。【００５９】
ＮＡＳコントローラ３０１は、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）３０２と、ＣＰＵ３０３と、ネットワークＩ／Ｆ３０４と、メモリ３０５とを含む。ＮＡＳコントローラ３０１の各部は、内部的な通信路（例えば、バス）によって互いに接続されている。【００６０】
Ｉ／Ｆ３０２は、記憶装置３２２との接続に利用され、ＮＡＳコントローラ３０１は、Ｉ／Ｆ３０２を介して、記憶装置３２２に対してデータを読み書きする。【００６１】
ＣＰＵ３０３は、メモリ３０５内のプログラム及びデータに従って、記憶装置３２２に対するデータの読み書き処理を実行する。【００６２】
ネットワークＩ／Ｆ３０４は、ＬＡＮやＷＡＮを介して、クライアントＰＣ２０１およびクラウドストレージ４００に接続され、クライアントＰＣ２０１やクラウドストレージ４００と通信する。【００６３】
メモリ３０５は、ＮＡＳ３００の制御のためのプログラム及びデータを格納する。メモリ３０５は、ディレクトリ同期プログラム３０６と、ディレクトリロックプログラム３０７と、更新リスト取得・適用プログラム３０８と、マイグレーションプログラム３０９と、スナップショットプログラム３１０と、ファイル共有プログラム３１１と、ファイルシステム管理プログラム３１２と、ファイル・ディレクトリ管理情報５００と、差分抽出プログラム６００と、クラウドストレージ情報３１３と、ファイル転送プログラム３３０と、を格納する。【００６４】
ディレクトリ同期プログラム３０６は、同期要フラグが設定されたディレクトリにエンドユーザがアクセスした際に、当該ディレクトリをクラウドストレージ４００上のディレクトリと同期するプログラムである。【００６５】
ディレクトリロックプログラム３０７は、クラウドストレージ４００上のディレクトリロックを取得、解放するプログラムである。ディレクトリロックプログラム３０７は、ディレクトリロック処理とディレクトリロック解放処理と、を含む。【００６６】
ディレクトリロック取得処理は、引数で指定されたオブジェクトＩＤを引数として、クラウドストレージ４００に対し、引数のＩＤで指定されたディレクトリのディレクトリロックを取得する。ディレクトリロック解放処理は、引数で指定されたオブジェクトＩＤを引数として、クラウドストレージ４００に対し、ディレクトリアンロック処理の実行を要求することで、引数で指定されたディレクトリのディレクトリロックを解放する。【００６７】
更新リスト取得・適用プログラム３０８は、クラウドストレージ４００から更新リストを取得し、取得した更新リストにパスが記載されたオブジェクトに、同期要フラグを設定する。【００６８】
マイグレーションプログラム３０９は、マイグレーション処理を含む。マイグレーション処理は、クラウドストレージ４００に対し、オブジェクト保存を要求することにより、ＮＡＳ３００のファイルシステム３１８において更新されたファイルやディレクトリをクラウドストレージ４００に保存するとともに、これらのファイルやディレクトリのパス名を記載した更新リストについても、クラウドストレージ４００に対してオブジェクト保存を要求することにより、この更新リストもクラウドストレージ４００に保存するプログラムである。なお、マイグレーション処理は、ファイルシステム３１８上で削除されたファイルやディレクトリについて、クラウドストレージ４００上のファイルやディレクトリも削除する。【００６９】
スナップショットプログラム３１０は、ディスク３１７内のファイルシステム３１８のデータを任意の時点の状態を記憶し、記憶した状態のファイルシステム３１８のデータへのアクセスを提供するプログラムである。また、スナップショットプログラム３１０は、複数の状態を記憶することが可能であり、異なる二つの状態間を比較して、データの相違点を出力する機能も提供する。【００７０】
スナップショットプログラム３１０は、ディスク３１７内のデータをファイルシステム３１８単位で状態を記憶しなくとも、例えばディスク３１７内のブロック空間を区切ったパーティションやボリュームと呼ばれる単位で状態を記憶しても良い。【００７１】
スナップショットプログラム３１０は、状態を記憶するために、ディスク３１７内の領域にスナップショット間やファイルシステム３１８の差異情報を記憶する。【００７２】
スナップショット３２３は、スナップショットプログラム３１０によって作成された、任意の時刻のファイルシステム３１８等のデータ状態を保持し、データの再生が行えるものである。スナップショット３２３はディスク３１７内に設けた領域、例えばボリュームの中に、最新のファイルシステム３１８と、任意の時点のファイルシステム３１８とのデータ差分と、データ差分の管理データから構成され、スナップショットプログラム３１０によってファイルシステムと同等にデータを再生可能とする。【００７３】
ファイル共有プログラム３１１と、ファイルシステム３１８の一部または全部を「共有」として、クライアントＰＣ２０１に対して公開することで、エンドユーザにファイル共有サービスを提供するプログラムである。ファイル共有サービスは、例えば、ＣＩＦＳ（Ｃｏｍｍｏｎ  Ｉｎｔｅｒｎｅｔ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）やＮＦＳ（Ｎｅｔｗｏｒｋ  Ｆｉｌｅ  Ｓｙｓｔｅｍ）等のプロトコルを用い、クライアントＰＣと通信する。【００７４】
ファイルシステム管理プログラム３１２は、記憶装置３２２内のディスク３１７に格納されたファイルシステム３１８を管理するプログラムである。ＮＡＳ３００は、ファイルシステム管理プログラム３１２を用い、ファイルシステム３１８に作成されたルートディレクトリ３１９、ファイル３２０、ディレクトリ３２１を操作する。つまり、メモリ３０５に格納された他のプログラムは、ファイルシステム管理プログラム３１２を呼び出し、ファイルシステム３１８に作成されたルートディレクトリ３１９、ファイル３２０、ディレクトリ３２１を操作する。尚、ルートディレクトリとは、階層化されたディレクトリ構造の最上位のディレクトリの呼称である。【００７５】
差分抽出プログラム６００は、ファイル３２０の前回クラウドストレージ４００に転送した時点から、プログラムを実行した時点や、スナップショットを取得した時点との、更新された差分部分を抽出プログラムで、ファイル内の更新された箇所の全てを出力する。【００７６】
差分抽出プログラム６００は、スナップショットプログラム３１０と連携して差分抽出を行う。スナップショットプログラム３１０はＮＡＳ３００からクラウドストレージ４００にファイルを転送する前にスナップショットを取得し、ファイルシステム３１８の状態を保存する。ＮＡＳ３００は、取得し保存したスナップショットのファイルを読出し、クラウドストレージ４００に転送する。スナップショットは複数世代記憶されている。【００７７】
差分抽出プログラム６００は、転送を行うファイル３２０の前回転送時のファイルの転送前のスナップショットと、最新のスナップショットの更新差分を取得して、そのファイル３２０の前回転送してからの差分抽出を行う。【００７８】
ファイル３２０の転送としては、複数のファイル３２０がファイルシステム３１８に存在する場合に、更新されたファイル３２０を一度にまとめて転送する様にしても良い。その場合はスナップショットを取得し、そのスナップショットと前回転送時のスナップショット間の差分抽出を行い、更新されたファイル３２０毎の差分抽出を行う。ファイル３２０毎の差分抽出結果に基づき、ファイル内の更新された部分のみをクラウドストレージ４００に転送する。転送の際は、スナップショット内の更新されたファイル３２０を読み出す。【００７９】
クラウドストレージ情報３１３は、ＮＡＳ３００がクラウドストレージ４００と通信するための情報である。例えば、ＵＲＬ（Ｕｎｉｆｏｒｍ  Ｒｅｓｏｕｒｃｅ  Ｌｏｃａｔｏｒ）や通信に用いるプロトコル等の情報である。クラウドストレージ情報３１３は、複数のクラウドストレージ４００の情報であっても良い。また、クラウドストレージ情報３１３は、ディスク３１７に格納されていてもよい。【００８０】
ファイル転送プログラム３３０は、他の各プログラムと連携し、図２に示したファイル転送におけるＮＡＳ３００側の処理を行う。【００８１】
記憶装置３２２は、Ｉ／Ｆ３１４と、メモリ３１５と、ＣＰＵ３１６と、ディスク３１７と、を含む。記憶装置３２２の各部は、内部的な通信路（例えば、バス）によって互いに接続されている。【００８２】
Ｉ／Ｆ３１４は、ＮＡＳコントローラ３０１に接続され、ＮＡＳコントローラ３０１と通信する。【００８３】
メモリ３１５は、記憶装置３２２の制御のためのプログラム及びデータを格納する。【００８４】
ＣＰＵ３１６は、メモリ３１５内のプログラム及びデータに従って、ディスク３１７に対するライトやリード等の処理を行う。【００８５】
ディスク３１７は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の不揮発性記憶媒体である。ディスク３１７には、ファイルシステム管理プログラム３１２によりファイルシステム３１８が構築される。これにより、ディスク３１７は、ディレクトリ及びファイルを格納する。ディスク３１７は、複数のディスクであってもよい。【００８６】
ファイルシステム３１８は、ファイルシステム管理プログラム３１２により管理され、エンドユーザが作成／更新したファイル３２０やディレクトリ３２１が格納される。ファイルシステム３１８は、ルートディレクトリ３１９を最上位とした階層構造を持つ。すなわち、ディレクトリの下には、さらに複数のディレクトリを作成することができる。ファイルシステム３１８は、複数であっても良い。【００８７】
なお、ＮＡＳコントローラ３０１をコントローラと呼ぶことがある。また、ディスク３１７を記憶デバイスと呼ぶことがある。【００８８】
図４は、クラウドストレージ４００の構成を示すブロック図である。【００８９】
クラウドストレージ４００は、クラウドストレージコントローラ４０１と、記憶装置４０２とを含む。【００９０】
クラウドストレージコントローラ４０１は、ネットワークＩ／Ｆ４０３と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）４０４と、ＣＰＵ４０５と、メモリ４０６とを含む。クラウドストレージコントローラ４０１の各部は、内部的な通信路（例えば、バス）によって互いに接続されている。【００９１】
ネットワークＩ／Ｆ４０３は、ＷＡＮを介して、ＮＡＳ３００に接続され、ＮＡＳ３００と通信するために使用される。【００９２】
Ｉ／Ｆ４０４は、記憶装置４０２との接続に利用される。クラウドストレージコントローラ４０１は、Ｉ／Ｆ４０４を介して、記憶装置４０２に対してデータを読み書きする。【００９３】
ＣＰＵ４０５は、メモリ内のプログラム及びデータに従って、オブジェクト操作プログラム４０７とファイルシステム管理プログラム４０８の処理を実行する。【００９４】
メモリ４０６は、クラウドストレージ４００の制御のためのプログラム及びデータを格納する。メモリ４０６は、オブジェクト操作プログラム４０７と、ファイルシステム管理プログラム４１５と、オブジェクト管理情報７００と、パート管理情報８００と、を含む。【００９５】
オブジェクト操作プログラム４０７は、ＮＡＳ３００からの要求に従い、ファイルシステム４１３に格納されたファイルやディレクトリの読み書き、バージョン一覧取得、ロック、アンロック、ロック確認、ロック時刻取得等の処理を実行すると共に、その結果をＮＡＳ３００に返却する。【００９６】
ファイルシステム管理プログラム４０８は、ファイルシステム４１３を管理するプログラムである。ファイルシステム管理プログラム４０８は、オブジェクト操作プログラム４０７の要求に基づき、ファイルシステム４１３に格納されたオブジェクトを読み書きする。【００９７】
オブジェクト管理情報７００は、ＮＡＳ３００からの要求でファイルシステム４１３に保存したファイルやディレクトリを管理するための情報である。オブジェクト管理情報７００のデータ構成例の詳細は、後述する。なお、オブジェクト管理情報７００は、ディスク４１２に格納されていてもよい。【００９８】
パート管理情報８００は、ＮＡＳ３００から転送された、またはクラウドストレージ４００内部の既存のオブジェクトの一部からコピーされたパートを管理する情報である。Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄセッション毎に、セッションのＩＤと、格納先オブジェクト名、パート番号、パートのＥＴＡＧ値、そのデータの格納先を記録する。尚、パート管理情報８００は、ディスク４１２に格納されていてもよい。【００９９】
アップロードされたパートのＥＴＡＧはデータのハッシュ値、コピーされたパートのＥＴＡＧはコピー管理番号等の、パートのデータに対応した情報である。セッションＩＤはＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのセッションを開始した際にクラウドストレージ４００が発行する、セッションを識別するＩＤである。【０１００】
ファイル転送プログラム４２０は、他の各プログラムと連携し、図２に示したファイル転送におけるクラウドストレージ４００側の処理を行う。【０１０１】
記憶装置４０２は、Ｉ／Ｆ４０９と、メモリ４１０と、ＣＰＵ４１１と、ディスク４１２と、を含む。記憶装置４０２の各部は、内部的な通信路（例えば、バス）によって互いに接続されている。【０１０２】
Ｉ／Ｆ４０９は、クラウドストレージコントローラ４０１に接続され、クラウドストレージコントローラ４０１と通信する。【０１０３】
メモリ４１０は、記憶装置３２２の制御のためのプログラム及びデータを格納する。【０１０４】
ＣＰＵ４１１は、メモリ４１０内のプログラム及びデータに従って、ディスク４１２に対するライトやリード等の処理を行う。【０１０５】
ディスク４１２は、ＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）やＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等の不揮発性記憶媒体である。ディスク４１２には、ファイルシステム管理プログラム４０８により管理されるファイルシステム４１３が構築される。これにより、ディスク４１２は、ディレクトリ及びファイルを格納する。ディスク４１２は、複数のディスクであってもよい。【０１０６】
ファイルシステム４１３は、ファイルシステム管理プログラム４０８により管理される。ファイルシステム４１３には、ＮＡＳ３００からの要求で、ファイルやディレクトリが格納される。なお、ファイルシステム４１３は、複数であっても良い。【０１０７】
ここで本実施例による計算機システムの概要について整理する。【０１０８】
本実施例による計算機システム（以下、ストレージシステムともいう）において、ＮＡＳ３００は、ファイルを管理し、そのファイルをオブジェクトストレージに転送するファイルストレージである。クラウドストレージ４００は、ファイルを管理するファイルストレージから転送されたファイルを格納するオブジェクトストレージである。ＮＡＳ３００は、通信ネットワークを通じてデータを送受信するネットワークインターフェース３０４（ネットワークインターフェース部）と、ファイルを管理するファイルシステム管理プログラム３１２（ファイルシステム管理部）と、ファイルを、通し番号を付与した複数のパートに分割し、複数のパートをオブジェクトストレージに送信するファイル転送プログラム３３０（ファイル転送部）と、を有している。また、クラウドストレージ４００は、通信ネットワークを通じてデータを送受信するネットワークインターフェース４０３（ネットワークインターフェース部）と、ファイルを管理するファイルシステム管理プログラム４０８（ファイルシステム管理部）と、ファイルがファイルストレージにより、通し番号を付与した複数のパートに分割され、複数のパートをファイルストレージから受信するファイル転送プログラム４２０（ファイル転送部）と、を有している。【０１０９】
ファイル転送プログラム３３０は、クラウドストレージ４００に送信済みのパートがファイルシステム管理プログラム３１２により更新されると、それまでに転送されたパートを結合することにより、送信済みで更新されたパートを含む一時オブジェクトを生成するように、ネットワークインターフェース３０４を介してクラウドストレージ４００に要求する。ファイル転送プログラム３３０は、更に、送信済みで更新されたデータおよび未送信のデータが、送信済みで更新されていないデータとは異なるパートとなるように、ファイルを複数のパートに分割しなおす。このとき、更新されたデータまたは未送信のデータ区間に隣接する、予め定められた容量未満の更新されていないデータ区間を、更新されたデータおよび未送信と同じパートとして分割しなおすことにしてもよい。ファイル転送プログラム３３０は、更に、送信済みで更新されたデータまたは未送信のデータを含むパートをクラウドストレージ４００に送信する。【０１１０】
一方、クラウドストレージ４００のファイル転送プログラム４２０は、ＮＡＳ３００から受信したパートがＮＡＳ３００にて更新されると、送信済みで更新されたパートを含む一時オブジェクトを作成するように、ＮＡＳ３００からネットワークインターフェース４０３を介して要求を受信する。ファイル転送プログラム４２０は、ＮＡＳ３００からの指示で一時オブジェクトを作成する。更に、ファイル転送プログラム４２０は、ＮＡＳ３００にて、送信済みで更新されたデータのパートおよび未送信のデータのパートが、送信済みで更新されていないデータのパートと異なるパートとなるように、一時オブジェクトが通し番号を付加した複数のパートに分割しなおされたうち、送信済みで更新されたデータまたは未送信のデータを含むパートをＮＡＳ３００から受信する。【０１１１】
このように実施例１によれば、ファイルをパート分割して転送するストレージシステムにおいて、クラウドストレージ４００に送信したパートが更新されると、更新されたパートを含む複数のパートを結合して一時オブジェクトを生成し、送信済みで更新されたデータと未送信のデータとが転送済みで更新されていないデータと異なるパートとなるようにファイルを分割しなおして、更新されたデータのパートと未送信のデータのパートだけを再送するので、転送済みの大きなパートが更新された場合に効率よくデータを再送することができる。【０１１２】
なお、ＮＡＳ３００のファイル転送プログラム３３０は、クラウドストレージ４００に送信したパートがファイルシステム管理プログラム３１２により更新されると、更新されたパートを含む、それまでに転送された複数のパートを結合して一時オブジェクトを作成するようにクラウドストレージ４００に要求する。クラウドストレージ４００のファイル転送プログラム４２０は要求に従って一時オブジェクトを作成する。【０１１３】
また、より具体的には、ＮＡＳ３００のファイル転送プログラム３３０は、ファイルを、通し番号を付与した複数のパートに分割し、複数のパートをクラウドストレージ４００に送信し、クラウドストレージ４００に複数のパートを通し番号に従って結合するように要求する。さらに、ファイル転送プログラム３３０は、クラウドストレージ４００に送信したパートがファイルシステム管理プログラム３１２により更新されると、更新されたパートを含む一時オブジェクトを生成するようにクラウドストレージ４００に要求する。クラウドストレージ４００のファイル転送プログラム４２０は、この要求に応じて一時オブジェクトを作成する。また、ＮＡＳ３００のファイル転送プログラム３３０は、転送済みで更新されたデータのパートおよび未送信のデータのパートが、転送済みで更新されていないデータのパートと異なるパートとなるように、ファイルを通し番号を付加した複数のパートに分割しなおし、転送済みで更新されたデータのパートおよび未送信のデータのパートをクラウドストレージ４００に送信する。クラウドストレージ４００のファイル転送プログラム４２０は、それら転送済みで更新されたデータのパートおよび未送信のデータのパートを受信する。そして、ＮＡＳ３００のファイル転送プログラム３３０は、転送済みで更新されていないデータのパートを一時オブジェクトから複製するようにクラウドストレージ４００に要求し、転送済みで更新されたデータのパートおよび未送信のデータのパートと転送済みで更新されていないデータのパートを通し番号に従って結合するようにクラウドストレージ４００に要求する。クラウドストレージ４００のファイル転送プログラム４２０は、要求に応じて、転送済みの更新されたデータのパートおよび未送信のデータのパートと転送済みで更新されていないデータのパートを通し番号に従って結合しファイルのオブジェクトを作成する。このように、本実施例では、新たにパート分割が再構成されたファイルを通し番号を付したパートに分割し、またオブジェクトストレージにて組み立てるので、再構成のファイルを効率よくかつ確実に作成することができる。【０１１４】
また、本実施例において、より具体的には、ＮＡＳ３００のファイル転送プログラム３３０は、転送済みで更新されたデータと転送済みで更新されていないデータと未送信のデータとがそれぞれ異なるパートとなるように、一時オブジェクトを通し番号を付加した複数のパートに分割しなおし、更新されたデータの第１パートと未送信のデータの第２パートとをクラウドストレージ４００に送信し、更新されていないデータの第３パートを一時オブジェクトから複製するように要求し、第１パート、第２パート、および第３パートを通し番号に従って結合するように要求する。クラウドストレージ４００のファイル転送プログラム４２０は、第１パートと第２パートとを受信し、第３パートを一時オブジェクトから複製し、第１パート、第２パート、および第３パートを通し番号に従って結合する。更新されたデータと、未送信のデータと、更新されていないデータをそれぞれ異なるパートにし、更新されたデータと未送信のデータだけをクラウドストレージ４００に送り、クラウドストレージ４００にて、更新されていないデータのパートと結合するので、再構成のファイルを効率よくかつ確実に作成することができる。【０１１５】
以下、本実施例の計算機システムの処理について詳細に説明する。【０１１６】
図５は、実施例１における差分アップロード処理のフローチャートである。Ｓ５００はアップロード開始のステップであり、ＮＡＳ３００内でマイグレーションプログラム３０９が呼び出される。【０１１７】
Ｓ５０１はスナップショット取得のステップであり、スナップショットプログラム３１０がファイルシステム３１８の本処理時点のファイルシステムのデータの状態を保存し、スナップショット３２３を作成する処理である。【０１１８】
次のＳ５０２で開始されＳ５１７で抜けるループ処理は、図５の差分アップロード処理を前回実行した以降に更新された各ファイルをひとつずつに対して順次実行する処理である。ここでファイルの更新は、ファイルの新規作成、ファイルのデータの更新、ファイルへのデータの追加、ファイルの属性の更新、ファイルの属性の追加、ファイル名の変更、ファイルのパスの変更、ファイルのパスの削除などを含む。更新されたファイルのうち、ループ処理の対象として選ばれているファイルを処理対象ファイルと呼ぶことにする。【０１１９】
Ｓ５０２は差分抽出処理のステップであり、差分抽出プログラム６００が、Ｓ５０１で取得したスナップショットと前回に差分アップロード処理で取得したスナップショットとの差分を抽出し、抽出した差分から、処理対象ファイルの差分を抽出する処理である。スナップショット間の差分から処理対象ファイルの差分を抽出する処理では、抽出したスナップショット間の差分のデータのうち処理対象ファイルの差分の部分に関するファイル情報を取得し、ファイル情報からファイル内の更新位置情報を取得する。ファイル情報として、例えば、ファイルへの記憶領域の割り当てを定めたファイル割り当て情報を利用できる。【０１２０】
Ｓ５０４はファイル分割処理のステップであり、処理対象ファイルの差分を示す差分情報に基づいて、ファイル３２０を複数のパートに分割する処理である。ファイル３２０の処理対象ファイルの差分情報に基づいて、更新されたデータ部分と更新されていないデータ部分とが別のパートとなる様にファイルを複数のパートに分割する。ここでは、パートのサイズに任意の上限を設けて、ファイル内の大きいサイズの連続した部分が更新されている場合、その更新された部分が複数のパートとなるようにパート分割を定めるものとする。例えば、パートの上限サイズが２０ＭＢであるとすると、更新された連続した部分のサイズが１１５ＭＢであった場合、その連続する更新部分は、サイズが２０ＭＢのパートと、サイズが２０ＭＢのパートと、サイズが２０ＭＢのパートと、サイズが２０ＭＢのパートと、サイズが２０ＭＢのパートと、サイズが１５ＭＢのパートという６つのパートに分割される。【０１２１】
上述した様にファイルを複数のパートに分割することで、通信ネットワーク上の問題で、いずれかのパートを転送している途中に通信エラーが生じても、再送に必要となるのは所定の上限サイズまでに抑えられる。また、その上限サイズをある一定以上大きくすれば通信ネットワークの転送効率を向上することが出来る。【０１２２】
また、連続する更新されていない部分のサイズが大きければ、クラウドストレージ４００にて予め定められた上限サイズで、その部分を複数のパートに分割する。例えば、上限サイズが５ＧＢであったとして、６ＧＢの連続する未更新の部分は、５ＧＢのパートと１ＧＢのパートの２つに分割される。この様に分割することで、クラウドストレージ４００は、その設計段階で、パートサイズの上限が分かるので、パート管理情報８００で格納するパートのデータサイズやディスク格納位置情報等の情報サイズが分かり、設計が簡便となる。【０１２３】
Ｓ５０５は開始要求を出す処理のステップであり、ＮＡＳ３００からクラウドストレージ４００にＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのセッション開始要求を送る。このとき、ＮＡＳ３００は、最終的に差分アップロード完了時に処理対象ファイルがクラウドストレージ４００に格納されるときに処理対象ファイルに付与されるオブジェクト名とは別の名前が一時オブジェクトに付与される。クラウドストレージ４００は、開始要求を受信すると、その応答としてセッションＩＤを返送する。【０１２４】
Ｓ５０６で開始されＳ５１２、Ｓ５１０、またはＳ５１１で抜けるループ処理は、Ｓ５０４で処理対象ファイルを分割して作成されたパートを１つずつ処理していく処理である。以下、ループ処理の対象となっているパートを処理対象パートと呼ぶことにする。【０１２５】
Ｓ５０６は処理対象パートが更新部分のパートか未更新部分のパートかを判定する処理のステップであり、処理対象パートが更新部分のパートである場合はＳ５０７に進む。そうではない場合はＳ５０８に進む。【０１２６】
Ｓ５０７はパート転送処理のステップであり、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩのパートアップロードを用いて、処理対象パートをクラウドストレージ４００にアップロードする。Ｓ５０７では、マイグレーションプログラム３０９がパートのデータを、Ｓ５０１にて取得したスナップショット３２３から読出し、ネットワークＩ／Ｆ３０４を介して、クラウドストレージ４００に転送する。転送では、転送要求の際にセッションＩＤをＮＡＳ３００からクラウドストレージ４００に送付して、アップロードされたパートはセッションＩＤのＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄセッションのパートとしてクラウドストレージ４００に格納される。このとき、ＮＡＳ３００からクラウドストレージ４００へは、セッションＩＤ、パート番号、おｙびパートデータが送信され、クラウドストレージ４００からＮＡＳ３００へはＥＴＡＧが返送される。【０１２７】
Ｓ５０８はパートコピーを要求する処理のステップであり、ＮＡＳ３００からクラウドストレージ４００に、クラウドストレージ４００に前回の差分アップロード処理でアップロードされたオブジェクトからその一部のデータをコピーすることにより、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄセッションのパートを生成することを要求する処理である。パートコピー要求処理では、ＮＡＳ３００からクラウドストレージ４００にセッションＩＤ、パート番号、コピー元の情報、およびコピー範囲の情報を送信し、クラウドストレージ４００からＮＡＳ３００へはＥＴＡＧを返送する。【０１２８】
Ｓ５０９は差分アップロード処理が時間切れとなっていないか判断する処理のステップであり、差分アップロード処理の開始からの経過時間が所定の上限時間が経過しているか否か判定する処理である。経過時間が上限時間を超えていたらＳ５１２へ進み、超えていなければＳ５１０へ進む。【０１２９】
Ｓ５１０はアップロード中にファイルが更新されたか否かを判断する処理のステップであり、アップロード中に処理対象ファイルが更新されていたらＳ５１６へ進む。更新されていない場合はＳ５１１へ進む。【０１３０】
Ｓ５１１は残りのパートがあるか判断する処理のステップであり、処理対象ファイルの転送あるいかコピーの要求の処理がされていないパートが残っているか否かを確認し、残りのパートがある場合はＳ５０６へ進み、残りのパートが無い場合はＳ５１３へ進む。【０１３１】
Ｓ５１２、Ｓ５１３、Ｓ５１６は結合を要求する処理のステップであり、ＮＡＳ３００からクラウドストレージ４００に、パート転送Ｓ５０７またはパートコピー要求Ｓ５０８によりクラウドストレージ４００内にて取得されたパートを結合することを要求する。この要求では、ＮＡＳ３００からクラウドストレージ４００に、セッションＩＤと、処理対象ファイルのＳ５０７およびＳ５０８にて処理された全てのパートのパート番号とＥＴＡＧの組の情報とを転送する。また、ディスクに記憶されている処理対象ファイルの差分情報の内、処理済みの部分を未更新部分と書き換える。パートの結合によりクラウドストレージ４００内に別名のオブジェクトが作成される。【０１３２】
Ｓ５１２にて時間切れとなった場合は、その時刻までの処理で作成された一時オブジェクトがクラウドストレージ４００に残る。そのため、次回、差分アップロード処理の機会におけるパートコピー要求５０８では、未更新部分のパートは一時オブジェクトからコピーを行うことになる。【０１３３】
また、Ｓ５１０にてファイル更新が発生した場合、Ｓ５１６にて、それまでに転送したパートを結合して一時オブジェクトを作成する。これにより、Ｓ５０４で決定したパートのサイズを、ファイル内の更新された部分について再びＳ５０２から処理をやり直すことができる。Ｓ５１６で一時オブジェクトが作成されることで、Ｓ５０４で構成された各パートのサイズを、ファイル内の更新された部分に応じて変更することが出来る。つまり、Ｓ５１６を経てＳ５０４に至った際に処理対象ファイルはパート分割が再構成される。【０１３４】
もしも仮に、Ｓ５１６の処理を行わなかった場合は、既に処理済みのパートはサイズの変更が出来ず、処理済みのパートに対して、アップロード中に更新された場合は、更新された部分がパートの一部であったとしても、そのパートのデータの全てを、ＮＡＳ３００からクラウドストレージ４００に再送しなければならず、転送するデータ量が増えてしまう。【０１３５】
ファイル更新された部分に応じたパートサイズの変更の詳細は後述する。【０１３６】
Ｓ５１４はオブジェクトのコピー処理のステップであり、差分のアップロードが完了したときに、別名のオブジェクト（一時オブジェクト）から、本名を付与する正規のオブジェクトに、オブジェクトのデータをコピーする。コピー処理はＮＡＳ３００からクラウドストレージ４００にオブジェクトのコピー要求を出すことで開始される。クラウドストレージ４００は、コピーするデータの上限サイズを予め設定しておき、コピーするオブジェクトのサイズが上限サイズを超える場合、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩを用いてオブジェクトをコピーすることにしても良い。【０１３７】
Ｓ５１５は残りファイルの有無を確認する処理のステップであり、前回の差分アップロード処理の後で更新されたファイルの内、Ｓ５１４により、ＮＡＳ３００上のデータをクラウドストレージ４００に本名のオブジェクトとしての転送に成功していないファイルが残っているか否か確認する。残っている場合はＳ５０２へ進み、残っている他のファイルを処理対象ファイルとする。残っていない場合は、差分アップロード処理を完了する。【０１３８】
Ｓ５１７はアップロード完了の処理のステップであり、ＮＡＳ３００内のマイグレーションプログラム３０９が処理を終了する。Ｓ５１７のアップロード完了は、Ｓ５０９で時間切れと判定されたため、差分のアップロードを中断してマイグレーションプログラム３０９を終了する場合も含む。【０１３９】
尚、ここでの説明では、図５に示したＳ５０２〜Ｓ５１４のステップをファイル一つずつ処理しているが、複数のファイルを並列に処理しても良い。また、Ｓ５０６〜Ｓ５０８は、複数のパートを一つずつ処理しているが、複数パートを並列に処理しても良い。【０１４０】
図６は、実施例１におけるファイルのパート分割の一例を示す図である。一例として、ファイルの転送開始時と、転送中の更新発生時と、パート再構成時の３つの時点でのパート構成と、更新の発生箇所の関係を示す。図６の（Ａ）では、転送開始時のパート構成として、ファイル３２０をあらかじめ定められたサイズを上限として複数のパートに区切り、パート６０１〜６０５が作成されている。パート６０１〜６０５は、転送開始時点では、クラウドストレージ４００上にはない、クライアントＰＣによって書き込まれた更新データである。【０１４１】
予め定められたサイズは、例えば５０ＭＢとし、実際にはＮＡＳ３００とクラウドストレージ４００間で転送する際に、転送効率が十分に高くなる最低限のサイズとする。予め定められたサイズはできる限り小さい方が、転送中の転送エラー等で再送する際のデータサイズを小さくすることが出来る。【０１４２】
一方で、予め定められたサイズは、大きくすると転送効率が高くなる場合があるが、一定上大きくしても、転送効率は飽和して変化しなくなる。例えば、予め定められたサイズが５ＭＢと５０ＭＢでは、転送効率がそれぞれ、５０％と９０％と変化する場合がある。また、例えば、予め定められたサイズが１００ＭＢでは、転送効率が９０％で、該サイズが５０ＭＢの転送効率と変わらない場合がある。【０１４３】
以上の通り、予め定められたサイズを定めることで、転送効率を最大限にしつつ、再送の際のデータサイズを最小限にすることが出来る。【０１４４】
予め定められたサイズは、クライアントによって、任意のサイズに変更できる様にしても良い。このように変更できる様にすることで、ＮＡＳ３００とクラウドストレージ４００間の通信ネットワークのＬＡＮ２０２やＷＡＮ２０３の転送性能や特性に応じて、最適化することが出来る。通信ネットワークの応答遅延が短ければ、遅延が長い場合と比べ、予め定められたサイズが小さくとも転送効率が高い場合がある。最適化というのは、通信ネットワークの転送性能や特性に応じて、予め定められたサイズを変更することを意図する。【０１４５】
尚、図６の例においては、転送中の更新が発生した際に、パート６０１〜パート６０３まで、ＮＡＳ３００からクラウドストレージ４００に転送が完了していたとする。【０１４６】
図６の（Ｂ）では、ファイルの転送中にファイルのデータの更新が発生した場合の更新箇所の例が示されている。本例では、更新箇所６０６がパート６０１の先頭にあり、更新箇所６０７がパート６０３の中ほどにある。図６の（Ｃ）には、ファイルのパート分割を再構成した後のパート分割が示されている。更新箇所６０６、６０７は、このパート分割の再構成により、それぞれパート６０８、６１０となっている。【０１４７】
パート６０８とパート６１０は既にクラウドストレージ４００に転送済みのパートの一部であり、ファイルの転送中にデータが更新された箇所である。パート６０８およびパート６１０はＮＡＳ３００からクラウドストレージ４００に転送すべき転送パートとなる。【０１４８】
パート６０８とパート６１０に挟まれた箇所はパート６０９となっている。パート６０９は、パート６０１〜６０３のうち転送中にデータが更新されなかった箇所であり、上述のようにパート６０１〜６０３はクラウドストレージ４００に転送済みなので、パート６０９のデータもクラウドストレージ４００上に既に格納されている。したがって、パート６０９はクラウドストレージ４００内の一時オブジェクトからコピーするコピーパートとなる。【０１４９】
（Ａ）の転送開始時にパート６０３だった箇所の内、更新箇所６０７よりも後ろの箇所はパート６１１となる。パート６１１はパート６０９と同様にコピーパートとなる。また、パート６０４だった箇所とパート６０５だった箇所はそれぞれパート６１２とパート６１３となる。パート６１２とパート６１３は、クラウドストレージ４００に未だ転送されていないデータなので、ＮＡＳ３００からクラウドストレージ４００に転送すべき転送パートとなる。【０１５０】
以上の様に、転送中に更新された箇所と、転送済みで更新されていない箇所、未転送の箇所をそれぞれ別のパートとなる様にパート分割を再構成する。本実施例のようにパートの再構成をしなければ、パート６０１とパート６０３の全データを再度転送しなければならないが、本実施例によれば、パート分割を再構成することによって、ＮＡＳ３００からクラウドストレージ４００に転送する転送データのサイズを削減することができる。【０１５１】
図７は、実施例１におけるファイルのパート分割の他の例を示す図である。図７の例は、クラウドストレージ４００においてＭｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのパートの最小サイズが規定されている場合のデータの更新に対するパート分割の再構成の例である。図７には、図６の（Ａ）に示したファイルのパート１およびその近傍部分が示されている。【０１５２】
図７の例では、パート６０１にその先頭から３．５ＭＢの範囲が変更箇所７０１となっている。【０１５３】
ここでは、上述したように、クラウドストレージ４００には、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄのパートの最小サイズが５ＭＢという制限があるとする。そのため、パート分割の再構成においてファイルの先頭から５ＭＢの範囲が最小サイズの１つのパート７０２となっている。パート７０２の後ろにはパート７０３が形成されている。【０１５４】
また、ここでは、データの更新が発生までにパート７０３の範囲までクラウドストレージ４００に転送済みであったとする。【０１５５】
パート７０２は、更新箇所を含むパートなので、ＮＡＳ３００からクラウドストレージ４００に転送をすべき転送パートとなる。一方、パート７０３はクラウドストレージ４００内の一時オブジェクトからコピーすべきコピーパートとなる。【０１５６】
以上、本実施例では、パートの最小サイズ未満の更新箇所については、その更新箇所を含むパートがその最小サイズとなる様に、更新されていない箇所をも含んだパートが形成される。そのパートが転送パートとなる。これにより、クラウドストレージ４００にて予め定められたパートの最小サイズの制限を満たしつつ、転送するデータ量を最小限に抑制することができる。パートの最小サイズの条件は、パートの個数が増えすぎるのを抑制するために設定することができる。また、パートの最小サイズは、Ｍｕｌｔｉｐａｒｔ  ＵｐｌｏａｄのＡＰＩをクラウドストレージ４００がサポートする場合、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄセッションが開かれている間に一時的に記憶するパートの個数を減らし、データ管理を容易にすることができる。【０１５７】
本実施例における一時オブジェクトについて説明する。一時オブジェクトは図５に示した差分アップロード処理により形成される。一時オブジェクトには、ＮＡＳ３００が再生のためにクラウドストレージ４００から読み出す正規のオブジェクトのオブジェクト名（本名）とは異なるオブジェクト名（別名）が付与される。【０１５８】
再生について説明する。ＮＡＳ３００上でファイルのデータが破損する場合がある。また、ＮＡＳ３００の記憶装置３２２における空き容量を増やすために、ファイルのデータを削除して、そのファイルをスタブファイル化する場合がある。これらの場合にはＮＡＳ３００上にファイルのデータが存在しないので、クライアントＰＣ２０１からファイルの読み込み要求があると、ＮＡＳ３００はクラウドストレージ４００にあるオブジェクトからデータを再生する。【０１５９】
ファイルのデータをクラウドストレージ４００にアップロードしたとき、ＮＡＳ３００はファイル毎にクラウドストレージ４００におけるオブジェクト名を記憶しておく。そして、ファイルのデータを再生するとき、ＮＡＳ３００は、予め記憶しておいたオブジェクト名を指定してクラウドストレージ４００に再生要求を出す。これにより、所望のオブジェクトのデータがクラウドストレージ４００からＮＡＳ３００に転送される。【０１６０】
なお、本実施例では、上述の通りＮＡＳ３００にてオブジェクト名を記憶するものとしたが、これに限定されることはない。他の例として、一時オブジェクトには、一時オブジェクトであることが判別可能な所定の名称を付与することにしてもよい。例えば、一時オブジェクトのオブジェクト名の命名規則として、オブジェクト名がファイル名から一意に定まり、そのオブジェクト名が一時オブジェクトを指すことが分かるようにしておいてもよい。そうすることで、クラウドストレージ４００においてオブジェクトに付与されるオブジェクト名をＮＡＳ３００が記憶しなくても良い。【０１６１】
例えば、ファイルのフルパス名をオブジェクト名にしたり、ファイルのｉ−ｎｏｄｅ番号をオブジェクト名に付加したりすることが考えられる。上述の様に、ＮＡＳ３００にオブジェクト名を保持しなくてよいので、ＮＡＳ３００に記憶する情報を削減し、記憶容量を有効に利用することが可能となる。なお、上述のような命名規則でオブジェクト名を定めることにすると、フルパスやｉ−ｎｏｄｅ番号が変わったときに、クラウドストレージ４００上のオブジェクト名を変更することになる。【０１６２】
また、本実施例では、図１に示した拠点Ｘと拠点Ｙの様に、複数拠点から同じクラウドストレージ４００に接続する構成では、クラウドストレージ４００に格納されたファイルはいずれの拠点のＮＡＳ３００からも再生が可能となる。例えば、拠点ＸのＮＡＳ３００Ｘがクラウドストレージ４００に格納したファイルを、拠点ＹのＮＡＳ３００Ｙから再生することができる。【０１６３】
拠点ＸのＮＡＳ３００Ｘは、他の拠点ＹのＮＡＳ３００Ｙがクラウドストレージ４００に格納したファイルのオブジェクトを再生できるようにするために、ＮＡＳ３００Ｘは、クラウドストレージ４００に格納されたファイルの一覧と、各ファイルに相当するクラウドストレージ４００上のオブジェクト名とファイル名とを対応づけてリスト化したテーブルとを、一覧オブジェクトとして、所定のオブジェクト名を付与して、クラウドストレージ４００に格納する。他の拠点ＹのＮＡＳ３００Ｙは、オブジェクト名を頼りに、クラウドストレージ４００から一覧オブジェクトを読みだすことができる。ＮＡＳ３００Ｙは、一覧オブジェクトを参照し、一覧オブジェクトのファイル一覧に記載されたファイルを自身に生成し、そのファイルに相当するオブジェクトをクラウドストレージ４００から読み出して、生成したファイルに書き込む。これにより、ＮＡＳ３００Ｙは、ＮＡＳ３００Ｘがクラウドストレージ４００に格納したファイルを再生することができる。【０１６４】
なお、このときＮＡＳ３００Ｘは、一覧オブジェクトに一時オブジェクトの情報は掲載しない。また、一時オブジェクトを格納したＮＡＳ３００は、その一時オブジェクト名を記憶するとき、一時オブジェクトであることが分かるようにして記憶する。例えば、一時オブジェクトは、アップロード完了後の本名オブジェクトとは異なるリストに記録することにしてもよい。そして、一時オブジェクトのデータは、クライアントＰＣ２０１がアクセスできるファイルのデータとして、クラウドストレージ４００からＮＡＳ３００に再生することはしない。一時オブジェクトは、クライアントＰＣ２０１が書き込んだデータとは異なるデータであり、他のクライアンドＰＣからアクセスできる必要のない内部的なデータである。一時オブジェクトのデータがその一時オブジェクトを格納したＮＡＳ３００と異なるＮＡＳ３００からアクセスできてしまうと、クライアントＰＣ２０１が必要のないデータを読みだしてしまう恐れがあるので、本実施例では、ある拠点のクライアントＰＣが格納した一時オブジェクトは他のクライアンドＰＣからアクセスできないようにしている。【０１６５】
また、本実施例では一時オブジェクトに正規のオブジェクト（本名オブジェクト）とは異なるオブジェクト名を付与することとしたが、これに限定されることはない。他の例として、一時オブジェクトに正規のオブジェクトと同じオブジェクト名を付与し、正規オブジェクトと区別できるバージョンを付与することにしてもよい。その場合、一時オブジェクトに正規のオブジェクトと同じファイル名を付与したとしても、クライアントＰＣ２０１が一時オブジェクトを誤って読みだしてしまうことを防止することを可能にする処理を加えても良い。例えば、一時オブジェクトのメタデータに、一時オブジェクトであることを示すフラグ情報（識別情報）を書き込んでおけばよい。ＮＡＳ３００は、クラウドストレージ４００からデータを再生するとき、まずそのフラグを読出し、一時オブジェクトでないことを確認してから、データを読みだすことにすればよい。
【実施例２】
【０１６６】
実施例２は実施例１と後述する点において異なる。実施例２に関して特に説明をしない点は、実施例１と同じである。【０１６７】
図８は、実施例２の計算機システムの概略構成を示すブロック図である。データセンタＡとデータセンタＢがあり、それらがＷＡＮ２０３を介して接続されている。実際にはデータセンタは２つではなく、３つ以上であってもよい。データセンタとＷＡＮ２０３はＬＡＮ２０２を介して接続されている。各データセンタ内では、クライアント８０１がＬＡＮ２０２を介してクラウドストレージ９００に接続されている。【０１６８】
データセンタの外にはもクライアント８０１が接続されていて、ＷＡＮ２０３に接続されている。データセンタの外のクライアント８０１Ｗは、ＷＡＮ２０３に直接接続されていても良いし、クライアント８０１ＷとＷＡＮ２０３の間にＬＡＮ２０２を介して接続されても良い。【０１６９】
クライアント８０１は、ＷＡＮ２０３やＬＡＮ２０２等の通信ネットワークに接続されている。クライアント８０１は、クラウドストレージ接続プログラムを内蔵する。クラウドストレージ接続プログラムは、クライアント内に記憶されたデータをクラウドストレージ９００に記録する。また、クラウドストレージ接続プログラムは、クラウドストレージ９００に格納されているオブジェクトのデータを再生する。クラウドストレージ接続プログラムは、クラウドストレージに９００に対して、ＨＴＴＰを用いるＲＥＳＴインターフェースでデータの記録や再生を行う。【０１７０】
クライアント８０１は、クラウドストレージ接続プログラムが動作する情報処理装置であれば、実体のあるものであっても仮想的なものであってもよく、特定の機器に限定されない。例えば、クライアント８０１は仮想マシンである。その仮想マシン上でＰＣ（パーソナルコンピュータ）やサーバ用のＯＳが動作している。また、クライアント８０１は例えばスマートフォン、ＰＣ、サーバ、タブレット端末、その他の通信ネットワークに接続される実体のある情報処理機器でも良い。【０１７１】
クラウドストレージ９００は、データセンタに配置され、クライアント８０１から通信ネットワーク経由でアクセス可能であり、クライアント８０１のデータを保管するストレージである。クラウドストレージ９００は、他のデータセンタにある他のクラウドストレージ９００にデータを転送し、自身が格納しているオブジェクト、オブジェクトの一部のデータ、あるいはメタデータ等を、他のクラウドストレージ９００に複製したり、他のクラウドストレージ９００に移動したりする。以下、複製をレプリケーションとも呼び、移動をマイグレーションとも呼ぶ。【０１７２】
レプリケーションは、クラウドストレージ９００が自身に格納されているデータを他のクラウドストレージ９００に転送し、格納させることである。マイグレーションは、クラウドストレージ９００がデータを他のクラウドストレージ９００に転送した後に自身の格納しているデータを削除する点でレプリケーションと異なる。【０１７３】
クラウドストレージ９００は、オブジェクト単位でデータを管理し、クライアント８０１からオブジェクトの一部あるいは全部を記録する要求、あるいはオブジェクトの一部あるいは全部を再生する要求を受け付ける。また、クラウドストレージ９００は、他のクラウドストレージ９００に対するオブジェクトの一部あるいは全部の記録あるいは再生も受け付ける。オブジェクトの一部を記録するとき、クラウドストレージ９００は、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄ  ＡＰＩを用いる。【０１７４】
図９は、クラウドストレージ９００の構成を示すブロック図である。クラウドストレージ９００は実施例１のクラウドストレージ４００と似通った構成である。しかし、クラウドストレージ９００は、クラウドストレージ４００が有しない、クラウドストレージコントローラ９０１、メモリ９０２、レプリカ状態情報９０３、およびレプリカ制御プログラム９０４を有している。一方で、クラウドストレージ９００は、クラウドストレージ４００が有するクラウドストレージ４０１およびメモリ４０６を有しない。【０１７５】
クラウドストレージコントローラ９０１は、実施例１のクラウドストレージコントローラ４０１とは、メモリ９０２にレプリカ状態情報９０３およびレプリカ制御プログラム９０４を含む点において異なる。レプリカ状態情報９０３は、オブジェクトのレプリカの状態を管理する情報である。【０１７６】
図１０は、レプリカ状態情報のテーブルの一例を示す図である。レプリカ状態情報９０３には、オブジェクトに関する、オブジェクト名、オフセット、サイズ、状態、および一時オブジェクト名の情報が記録される。レプリカ状態情報のオブジェクトに関する各種情報は、レプリカ状態情報のテーブルにオブジェクトの状態毎に記録される。【０１７７】
図１０の例では、クラウドストレージ９００にabc-efgというオブジェクト名のオブジェクトが格納されている。このオブジェクトのオフセット0からサイズ３３５５４４３２だけの範囲にあたる箇所は、そのデータが他のクラウドストレージ９００に転送されていない。したがって、レプリカの状態は、レプリケーションが未だ完了していないことを示す「未」である。また、オブジェクトのオフセット３３５５４４３２からサイズ１３４２１７７２８だけの範囲にある箇所は、そのデータが他のクラウドストレージに転送済みである。したがって、レプリカの状態は、レプリケーション済みを示す「済」である。【０１７８】
また、オブジェクトのオフセット１６７７７２１６０からサイズ１６７７７２１６だけの範囲にある箇所は、レプリカの状態が「未」であるが、データは他のクラウドストレージ９００に転送されている。転送されたデータは、一時オブジェクトｔｍｐ−Ａ−ａｂｃ−ｅｆｇに含まれている。【０１７９】
レプリカ状態情報９０３には、クラウドストレージ９００に格納されている全てのオブジェクトのデータの状態が記録されている。また、オブジェクトがクライアント８０１あるいは他のクラウドストレージ９００によって更新されると、レプリカ状態情報９０３における、更新された箇所の状態は、未だ完了していないことを示す「未」に更新される。【０１８０】
レプリカ制御プログラム９０４は、クライアント８０１あるいは他のクラウドストレージ９００からオブジェクトが更新されたことに応じてレプリカ状態情報９０３を書き換える。また、レプリカ制御プログラム９０４は、レプリカの状態に応じて、他のクラウドストレージ９００に対してレプリケーションあるいはマイグレーションを行う。【０１８１】
レプリカ制御プログラム９０４は、他のクラウドストレージ９００にレプリケーションあるいはマイグレーションを一切していない時点では、レプリカ状態情報９０３における全てのオブジェクトの状態を「未」とする。【０１８２】
また、レプリカ制御プログラム９０４は、まずファイル転送プログラムとして、他のクラウドストレージ９００に一時オブジェクトとしてデータを転送する。そして、一時オブジェクトへの転送が完了したら、レプリカ制御プログラム９０４は、一時オブジェクトを本名のオブジェクトにコピーする。本名のオブジェクトへのコピーまで完了し、レプリケーションやマイグレーションが完了したら、当該のオブジェクトの箇所の状態を、レプリケーション済みとする。【０１８３】
コピー前にオブジェクトが更新されると、Ｍｕｌｔｉｐａｒｔ  Ｕｐｌｏａｄセッションを閉じて一時オブジェクトを完成させ、レプリカ状態情報９０３の一時オブジェクト欄に一時オブジェクトのオブジェクト名を記録する。レプリケーションを行う場合、レプリカ制御プログラム９０４は、一時オブジェクトから他のクラウドストレージ９００へコピーするように要求する。クラウドストレージ９００間のデータの転送は行わない。また、オブジェクトのある箇所の一時オブジェクト欄にオブジェクト名があり、オブジェクトの当該箇所に更新が入った場合、レプリカ制御プログラム９０４は一時オブジェクトの欄を削除する。【０１８４】
図１１は、実施例２のレプリケーションおよびマイグレーションにおけるファイル転送処理を示すフローチャートである。Ｓ１００１はレプリカ情報を更新する処理であり、レプリカ制御プログラム９０４は、クライアント８０１あるいは他のクラウドストレージ９００からオブジェクトが更新されたことに応じて、レプリカ状態情報９０３のオブジェクトの更新された箇所の状態をレプリケーション未完了に変更する。【０１８５】
また、Ｓ１００１では、レプリカ制御プログラム９０４は、Ｓ５１６で生成された一時オブジェクトのオブジェクト名を、一時オブジェクトとして格納されたオブジェクトの更新箇所に関するレプリカ状態情報９０３の一時オブジェクト欄に記録する。【０１８６】
Ｓ１００２はオブジェクトの分割処理のステップである。レプリカ制御プログラム９０４は、クラウドストレージ９００に格納されたオブジェクトのうち処理対象となっているオブジェクトを、レプリカ状態情報９０３に記録されている状態と一時オブジェクトの欄に応じて、複数のパートに分割する。【０１８７】
Ｓ１００２では、レプリカ制御プログラム９０４は、レプリカ状態情報９０３において、状態が未であり一時オブジェクト欄が空欄である箇所、状態が未であり一時オブジェクト欄にオブジェクト名がある箇所、状態が済の箇所が、互いに異なるパートとなる様にオブジェクトを複数のパートに分割する。上述した以外のＳ１００２の処理は、Ｓ５０４と同様である。状態が未であり一時オブジェクト欄が空欄である箇所は、転送されていないパートである。状態が未であり一時オブジェクト欄にオブジェクト名がある箇所は、転送済みだが更新されたパートである。状態が済の箇所は、転送済みで更新されていないパートである。【０１８８】
Ｓ１００３では、レプリカ制御プログラム９０４は、レプリカ状態情報９０３の一時オブジェクト欄に一時オブジェクトのオブジェクト名が記載されているか否か判定する。一時オブジェクトのオブジェクト名が記載されているというのは、レプリケーションまたはマイグレーションにおいて一時オブジェクトから正規のオブジェクトへのコピーがされる前にオブジェクトの当該箇所が更新されたということである。【０１８９】
オブジェクトが更新されていたら、レプリカ制御プログラム９０４は、Ｓ５０７に進み、更新されたパートを他のデータセンタのクラウドストレージ９００に転送する。また、オブジェクトが更新されていなければ、レプリカ制御プログラム９０４は、Ｓ５０８に進み、転送済みのパートをコピーするように他のデータセンタのクラウドストレージ９００に要求する。【０１９０】
以上、実施例２によれば、データセンタ間でのファイルのレプリケーションおよびマイグレーションにおいて、ファイルの転送の途中でデータが更新されたとき、更新されていない箇所のデータの転送を抑制し、効率よくデータを転送することができる。【０１９１】
以上、本発明の実施形態を説明したが、これは本発明の説明のための例示であって、本発明の範囲を上記構成に限定する趣旨ではない。本発明は、他の種々の形態でも実施する事が可能である。
【符号の説明】
【０１９２】
１０２…大ファイル、１０４…大ファイル、１０６…大ファイル、１０７…一時オブジェクト、１０８…大ファイル、２０１…クライアントＰＣ、２０２…ＬＡＮ、２０３…ＷＡＮ、３００…ＮＡＳ、３０１…ＮＡＳコントローラ、３０２…インターフェース、３０３…ＣＰＵ、３０４…ネットワークインターフェース、３０５…メモリ、３１４…ネットワークインターフェース、３１５…メモリ、３１６…ＣＰＵ、３１７…ディスク、３１８…ファイルシステム、３１９…ルートディレクトリ、３２０…ファイル、３２１…ディレクトリ、３２２…記憶装置、３２３…スナップショット、４００…クラウドストレージ、４０１…クラウドストレージコントローラ、４０２…記憶装置、４０３…ネットワークインターフェース、４０４…インターフェース、４０５…ＣＰＵ、４０６…メモリ、４０７…オブジェクト操作プログラム、４０８…ファイルシステム管理プログラム、４０９…インターフェース、４１０…メモリ、４１１…ＣＰＵ、４１２…ディスク、４１３…ファイルシステム、８０１…クライアント、９００…クラウドストレージ、９０１…クラウドストレージコントローラ、９０２…メモリ
【図１】
0006725742.tif 000002
【図２】
0006725742.tif 000003
【図３】
0006725742.tif 000004
【図４】
0006725742.tif 000005
【図５】
0006725742.tif 000006
【図６】
0006725742.tif 000007
【図７】
0006725742.tif 000008
【図８】
0006725742.tif 000009
【図９】
0006725742.tif 000010
【図１０】
0006725742.tif 000011
【図１１】
0006725742.tif 000012