(57)【特許請求の範囲】
【請求項１】
データストレージ方法であって、前記方法は、
オブジェクトストレージデバイス(OSD)によって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップとを含む、方法。
【請求項２】
クライアントサーバによって送信されたストリップ書込み要求を受信する前に、前記方法は、
前記クライアントサーバによって、前記書込み予定のストリップが属する前記ファイルまたは前記ボリュームのスナップショットを作成し、前記最新のスナップショットの前記スナップショットIDを生成するステップと、
前記最新のスナップショットの前記スナップショットIDに従って前記書込み予定のストリップの前記バージョン番号を生成するステップとをさらに含む、請求項1に記載の方法。
【請求項３】
前記方法は、
前記クライアントサーバによって、前記ファイルまたは前記ボリュームのメタデータに対して前記ファイルまたは前記ボリュームに属する前記書込み予定のストリップの前記バージョン番号を更新するステップをさらに含む、請求項2に記載の方法。
【請求項４】
前記OSDによって、ストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ファイル書込み要求を受信するステップであって、前記ファイル書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびファイル名を搬送し、前記書込み予定のデータは、前記ファイルの一部である、ステップと、
前記クライアントサーバによって、前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルの前記メタデータに対するクエリを行って前記ファイルのバージョン番号を取得し、前記ファイルの前記バージョン番号を前記書込み予定のストリップの前記バージョン番号として使用するステップであって、前記ファイルの前記バージョン番号は、前記書込み予定のストリップが属する前記ファイルの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って前記クライアントサーバによって、前記書込み予定のデータを前記書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属する前記オブジェクトの前記IDを決定し、前記書込み予定のストリップの前記オフセットを取得するステップと、
前記ストリップ書込み要求を作成するステップとをさらに含む、請求項3に記載の方法。
【請求項５】
前記OSDによって、ストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ボリューム書込み要求を受信するステップであって、前記ボリューム書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびボリュームIDを搬送し、前記書込み予定のデータは、前記ボリュームの一部である、ステップと、
前記クライアントサーバによって、前記ボリュームIDに従って前記ボリュームの前記メタデータに対するクエリを行って前記ボリュームのバージョン番号を取得し、前記ボリュームの前記バージョン番号を前記書込み予定のストリップの前記バージョン番号として使用するステップであって、前記ボリュームの前記バージョン番号は、前記書込み予定のストリップが属する前記ボリュームの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って前記クライアントサーバによって、前記書込み予定のデータを前記書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属する前記オブジェクトの前記IDを決定し、前記書込み予定のストリップの前記オフセットを取得するステップと、
前記ストリップ書込み要求を作成するステップとをさらに含む、請求項3に記載の方法。
【請求項６】
データストレージ方法であって、前記方法は、
オブジェクトストレージデバイス(OSD)によって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、
前記オブジェクトがバックアップされている場合には、前記OSDによって、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップ、または、
前記オブジェクトがバックアップされていない場合には、前記OSDによって、前記書込み予定のストリップを使用して接合オブジェクトを作成し、その後、前記接合オブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置に書き込むステップとを含む、方法。
【請求項７】
前記OSDによって、前記書込み予定のストリップを使用して接合オブジェクトを作成することは、
前記OSDによって、そのオフセットが前記書込み予定のストリップの前記オフセットとは異なるストリップを取得するために、前記書込み予定のストリップの前記オブジェクトIDのオブジェクトセットに属するバックアップされているオブジェクトから最新のスナップショット時刻を有するオブジェクトを選択し、前記書込み予定のストリップおよびそのオフセットが前記書込み予定のストリップの前記オフセットとは異なる前記ストリップを使用して前記接合オブジェクトを構成することを特に含み、
前記OSDに記憶されているとともに、そのオブジェクトIDが前記書込み予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記書込み予定のストリップの前記バージョン番号とは異なるオブジェクトのセットは、前記書込み予定のストリップの前記オブジェクトIDの前記オブジェクトセットとしてみなされる、請求項6に記載の方法。
【請求項８】
前記クライアントサーバによって送信されたストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、前記書込み予定のストリップが属する前記ファイルまたは前記ボリュームのスナップショットを作成し、前記最新のスナップショットの前記スナップショットIDを生成するステップと、
前記最新のスナップショットの前記スナップショットIDに従って前記書込み予定のストリップの前記バージョン番号を生成するステップと、
前記クライアントサーバによって、前記ファイルまたは前記ボリュームのメタデータに対して前記ファイルまたは前記ボリュームに属する前記書込み予定のストリップの前記バージョン番号を更新するステップとをさらに含む、請求項6または7に記載の方法。
【請求項９】
データ処理方法であって、前記方法は、
オブジェクトストレージデバイス(OSD)によって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、
前記ストリップがバックアップされている場合には、前記書込み予定のストリップを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップ、または、
前記ストリップがバックアップされていない場合には、前記OSD内のベースバージョンのオブジェクト内にあるとともに、そのオフセットが前記書込み予定のストリップの前記オフセットであり、そのサイズが前記書込み予定のストリップのサイズであるデータを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップの前記オブジェクトIDを使用して決定される前記記憶位置にバックアップすることであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップすることを行い、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップとを含む、方法。
【請求項１０】
前記クライアントサーバによって送信されたストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、前記書込み予定のストリップが属する前記ファイルまたは前記ボリュームのスナップショットを作成し、前記最新のスナップショットの前記スナップショットIDを生成するステップと、
前記最新のスナップショットの前記スナップショットIDに従って前記書込み予定のストリップの前記バージョン番号を生成するステップとをさらに含む、請求項9に記載の方法。
【請求項１１】
前記方法は、
前記クライアントサーバによって、前記ファイルまたは前記ボリュームのメタデータに対して前記ファイルまたは前記ボリュームに属する前記書込み予定のストリップの前記バージョン番号を更新するステップをさらに含む、請求項10に記載の方法。
【請求項１２】
前記OSDによって、ストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ファイル書込み要求を受信するステップであって、前記ファイル書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびファイル名を搬送し、前記書込み予定のデータは、前記ファイルの一部である、ステップと、
前記クライアントサーバによって、前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルの前記メタデータに対するクエリを行って前記ファイルのバージョン番号を取得し、前記ファイルの前記バージョン番号を前記書込み予定のストリップの前記バージョン番号として使用するステップであって、前記ファイルの前記バージョン番号は、前記書込み予定のストリップが属する前記ファイルの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って前記クライアントサーバによって、前記書込み予定のデータを前記書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属する前記オブジェクトの前記IDを決定し、前記書込み予定のストリップの前記オフセットを取得するステップと、
前記ストリップ書込み要求を作成するステップとをさらに含む、請求項11に記載の方法。
【請求項１３】
前記OSDによって、ストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ボリューム書込み要求を受信するステップであって、前記ボリューム書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびボリュームIDを搬送し、前記書込み予定のデータは、前記ボリュームの一部である、ステップと、
前記クライアントサーバによって、前記ボリュームIDに従って前記ボリュームの前記メタデータに対するクエリを行って前記ボリュームのバージョン番号を取得し、前記ボリュームの前記バージョン番号を前記書込み予定のストリップの前記バージョン番号として使用するステップであって、前記ボリュームの前記バージョン番号は、前記書込み予定のストリップが属する前記ボリュームの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って前記クライアントサーバによって、前記書込み予定のデータセグメントを前記書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属する前記オブジェクトの前記IDを決定し、前記書込み予定のストリップの前記オフセットを取得するステップと、
前記ストリップ書込み要求を作成するステップとをさらに含む、請求項11に記載の方法。
【請求項１４】
データ処理方法であって、前記方法は、
オブジェクトストレージデバイス(OSD)によって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、
前記オブジェクトがバックアップされている場合には、前記OSDによって、前記書込み予定のストリップを、前記オブジェクトID、前記オブジェクトのバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップ、または、
前記オブジェクトがバックアップされていない場合には、前記OSD内のベースバージョンのオブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置にバックアップすることであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップすることを行い、
前記OSDによって、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記オフセットを使用して決定される記憶位置に書き込むステップとを含む、方法。
【請求項１５】
データ読出し方法であって、前記方法は、
オブジェクトストレージデバイス(OSD)によって、クライアントサーバによって送信されたストリップ読出し要求を受信するステップであって、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、および前記読出し予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、
前記ストリップがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップ、または、
前記ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップとを含む、方法。
【請求項１６】
前記方法は、
前記OSDの書込みモードがリダイレクト・オン・ファースト・ライト(ROW)である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の降順である、または、
前記OSDの書込みモードがコピー・オン・ライト(COW)である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の昇順であることをさらに含む、請求項15に記載の方法。
【請求項１７】
前記OSDによって、クライアントサーバによって送信されたストリップ読出し要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ファイル読出し要求を受信するステップであって、前記ファイル読出し要求は、ファイル名、読出し予定のデータのサイズ、および前記読出し予定のデータのオフセットを搬送し、前記読出し予定のデータは、前記ファイルの一部である、ステップと、
前記クライアントサーバによって、前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルのメタデータに対するクエリを行って前記ファイルのバージョン番号を取得し、前記ファイルの前記バージョン番号を前記読出し予定のストリップの前記バージョン番号として使用するステップであって、前記ファイルの前記バージョン番号は、前記読出し予定のストリップが属する前記ファイルの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記読出し予定のデータの前記オフセットおよび前記読出し予定のデータの前記サイズに従って前記クライアントサーバによって、前記読出し予定のストリップが属する前記オブジェクトの前記IDを決定し、前記読出し予定のストリップの前記オフセットを取得するステップと、
前記ストリップ読出し要求を生成するステップとをさらに含む、請求項15または16に記載の方法。
【請求項１８】
前記OSDによって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップの前に、前記方法は、
前記クライアントサーバによって、ボリューム読出し要求を受信するステップであって、前記ボリューム読出し要求は、ボリュームID、読出し予定のデータのサイズ、および前記読出し予定のデータのオフセットを搬送し、前記読出し予定のデータは、前記ボリュームの一部である、ステップと、
前記クライアントサーバによって、前記ボリュームIDに従って前記ボリュームのメタデータに対するクエリを行って前記ボリュームのバージョン番号を取得し、前記ボリュームの前記バージョン番号を前記読出し予定のストリップの前記バージョン番号として使用するステップであって、前記ボリュームの前記バージョン番号は、前記読出し予定のストリップが属する前記ボリュームの前記最新のスナップショットの前記スナップショットIDに対応している、ステップと、
前記読出し予定のデータの前記オフセットおよび前記読出し予定のデータの前記サイズに従って前記クライアントサーバによって、前記読出し予定のストリップが属する前記オブジェクトの前記IDを決定し、前記読出し予定のストリップの前記オフセットを取得するステップと、
前記ストリップ読出し要求を生成するステップとをさらに含む、請求項15または16に記載の方法。
【請求項１９】
オブジェクトストレージシステムに適用される、データ読出し方法であって、前記オブジェクトストレージシステムは、オブジェクトベースストレージデバイス(OSD)と、クライアントサーバとを含み、前記方法は、
前記OSDによって、前記クライアントサーバによって送信されたストリップ読出し要求を受信するステップであって、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ステップと、
前記OSDによって、前記オブジェクトIDおよび前記読出し予定のストリップの前記バージョン番号を使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、
前記オブジェクトがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップ、または、
前記オブジェクトがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップとを含む、方法。
【請求項２０】
オブジェクトベースストレージ技術を使用するデータストレージ装置であって、前記装置は、
クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むように構成される、ストリップ記憶モジュールとを備える、装置。
【請求項２１】
オブジェクトベースストレージ技術を使用するデータストレージ装置であって、前記装置は、
クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するように構成される、ストリップ記憶モジュールとを備え、
前記オブジェクトがバックアップされている場合には、前記ストリップ記憶モジュールは、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むようにさらに構成される、または、
前記オブジェクトがバックアップされていない場合には、前記ストリップ記憶モジュールは、前記書込み予定のストリップを使用して接合オブジェクトを作成し、その後、前記接合オブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置に書き込むようにさらに構成される、装置。
【請求項２２】
前記ストリップ記憶モジュールが前記書込み予定のストリップを使用して接合オブジェクトを作成するようにさらに構成されることは、
前記ストリップ記憶モジュールが、そのオフセットが前記書込み予定のストリップの前記オフセットとは異なるストリップを取得するために、前記書込み予定のストリップの前記オブジェクトIDのオブジェクトセットに属するバックアップされているオブジェクトから最新のスナップショット時刻を有するオブジェクトを選択し、前記書込み予定のストリップおよびそのオフセットが前記書込み予定のストリップの前記オフセットとは異なる前記ストリップを使用して前記接合オブジェクトを構成するように構成されることを特に含み、
前記データストレージ装置に記憶されているとともに、そのオブジェクトIDが前記書込み予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記書込み予定のストリップの前記バージョン番号とは異なるオブジェクトのセットは、前記書込み予定のストリップの前記オブジェクトIDの前記オブジェクトセットとしてみなされる、請求項21に記載の装置。
【請求項２３】
オブジェクトベースストレージ技術を使用するデータ処理装置であって、前記装置は、
クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、
前記ストリップがバックアップされている場合には、前記書込み予定のストリップを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、または、
前記ストリップがバックアップされていない場合には、前記データ処理装置内のベースバージョンのオブジェクト内にあるとともに、そのオフセットが前記書込み予定のストリップの前記オフセットであり、そのサイズが前記書込み予定のストリップのサイズであるデータを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップの前記オブジェクトIDを使用して決定される前記記憶位置にバックアップすることであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップすることを行い、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むように構成される、ストリップ記憶モジュールとを備える、装置。
【請求項２４】
オブジェクトベースストレージ技術を使用するデータ処理装置であって、前記装置は、
クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、
前記オブジェクトがバックアップされている場合には、前記書込み予定のストリップを、前記オブジェクトID、前記オブジェクトのバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、または、
前記オブジェクトがバックアップされていない場合には、ベースバージョンのオブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置にバックアップすることであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップすることを行うように構成される、ストリップ記憶モジュールであって、
前記ストリップ記憶モジュールは、前記オブジェクトがバックアップされていない場合には、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記オフセットを使用して決定される記憶位置に書き込むようにさらに構成される、ストリップ記憶モジュールとを備える、装置。
【請求項２５】
オブジェクトベースストレージ技術を使用するデータ読出し装置であって、前記装置は、
クライアントサーバによって送信されたストリップ読出し要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、および前記読出し予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、
前記ストリップがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信する、または、
前記ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信することを行うように構成される、ストリップ読出しモジュールとを備える、装置。
【請求項２６】
前記オブジェクトの前記スナップショット時刻の前記降順は、
前記データ読出し装置の書込みモードがリダイレクト・オン・ファースト・ライト(ROW)
である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の降順である、または、
前記データ読出し装置の書込みモードがコピー・オン・ライト(COW)である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の昇順であることを特に含む、請求項25に記載の装置。
【請求項２７】
オブジェクトベースストレージ技術を使用するデータ読出し装置であって、前記装置は、
クライアントサーバによって送信されたストリップ読出し要求を受信するように構成される、ストリップ要求受信モジュールであって、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属する、ストリップ要求受信モジュールと、
前記オブジェクトIDおよび前記読出し予定のストリップの前記バージョン番号を使用して決定されるオブジェクトがバックアップされているかどうかを決定し、
前記オブジェクトがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信する、または、
前記オブジェクトがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信することを行うように構成される、ストリップ読出しモジュールとを備える、装置。
【請求項２８】
クライアントサーバと、オブジェクトストレージデバイス(OSD)とを含む、データストレージシステムであって、
前記クライアントサーバは、
ファイル書込み要求を受信するように構成され、前記ファイル書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびファイル名を搬送し、前記書込み予定のデータは、ファイルの一部であり、
前記クライアントサーバは、前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルのメタデータに対するクエリを行って前記ファイルのバージョン番号を取得し、前記ファイルの前記バージョン番号は、前記ファイルの最新のスナップショットのスナップショットIDに対応しており、
前記クライアントサーバは、前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って、前記書込み予定のデータを書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属するオブジェクトのIDを決定し、前記書込み予定のストリップのオフセットを取得し、
ストリップ書込み要求を作成して前記ストリップ書込み要求を前記オブジェクトストレージデバイスに送信し、
前記オブジェクトストレージデバイスは、
前記ストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、前記書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記ファイルの前記バージョン番号は、前記書込み予定のストリップの前記バージョン番号であり、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属する前記オブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ファイルに属し、
前記OSDは、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、データストレージシステム。
【請求項２９】
前記クライアントサーバは、
前記ストリップ書込み要求を送信する前に、前記書込み予定のストリップが属する前記ファイルのスナップショットを作成し、前記最新のスナップショットの前記スナップショットIDを生成し、
前記最新のスナップショットの前記スナップショットIDに従って前記書込み予定のストリップの前記バージョン番号を生成し、
前記ファイルの前記メタデータに対して前記ファイルに属する前記書込み予定のストリップの前記バージョン番号を更新するようにさらに構成される、請求項28に記載のシステム。
【請求項３０】
クライアントサーバと、オブジェクトストレージデバイス(OSD)とを含む、データストレージシステムであって、
前記クライアントサーバは、
ボリューム書込み要求を受信することであって、前記ボリューム書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびボリュームIDを搬送し、前記書込み予定のデータは、ボリュームの一部である、受信することを行い、
前記ボリュームIDに従って前記ボリュームのメタデータに対するクエリを行って前記ボリュームのバージョン番号を取得することであって、前記ボリュームの前記バージョン番号は、前記ボリュームの最新のスナップショットのスナップショットIDに対応している、取得することを行い、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って、前記書込み予定のデータセグメントを書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属するオブジェクトのIDを決定し、前記書込み予定のストリップのオフセットを取得し、
ストリップ書込み要求を作成して前記ストリップ書込み要求を前記オブジェクトストレージデバイスに送信するように構成され、
前記オブジェクトストレージデバイスは、
前記ストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、前記書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記ボリュームの前記バージョン番号は、前記書込み予定のストリップの前記バージョン番号であり、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属する前記オブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ボリュームに属し、
前記OSDは、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、データストレージシステム。
【請求項３１】
前記クライアントサーバは、
前記ストリップ書込み要求を送信する前に、前記書込み予定のストリップが属する前記ボリュームのスナップショットを作成し、前記最新のスナップショットの前記スナップショットIDを生成し、
前記最新のスナップショットの前記スナップショットIDに従って前記書込み予定のストリップの前記バージョン番号を生成し、
前記ボリュームの前記メタデータに対して前記ボリュームに属する前記書込み予定のストリップの前記バージョン番号を更新するようにさらに構成される、請求項30に記載のシステム。
【請求項３２】
クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムであって、
前記クライアントサーバは、
ファイル書込み要求を受信するように構成され、前記ファイル書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびファイル名を搬送し、前記書込み予定のデータは、ファイルの一部であり、
前記クライアントサーバは、前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルのメタデータに対するクエリを行って前記ファイルのバージョン番号を取得し、前記ファイルの前記バージョン番号は、前記ファイルの最新のスナップショットのスナップショットIDに対応しており、
前記クライアントサーバは、前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って、前記書込み予定のデータを書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属するオブジェクトのIDを決定し、前記書込み予定のストリップのオフセットを取得し、
ストリップ書込み要求を作成して前記ストリップ書込み要求を前記オブジェクトストレージデバイスに送信し、
前記オブジェクトストレージデバイスは、
前記ストリップ書込み要求を受信することであって、前記ストリップ書込み要求は、前記書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属する前記ファイルの前記最新のスナップショットの前記スナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属する前記オブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ファイルに属する、受信することを行い、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、
前記オブジェクトがバックアップされている場合には、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、または、
前記オブジェクトがバックアップされていない場合には、前記書込み予定のストリップを使用して接合オブジェクトを作成し、その後、前記接合オブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置に書き込むように構成される、データストレージシステム。
【請求項３３】
前記オブジェクトストレージデバイスは、前記書込み予定のストリップを使用して接合オブジェクトを作成するように構成され、
そのオフセットが前記書込み予定のストリップの前記オフセットとは異なるストリップを取得するために、前記書込み予定のストリップの前記オブジェクトIDのオブジェクトセットに属するバックアップされているオブジェクトから最新のスナップショット時刻を有するオブジェクトを選択し、前記書込み予定のストリップおよびそのオフセットが前記書込み予定のストリップの前記オフセットとは異なる前記ストリップを使用して前記接合オブジェクトを構成することを特に含み、
前記オブジェクトストレージデバイスに記憶されているとともに、そのオブジェクトIDが前記書込み予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記書込み予定のストリップの前記バージョン番号とは異なるオブジェクトのセットは、前記書込み予定のストリップの前記オブジェクトIDの前記オブジェクトセットとしてみなされる、請求項32に記載のシステム。
【請求項３４】
クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムであって、
前記クライアントサーバは、
ボリューム書込み要求を受信することであって、前記ボリューム書込み要求は、書込み予定のデータ、前記書込み予定のデータのオフセット、およびボリュームIDを搬送し、前記書込み予定のデータは、ボリュームの一部である、受信することを行い、
前記ボリュームIDに従って前記ボリュームのメタデータに対するクエリを行って前記ボリュームのバージョン番号を取得することであって、前記ボリュームの前記バージョン番号は、前記ボリュームの最新のスナップショットのスナップショットIDに対応している、取得することを行い、
前記書込み予定のデータの前記オフセットおよび前記書込み予定のデータのサイズに従って、書込み予定のデータセグメントを前記書込み予定のストリップを含む複数のストリップに分割し、前記書込み予定のストリップが属するオブジェクトのIDを決定し、前記書込み予定のストリップのオフセットを取得し、
ストリップ書込み要求を作成して前記ストリップ書込み要求を前記オブジェクトストレージデバイスに送信するように構成され、
前記オブジェクトストレージデバイスは、
前記ストリップ書込み要求を受信することであって、前記ストリップ書込み要求は、前記書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属する前記ボリュームの前記最新のスナップショットの前記スナップショットIDに対応している、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属する前記オブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ボリュームに属する、受信することを行い、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、
前記オブジェクトがバックアップされている場合には、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込む、または、
前記オブジェクトがバックアップされていない場合には、前記書込み予定のストリップを使用して接合オブジェクトを作成し、その後、前記接合オブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置に書き込むように構成される、データストレージシステム。
【請求項３５】
前記オブジェクトストレージデバイスは、前記書込み予定のストリップを使用して接合オブジェクトを作成するように構成され、
そのオフセットが前記書込み予定のストリップの前記オフセットとは異なるストリップを取得するために、前記書込み予定のストリップの前記オブジェクトIDのオブジェクトセットに属するバックアップされているオブジェクトから最新のスナップショット時刻を有するオブジェクトを選択し、前記書込み予定のストリップおよびそのオフセットが前記書込み予定のストリップの前記オフセットとは異なる前記ストリップを使用して前記接合オブジェクトを構成することを特に含み、
前記オブジェクトストレージデバイスに記憶されているとともに、そのオブジェクトIDが前記書込み予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記書込み予定のストリップの前記バージョン番号とは異なるオブジェクトのセットは、前記書込み予定のストリップの前記オブジェクトIDの前記オブジェクトセットとしてみなされる、請求項34に記載のシステム。
【請求項３６】
クライアントサーバと、オブジェクトストレージデバイスとを含む、データ読出しシステムであって、
前記クライアントサーバは、
ファイル読出し要求を受信することであって、前記ファイル読出し要求は、ファイル名、読出し予定のデータのサイズ、および前記読出し予定のデータのオフセットを搬送し、前記読出し予定のデータは、ファイルの一部である、受信することを行い、
前記ファイル名に従ってファイル識別子(FID)を取得し、前記FIDに従って前記ファイルのメタデータに対するクエリを行って前記ファイルのバージョン番号を取得することであって、前記ファイルの前記バージョン番号は、前記ファイルの最新のスナップショットのスナップショットIDに対応している、取得することを行い、
前記読出し予定のデータの前記オフセットおよび前記読出し予定のデータの前記サイズに従って、読出し予定のストリップが属するオブジェクトのIDを決定し、前記読出し予定のストリップのオフセットを取得し、
ストリップ読出し要求を生成して前記ストリップ読出し要求を送信するように構成され、
前記オブジェクトストレージデバイスは、
前記ストリップ読出し要求を受信することであって、前記ストリップ読出し要求は、前記読出し予定のストリップのサイズ、前記読出し予定のストリップの前記オフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属する前記ファイルの前記最新のスナップショットの前記スナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ファイルに属する、受信することを行い、
前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、および前記読出し予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、
前記ストリップがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信する、または、
前記ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信することを行うように構成される、データ読出しシステム。
【請求項３７】
クライアントサーバと、オブジェクトストレージデバイスとを含む、データ読出しシステムであって、
前記クライアントサーバは、
ボリューム読出し要求を受信することであって、前記ボリューム読出し要求は、ボリュームID、読出し予定のデータのサイズ、および前記読出し予定のデータのオフセットを搬送し、前記読出し予定のデータは、ボリュームの一部である、受信することを行い、
前記ボリュームIDに従って前記ボリュームのメタデータに対するクエリを行って前記ボリュームのバージョン番号を取得することであって、前記ボリュームの前記バージョン番号は、前記ボリュームの最新のスナップショットのスナップショットIDに対応している、取得することを行い、
前記読出し予定のデータの前記オフセットおよび前記読出し予定のデータの前記サイズに従って、読出し予定のストリップが属するオブジェクトのIDを決定し、前記読出し予定のストリップのオフセットを取得し、
ストリップ読出し要求を生成して前記ストリップ読出し要求を送信するように構成され、
前記オブジェクトストレージデバイスは、
前記ストリップ読出し要求を受信することであって、前記ストリップ読出し要求は、前記読出し予定のストリップのサイズ、前記読出し予定のストリップの前記オフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属する前記ボリュームの前記最新のスナップショットの前記スナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属する前記オブジェクトの前記IDであり、前記オブジェクトは、前記ボリュームに属する、受信することを行い、
前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、および前記読出し予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、
前記ストリップがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信する、または、
前記ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信することを行うように構成される、データ読出しシステム。
【請求項３８】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップを実行する、オブジェクトストレージデバイス。
【請求項３９】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップを実行し、
前記オブジェクトがバックアップされている場合には、前記コンピュータプログラムは、前記書込み予定のストリップを、前記オブジェクトID、前記書込み予定のストリップの前記バージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップをさらに含む、または、
前記オブジェクトがバックアップされていない場合には、前記コンピュータプログラムは、前記書込み予定のストリップを使用して接合オブジェクトを作成し、その後、前記接合オブジェクトを前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置に書き込むステップをさらに含む、オブジェクトストレージデバイス。
【請求項４０】
前記プロセッサが前記書込み予定のストリップを使用して接合オブジェクトを作成することは、
前記プロセッサが、そのオフセットが前記書込み予定のストリップの前記オフセットとは異なるストリップを取得するために、前記書込み予定のストリップの前記オブジェクトIDのオブジェクトセットに属するバックアップされているオブジェクトから最新のスナップショット時刻を有するオブジェクトを選択し、前記書込み予定のストリップおよびそのオフセットが前記書込み予定のストリップの前記オフセットとは異なる前記ストリップを使用して前記接合オブジェクトを構成するように構成されることを特に含み、
前記オブジェクトストレージデバイスに記憶されているとともに、そのオブジェクトIDが前記書込み予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記書込み予定のストリップの前記バージョン番号とは異なるオブジェクトのセットは、前記書込み予定のストリップの前記オブジェクトIDの前記オブジェクトセットとしてみなされる、請求項39に記載のオブジェクトストレージデバイス。
【請求項４１】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、
前記ストリップがバックアップされている場合には、前記書込み予定のストリップを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オブジェクトID、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップ、または、
前記ストリップがバックアップされていない場合には、前記オブジェクトストレージデバイス内のベースバージョンのオブジェクト内にあるとともに、そのオフセットが前記書込み予定のストリップの前記オフセットであり、そのサイズが前記書込み予定のストリップのサイズであるデータを、前記書込み予定のストリップの前記バージョン番号、前記書込み予定のストリップの前記オフセット、および前記書込み予定のストリップの前記オブジェクトIDを使用して決定される前記記憶位置にバックアップすることであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップすることを行い、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップとを実行する、オブジェクトストレージデバイス。
【請求項４２】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成され、前記ストリップ書込み要求は、書込み予定のストリップ、前記書込み予定のストリップのバージョン番号、前記書込み予定のストリップのオフセット、および前記書込み予定のストリップのオブジェクトIDを搬送し、前記書込み予定のストリップの前記バージョン番号は、前記書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記書込み予定のストリップの前記オフセットは、前記書込み予定のストリップが属するオブジェクト内の前記書込み予定のストリップの位置を表しており、前記書込み予定のストリップの前記オブジェクトIDは、前記書込み予定のストリップが属する前記オブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、
前記オブジェクトがバックアップされている場合には、前記オブジェクトストレージデバイスによって、前記書込み予定のストリップを、前記オブジェクトID、前記オブジェクトのバージョン番号、および前記書込み予定のストリップの前記オフセットを使用して決定される記憶位置に書き込むステップ、または、
前記オブジェクトがバックアップされていない場合には、前記オブジェクトストレージデバイスによって、ベースバージョンのオブジェクトを、前記書込み予定のストリップの前記バージョン番号および前記オブジェクトIDを使用して決定される記憶位置にバックアップするステップであって、前記ベースバージョンの前記オブジェクトのオブジェクトIDは、前記書込み予定のストリップの前記オブジェクトIDと同一であり、前記ベースバージョンの前記オブジェクトのバージョン番号は、ベースバージョン番号であり、前記ベースバージョン番号の値は、0またはヌルである、バックアップするステップと、
前記オブジェクトがバックアップされていない場合には、前記オブジェクトストレージデバイスによって、前記書込み予定のストリップを、前記書込み予定のストリップの前記オブジェクトID、前記ベースバージョン番号、および前記オフセットを使用して決定される記憶位置に書き込むステップとを実行する、オブジェクトストレージデバイス。
【請求項４３】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ読出し要求を受信するように構成され、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、および前記読出し予定のストリップの前記オフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、
前記ストリップがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップ、または、
前記ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップとを実行する、オブジェクトストレージデバイス。
【請求項４４】
前記オブジェクトの前記スナップショット時刻の前記降順は、
前記オブジェクトストレージデバイスの書込みモードがリダイレクト・オン・ファースト・ライト(ROW)である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の降順である、または、
前記オブジェクトストレージデバイスの書込みモードがコピー・オン・ライト(COW)である場合には、前記オブジェクトの前記スナップショット時刻の前記降順がバージョン番号の昇順であることを特に含む、請求項43に記載のオブジェクトストレージデバイス。
【請求項４５】
プロセッサと、前記プロセッサに接続されている記憶媒体およびインターフェースとを備える、オブジェクトストレージデバイスであって、
前記インターフェースは、クライアントサーバによって送信されたストリップ読出し要求を受信するように構成され、前記ストリップ読出し要求は、読出し予定のストリップのサイズ、前記読出し予定のストリップのオフセット、前記読出し予定のストリップのバージョン番号、および前記読出し予定のストリップのオブジェクトIDを搬送し、前記読出し予定のストリップの前記バージョン番号は、前記読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、前記読出し予定のストリップの前記オブジェクトIDは、前記読出し予定のストリップが属するオブジェクトのIDであり、前記オブジェクトは、前記ファイルまたは前記ボリュームに属し、
前記記憶媒体は、コンピュータプログラムを記憶しており、
前記プロセッサは、前記コンピュータプログラムを起動することによって、
前記オブジェクトIDおよび前記読出し予定のストリップの前記バージョン番号を使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、
前記オブジェクトがバックアップされている場合には、前記オブジェクトID、前記読出し予定のストリップの前記バージョン番号、前記読出し予定のストリップの前記オフセット、および前記読出し予定のストリップの前記サイズを使用して決定されるデータを読み出し、前記読み出したデータを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップ、または、
前記オブジェクトがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、前記読出し予定のストリップの前記オフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが前記読出し予定のストリップの前記オブジェクトIDと同一であり、そのバージョン番号が前記読出し予定のストリップの前記バージョン番号とは異なる前記オブジェクトを探索し、前記見つけた有効データを前記読出し予定のストリップとして使用し、前記読出し予定のストリップを前記クライアントサーバに送信するステップとを実行する、オブジェクトストレージデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ分野に関し、詳細には、データ処理方法、装置、およびシステムに関する。
【背景技術】
【０００２】
オブジェクトベースストレージシステム(Object-based Storage System)は、分散ストレージシステムであり、ストレージサーバと、オブジェクトベースストレージデバイス(Object-based Storage Device、OSD)とを含む。オブジェクトベースストレージシステムをオブジェクトストレージシステムと称してもよく、オブジェクトベースストレージデバイスをオブジェクトストレージデバイスと称してもよい。オブジェクトストレージシステムにおいては、オブジェクトが最も基本的なコンテンツの記憶単位として使用される。データは、ファイルまたはボリュームであり得る。ファイルを例として使用する、ここで、ファイルはフラグメントに分割され、ファイルフラグメントは属性情報を有し、ファイルフラグメント、ファイルフラグメントのメタデータ、およびファイルフラグメントの属性はオブジェクトを共同して構成し得るし、オブジェクトは複数のOSDに記憶される。
【０００３】
オブジェクトストレージシステムは、スナップショット(Snapshot)機能を提供している。スナップショットは、特定のデータセットのコピーであり、コピーは、あるタイムポイント(コピーの開始タイムポイント)における対応するデータのイメージにマークを付ける。
【０００４】
ファイルを例として使用する。スナップショットが作成された後に、ファイル全体またはファイルのデータの一部が変更されると、変更後のデータをストレージシステムに記憶する必要がある。従来技術では、オブジェクトIDがオブジェクトの一意な識別子として使用されており、同一のファイルが更新されると、更新後のデータを新規オブジェクトIDとしてストレージデバイスに記憶する必要がある。ファイルが頻繁に更新されると、オブジェクトIDの総数が非常に大きくなり、このことが、相対的に大きなストレージ領域を占有し、システムリソースのロスを増大させている。
【発明の概要】
【課題を解決するための手段】
【０００５】
本発明は、オブジェクトIDの総数を低減するとともにオブジェクトIDによって占有されるストレージ領域を低減することができるデータ管理技術を提供している。
【０００６】
第1の態様に従って、本発明の実施形態は、データストレージ方法を提供しており、データストレージ方法は、オブジェクトストレージデバイスOSDによって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むステップとを含む。
【０００７】
第2の態様に従って、本発明の実施形態は、データストレージ方法を提供しており、データストレージ方法は、オブジェクトストレージデバイスOSDによって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、オブジェクトがバックアップされている場合には、OSDによって、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むステップ、または、オブジェクトがバックアップされていない場合には、OSDによって、書込み予定のストリップを使用して接合オブジェクトを作成し、その後、接合オブジェクトを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置に書き込むステップとを含む。
【０００８】
第3の態様に従って、本発明の実施形態は、データストレージ方法を提供しており、データストレージ方法は、オブジェクトストレージデバイスOSDによって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、書込み予定のストリップのバージョン番号、書込み予定のストリップのオブジェクトID、および書込み予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、ストリップがバックアップされている場合には、書込み予定のストリップを、書込み予定のストリップのバージョン番号、書込み予定のストリップのオブジェクトID、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むステップ、または、ストリップがバックアップされていない場合には、OSD内のベースバージョンのオブジェクト内にあるとともに、そのオフセットが書込み予定のストリップのオフセットであり、そのサイズが書込み予定のストリップのサイズであるデータを、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを使用して決定される記憶位置にバックアップすることであって、ベースバージョンのオブジェクトのオブジェクトIDは、書込み予定のストリップのオブジェクトIDと同一であり、ベースバージョンのオブジェクトのバージョン番号は、ベースバージョン番号である、バックアップすることを行い、書込み予定のストリップを、書込み予定のストリップのオブジェクトID、ベースバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むステップとを含む。
【０００９】
第4の態様に従って、本発明の実施形態は、データストレージ方法を提供しており、データストレージ方法は、オブジェクトストレージデバイスOSDによって、クライアントサーバによって送信されたストリップ書込み要求を受信するステップであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、オブジェクトがバックアップされている場合には、OSDによって、書込み予定のストリップを、オブジェクトID、オブジェクトのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むステップ、または、オブジェクトがバックアップされていない場合には、OSD内のベースバージョンのオブジェクト内のデータを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置にバックアップすることであって、ベースバージョンのオブジェクトのオブジェクトIDは、書込み予定のストリップのオブジェクトIDと同一であり、ベースバージョンのオブジェクトのバージョン番号は、ベースバージョン番号である、バックアップすることを行い、OSDによって、書込み予定のストリップを、書込み予定のストリップのオブジェクトID、ベースバージョン番号、およびオフセットを使用して決定される記憶位置に書き込むステップとを含む。
【００１０】
第5の態様に従って、本発明の実施形態は、データ読出し方法を提供しており、データ読出し方法は、オブジェクトストレージデバイスOSDによって、クライアントサーバによって送信されたストリップ読出し要求を受信するステップであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、オブジェクトID、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定するステップと、ストリップがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信するステップ、または、ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信するステップであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、ステップとを含む。
【００１１】
第6の態様に従って、本発明の実施形態は、データ読出し方法を提供しており、データ読出し方法は、OSDによって、クライアントサーバによって送信されたストリップ読出し要求を受信するステップであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、ステップと、OSDによって、オブジェクトIDおよび読出し予定のストリップのバージョン番号を使用して決定されるオブジェクトがバックアップされているかどうかを決定するステップと、オブジェクトがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信するステップ、または、オブジェクトがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信するステップであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、ステップとを含む。
【００１２】
第7の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むように構成される、ストリップ記憶モジュールとを備える。
【００１３】
第8の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定するように構成される、ストリップ記憶モジュールとを備え、
オブジェクトがバックアップされている場合には、ストリップ記憶モジュールは、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むようにさらに構成される、または、オブジェクトがバックアップされていない場合には、ストリップ記憶モジュールは、書込み予定のストリップを使用して接合オブジェクトを作成し、その後、接合オブジェクトを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置に書き込むようにさらに構成される。
【００１４】
第9の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、書込み予定のストリップのバージョン番号、書込み予定のストリップのオブジェクトID、および書込み予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、ストリップがバックアップされている場合には、書込み予定のストリップを、書込み予定のストリップのバージョン番号、書込み予定のストリップのオブジェクトID、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む、または、ストリップがバックアップされていない場合には、データストレージ装置内のベースバージョンのオブジェクト内にあるとともに、そのオフセットが書込み予定のストリップのオフセットであり、そのサイズが書込み予定のストリップのサイズであるデータを、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを使用して決定される記憶位置にバックアップすることであって、ベースバージョンのオブジェクトのオブジェクトIDは、書込み予定のストリップのオブジェクトIDと同一であり、ベースバージョンのオブジェクトのバージョン番号は、ベースバージョン番号である、バックアップすることを行い、書込み予定のストリップを、書込み予定のストリップのオブジェクトID、ベースバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込むように構成される、ストリップ記憶モジュールとを備える。
【００１５】
第10の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ書込み要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、オブジェクトがバックアップされている場合には、書込み予定のストリップを、オブジェクトID、オブジェクトのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む、または、オブジェクトがバックアップされていない場合には、ベースバージョンのオブジェクト内のデータを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置にバックアップすることであって、ベースバージョンのオブジェクトのオブジェクトIDは、書込み予定のストリップのオブジェクトIDと同一であり、ベースバージョンのオブジェクトのバージョン番号は、ベースバージョン番号である、バックアップすることを行うように構成される、ストリップ記憶モジュールであって、ストリップ記憶モジュールは、書込み予定のストリップを、書込み予定のストリップのオブジェクトID、ベースバージョン番号、およびオフセットを使用して決定される記憶位置に書き込むようにさらに構成される、ストリップ記憶モジュールとを備える。
【００１６】
第11の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ読出し要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、オブジェクトID、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、ストリップがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信する、または、ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信することであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、送信することを行うように構成される、ストリップ読出しモジュールとを備える。
【００１７】
第12の態様に従って、本発明の実施形態は、データ処理装置を提供しており、データ処理装置は、クライアントサーバによって送信されたストリップ読出し要求を受信するように構成される、ストリップ要求受信モジュールであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、ストリップ要求受信モジュールと、オブジェクトIDおよび読出し予定のストリップのバージョン番号を使用して決定されるオブジェクトがバックアップされているかどうかを決定し、オブジェクトがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信する、または、オブジェクトがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信することであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、送信することを行うように構成される、ストリップ読出しモジュールとを備える。
【００１８】
第13の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムを提供しており、クライアントサーバは、ファイル書込み要求を受信するように構成され、ファイル書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびファイル名を搬送し、書込み予定のデータは、ファイルの一部であり、クライアントサーバは、ファイル名に従ってファイル識別子FIDを取得し、FIDに従ってファイルのメタデータに対するクエリを行ってファイルのバージョン番号を取得し、書込み予定のストリップのバージョン番号としてファイルのバージョン番号を使用し、ファイルのバージョン番号は、ファイルの最新のスナップショットのスナップショットIDに対応しており、クライアントサーバは、書込み予定のデータのオフセットおよび書込み予定のデータのサイズに従って、書込み予定のデータを書込み予定のストリップを含む複数のストリップに分割し、書込み予定のストリップが属するオブジェクトのIDを決定し、書込み予定のストリップのオフセットを取得し、ストリップ書込み要求を作成し、ストリップ書込み要求をオブジェクトストレージデバイスに送信し、オブジェクトストレージデバイスは、ストリップ書込み要求を受信するように構成され、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDであり、OSDは、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む。
【００１９】
第14の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムを提供しており、クライアントサーバは、ボリューム書込み要求を受信することであって、ボリューム書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびボリューム識別子IDを搬送し、書込み予定のデータは、ボリュームの一部である、受信することを行い、ボリュームIDに従ってボリュームのメタデータに対するクエリを行ってボリュームのバージョン番号を取得することであって、ボリュームのバージョン番号は、ボリュームの最新のスナップショットのスナップショットIDに対応している、取得することを行い、書込み予定のデータのオフセットおよび書込み予定のデータのサイズに従って、書込み予定のデータセグメントを書込み予定のストリップを含む複数のストリップに分割し、書込み予定のストリップが属するオブジェクトのIDを決定し、書込み予定のストリップのオフセットを取得し、ストリップ書込み要求を作成してストリップ書込み要求をオブジェクトストレージデバイスに送信するように構成され、オブジェクトストレージデバイスは、ストリップ書込み要求を受信するように構成され、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、ボリュームのバージョン番号は、書込み予定のストリップのバージョン番号であり、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDであり、OSDは、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む。
【００２０】
第15の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムを提供しており、クライアントサーバは、ファイル書込み要求を受信するように構成され、ファイル書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびファイル名を搬送し、書込み予定のデータは、ファイルの一部であり、クライアントサービング装置は、ファイル名に従ってファイル識別子FIDを取得し、FIDに従ってファイルのメタデータに対するクエリを行ってファイルのバージョン番号を取得し、ファイルのバージョン番号は、ファイルの最新のスナップショットのスナップショットIDに対応しており、
クライアントサーバは、書込み予定のデータのオフセットおよび書込み予定のデータのサイズに従って、書込み予定のデータを書込み予定のストリップを含む複数のストリップに分割し、書込み予定のストリップが属するオブジェクトのIDを決定し、書込み予定のストリップのオフセットを取得し、ストリップ書込み要求を作成してストリップ書込み要求をオブジェクトストレージデバイスに送信し、オブジェクトストレージデバイスは、ストリップ書込み要求を受信することであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルの最新のスナップショットのスナップショットIDに対応しており、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、受信することを行い、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、オブジェクトがバックアップされている場合には、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む、または、オブジェクトがバックアップされていない場合には、書込み予定のストリップを使用して接合オブジェクトを作成し、その後、接合オブジェクトを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置に書き込むように構成される。
【００２１】
第16の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データストレージシステムを提供しており、クライアントサーバは、ボリューム書込み要求を受信することであって、ボリューム書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびボリューム識別子IDを搬送し、書込み予定のデータは、ボリュームの一部である、受信することを行い、ボリュームIDに従ってボリュームのメタデータに対するクエリを行ってボリュームのバージョン番号を取得することであって、ボリュームのバージョン番号は、ボリュームの最新のスナップショットのスナップショットIDに対応している、取得することを行い、書込み予定のデータのオフセットおよび書込み予定のデータのサイズに従って、書込み予定のデータセグメントを書込み予定のストリップを含む複数のストリップに分割し、書込み予定のストリップが属するオブジェクトのIDを決定し、書込み予定のストリップのオフセットを取得し、ストリップ書込み要求を作成してストリップ書込み要求をオブジェクトストレージデバイスに送信するように構成され、オブジェクトストレージデバイスは、ストリップ書込み要求を受信することであって、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップのオブジェクトIDを搬送し、書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するボリュームの最新のスナップショットのスナップショットIDに対応している、書込み予定のストリップのオフセットは、書込み予定のストリップが属するオブジェクト内の書込み予定のストリップの位置を表しており、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである、受信することを行い、書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定されるオブジェクトがバックアップされているかどうかを決定し、オブジェクトがバックアップされている場合には、書込み予定のストリップを、オブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込む、または、オブジェクトがバックアップされていない場合には、書込み予定のストリップを使用して接合オブジェクトを作成し、その後、接合オブジェクトを書込み予定のストリップのバージョン番号およびオブジェクトIDを使用して決定される記憶位置に書き込むように構成される。
【００２２】
第17の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データ読出しシステムを提供しており、クライアントサーバは、ファイル読出し要求を受信することであって、ファイル読出し要求は、ファイル名、読出し予定のデータのサイズ、および読出し予定のデータのオフセットを搬送し、読出し予定のデータは、ファイルの一部である、受信することを行い、ファイル名に従ってファイル識別子FIDを取得し、FIDに従ってファイルのメタデータに対するクエリを行ってファイルのバージョン番号を取得し、読出し予定のストリップのバージョン番号としてファイルのバージョン番号を使用することであって、ファイルのバージョン番号は、読出し予定のストリップが属するファイルの最新のスナップショットのスナップショットIDに対応する、使用することを行い、読出し予定のデータのオフセットおよび読出し予定のデータのサイズに従って、読出し予定のストリップが属するオブジェクトのIDを決定し、読出し予定のストリップのオフセットを取得し、ストリップ読出し要求を生成および送信するように構成され、オブジェクトストレージデバイスは、ストリップ読出し要求を受信することであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、受信することを行い、オブジェクトID、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、ストリップがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信する、または、ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信することであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、送信することを行うように構成される。
【００２３】
第18の態様に従って、本発明の実施形態は、クライアントサーバと、オブジェクトストレージデバイスとを含む、データ読出しシステムを提供しており、クライアントサーバは、ボリューム読出し要求を受信することであって、ボリューム読出し要求は、ボリュームID、読出し予定のデータのサイズ、および読出し予定のデータのオフセットを搬送し、読出し予定のデータは、ボリュームの一部である、受信することを行い、ボリュームIDに従ってボリュームのメタデータに対するクエリを行ってボリュームのバージョン番号を取得し、読出し予定のストリップのバージョン番号としてボリュームのバージョン番号を使用することであって、ボリュームのバージョン番号は、読出し予定のストリップが属するボリュームの最新のスナップショットのスナップショットIDに対応している、使用することを行い、読出し予定のデータのオフセットおよび読出し予定のデータのサイズに従って、読出し予定のストリップが属するオブジェクトのIDを決定し、読出し予定のストリップのオフセットを取得し、ストリップ読出し要求を生成および送信するように構成され、オブジェクトストレージデバイスは、ストリップ読出し要求を受信することであって、ストリップ読出し要求は、読出し予定のストリップのサイズ、読出し予定のストリップのオフセット、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオブジェクトIDを搬送し、読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのスナップショットIDに対応しており、読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである、受信することを行い、オブジェクトID、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオフセットを使用して決定されるストリップがバックアップされているかどうかを決定し、ストリップがバックアップされている場合には、オブジェクトID、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、および読出し予定のストリップのサイズを使用して決定されるデータを読み出し、読み出したデータを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信する、または、ストリップがバックアップされていない場合には、オブジェクトのスナップショット時刻の降順に従って1つずつ、読出し予定のストリップのオフセットを使用して決定される記憶位置に有効データを記憶しているオブジェクトが見つかるまで、そのオブジェクトIDが読出し予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が読出し予定のストリップのバージョン番号とは異なるオブジェクトを探索し、見つけた有効データを読出し予定のストリップとして使用し、読出し予定のストリップをクライアントサーバに送信することであって、オブジェクトのバージョン番号は、読出し予定のストリップが属するファイルまたはボリュームの最新のスナップショットのものであるとともに、オブジェクトを生成する前に存在しているスナップショットIDに対応している、送信することを行うように構成される。
【００２４】
本発明を適用することによって、オブジェクトIDとバージョン番号との組合せを従来技術におけるオブジェクトIDと置き換えるために使用しており、このことが、オブジェクトIDの数量を低減し、システムリソースのロスを低減している。
【００２５】
本発明の実施形態における技術的ソリューションをより明確に説明するために、実施形態または従来技術を説明するために必要となる添付の図面を以下に簡単に説明する。以下の説明における添付の図面は、本発明の一部の実施形態を示しているにすぎず、他の図面をこれらの添付の図面からさらに導出し得る。
【図面の簡単な説明】
【００２６】
【図１】本発明の実施形態による、オブジェクトストレージシステムのアーキテクチャ図である。
【図２】本発明による、データ処理方法の実施形態のフローチャートである。
【図３Ａ】本発明の実施形態による、ストリップ分散ポリシーの概略図である。
【図３Ｂ】本発明の実施形態による、ストリップ分散ポリシーの概略図である。
【図４】ROWベースのストリップ読出しソリューションの実施形態の図である。
【図５】COWベースのストリップ読出しソリューションの実施形態の図である。
【図６】本発明による、ストレージシステムの実施形態の概略構造図である。
【図７】本発明による、ストレージシステムの実施形態の概略構成図である。
【発明を実施するための形態】
【００２７】
本発明の実施形態において添付の図面を参照して本発明における技術的ソリューションを以下に明確かつ完全に説明する。説明した実施形態が本発明の実施形態のすべてではなく一部にすぎないことは明らかであろう。本発明の実施形態に基づいて得られる他の実施形態のすべては、本発明の保護範囲に含まれるものとする。
【００２８】
図1に示しているように、図1は、クライアントサーバ11と、オブジェクトストレージデバイス12とを含み得る、オブジェクトストレージシステム(Object-based Storage System)のアーキテクチャ図である。オブジェクトストレージデバイス12は、オブジェクト(Object)ストレージサービスをクライアントサーバ11に提供し得る。
【００２９】
オブジェクトベースストレージデバイス(Object-based Storage Device、OSD)をオブジェクトストレージデバイスと称してもよい。オブジェクトストレージ技術においては、ストレージシステムは、オブジェクトストレージデバイスに基づいて作成され、各オブジェクトストレージデバイスは、特定のインテリジェンスを有し得るし、オブジェクトストレージデバイス上のデータ分散を自動的に管理することができる。
【００３０】
オブジェクトは、システム内の基本的なデータの記憶単位である。ファイルを一例として使用すると、オブジェクトは、実際のところファイルのデータの一部分とこのデータの一部分の属性情報との組合せである、ここで、属性情報は、メタデータ(Meta Data)とも称されることもあり、ファイルベースのリダンダント・アレイ・オブ・インデペンデント・ディスクズ(Redundant Arrays of Independent Disks、RAID)パラメータ、データ分散、サービス品質などを定義していてもよい。しかしながら、従来のストレージシステムにおいては、ファイルまたはブロックが基本的な記憶単位として使用され、ブロックストレージシステムにおいては、システム内の各ブロックの属性を常にトラッキングする必要がさらにあり、オブジェクトは、ストレージシステムと通信することによってオブジェクトの属性を保持している。オブジェクトストレージデバイスにおいては、各オブジェクトは、オブジェクトへのアクセスを容易にするために、オブジェクト識別子(ID)を有する。
【００３１】
OSDは、特定のインテリジェンスを有し、CPU、メモリ、および記憶媒体を有し得る。ブロックデバイスと比較して、OSDは、異なるアクセスインターフェースを提供し得る。同一のストレージシステムに1つまたは複数のOSDが存在しており、図1において、2つのOSDを例として使用する。現時点、ブレード構造が、オブジェクトストレージデバイスを実装するために国際的におよび一般的に使用されている。OSDは、3つの機能を提供し得る。
【００３２】
(1) データストレージ: OSDは、オブジェクトを管理するとともにディスクなどの記憶媒体内のオブジェクトを記憶しており、OSDは、ブロックインターフェースアクセス方式は提供しておらず、クライアントがデータを要求した場合には、データ読出しおよび書込みは、オブジェクトIDおよびオフセットを使用して行われる。
【００３３】
(2) インテリジェント分散: OSDは、OSDのものであるCPUおよびメモリを使用してローカルに記憶されているデータの分散を最適化しており、データプリフェッチ処理をサポートしている。OSDがオブジェクトプリフェッチ処理をインテリジェントにサポートすることができるため、データ読出し速度を最適化することができる。
【００３４】
(3) 各オブジェクトのメタデータの管理: OSDは、OSDに記憶されているオブジェクトのメタデータを管理している、ここで、メタデータは、インデックスノード(index node、inode)と称するデータ構造に記録されており、メタデータは、オブジェクトサイズおよび含まれているストリップの数量などの情報を一般的に含む。従来のネットワークアタッチトストレージ(Network Attached Storage、NAS)システムにおいては、メタデータは、ファイルサーバによって保持される。オブジェクトストレージ機構においては、メタデータはメタデータサーバによって保持され得る、または、システムにおける主なメタデータ管理作業はOSDによって実施され得る、このことが、クライアントのコストを低減している。
【００３５】
カレントストレージモードは、コピー・オン・ファースト・ライト(Copy On First Write、COFW)である、これは、略して、コピー・オン・ライト(Copy On Write、COW)とときには称される。すなわち、新規データが初めてストレージデバイス内の記憶位置に書き込まれると、この記憶位置内の元のデータがまず読み出されて別の記憶位置(別の記憶位置は、スナップショットのために確保されている記憶位置であり、スナップショット領域と称される)に書き込まれ、その後、新規データは、ストレージデバイスに書き込まれる。1つの読出し操作と2つの書込み操作とが本実施様態において実施する必要があることが、COWの実行プロセスから分かり得よう。
【００３６】
リダイレクト・オン・ファースト・ライト(Redirect On First Write、ROW)は、新規データを記憶するための別の方法である。ROWでは、新規データは予約記憶位置に書き込まれ、旧データの記憶位置は変化しない。COWと比較して、1つの書込み操作をROWでは低減することができる。
【００３７】
オブジェクトストレージ技術においては、大部分のメタデータ管理作業を各インテリジェントOSDに分散していてもよく、各OSDはローカルに記憶されているデータの分散および探索を管理することに対して責任を負っている、ここで、メタデータ管理作業の90%がインテリジェントストレージデバイスに分散され、メタデータ管理作業の10%だけがメタデータサーバによって実行される、その結果、システム内のメタデータ管理のパフォーマンスを改善している。加えて、OSDは、ネットワークに接続されているデバイスであり、ディスクまたは磁気テープなどの記憶媒体を含み、十分なインテリジェンスでローカルに記憶されたデータを管理することができる。ストレージサーバは、OSDと直接通信してOSDに記憶されているデータにアクセスし、OSDがインテリジェントであるため、ファイルサーバが関与する必要はない。
【００３８】
オブジェクトは、データとデータ属性との組合せである。データ属性は、アプリケーション要件に従って設定され得るし、データ分散、サービス品質などを含む。クライアントサーバ11は、NASプロトコルに基づいたサーバ、または、ストレージエリアネットワーク(Storage Area Network、SAN)プロトコルに基づいたサーバストレージエリアネットワークであり得る。すなわち、本発明の本実施形態は、ファイルシステムおよびブロックシステムの両方に適用可能である。
【００３９】
ネットワークアタッチトストレージ(Network Attached Storage、NAS)内のデータについては、本発明の本実施形態におけるオブジェクトはファイルからもたらされており、ファイルは複数のフラグメントに分割され、1つのフラグメントとこのフラグメントのものである属性およびメタデータなどの情報とが1つのオブジェクトを共同して構成する。同様に、ストレージエリアネットワーク(Storage Area Network、SAN)内のデータについては、ボリューム(Volume)がフラグメントに分割される。
【００４０】
従来技術では、オブジェクトはオブジェクトIDを使用して決定される、したがって、各オブジェクトのIDは一意である。同一のファイルが複数回更新された後では、大量のオブジェクトIDが生成され得るし、それはオブジェクトIDを記録するために大きなストレージ領域を必要とする。本発明の実施形態においては、オブジェクトは、オブジェクトIDとバージョン番号との組合せを使用して決定される。ファイルのデータが複数回更新された際に、更新後のデータのオフセット範囲が変化していない場合には、更新後のデータに対応するオブジェクトIDは変化していなくてもよく、異なるオブジェクトバージョン番号だけを更新する必要がある、その結果、システム内で保持されるオブジェクトIDの総数を低減している。加えて、本発明の実施形態におけるソリューションにおいては、オブジェクトバージョン番号とスナップショットIDとの間に対応関係が存在しており、2つのスナップショットを作成するインターバルにおいて、同一のファイル内のすべてのオブジェクトは、何回ファイル内のデータが更新されたかにかかわらず、同一のバージョン番号を使用する、したがって、バージョン番号は、非常に小さなストレージ領域を占有する。
【００４１】
従来技術では、ファイルまたはボリュームのコンテンツが更新された後では、変更に関連したオブジェクトのメタデータに関して、ファイルレイヤ(ブロックシステムについてはボリュームのセマンティックレイヤ)に記憶されているメタデータを更新する必要があり、更新されるデータの量は比較的大きくなる。加えて、アクセスノードは、クライアントサーバを使用してOSDにアクセスし得るし、異なるアクセスノードのすべてが変更に関連したオブジェクトにアクセスする場合には、メタデータの同期をノード間で行う必要がある。特に、アクセスノードがオブジェクトのメタデータを更新した後に、別のアクセスノードをトリガして変更後のオブジェクトがあるファイル内のすべてのオブジェクトIDを一体的に更新してもよく、頻繁な同期は、深刻なメタデータの膨張の原因となる。しかしながら、本発明の実施形態において提供したソリューションにおいては、オブジェクトIDを変える必要はなく、バージョン番号だけをOSDレイヤにおいて更新する必要があり、更新されるデータの量は、従来技術におけるものよりはるかに少なくなる。加えて、本発明の実施形態におけるオブジェクトIDは、オフセットを使用して計算によって取得される。
【００４２】
図2に示しているように、ファイル要求を例として使用して本発明によるデータ処理方法の実施形態のフローチャートを具体的に説明する。別の実施様態においては、ファイルシステムに関する各用語をブロックシステムに関する対応する用語に置き換える。例えば、ファイルをボリュームに置き換え、ファイルメタデータをボリュームメタデータに置き換え、ファイルバージョン番号をボリュームバージョン番号に置き換え、ファイルIDをボリュームIDに置き換える。(1) ボリュームメタデータは、別の位置に記憶されており、inodeに記憶されていない、(2) ボリュームIDは、直接取得され得るのでボリューム名からの変換によって取得する必要はない、という点で違いがある。
【００４３】
ステップ20: スナップショットを作成し、スナップショットIDをスナップショットに割り振る、ここで、スナップショットの対象は、ファイルまたはファイルを含むファイルシステムである、すなわち、スナップショットの対象は、ファイルを含む。
【００４４】
スナップショットは2つの方式で作成される。一方の方式では、ファイルのスナップショットが作成され、スナップショットの対象は単一のファイルである。他方の方式では、ファイルシステムのスナップショットが作成され、スナップショットの対象はファイル全体システムである、ここで、ファイルシステムは複数のファイルを含む。2つの方式では、ファイルメタデータの記憶位置が異なる。
【００４５】
ファイルのスナップショットを作成する方式においては、ファイルを選択してスナップショットを作成し、スナップショット名をファイルに設定し、スナップショット名が使用されていないのであれば、スナップショットIDが、ファイルのスナップショットに割り振られる。ファイルのスナップショットIDは、ファイルのメタデータとして使用され、ファイルのinode(index node)に記憶される。スナップショットIDはスナップショットのマークであることに留意されたい。例えば、スナップショットを作成するためのタイムポイントがスナップショットIDとして使用される、または、漸増する番号がスナップショットを作成するためのタイムポイントの順番に従ってスナップショットIDとして使用される。
【００４６】
ファイルシステムのスナップショットを作成する方式においては、ファイルシステムを選択してスナップショットを作成し、スナップショット名が使用されていないのであれば、スナップショットIDが、ファイルシステムのスナップショットに割り振られ、その後、割り振られたスナップショットIDは、ファイルシステムのルートinodeに記憶される。このように、ファイルシステム内の各ファイルのスナップショットIDはファイルシステムのスナップショットIDと同一であるとみなし得る。前方式との違いは、ファイルのスナップショットIDがファイルのinodeにではなくファイルシステムのルートinodeに記憶されている点にある。
【００４７】
ファイルのスナップショットIDに加えて、ファイルメタデータは、ファイル識別子(File Identification、FID)をさらに含み、ファイルメタデータは、ファイルサイズ(Size)および書込み時刻などの情報をさらに含んでいてもよい。
【００４８】
ステップ20は、予め設定されたステップであり、本方法の実施形態における他のステップとは相対的な独立性を有していることに留意されたい。本発明の本実施形態は、あるスナップショットが作成された後かつ次のスナップショットが作成される前にクライアントサーバおよびOSDによって行われる操作を主に説明している。
【００４９】
ステップ21: クライアントサーバが、ファイル書込み要求を受信する、ここで、ファイル書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびファイル名を搬送し、書込み予定のデータは、ファイルの一部である。
【００５０】
特に、本ステップは、クライアントサーバのファイルシステム内のプログラムによって実行され得る。ファイル書込み要求は、ファイルシステムが識別することができる書込み要求である。ファイル書込み要求は、ファイルを作成すること、または、書込み予定のデータを使用して既に存在しているファイルを更新することであり得る、ここで、書込み予定のデータは、ファイルの一部またはファイル全体である。
【００５１】
ファイル書込み要求は、書込み予定のデータが後続のステップにおいて書込み予定のデータのオフセットに従ってストリップに分割されるように、書込み予定のデータのサイズをさらに搬送する場合がある、または、書込み予定のデータのサイズを書込み予定のデータを測定することにより取得することができるため、書込み予定のデータのサイズを搬送しない場合がある。
【００５２】
書込み予定のデータのオフセットは、ファイル内の書込み予定のデータの相対的位置を表している。特に、書込み予定のデータのオフセットは、書込み予定のデータの開始位置とファイルヘッダとの間の距離を表していてもよい。書込み予定のデータのオフセットが0である場合には、書込み予定のデータの開始位置が書込み予定のファイルの開始位置であることを示している。書込み予定のデータのオフセットが1KBである場合には、書込み予定のデータの開始位置とファイルの開始位置との間の距離が1KBのデータサイズであることを示している。
【００５３】
必要に応じて、ファイル書込み要求は、ファイル書込み要求のファイルパスをさらに搬送し得る、ここで、ファイルパスは、ファイルの記憶位置およびマッピング関係テーブルを示している。ファイルは、ファイルパスおよびファイル名を使用して共同して決定される。例えば、ファイルパスとファイル名との組合せは、/root/mma/a1である、ここで、/root/mma/は、ファイルパスであり、a1は、ファイル名であり、ファイルおよびマッピング関係テーブルは、パス/root/mma/に記憶されている。
【００５４】
異なるファイルは異なるファイル名を有し得るし、同一のファイルパス内のファイル名が同一のものはない。
【００５５】
必要に応じて、書込み要求は、マッピング関係テーブルの記憶位置をさらに搬送し得る、ここで、マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録している。
【００５６】
スナップショットが作成されるたびにスナップショットIDが生成され、各スナップショットIDは対応するファイルバージョン番号を有し、スナップショットIDはファイルバージョン番号と一対一の対応関係にある。加えて、隣接したスナップショット時刻に対応するスナップショットIDの変更ルールは、隣接したスナップショット時刻に対応するファイルバージョン番号の変更ルールと同一である。
【００５７】
ステップ22が実行される前に、スナップショットIDとファイルバージョン番号との間のマッピング関係が記録されていてもよい。
【００５８】
以下の2つのステップを含む。
【００５９】
(1) 現時点で最新のファイルメタデータをバックアップする、このことは、inodeをバックアップすることによって特に実施され得る。ファイルレベルのスナップショットについては、ファイルのinodeがバックアップされ、ファイルシステムレベルのスナップショットについては、ファイルシステムのinodeがバックアップされ、ファイルのinodeおよびファイルのルートinodeの両方を含む。
【００６０】
(2) inode内のバージョン番号を更新する。クライアントサーバに設定されている書込みモードがROWである場合には、更新後のバージョン番号は、バックアップされたinodeに記憶される。クライアントサーバに設定されている書込みモードがCOWである場合には、更新後のバージョン番号は、バックアップによって生成されたinodeに記憶され、必要に応じて、バックアップされたinodeも、更新後のバージョン番号を記録し得る。例えば、inode Aがバックアップされてinode Bを生成すると、inode Aはバックアップされたinodeであり、inode Bはバックアップによって生成されたinodeである。
【００６１】
スナップショットIDは、ステップ20において生成される。ファイルバージョン番号とスナップショットIDとの間に対応関係が存在しており、スナップショットIDはスナップショット時刻に対応している、したがって、ファイルバージョン番号とスナップショット時刻との間に対応関係が存在しているともみなし得る。対応関係は、各ファイルバージョン番号が1つの一意なスナップショットIDに対応していることを意味しており、ファイルバージョン番号の変更ルールは、スナップショットIDのものと同様である。例えば、より大きなスナップショットIDほどより大きなファイルバージョン番号を示している、または、より大きなスナップショットIDほどより小さなファイルバージョン番号を示している。複数のスナップショットのうちより最近のスナップショット時刻を有するスナップショットは、より大きなIDを有する。
【００６２】
SANを含むブロックシステムに基づいたデータ書込み方法においては、ボリュームがファイル名の代わりにボリュームIDを使用してマークされており、ボリュームIDの機能はFIDのものと同様であることに留意されたい。加えて、ボリュームにおいては、ファイルパスと同様の概念は存在しない。したがって、マッピング関係テーブルに対するクエリを行うステップはステップ22ではもはや必要ではなく、ボリュームIDを使用してボリュームメタデータに対するクエリを直接行ってボリュームバージョン番号を取得し得る。
【００６３】
ステップ22: クライアントサーバが、ファイル名を使用してマッピング関係テーブルに対するクエリを行って、書込み予定のデータがあるファイルのファイル識別子(FID)を取得し、FIDに従ってファイルメタデータに対するクエリを行ってファイルバージョン番号を取得する。
【００６４】
マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録しており、ファイル名は、FIDと一対一の対応関係にある。マッピング関係テーブルの記憶位置は、ファイル書込み要求において搬送されてもよく、書込み要求からクライアントサーバによって取得される、または、マッピング関係テーブルは、クライアントサーバによってクライアントサーバに予め記憶されていてもよく、クライアントサーバは、ファイルパスに従ってマッピング関係テーブルを探し出す、または、マッピング関係テーブルは、別のストレージデバイスに記憶されていてもよい。
【００６５】
取得したファイルバージョン番号をメタデータに対してさらに更新してもよい。更新の後、ファイルメタデータは、FIDおよびファイルバージョン番号を記録し、ファイルバージョン番号は、FIDを使用してファイルメタデータに対するクエリを行うことによって取得され得る。ファイルメタデータは、inodeに関する情報に記憶され得る。ファイルパスは、inodeの記憶位置を示している。ROWについては、バージョン番号がバックアップされたinodeに記憶されているため、バックアップされたinodeが本ステップにおいて読み出されることが、前述の説明から分かり得よう。COWについては、バージョン番号がバックアップによって生成されたinodeに記憶されているため、バックアップによって生成されたinodeが本ステップにおいて読み出される。
【００６６】
ファイルバージョン番号とファイルのスナップショットIDとの間に一対一の対応関係が存在しており、スナップショットIDを生成した後に、クライアントサーバは、スナップショットIDと一対一の対応関係にあるファイルバージョン番号を生成する。例えば、スナップショットIDはファイルバージョン番号として直接使用され得る、または、操作を行った後に取得したスナップショットIDはファイルバージョン番号として使用され得る。より最近に作成されたスナップショットがより大きなスナップショットIDを有している場合には、オプションの方式としては、より最近に作成されたスナップショットがスナップショットIDのより大きな値を有するものがあり、別のオプションの方式としては、より最近に作成されたスナップショットがスナップショットIDのより小さな値を有するものがある。
【００６７】
本発明の実施形態においては、ときには書込み予定のストリップのバージョン番号も使用される。書込み予定のストリップのバージョン番号は、書込み予定のストリップが属するファイルのファイルバージョン番号である。すなわち、同一のファイルからの異なるストリップのストリップバージョン番号は同一である。同様に、オブジェクトバージョン番号(または、オブジェクトのバージョン番号)は、書込み予定のストリップが属するファイルのファイルバージョン番号である。すなわち、同一のファイルからの異なるオブジェクトのオブジェクトバージョン番号は同一である。
【００６８】
ステップ23: クライアントサーバが、書込み予定のデータを書込み予定のストリップを含む複数のストリップ(strip)に分割し、ストリップ分散ポリシーに従って、書込み予定のストリップのオフセットおよび書込み予定のストリップが属するオブジェクトのIDを取得する、ここで、書込み予定のストリップが属するオブジェクトのIDは、オブジェクトIDとも称され得る。
【００６９】
クライアントサーバは、ストリップサイズ(Size)に従ってデータを1つまたは複数のストリップに分割する。ストリップは、特定のサイズのデータである。書込み予定のデータのサイズが単一のストリップのサイズ以下である場合には、書込み予定のデータを1つのストリップに分割し、書込み予定のデータのサイズが単一のストリップのサイズより大きい場合には、書込み予定のデータが複数のストリップに分割される。同一のファイルから分割されたストリップのサイズは同一である。ストリップサイズ(Size)は、ファイルメタデータに記憶され得るし、この場合には、異なるファイルは、異なるストリップサイズを使用し得る。あるいは、ストリップサイズはオブジェクトが属するファイルのメタデータに記憶されていなくてもよく、ファイル全体システム内のファイルが1つのストリップサイズを共有する、この場合には、異なるファイルが同一のストリップサイズを使用し、ストリップサイズはファイルシステムのルートinodeに記憶される。オブジェクトは、ストリップを収容することができるコンテナとしてみなし得る。
【００７０】
例えば、書込み予定のデータをいくつかのデータストリップに分割する場合には、本ステップにおけるストリップは、分割することによって取得されるデータストリップを指す、または、書込み予定のデータをデータストリップに分割した後に、データ保護をデータストリップに対して行うためにいくつかの検証ストリップをさらに生成する場合には、本ステップにおけるストリップは、データストリップおよび検証ストリップの両方を含む。
【００７１】
各オブジェクトに含まれるストリップの総数はファイルメタデータに記憶されていてもよく、この場合には、異なるファイル内のオブジェクトに含まれるストリップの総数は異なっていてもよい、または、各オブジェクトに含まれるストリップの総数はオブジェクトが属するファイルのメタデータに記憶されていなくてもよく、この場合には、異なるファイル内のオブジェクトに含まれるストリップの総数は同一である。
【００７２】
ファイル内の書込み予定のデータの開始位置を書込み予定のデータのオフセットから獲得してもよく、ファイル内の書込み予定のデータの終了位置を書込み予定のデータのオフセットおよび書込み予定のデータのサイズから獲得してもよいことに留意されたい。書込み予定のデータの開始位置がストリップサイズの整数倍ではない、または、終了位置の値に1を加えたものがストリップサイズの整数倍ではない場合には、書込み予定のデータは、ストリップサイズに従ってまず分割され、分割のバウンダリは、ストリップサイズの整数倍となる。そのサイズが1つのストリップ未満であるデータ(このタイプのデータはストリップのダーティデータとも称され得る)が分割した後に生成された場合には、データを補完してストリップを形成する。本ステップにおける補完操作により、特に定めのない限り、後続のステップにおいて述べるストリップおよびストリップのオフセットの両方は、補完した後に取得されるストリップおよびストリップのオフセットを指す。
【００７３】
例えば、書込み予定のデータのオフセット範囲が4KB-300KBであるとともにストリップサイズが256KBである場合には、0KBおよび256KBが書込み予定のデータを分割するためのバウンダリとして使用され、2つのデータブロックが形成される、ここで、書込み予定のデータ内の2つのデータブロックのオフセット範囲は、それぞれ4KB-255KBおよび256KB-300KBとなる。2つのデータブロックに対して補完を行い、そのサイズが256KBである2つのストリップを形成する。前者のデータブロックを補完するために使用されるデータ(そのサイズは4KB-0KB=4KB)は前のストリップからもたらされており、後者のデータブロックを補完するために使用されるデータ(そのサイズは511KB-300KB=211KB)は次のストリップからもたらされる。書込み予定のデータのオフセットは、ファイル内の書込み予定のデータの相対的位置である。
【００７４】
別の補完方法は、以下の通りである。書込み予定のデータの開始位置がストリップサイズの整数倍ではない、または、終了位置のオフセットの値に1を加えたものがストリップサイズの整数倍ではない場合には、補完操作をストリップの書込み予定のデータに対して行ってもよく、その結果、分割後に取得されるストリップのサイズは恒常的となり、ストリップ内にマージンが存在しなくなる。OSDに既に記憶されているデータは、補完するためのデータとして読み出され使用され得る。
【００７５】
例えば、書込み予定のデータのオフセット範囲が4KB-300KBであるとともにストリップサイズが256KBである場合には、書込み予定のデータは、そのオフセット範囲が0KB-511KBであるデータを形成するために補完され得るし、その後、データは、各ストリップのサイズが256KBとなるように、そのオフセット範囲が0KB-255KBおよび256KB-511KBである2つのストリップに分割される。
【００７６】
ストリップ分散ポリシーを、クライアントサーバのファイルシステムよって提供している。記載されていることは、ストリップが属するオブジェクト、すなわち、ストリップのオフセットとオブジェクトとの間の対応関係で特にあり得るストリップとオブジェクトとの間の対応関係である。
【００７７】
オブジェクトIDはオブジェクトを一意に識別し、同一のファイルに属するオブジェクトのIDは異なっており、異なるファイル内のオブジェクトのIDも異なっている。
【００７８】
必要に応じて、オブジェクトIDとオブジェクトが属するファイルのFIDとの間に対応関係が存在していてもよい。すなわち、例えば、このオブジェクトIDによって表されるオブジェクトをもたらすファイルを、オブジェクトIDから獲得してもよい。
【００７９】
例えば、オブジェクトIDを生成するためのオプションの方式には次のものがある。オブジェクトIDが64ビットのバイナリ番号を含む、ここで、前の32ビットはオブジェクトが属するファイルのIDであり、後の32ビットはクライアントサーバによって割り当てられ、後の32ビットはファイル内の一意であり、同一のファイル内の異なるオブジェクトの後の32ビットは異なっている。例えば、ファイル内のオブジェクトの識別子を使用する。このように、対応するFIDを、オブジェクトIDの前の32ビットから獲得してもよい。同様に、ブロック(block)システムにおいては、オブジェクトIDとボリュームIDとの間の関係も確立してもよい。
【００８０】
オブジェクトIDを生成するための別のオプションの方式には次のものがある。オブジェクトIDが48ビットのバイナリ番号を含む、ここで、前の16ビットはファイルに対応しており、異なるファイルの前の16ビットは異なっており、後の32ビットはクライアントサーバによって割り当てられ、後の32ビットはファイル内の一意であり、同一のファイル内の異なるオブジェクトの後の32ビットは異なっている。
【００８１】
別の実施形態においては、IDとオブジェクトが属するファイルのFIDとの間に対応関係が存在していなくてもよい。
【００８２】
図3Aおよび図3Bは、2つの異なるストリップ分散ポリシーを示している。ストリップインデックスはファイル内のストリップのオフセット関係を表しており、ストリップインデックスは0以上の整数である、ここで、最小のストリップインデックスは0であり、2番目に最小のストリップインデックスは1であり、3番目に最小のストリップインデックスは2であり、…、などとなっている。隣接したインデックス値を有する2つのストリップはまた、ファイル内の隣接したオフセットを有する。
【００８３】
(1) 同一のファイルに属するオブジェクトのサイズは固定であり、同一のファイル内のストリップのサイズは同一である、このことは、異なるオブジェクトに含まれるストリップの総数が同一であることを意味している、(2) インデックスの順番に従ってストリップによって前のオブジェクトをまず満たしその後次のオブジェクトを満たす、すなわち、いくつかの連続したストリップが、書込み予定のデータ内のストリップのオフセットサイズの序列に従って同一のオブジェクトに属することになる、オプションのストリップ分散ポリシーを図3Aに示している。図3Aに示しているように、各オブジェクトは、4つのストリップを固定的に含んでいる。例えば、ストリップサイズは256KBであり、各オブジェクトは4つのストリップを有し、すなわち、オブジェクトサイズは256KB×4=1024KBである。この場合には、第1のオブジェクトはストリップ0からストリップ3を記憶し、第2のオブジェクトはストリップ4からストリップ7を記憶し、第3のオブジェクトはストリップ8からストリップ11を記憶し、…、それゆえ、第1のオブジェクトのIDは0であり、第2のオブジェクトのIDは1であり、第3のオブジェクトのIDは2であり、…となる。
【００８４】
ストリップオフセットは、オブジェクト内のストリップの相対的位置を表すために使用され、特に、オブジェクト内のストリップの開始データの相対的位置であってもよい。ストリップオフセット=(ストリップインデックス%オブジェクト内のストリップの数量)×ストリップサイズである、ここで、%は、前の項を後の項で除算した後の剰余を計算することを指す。したがって、「ストリップインデックス%オブジェクト内のストリップの数量」の値は、ストリップインデックスをオブジェクト内のストリップの数量で除算した後に取得した剰余である。
【００８５】
(1) 同一のファイル内のオブジェクトのサイズは固定されていない、すなわち、同一のファイルの異なるオブジェクト内のストリップの総数は異なっていてもよい、(2) オブジェクトの総数は固定されている、すなわち、異なるファイルは同一の数量のオブジェクトを有し、図3Bに示しているように、全部で3つのオブジェクトが存在している、別のオプションのストリップ分散ポリシーを図3Bに示している。例えば、ストリップサイズが256KBであるとともにオブジェクトの総数は3に固定されている場合には、第1のストリップ(ストリップ0)は第1のオブジェクト(オブジェクト0)にあり、第2のストリップ(ストリップ1)は第2のオブジェクト(オブジェクト1)にあり、…、同様に、第4のストリップ(ストリップ3)も第1のオブジェクトにあり、第5のストリップ(ストリップ4)も第2のオブジェクトにある。ストリップインデックスは、0以上の整数であり、ファイル内のストリップ間の位置関係を表している。ストリップが属するオブジェクト内の各ストリップのオフセットも決定され得るし、ファイル内のオブジェクトの識別子は、ストリップインデックスをファイル内のオブジェクトの総数で除算した後に取得した剰余であり得る。具体的な計算式は、ファイル内のオブジェクトの識別子=ストリップインデックス%ファイル内のオブジェクトの数量であるとともに、ストリップオフセット=(ストリップインデックス/オブジェクトの数量)×ストリップサイズであってもよい。
【００８６】
ストリップインデックスは、書込み予定のデータのオフセットを使用して決定され得る。例えば、ファイル全体については、ファイルを分割した後に取得した開始データは第1のオブジェクト内のストリップ(ストリップ0)にあり、カレント書込み予定のデータのオフセットはオブジェクト1内の第5のストリップ(ストリップ4)にある。この場合には、書込み予定のデータを分割した後に生成されたストリップにおいては、第1のストリップのインデックスは4であり、別のストリップのインデックスは同様に取得される。
【００８７】
前述したことは、ストリップが属するオブジェクトのIDを計算するための2つのソリューションを説明しており、異なるストリップ分散ポリシーに従って、別の実施形態ソリューションが存在していてもよい。異なる分散ポリシーにおいて使用されるパラメータは異なっていてもよく、これらのパラメータはクライアントサーバに対するクエリを行うことによって一般的に取得されてもよい。
【００８８】
すべてのストリップの処理方式が同一であるため、説明のための一例として特定の「書込み予定のストリップ」だけを以下では使用している。
【００８９】
ステップ24: クライアントサーバが、書込み予定のストリップを記憶するために使用されるOSDを選択する。
【００９０】
特に、本ステップは、クライアントサーバのオブジェクトストレージクライアントによって実行され得る。
【００９１】
オプションの計算方法は、書込み予定のストリップのFIDに従って、書込み予定のストリップを記憶するためのOSDを決定することである。例えば、FIDのハッシュ値は、OSDの総数で除算され、剰余は、書込み予定のストリップを記憶するためのOSDの識別子として使用される、すなわち、FIDのハッシュ値 mod OSDの総数である。別のソリューションも存在し得る。例えば、クライアントサーバは、OSDをランダムに選択してオブジェクトに属する書込み予定のストリップを記憶し、同一のオブジェクトに属するストリップは、同一のOSDに記憶され得る。
【００９２】
加えて、ストリップを記憶するためのOSDはまた、書込み予定のストリップのものであるFIDおよびオブジェクトIDに従って共同して決定され得る。実際には、計算方法を、OSDを選択できるのであればランダムに選択してもよい。
【００９３】
ステップ25: クライアントサーバが、ストリップ書込み要求をOSDに送信する、ここで、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのオフセット、および書込み予定のストリップが属するオブジェクトのIDを搬送し、必要に応じて、書込み予定のストリップのサイズをさらに含んでいてもよい。
【００９４】
必要に応じて、OSDがROWおよびCOWの両方をサポートしているケースでは、OSDがクライアントサーバによって指定される書込みモードに従って書込み予定のストリップを書き込めるように、書込みモードがさらに送信されてもよい。書込みモードはROWまたはCOWである。OSDが1つの書込みモードだけをサポートしている場合には、書込みモードがOSDに送信されなくてもよい。
【００９５】
ステップ26: OSDが、ストリップ書込み要求を受信し、書込み予定のストリップをOSDの記憶媒体に書き込む。
【００９６】
OSDが1つの書込みモードだけをサポートしている場合には、OSDは、書込みモードがROWであるかCOWであるかを確認する必要もなく、書込み予定のストリップをデフォルト書込みモードで記憶媒体に直ぐに書き込んでもよい。
【００９７】
データを受信する場合には、OSDはデータをバッファにまず一時的に記憶し、本ステップにおいて、バッファ内の書込み予定のデータが記憶媒体に記憶され得る。
【００９８】
ストリップオフセットは、オブジェクト内のストリップの相対的位置を表している、これは、特に、オブジェクト内のストリップの開始データの相対的位置であってもよく、ストリップオフセット+ストリップサイズ=オブジェクト内のストリップの終了データの相対的位置であってもよい。
【００９９】
データのバックアップマークはOSDにあり、データのバックアップマークの粒度はインデックスとしてオブジェクトIDを使用してOSDにおいてクエリが行われてもよい、または、OSDによって受信されたすべてのストリップがバックアップマークの同一の粒度に従って記憶されるようにデフォルトで設定していてもよい。同一のファイルに属するストリップは、同一のタイプの記録粒度を使用する。実際のデバイスは、オブジェクトがバックアップマークの粒度として使用されるケースのみをサポートし得る、または、ストリップがバックアップマークの粒度として使用されるケースのみをサポートし得る。この場合には、OSDは、バックアップマークの粒度についてクエリを行う必要なしに記憶することを直接行ってもよい。
【０１００】
OSDでは、オブジェクトは、オブジェクトIDおよびバージョン番号の2つのパラメータを使用して共同して決定され得る、したがって、2つのパラメータを含むセットを本実施形態においてはオブジェクトキーパラメータと称する。オブジェクトを決定した後に、ストリップは、ストリップオフセットをさらに使用して決定され得る、すなわち、ストリップは、オブジェクトID、バージョン番号、およびストリップオフセットの3つのパラメータを使用して共同して決定され得る、したがって、3つのパラメータを含むセットをストリップキーパラメータと称する。
【０１０１】
OSDでは、オブジェクトキーパラメータは、オブジェクトを記憶するために使用される記憶位置を示し得る、特に、オブジェクトによって使用されることになる開始アドレスを示し得る。必要に応じて、オブジェクトキーパラメータは、オブジェクトによって使用されることになるアドレスセグメントを示し得る。同様に、ストリップキーパラメータはまた、ストリップを記憶するために使用される開始アドレスまたはアドレスセグメントを示し得る。開始アドレスおよびアドレスセグメントは、物理アドレスまたは論理アドレスであり得る。
【０１０２】
オブジェクトキーパラメータを使用して決定されるオブジェクトの記憶位置を、オブジェクトキーパラメータを使用して、探索する複数の可能なケースが存在する。あるケースにおいては、ストリップ書込み要求を受信する前に、OSDは、ストリップ書込み要求において搬送されたオブジェクトキーパラメータを既に記録しており、この一群のキーパラメータによって表されるストリップに対して記憶位置を割り振る。別のケースにおいては、OSDは、この一群のキーパラメータを記録しておらず、この一群のキーパラメータによって表されるストリップに対して記憶位置を割り振らず、ストリップ書込み要求を受信した後に、OSDは、記憶位置をこの一群のオブジェクトキーパラメータに割り振る。
【０１０３】
オブジェクトセットは、同一のオブジェクトIDおよび異なるバージョン番号を有するオブジェクトのセットである、ここで、オブジェクトセットは少なくとも1つのオブジェクトを含み、オブジェクトセットは論理的な概念であってもよく実際に分割される必要はない。
【０１０４】
オブジェクトIDは、オブジェクトにおいて搬送されたデータのものであるとともにファイル内のものであるオフセットの範囲に従って決定される。同一のファイルの複数のスナップショットを作成するとともに、スナップショットを作成するたびに変化しているデータをOSDに記憶する場合には、変化しているデータのうち同一のオフセットを有するデータは同一のオブジェクトIDを有する。
【０１０５】
OSDでは、マークが、オブジェクトまたはストリップがバックアップされているかどうかを示すために使用されている。バックアップマークの粒度は、ストリップまたはオブジェクトであってもよい。最小のマーク対象単位がストリップである場合には、バックアップマークの粒度はストリップであり、最小のマーク対象単位がオブジェクトである場合には、バックアップマークの粒度はオブジェクトである。
【０１０６】
オブジェクトのバックアップマークは、オブジェクトIDおよびバージョン番号を使用して決定されるオブジェクトが既にバックアップされていることを示している。特に、オブジェクトのバックアップマークは、バージョン番号に対応するスナップショットが作成された後にオブジェクトIDに対応するオブジェクトがバックアップされているかどうかを示している、ここで、1はオブジェクトがバックアップされていることを示し、0はオブジェクトがバックアップされていないことを示している。特にオブジェクトのバックアップマークが0である2つのケースが存在している、ここで、一方のケースについては、オブジェクトIDおよびバージョン番号を使用して決定されるオブジェクトが変更されており、バックアップ操作がまだ実行されていないことであり、他方のケースについては、オブジェクトIDおよびバージョン番号を使用して決定されるオブジェクトが変更されていないことである。
【０１０７】
ストリップのバックアップマークは、オブジェクトID、バージョン番号、およびストリップオフセットを使用して決定されるストリップが既にバックアップされていることを示している。特に、ストリップのバックアップマークは、バージョン番号に対応するスナップショットが作成された後にオブジェクトIDに対応するストリップおよびストリップオフセットがバックアップされているかどうかを示している、ここで、1はストリップがバックアップされていることを示し、0はストリップがバックアップされていないことを示している。特にストリップのバックアップマークが0である2つのケースが存在している、ここで、一方のケースについては、オブジェクトID、バージョン番号、およびストリップオフセットを使用して決定されるストリップが変更されており、バックアップ操作がまだ実行されていないことであり、他方のケースについては、オブジェクトID、バージョン番号、およびストリップオフセットを使用して決定されるストリップが変更されていないことである。
【０１０８】
オブジェクトバージョン番号を比較することによって、同一のオブジェクトセット内の異なるオブジェクトのスナップショット時刻を決定し得る。
【０１０９】
書込み予定のストリップがOSDに書き込まれる全部で4つの可能な方式が存在している。(1) 書込みモードはROWであり、バックアップマークの粒度はストリップである。(2) 書込みモードはROWであり、バックアップマークの粒度はオブジェクトである。(3) 書込みモードはCOWであり、バックアップマークの粒度はストリップである。(4) 書込みモードはCOWであり、バックアップマークの粒度はオブジェクトである。OSDは、4つの可能な方式のうち1つまたは複数をサポートし得る。以下に4つの可能性を個別に説明する。
【０１１０】
方式1: ROWのためのものであり、OSD内のデータのバックアップマークの粒度はストリップである。
【０１１１】
書込み予定のストリップは、ストリップ要求内のストリップキーパラメータを使用して決定される記憶位置に従ってOSDに直接書き込まれる。加えて、書込みが完了した後に、書き込まれたストリップによって占有される記憶位置(開始ストレージアドレスまたはアドレスセグメント)は、本ステップにおいて「書き込まれた有効データ」としてさらにマークされ得る。OSDの記憶媒体に記憶されているストリップによって占有される記憶位置は、ストリップ領域とも称され得る。
【０１１２】
ビットは、オブジェクト内の各ストリップがバックアップされているかどうかを示すために使用され得る。例えば、このストリップの記憶位置のフラグビットは1に設定される、ここで、1はデータが書き込まれていることを示し、0はデータが存在していないことを示している。ストリップインデックスは、オブジェクト内のストリップの順番を表すために使用され得るし、フラグビットは、オブジェクト内の各ストリップを示すために使用される。例えば、全部で4つのストリップ領域が存在する、ここで、0000はデータが4つの部分のストリップ領域に書き込まれていないことを示し、0010はデータが第2のストリップ領域のみに書き込まれていることを示し、0101はデータが第1の部分のストリップ領域および第3の部分のストリップ領域に書き込まれているとともに、データが第2の部分のストリップ領域および第4の部分のストリップ領域に書き込まれていないことを示している。
【０１１３】
本実施形態において説明した第N(Nは自然数)の部分のストリップ領域は、ストリップが属するオブジェクト内のストリップ領域の相対的位置を指しており、ストリップインデックスを指していないことに留意されたい。
【０１１４】
オブジェクト内のストリップの識別子を決定するための方法においては、例えば、ストリップのオフセットは決定をするために使用されてもよく、より小さなオフセット値ほどより小さなストリップ識別子の値を示しており、隣接したストリップの識別子間の差は1であり、最小のストリップ識別子は0である。ストリップ分散ポリシーが本ステップにおいては図3Aに記載のポリシーである場合には、ストリップ識別子を決定するための迅速な計算方法は、ストリップ識別子=ストリップオフセット/ストリップサイズである。ストリップオフセットは、オブジェクト内のストリップのオフセットである。この部分のストリップ領域が以前に「バックアップされているもの」として既にマークされている場合には、マーキングは、このマークが変化しないのであれば本ステップにおいて繰り返し行われなくてもよい。
【０１１５】
方式2: ROWのためのものであり、OSD内のデータのバックアップマークの粒度はオブジェクトである。
【０１１６】
方式2においてバックアップマークを決定するための粒度は方式1のものと比べて異なっており、ストリップのフラグビットを決定することをオブジェクトのフラグビットを決定することに変更している。
【０１１７】
有効データがオブジェクトキーパラメータによって示される記憶位置に記憶されているかどうかを決定するために、ストリップ書込み要求において搬送されたオブジェクトキーパラメータを使用してOSDにおける書込みレコードにおいてクエリを行う。本実施形態においては、フラグビットを決定することによって、有効データが記憶位置に記憶されているかどうかを決定し得る。例えば、フラグビットが1である場合には、有効データが記憶されていることを示し、フラグビットが0である場合には、有効データが記憶位置に記憶されていないことを示す。オブジェクトキーパラメータによって示される記憶位置のフラグビットを決定することによって、ストリップ書込み要求受信したこの時刻がスナップショットを作成した後のこのオブジェクトに対して行われる第1の書込み操作であるかどうかを決定し得る。例えば、フラグビットが0である、または、フラグビットが見つからない場合には、スナップショットが作成された後の最初の書込みであることを示し、フラグビットが1である場合には、スナップショットが作成された後の最初ではない書込みを示す。
【０１１８】
ストリップ書込み要求が、スナップショットが作成された後にこのオブジェクトに対して行われた最初の書込みではない場合には、書込み予定のストリップは、このオブジェクトによって占有される記憶位置に直接書き込まれ、具体的な書込み位置は、ストリップキーパラメータを使用して決定され得る。
【０１１９】
ストリップ書込み要求が、このオブジェクトに関するものであるとともにこのオブジェクトのスナップショットが作成された後に始めて受信された書込み要求である場合には、ストリップ書込み要求内の書込み予定のストリップおよびOSD内の別のオブジェクトから取得されたストリップの組合せは、接合オブジェクト(spliced object)と称される一塊のオブジェクトに接合される。特に、残りの部分に由来するオブジェクトは、有効データを有しているオブジェクトにおける最大のバージョン番号(ただし、ストリップ要求において搬送されたバージョン番号より小さい)を有するオブジェクトである。
【０１２０】
すなわち、最大のバージョン番号を有するオブジェクトは、有効データを有しているとともに書込み予定のストリップのオブジェクトIDのオブジェクトセットに属するオブジェクトから選択され、そのオフセットが書込み予定のストリップのオフセットとは異なるストリップを取得して、書込み予定のストリップと共同して接合オブジェクトを構成する。OSDに記憶されているとともに、そのオブジェクトIDが書込み予定のストリップのオブジェクトIDと同一であり、そのバージョン番号が書込み予定のストリップのバージョン番号とは異なるオブジェクトのセットは、書込み予定のストリップのオブジェクトIDのオブジェクトセットとしてみなされる。書込みモードがROWである場合には、より最近のスナップショット時刻は、より大きな対応するオブジェクトバージョン番号を示し、書込み予定のストリップのオブジェクトIDは、書込み予定のストリップが属するオブジェクトのIDである。
【０１２１】
例えば、各オブジェクトは32個のストリップを含み、OSDによって受信された書込み予定のストリップは32個のストリップ内の15番目のストリップであるとすると、残りの31個のストリップについては、すなわち、1番目から14番目のストリップおよび16番目から32番目のストリップに由来するオブジェクトは、前回のスナップショットが作成された後にOSDに記録されるとともに有効データおよび同一のオブジェクトIDを有しているオブジェクトである。
【０１２２】
書込みが完了した後に、このオブジェクトのフラグビットをバックアップされているものとして記録する。例えば、フラグビットが1に設定されていると、このことは、スナップショットが作成された後の最初のストリップ書込み操作が完了したことを意味する、すなわち、このオブジェクト内の任意のストリップが次のスナップショットを作成する前に再び書き込まれた場合には、それは、スナップショットが作成された後にこのオブジェクトに対して行われた最初の書込みではない、したがって、バックアップ操作を行う必要はなく、ストリップは直ぐに書き込まれる。
【０１２３】
同一のオブジェクトIDが複数のオブジェクトに対応していてもよく、各スナップショットIDが1つのオブジェクトに対応しており、これらのオブジェクトが異なる時刻にOSDに書き込まれ、隣接した書込み時刻を有するオブジェクトのバージョン番号は隣接しており、より最近の書込み時刻がより大きなバージョン番号を示していることが、前述の説明から分かり得よう。
【０１２４】
この書込み操作が完了した後に、この時刻に新たに書き込まれたオブジェクトは、オブジェクトセットにおける新規メンバとなる。
【０１２５】
方式3: 書込みモードはCOWであり、データのバックアップマークの粒度はストリップである。
【０１２６】
記憶位置は、ストリップ書込み要求内のオブジェクトキーパラメータおよびストリップオフセットを使用して決定され得る。データが書込み予定のストリップのキーパラメータを使用して決定される記憶位置に既に記憶されているかどうかがまず決定され、決定の結果が、データが書込み予定のストリップのキーパラメータを使用して決定される記憶位置に記憶されていないこと、または、レコードが見つからないことである場合には、この書込み要求がスナップショットが作成された後の最初の書込み要求であることを意味しており、バックアップ操作をまず行う必要があり、その後、書込み予定のストリップが書き込まれる。
【０１２７】
一般的なケースにおいては、次のスナップショットを作成する前かつ最初のストリップ書込み要求だけを受信した後では、ストリップデータをバックアップする必要があり、データは、書込み予定のストリップのオブジェクトID、書込み予定のストリップのバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置にバックアップされる。したがって、OSDに記憶されている最新のストリップは、書込み予定のストリップのキーパラメータによって示される記憶位置にまずバックアップする必要があり、ストリップ受信したこの時刻が、その後、データがバックアップされた記憶位置に書き込まれる。OSDに記憶されている最新のストリップは、クライアントサーバによって送信された最新のストリップである。本実施形態においては、最新のストリップは、OSDに記憶されているストリップのうちの、書込み予定のストリップのオブジェクトIDを有している、そのバージョン番号は0である、ストリップであり、オフセットは、書込み予定のストリップのオフセットと同一である。ストリップ書込み要求が以降に受信された場合には、書込み予定のストリップの書込み操作を直ぐに行ってもよく、バックアップを行う必要はない。
【０１２８】
COWでは、OSDに記憶されている最新のオブジェクトは、同一のバージョン番号を常に使用している。例えば、0またはヌル(Null)はバージョン番号として使用される、これを本実施形態においてはベースバージョン番号と称する。オブジェクトセット内の他のオブジェクトにおいて、およびベースバージョン番号を除いたバージョン番号において、より小さなバージョン番号を有するオブジェクトは、より最近の対応するスナップショット時刻を有する。
【０１２９】
ROWまたはCOWでは、ファイルの最初のスナップショットを作成する前に、データがOSDに書き込まれると、使用されているストリップバージョン番号はベースバージョン番号である。ベースバージョン番号の値は、0またはヌル(NULL)であり得る。
【０１３０】
バックアップ操作が完了した後に、ストリップ書込み要求において搬送されたストリップキーパラメータによって示される記憶位置がデータを既に記憶していることがマークされる。次のスナップショットを作成する前に、OSDが再びこの書込み予定のストリップのオフセットの位置に対するCOW書込み要求を受信した場合には、データはもはや移行されない可能性があり、受信したストリップは、そのバージョン番号は0であるオブジェクト内の、書込み予定のストリップのオフセットによって占有されている、記憶位置に上書き方式で書き込まれる。つまり、書込み予定のストリップは、書込み予定のストリップのオブジェクトID、ベースバージョン番号、および書込み予定のストリップのオフセットを使用して決定される記憶位置に書き込まれる。
【０１３１】
加えて、本ステップにおいては、書込み予定のストリップが書き込まれる記憶位置が既に有効データを既に記憶していることがさらにマークされ得るし、具体的なマーキング方法については、方式1を参照してもよい。
【０１３２】
方式4: 書込みモードはCOWであり、OSD内のデータのバックアップマークの粒度はオブジェクトである。
【０１３３】
方式4と方式3との違いは、データのバックアップマークの粒度がストリップからオブジェクトに変更されており、バックアップ粒度もストリップからオブジェクトに変更されていることにある。
【０１３４】
記憶位置は、ストリップ書込み要求内のオブジェクトキーパラメータを使用して決定され得る。OSDは、オブジェクトキーパラメータを使用してOSDの書込みレコードにおけるクエリを行い、有効データが書込み予定のストリップのオブジェクトキーパラメータによって示される記憶位置に記憶されているかどうかを決定する。方式1における説明と同様に、フラグビットは、本実施形態においてはオブジェクトを示すために使用され得る。例えば、フラグビット1は有効データが記憶されていることを示し、フラグビットが0である、またはオブジェクトキーパラメータのフラグビットがOSDの書込みレコード内で見つからない場合には、有効データが記憶されていないことを示す。
【０１３５】
一般的なケースにおいては、次のスナップショットを作成する前かつ、最初のストリップ書込み要求だけを受信した後では、オブジェクトデータをバックアップする必要がある。特に、有効データが記憶されている場合には、書込み予定のストリップのオブジェクトIDおよび書込み予定のストリップのバージョン番号を使用して共同して決定されるオブジェクトがスナップショットが作成された後に既にバックアップされており、バックアップを再び行う必要がないことを意味し、有効データが記憶されていない、または、ストリップ書込み要求内のオブジェクトキーパラメータのレコードがOSD内で見つからない場合には、バックアップを本ステップにおいてまず行う必要があり、その後、ストリップ書込み要求受信したこの時刻における書込み予定のストリップを書き込むことができることを意味する。
【０１３６】
有効データがオブジェクトキーパラメータによって示される記憶位置に既に記憶されている場合には、書込み予定のストリップは、書込み予定のストリップのオブジェクトID、バージョン番号0、および書込み予定のストリップのオフセットを使用して共同して決定される位置に直接書き込まれる。
【０１３７】
有効データがオブジェクトキーパラメータによって示される記憶位置に記憶されていない場合には、バージョン0のオブジェクト内のすべてのストリップは、ストリップ書込み要求内のオブジェクトキーパラメータによって示される記憶位置にまずバックアップされる。バックアップが完了した後に、ストリップ書込み要求内のオブジェクトキーパラメータによって示される記憶位置は1としてマークされ、その後、書込み予定のストリップはバージョン0のオブジェクトによって以前占有されていた記憶位置に書き込まれる、ここで、書込み位置は書込み予定のストリップのオブジェクトID、書込み予定のストリップのバージョン番号、およびベースバージョン番号を使用して決定される。
【０１３８】
ステップ26が実行された後に、OSDは、クライアントサーバに、書込み予定のストリップを記憶することに成功したことを示す応答メッセージを送信する。
【０１３９】
ステップ26は次のスナップショットを作成する前に実行されることに留意されたい。すなわち、ステップ21から26は、最初のスナップショットが作成された後かつ次のスナップショットを作成する前に実行される。ステップ21から26は、書込み予定のストリップをOSDに書き込む手続きである。OSDに既に書き込まれているストリップをどのように読み出すかを以下に説明し、読出しプロセスおよび書込みプロセスは2つの相対的に独立した方法である。
【０１４０】
ステップ27: クライアントサーバが、ファイル読出し要求を受信する、ここで、ファイル読出し要求は、ファイル名、読出し予定のデータのサイズ、および読出し予定のデータのオフセットを搬送する。
【０１４１】
ファイル書込み要求と同様に、ファイル読出し要求は、ファイル読出し要求のファイルパスをさらに搬送し得る、ここで、ファイルパスは、マッピング関係テーブルの記憶位置を記録している。ファイルは、ファイルパスおよびファイル名を使用して一意に決定され得る。
【０１４２】
特に、本ステップは、クライアントサーバのファイルシステム内のプログラムによって実行され得る。ファイル読出し要求は、ファイルシステムが識別することができる読出し要求である。ファイル読出し要求は、すべてのファイルまたはファイルのデータの一部を読み出すように要求する。
【０１４３】
読出し予定のデータのオフセットは、ファイル内の読出し予定のデータの相対的位置を表している。特に、読出し予定のデータのオフセットは、読出し予定のデータの開始位置とファイルヘッダとの間の距離を表していてもよい。読出し予定のデータのオフセットが0である場合には、読出し予定のデータの開始位置が読出し予定のファイルの開始位置であることを示している。読出し予定のデータのオフセットが2KBである場合には、読出し予定のデータの開始位置とファイルの開始位置との間の距離が2KBのデータサイズであることを示している。
【０１４４】
必要に応じて、ファイル読出し要求は、ファイルパスをさらに搬送し得る、ここで、ファイルパスは、マッピング関係テーブルの記憶位置を記録している。マッピング関係テーブルの詳細については、ステップ21の説明を参照されたい。
【０１４５】
ファイル名は、読出し予定のデータがあるファイルのファイル名であり得る、または、読出し予定のデータがあるファイルのスナップショットのファイル名であり得る。ファイル名が読出し予定のデータがあるファイルのファイル名である場合には、ファイル読出し要求が最新の読出し予定のデータにアクセスすることを意図していることを示し、ファイル名が読出し予定のデータがあるファイルのスナップショットのファイル名である場合には、ファイル読出し要求がスナップショットの読出し予定のデータにアクセスすることを意図していることを示す。
【０１４６】
ステップ28: クライアントサーバが、ファイル名を使用してマッピング関係テーブルに対するクエリを行って、読出し予定のデータがあるファイルのFIDを取得し、FIDに従ってファイルメタデータに対するクエリを行ってファイルバージョン番号を取得する。
【０１４７】
ファイル名が読出し予定のデータがあるファイルのファイル名である場合には、マッピング関係テーブル内にあるファイルパスは読出し予定のデータがあるファイルのファイルパスであり、ファイルバージョン番号がファイルに対応するFIDに従ってメタデータに対するクエリを行うことによって獲得される。
【０１４８】
ファイル名がスナップショットのファイル名である場合には、マッピング関係テーブル内のファイルパスは、スナップショットファイルがあるパスであり、ファイルバージョン番号がスナップショットファイルのFIDに従ってメタデータに対するクエリを行うことによって獲得される。
【０１４９】
マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録しており、ファイル名は、FIDと一対一の対応関係にある。FIDの説明およびFIDとファイルバージョン番号との間の関係については、ステップ21およびステップ22を参照されたい。マッピング関係テーブルの記憶位置は、ファイル読出し要求において搬送されてもよく、読出し要求からクライアントサーバによって取得される、または、マッピング関係テーブルは、クライアントサーバによってクライアントサーバに予め記憶されていてもよく、クライアントサーバは、ファイルパスに従ってマッピング関係テーブルを探し出す、または、マッピング関係テーブルは、別のストレージデバイスに記憶されていてもよい。
【０１５０】
ステップ22を参照すれば、異なる特定のケースに従って、メタデータは、ファイルのinodeに記憶され得る、または、ファイルシステムのルートinodeに記憶され得る。
【０１５１】
スナップショットIDとファイルバージョン番号との間に一対一の対応関係が存在しており、その結果、クライアントサーバは、スナップショットIDに従ってファイルバージョン番号を取得することができる。この対応関係は、ファイルメタデータに記憶され得る。
【０１５２】
ステップ29: クライアントサーバが、ファイル読出し要求を処理し、ファイル読出し要求をストリップ読出し要求を含む複数の読出し要求に変換することであって、各ストリップ読出し要求はストリップを読み出すように要求するために使用され、ストリップ読出し要求は読出し予定のストリップをOSDから読み出すように要求するために使用される、変換することを行い、各読出し要求に対応するオブジェクトIDを決定する、ここで、ストリップ読出し要求は、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、読出し予定のストリップのサイズ、および読出し予定のストリップのオブジェクトIDを搬送する。
【０１５３】
特に、読出し予定のストリップを含む、読み出す必要のある各ストリップのオフセットを、読出し予定のデータのサイズおよび読出し予定のデータのオフセットに従って獲得してもよい。
【０１５４】
ステップ23におけるストリップを生成するための方法を参照すれば、書込み予定のデータは、読出し予定のストリップのオフセットを取得するために、ストリップサイズに従って、および読出し予定のデータのオフセットおよび書込み予定のデータのサイズを使用して、ストリップに分割され得る。同一の方法により、本ステップにおいて、読み出す必要のある各ストリップのオフセットも、ストリップサイズ、読出し予定のデータのオフセット、および読出し予定のデータの長さを使用して取得してもよい。ストリップサイズはファイルのinodeからもたらされてもよく、この場合には、異なるファイルは異なるストリップサイズを使用してもよいし、または、全システム内のすべてのファイルが1つのストリップサイズを共有する。
【０１５５】
読出し予定のストリップのオフセットを取得した後に、読出し予定のストリップがあるオブジェクトのIDは、ステップ23におけるものと同一の方法に従って取得されてもよい。ファイル名が読出し予定のデータがあるファイルのファイル名であるかまたはスナップショットのファイル名であるかにかかわらず、読出し要求に対応するオブジェクトIDについてクエリを行うためのFIDは読出し予定のデータがあるファイルのFIDであることに留意されたい。
【０１５６】
ステップ30: クライアントサーバが、ストリップ読出し要求を受信するために使用されるOSDを選択する。
【０１５７】
特に、本ステップは、クライアントサーバのオブジェクトストレージクライアントによって実行されてもよい。
【０１５８】
同一のストリップのストリップ読出し要求およびストリップ書込み要求は、同一のOSDに対応している必要がある。可能な方法としては、ステップ24におけるものと同一のOSD選択計算方法を使用することがある。
【０１５９】
ステップ31: クライアントサーバが、ストリップ読出し要求をステップ30において選択したOSDに送信する。
【０１６０】
読出し予定のストリップのバージョン番号は、実際のところ、読出し予定のストリップが属するファイルのバージョン番号である。
【０１６１】
必要に応じて、書込みモードは、OSDにさらに送信され得る、ここで、書込みモードは、ステップ25におけるストリップ書込み要求において搬送された書込みモードに一致している。読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである。
【０１６２】
ステップ32: OSDが、ストリップ読出し要求を受信し、読出し予定のストリップの記憶位置を探索し、読出し予定のストリップをクライアントサーバに送信する。
【０１６３】
読出し予定のストリップの記憶位置は読出し予定のストリップの開始アドレスであり得るし、開始アドレスから開始して、1つのストリップサイズのデータが読み出され、読み出したデータは読出し予定のストリップである。
【０１６４】
ステップ26において、ストリップは、複数の可能な方式で書き込まれる。したがって、OSDは、以下に個別に説明もしている対応する方式で、読出し予定のストリップを読み出し得る。ストリップ/オブジェクトがバックアップされているかどうかを決定するための方法においては、ステップ26において説明したフラグビットを使用し得る。例えば、フラグビットが1である場合には、ストリップ/オブジェクトがバックアップされていることを示し、フラグビットが0である場合には、ストリップ/オブジェクトがバックアップされていないことを示す。
【０１６５】
COWについては、特別なケースが存在している。ストリップ読出し要求において搬送されたバージョン番号がベースバージョン番号である場合には、特別なケースにおける読出し予定のストリップを読み出すための方式は別のケースとは異なる、このことは、(ベースバージョン番号の値が0である場合でも)最大のバージョン番号としてベースバージョン番号を指定することに等しい。したがって、例えば、ステップ26において説明したバージョン番号が0であるケースにおいては、バージョン番号が既に最大のバージョン番号であるため、読出し予定のストリップのキーパラメータを使用して決定されるストリップがバックアップされているかどうかを決定する必要がなくてもよく、この記憶位置内のデータが、読出し予定のストリップとして直接読み出されて使用され、読出し予定のストリップは、クライアントサーバに送信される。他のケースにおいては、読出し予定のストリップを以下の2つの方式で読み出してもよい。この特別なケースを除いて、他のケースを以下の2つの方式に分割し得る。
【０１６６】
方式1: OSD内のデータのバックアップマークの粒度はストリップである。
【０１６７】
読出し予定のストリップにおいて搬送されたストリップキーパラメータを使用して決定されるストリップがバックアップされているかどうかを決定する。つまり、読出し予定のストリップのオブジェクトID、読出し予定のストリップ、および読出し予定のストリップのオフセットを使用して決定される記憶位置にあるストリップがバックアップされているかどうかを決定する。本ステップにおいて、読出し予定のストリップのオフセットを、読出し予定のストリップが属するオブジェクト内の読出し予定のストリップの識別子に変換してもよい。変換方法については、ステップ26における方式1を参照されたい。
【０１６８】
ストリップがバックアップされている場合には、読出し予定のストリップのオブジェクトID、読出し予定のストリップ、および読出し予定のストリップのオフセットを使用して決定されるストリップが、読出し予定のストリップとして読み出されて使用され、読出し予定のストリップは、クライアントサーバに送信される。
【０１６９】
ストリップがバックアップされていない場合には、有効ストリップデータが見つかるまで、読出し予定のストリップのオブジェクトIDのオブジェクトセット内に、前回のスナップショットオブジェクト内のストリップデータ内の有効データが存在しているかどうかを決定する。
【０１７０】
特に、読出し予定のストリップのオブジェクトIDのオブジェクトセットが属するとともにそのスナップショット時刻が読出し予定のストリップのスナップショット時刻より早いオブジェクトを、バックアップされているものとしてマークされているストリップが見つかるまで、読出し予定のストリップのオフセットを使用して、およびオブジェクトのスナップショット時刻の降順に従って、1つずつ探索し、見つかったストリップは、読出し予定のストリップとして使用され、読出し予定のストリップは、クライアントサーバに送信される、ここで、オブジェクトのスナップショット時刻は、このオブジェクトが生成される前に作成されたものであるとともにファイルまたはこのファイルを含むファイルシステムのものである最新のスナップショットの時刻を指す。
【０１７１】
より最新のスナップショット時刻がより大きなスナップショットバージョン番号を示している場合には、探索は、オブジェクトのスナップショット時刻の降順に従って行われる。特に、ROWについては、探索はバージョン番号の降順に従って行われ、COWについては、探索はバージョン番号の昇順に従って行われる。
【０１７２】
当然のことながら、ストリップがOSDに書き込まれた際に読出し予定のストリップのより大きなバージョン番号がより大きなスナップショット時刻のために使用されている場合には、読出し予定のストリップは、本ステップでは逆順で探索される。
【０１７３】
方式2: OSD内のデータのバックアップマークの粒度はオブジェクトである。
【０１７４】
本ステップと方式1との間の違いは、バックアップマークの粒度をストリップからオブジェクトに変更している点にある。
【０１７５】
有効データが読出し予定のストリップにおいて搬送されたストリップキーパラメータを使用して決定される記憶位置に記憶されているかどうかを決定する。つまり、有効データが読出し予定のストリップのオブジェクトIDおよび読出し予定のストリップのバージョン番号を使用して決定される記憶位置(オブジェクト領域)に記憶されているかどうかを決定する。
【０１７６】
有効データが存在している場合には、読出し予定のストリップのオブジェクトID、読出し予定のストリップのバージョン番号、および読出し予定のストリップのオフセットを使用して決定される有効データが、読出し予定のデータとして読み出されて使用され、読出し予定のデータは、クライアントサーバに送信される。
【０１７７】
有効データが記憶されていない場合には、有効データを記憶しているスナップショットオブジェクトが見つかるまで、オブジェクトセット内のオブジェクトが、本ステップにおいて方式1と同様の方式で、およびスナップショットバージョン番号の昇順に従って、連続して検索され、読出し予定のストリップを読出し予定のストリップのオフセットに従ってスナップショットオブジェクトから読出し、クライアントサーバに送信される。
【０１７８】
図4は、ROWベースのストリップ読出しソリューションを示している。図に示しているように、ファイルAは、オブジェクト1、オブジェクト2、およびオブジェクト3を含む。これらのオブジェクトが初めてOSDに記憶された後では、これらのオブジェクトのバージョン番号は0である。図4では、オブジェクト1.0は、そのオブジェクトIDが1であるとともにバージョン番号が0であるオブジェクトを示している。同様に、オブジェクト3.2は、そのオブジェクトIDが3であるとともにバージョン番号が2であるオブジェクトを示している。実線のオブジェクトは、このオブジェクトがバックアップされることを示しており、破線のオブジェクトは、このオブジェクトがバックアップされていないことを示している。
【０１７９】
本実施形態においては、第1のスナップショット(そのバージョン番号は1)を作成した後では、オブジェクト1のデータは更新されず、オブジェクト2およびオブジェクト3はバックアップされ、オブジェクト1はバックアップされていない。第2のスナップショット(そのバージョン番号は2)を作成した後では、オブジェクト3はバックアップされ、オブジェクト1およびオブジェクト2はバックアップされていない。第3のスナップショット(そのバージョン番号は3)を作成した後では、オブジェクト1はバックアップされ、オブジェクト2およびオブジェクト3はバックアップされていない。
【０１８０】
オブジェクト1.0があるオブジェクトセットがオブジェクト1.0およびオブジェクト1.3を含んでいることは、オブジェクトセットの概念から分かるであろう。オブジェクト2.0があるオブジェクトセットは、オブジェクト2.0およびオブジェクト2.1を含んでいる。オブジェクト3.0があるオブジェクトセットは、オブジェクト3.0、オブジェクト3.1、およびオブジェクト3.2を含んでいる。
【０１８１】
図4中の矢印の方向は、オブジェクトの探索関係を示している。ストリップ読出し要求がオブジェクト1.2内のストリップを読み出すことを意図している場合には、このオブジェクトはバックアップされておらず、バージョン番号の降順に従って、オブジェクト1.0はバックアップされている、したがって、オブジェクト1.0内のストリップが読み出されることが、図から分かり得よう。同一の原理に基づいて、ストリップ読出し要求がオブジェクト2.2またはオブジェクト2.3内の読出し予定のストリップを読み出すことを意図している場合には、オブジェクト2.1内のデータが実際には読み出される。当然のことながら、ストリップ読出し要求がオブジェクト1.3またはオブジェクト2.1またはオブジェクト3.2内のデータを読み出すことを意図している場合には、これらのオブジェクトはバックアップされているため、データを直接読み出すことができる。
【０１８２】
図5は、COWベースのストリップ読出しソリューションを示しており、図4と異なっている点は探索順序が逆であることであり、探索は、バージョン番号の昇順に従って行われる。
【０１８３】
バックアップマークの粒度がストリップである場合には、本ソリューションの原理は、図4および図5中のものと同様であり、違いは、バックアップマークによってマークされる対象がオブジェクト内のストリップであって、オブジェクトではない点にある。
【０１８４】
前述の方式1または方式2においては、クライアントサーバは、ストリップ読出し要求によって返信されたデータおよび別の読出し要求によって返信されたデータを受信し、返信されたデータを接合することによって読出し予定のデータを生成してもよい。
【０１８５】
図6に示しているように、図6は、前述の方法を実行するためのハードウェアを示している。クライアントサーバ41のインターフェース413は、オブジェクトストレージデバイス42のインターフェース423に接続されている、ここで、クライアントサーバ41は、プロセッサ411と、記憶媒体412と、インターフェース413とを備え、プロセッサ411は、記憶媒体412およびインターフェース413に接続されている。記憶媒体412は、例えば、メモリであり、コンピュータプログラムを記憶する。プロセッサ411は、記憶媒体412内のプログラムを動作して、前述の方法でクライアントサーバによって実行されるステップを実行する。インターフェース413は、OSDに接続されているインターフェースを提供しており、例えば、ストリップ読出し要求またはストリップ書込み要求をOSDに送信する。永続性メモリがクライアントサーバ41に配置されていなくてもよい、すなわち、前述の方法に関連するとともにクライアントサーバ41に記録する必要があるすべての情報は、クライアントサーバ41の揮発性記憶媒体412に記録され得る。
【０１８６】
OSD42は、プロセッサ421と、記憶媒体422と、インターフェース423と、ハードディスク424とを備える、ここで、プロセッサ421は、記憶媒体422およびインターフェース423に接続されており、ハードディスク424は、記憶媒体422に接続されている。記憶媒体422は、揮発性媒体、例えば、メモリであってもよい、ここで、記憶媒体422は、コンピュータプログラムを記憶する。プロセッサ421は、記憶媒体422内のプログラムを動作して、前述の方法でオブジェクトストレージデバイスによって実行されるステップを実行する。インターフェース423は、OSDに接続されているインターフェースを提供している。例えば、インターフェース423は、ストリップ読出し要求またはストリップ書込み要求をOSDに送信する。ハードディスク424は、ストリップに固定記憶域を提供している。例えば、不揮発性記憶媒体は、物理ストレージ領域を書込み予定のストリップ/オブジェクトに一般的に提供し、読出し予定のストリップ/オブジェクトを記憶する。ハードディスク424を、フラッシュメモリ、または消去可能コンパクトディスクなどの別の媒体に置き換えてもよい。
【０１８７】
図7を参照すれば、図7は、本発明の実施形態による、データ処理システムの構造図である。
【０１８８】
データ処理システムは、クライアントサービング装置51およびオブジェクトストレージ装置52を含む。クライアントサービング装置51は、サーバなどの物理デバイスであり得る、または、サーバ上で動作するソフトウェアによって実施される仮想モジュールであり得るし、オブジェクトストレージ装置52は、オブジェクトストレージデバイスなどの物理デバイスであり得る、または、オブジェクトストレージデバイス上で動作するソフトウェアによって実施される仮想モジュールであり得る。クライアントサービング装置51は、前述の方法でクライアントサーバによって実行されるステップを実行するように構成され得るし、オブジェクトストレージ装置52は、前述の方法でオブジェクトストレージデバイスによって実行されるステップを実行するように構成され得る。
【０１８９】
クライアントサービング装置51は、ストリップ要求生成モジュール511とストリップ要求生成モジュール511に接続されているストリップ要求送信モジュール512とを備える、または、ストリップ要求生成モジュール511に接続されているスナップショットモジュール513をさらに備え得る。
【０１９０】
オブジェクトストレージ装置52は、ストリップ要求受信モジュール521と、ストリップ要求受信モジュール521に接続されているストリップ記憶モジュール522およびストリップ読出しモジュール523とを備える。ストリップストレージ機能が実装されている場合には、ストリップ読出しモジュールは必須ではない。ストリップ読出し機能が実装されている場合には、ストリップ記憶モジュールは必須ではない。ストリップ要求受信モジュール521は、ストリップ要求送信モジュール512に接続されている。
【０１９１】
続けて以下にモジュールの機能を具体的に説明する。
【０１９２】
スナップショットモジュール513は、スナップショットを作成し、スナップショットIDをスナップショットに割り振るように構成される、ここで、スナップショットの対象はファイルを含む。
【０１９３】
スナップショットは2つの方式で作成される。一方の方式では、ファイルのスナップショットが作成され、スナップショットの対象は単一のファイルである。他方の方式では、ファイルシステムのスナップショットが作成され、スナップショットの対象はファイル全体システムである、ここで、ファイルシステムは複数のファイルを含む。2つの方式では、ファイルメタデータの記憶位置が異なる。
【０１９４】
ファイルのスナップショットを作成する方式においては、ファイルを選択してスナップショットを作成し、スナップショット名をファイルに設定し、スナップショット名が使用されていないのであれば、スナップショットIDが、ファイルのスナップショットに割り振られる。ファイルのスナップショットIDは、ファイルのメタデータとして使用され、ファイルのinode(index node)に記憶される。スナップショットIDはスナップショットのマークであることに留意されたい。例えば、スナップショットを作成するためのタイムポイントがスナップショットIDとして使用される、または、漸増する番号がスナップショットを作成するためのタイムポイントの順番に従ってスナップショットIDとして使用される。
【０１９５】
ファイルシステムのスナップショットを作成する方式においては、ファイルシステムを選択してスナップショットを作成し、スナップショット名が使用されていないのであれば、スナップショットIDが、ファイルシステムのスナップショットに割り振られ、その後、割り振られたスナップショットIDは、ファイルシステムのルートinodeに記憶される。このように、ファイルシステム内の各ファイルのスナップショットIDはファイルシステムのスナップショットIDと同一であるとみなし得る。本方式と前方式との間の違いは、ファイルのスナップショットIDがファイルのinodeにではなくファイルシステムのルートinodeに記憶されていることである。
【０１９６】
ファイルのスナップショットIDに加えて、ファイルメタデータは、ファイル識別子(FID、File Identification)をさらに含み、ファイルメタデータは、ファイルサイズ(Size)および書込み時刻などの情報をさらに含んでいてもよい。
【０１９７】
スナップショットモジュール513はオプションであることに留意されたい。本発明の本実施形態は、あるスナップショットが作成された後かつ次のスナップショットが作成される前にクライアントサービング装置およびオブジェクトストレージ装置によって行われる操作を主に説明している。
【０１９８】
ストリップ要求生成モジュール511は、ファイル書込み要求を受信するように構成される、ここで、ファイル書込み要求は、書込み予定のデータ、書込み予定のデータのオフセット、およびファイル名を搬送し、書込み予定のデータは、ファイルの一部である。
【０１９９】
特に、ストリップ要求生成モジュール511の機能は、クライアントサーバのファイルシステム内のプログラムによって実行され得る。ファイル書込み要求は、ファイルシステムが識別することができる書込み要求である。ファイル書込み要求は、ファイルを作成すること、または、書込み予定のデータを使用して既に存在しているファイルを更新することであり得る、ここで、書込み予定のデータは、ファイルの一部またはファイル全体である。
【０２００】
ファイル書込み要求は、書込み予定のデータが以降に書込み予定のデータのオフセットに従ってストリップに分割されるように、書込み予定のデータのサイズをさらに搬送する場合がある、または、書込み予定のデータのサイズを書込み予定のデータを測定することにより取得することができるため、書込み予定のデータのサイズを搬送しない場合がある。
【０２０１】
書込み予定のデータのオフセットは、ファイル内の書込み予定のデータの相対的位置を表している。特に、書込み予定のデータのオフセットは、書込み予定のデータの開始位置とファイルヘッダとの間の距離を表していてもよい。書込み予定のデータのオフセットが0である場合には、書込み予定のデータの開始位置が書込み予定のファイルの開始位置であることを示している。書込み予定のデータのオフセットが1KBである場合には、書込み予定のデータの開始位置とファイルの開始位置との間の距離が1KBのデータサイズであることを示している。
【０２０２】
必要に応じて、ファイル書込み要求は、ファイル書込み要求のファイルパスをさらに搬送し得る、ここで、ファイルパスは、ファイルの記憶位置およびマッピング関係テーブルを示している。ファイルは、ファイルパスおよびファイル名を使用して共同して決定される。例えば、ファイルパスとファイル名との組合せは、/root/mma/a1である、ここで、/root/mma/は、ファイルパスであり、a1は、ファイル名であり、ファイルおよびマッピング関係テーブルは、パス/root/mma/に記憶されている。
【０２０３】
異なるファイルは異なるファイル名を有し得るし、同一のファイルパス内のファイル名が同一のものはない。
【０２０４】
必要に応じて、書込み要求は、マッピング関係テーブルの記憶位置をさらに搬送し得る、ここで、マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録している。
【０２０５】
クエリがファイル名を使用してマッピング関係テーブルに関して行われる前に、スナップショットIDとファイルバージョン番号との間のマッピング関係が記録されていてもよく、以下の2つの操作が実行されてもよい。
【０２０６】
(1) 現時点で最新のファイルメタデータをバックアップする、このことは、inodeをバックアップすることによって特に実施され得る。ファイルレベルのスナップショットについては、ファイルのinodeがバックアップされ、ファイルシステムのスナップショットが作成される場合には、ファイルシステムのinodeがバックアップされ、ファイルのinodeおよびファイルのルートinodeの両方を含む。
【０２０７】
(2) inode内のバージョン番号を更新する。クライアントサーバに設定されている書込みモードがROWである場合には、更新後のバージョン番号は、バックアップされたinodeに記憶される。クライアントサーバに設定されている書込みモードがCOWである場合には、更新後のバージョン番号は、バックアップによって生成されたinodeに記憶され、必要に応じて、バックアップされたinodeも、更新後のバージョン番号を記録し得る。例えば、inode Aがバックアップされてinode Bを生成すると、inode Aはバックアップされたinodeであり、inode Bはバックアップによって生成されたinodeである。
【０２０８】
ファイルバージョン番号とスナップショットIDとの間に対応関係が存在しており、スナップショットIDはスナップショット時刻に対応している、したがって、ファイルバージョン番号とスナップショット時刻との間に対応関係が存在しているともみなし得る。対応関係は、各ファイルバージョン番号が一意なスナップショットIDに対応していることを意味しており、ファイルバージョン番号の変更ルールは、スナップショットIDのものと同様である。例えば、より大きなスナップショットIDほどより大きなファイルバージョン番号を示している、または、より大きなスナップショットIDほどより小さなファイルバージョン番号を示している。複数のスナップショットのうちより最近のスナップショット時刻を有するスナップショットは、より大きなIDを有する。
【０２０９】
SANを含む、ブロックシステムに基づいたデータ書込み技術においては、ボリュームはファイル名の代わりにボリュームIDを使用してマークされ、ボリュームIDの機能はFIDのものと同様であることに留意されたい。加えて、ボリュームにおいては、ファイルパスと同様の概念は存在しない。したがって、クエリをマッピング関係テーブルに対して行う必要はもはやなく、ボリュームIDを使用してボリュームメタデータに対するクエリを直接行ってファイルバージョン番号を取得し得る。
【０２１０】
ストリップ要求生成モジュール511は、ファイル名を使用してマッピング関係テーブルに対するクエリを行って、書込み予定のデータがあるファイルのファイル識別子(FID)を取得し、FIDに従ってファイルメタデータに対するクエリを行ってファイルバージョン番号を取得するようにさらに構成される。
【０２１１】
マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録しており、ファイル名は、FIDと一対一の対応関係にある。マッピング関係テーブルの記憶位置は、ファイル書込み要求において搬送されてもよく、書込み要求からクライアントサーバによって取得される、または、マッピング関係テーブルは、クライアントサーバによってクライアントサーバに予め記憶されていてもよく、クライアントサーバは、ファイルパスに従ってマッピング関係テーブルを探し出す、または、マッピング関係テーブルは、別のストレージデバイスに記憶されていてもよい。
【０２１２】
ストリップ要求生成モジュール511は、メタデータに対して取得したファイルバージョン番号をさらに更新してもよい。更新の後、ファイルメタデータは、FIDおよびファイルバージョン番号を記録し、ファイルバージョン番号は、FIDを使用してファイルメタデータに対するクエリを行うことによって取得され得る。ファイルメタデータは、inodeに関する情報に記憶され得る。ファイルパスは、inodeの記憶位置を示している。ROWにおいては、バージョン番号がバックアップされたinodeに記憶されているため、ストリップ要求生成モジュール511はバックアップされたinodeを読み出し、COWにおいては、バージョン番号がバックアップによって生成されたinodeに記憶されているため、ストリップ要求生成モジュール511はバックアップによって生成されたinodeを読み出すことが、前述したことから分かり得よう。
【０２１３】
ファイルバージョン番号とファイルのスナップショットIDとの間に一対一の対応関係が存在しており、スナップショットIDを生成した後に、クライアントサーバは、スナップショットIDと一対一の対応関係にあるファイルバージョン番号を生成する。例えば、スナップショットIDはファイルバージョン番号として直接使用され得る、または、操作を行った後に取得したスナップショットIDはファイルバージョン番号として使用され得る。より最近に作成されたスナップショットがより大きなスナップショットIDを有している場合には、オプションの方式としては、より最近に作成されたスナップショットがスナップショットIDのより大きな値を有するものがあり、別のオプションの方式としては、より最近に作成されたスナップショットがスナップショットIDのより小さな値を有するものがある。
【０２１４】
ストリップ要求生成モジュール511は、書込み予定のデータを書込み予定のストリップを含む複数のストリップ(strip)に分割し、ストリップ分散ポリシーに従って、書込み予定のストリップのオフセットおよび書込み予定のストリップが属するオブジェクトのIDを取得するようにさらに構成される、ここで、このIDはオブジェクトIDとも称され得る。
【０２１５】
クライアントサーバは、ストリップサイズ(Size)に従ってデータを1つまたは複数のストリップに分割する。ストリップは、特定のサイズのデータである。書込み予定のデータのサイズが単一のストリップのサイズ以下である場合には、書込み予定のデータを1つのストリップに分割し、書込み予定のデータのサイズが単一のストリップのサイズより大きい場合には、書込み予定のデータが複数のストリップに分割される。同一のファイルから分割されたストリップのサイズは同一である。ストリップサイズ(Size)は、ファイルメタデータに記憶され得るし、この場合には、異なるファイルは、異なるストリップサイズを使用し得る。あるいは、ストリップサイズはオブジェクトが属するファイルのメタデータに記憶されていなくてもよく、ファイル全体システム内のファイルが1つのストリップサイズを共有する、この場合には、異なるファイルが同一のストリップサイズを使用し、ストリップサイズはファイルシステムのルートinodeに記憶される。オブジェクトは、ストリップを収容することができるコンテナとしてみなし得る。
【０２１６】
例えば、書込み予定のデータをいくつかのデータストリップに分割する場合には、分割することによって生成されるストリップは、分割することによって取得されるデータストリップを指す、または、書込み予定のデータをデータストリップに分割した後に、データ保護をデータストリップに対して行うためにいくつかの検証ストリップをさらに生成する場合には、分割することによって生成されるストリップは、データストリップおよび検証ストリップの両方を含む。
【０２１７】
各オブジェクトに含まれるストリップの総数はファイルメタデータに記憶されていてもよく、この場合には、異なるファイル内のオブジェクトに含まれるストリップの総数は異なっていてもよい、または、各オブジェクトに含まれるストリップの総数はオブジェクトが属するファイルのメタデータに記憶されていなくてもよく、この場合には、異なるファイル内のオブジェクトに含まれるストリップの総数は同一である。
【０２１８】
ファイル内の書込み予定のデータの開始位置を書込み予定のデータのオフセットから獲得してもよく、ファイル内の書込み予定のデータの終了位置を書込み予定のデータのオフセットおよび書込み予定のデータのサイズから獲得してもよいことに留意されたい。書込み予定のデータの開始位置がストリップサイズの整数倍ではない、または、終了位置のオフセットの値に1を加えたものがストリップサイズの整数倍ではない場合には、書込み予定のデータは、ストリップサイズに従ってまず分割され、分割のバウンダリは、ストリップサイズの整数倍となる。そのサイズが1つのストリップ未満であるデータ(このタイプのデータはストリップのダーティデータとも称され得る)が分割した後に生成された場合には、データを補完してストリップを形成する。ストリップ要求生成モジュール511によって行われる補完操作により、特に定めのない限り、後述するストリップおよびストリップのオフセットの両方は、補完した後に取得されるストリップおよびストリップのオフセットを指す。
【０２１９】
例えば、書込み予定のデータのオフセット範囲が4KB-300KBであるとともにストリップサイズが256KBである場合には、0KBおよび256KBが書込み予定のデータを分割するためのバウンダリとして使用され、2つのデータブロックが形成される、ここで、書込み予定のデータ内の2つのデータブロックのオフセット範囲は、それぞれ4KB-255KBおよび256KB-300KBとなる。2つのデータブロックに対して補完を行い、そのサイズが256KBである2つのストリップを形成する。前者のデータブロックを補完するために使用されるデータ(そのサイズは4KB-0KB=4KB)は前のストリップからもたらされており、後者のデータブロックを補完するために使用されるデータ(そのサイズは511KB-300KB=211KB)は次のストリップからもたらされる。書込み予定のデータのオフセットは、ファイル内の書込み予定のデータの相対的位置である。
【０２２０】
別の補完方法は、以下の通りである。書込み予定のデータの開始位置がストリップサイズの整数倍ではない、または、終了位置オフセットの値に1を加えたものがストリップサイズの整数倍ではない場合には、補完操作をストリップの書込み予定のデータに対して行ってもよく、その結果、分割後に取得されるストリップのサイズは恒常的となり、ストリップ内にマージンが存在しなくなる。OSDに既に記憶されているデータは、補完するためのデータとして読み出され使用され得る。
【０２２１】
例えば、書込み予定のデータのオフセット範囲が4KB-300KBであるとともにストリップサイズが256KBである場合には、書込み予定のデータは、そのオフセット範囲が0KB-511KBであるデータを形成するために補完され得るし、その後、データは、各ストリップのサイズが256KBとなるように、そのオフセット範囲が0KB-255KBおよび256KB-511KBである2つのストリップに分割される。
【０２２２】
ストリップ分散ポリシーを、クライアントサーバのファイルシステムよって提供している。ストリップが属するオブジェクトが記載されている、すなわち、ストリップとオブジェクトとの間の対応関係が記載されている。特に、対応関係は、ストリップのオフセットとオブジェクトとの間の対応関係であり得る。
【０２２３】
オブジェクトIDはオブジェクトを一意に識別し、同一のファイルに属するオブジェクトのIDは異なっており、異なるファイル内のオブジェクトのIDも異なっている。
【０２２４】
必要に応じて、オブジェクトIDとオブジェクトが属するファイルのFIDとの間に対応関係が存在していてもよい。すなわち、例えば、このオブジェクトIDによって表されるオブジェクトをもたらすファイルを、オブジェクトIDから獲得してもよい。
【０２２５】
例えば、オブジェクトIDを生成するためのオプションの方式には次のものがある。オブジェクトIDが64ビットのバイナリ番号を含む、ここで、前の32ビットはオブジェクトが属するファイルのIDであり、後の32ビットはクライアントサーバによって割り当てられ、後の32ビットはファイル内の一意であり、同一のファイル内の異なるオブジェクトの後の32ビットは異なっている。例えば、ファイル内のオブジェクトの識別子を使用する。このように、対応するFIDを、オブジェクトIDの前の32ビットから獲得してもよい。同様に、ブロック(block)システムにおいては、オブジェクトIDとボリュームIDとの間の関係も確立してもよい。
【０２２６】
オブジェクトIDを生成するための別のオプションの方式には次のものがある。オブジェクトIDが48ビットのバイナリ番号を含む、ここで、前の16ビットはファイルに対応しており、異なるファイルの前の16ビットは異なっており、後の32ビットはクライアントサーバによって割り当てられ、後の32ビットはファイル内の一意であり、同一のファイル内の異なるオブジェクトの後の32ビットは異なっている。
【０２２７】
別の実施形態においては、IDとオブジェクトが属するファイルのFIDとの間に対応関係が存在していなくてもよい。
【０２２８】
図3Aおよび図3Bは、2つの異なるストリップ分散ポリシーを示している。ストリップインデックスは、ファイル内のストリップのオフセット関係を表しており、ストリップインデックスは0以上の整数である、ここで、最小のストリップインデックスは0であり、2番目に最小のストリップインデックスは1であり、3番目に最小のストリップインデックスは2であり、…、などとなっている。隣接したインデックス値を有する2つのストリップはまた、ファイル内の隣接したオフセットを有する。
【０２２９】
(1) 同一のファイルに属するオブジェクトのサイズは固定であり、同一のファイル内のストリップのサイズは同一である、このことは、異なるオブジェクトに含まれるストリップの総数が同一であることを意味している、(2) インデックスの順番に従ってストリップによって前のオブジェクトをまず満たしその後次のオブジェクトを満たす、すなわち、いくつかの連続したストリップが、書込み予定のデータ内のストリップのオフセットサイズの序列に従って同一のオブジェクトに属することになる、オプションのストリップ分散ポリシーを図3Aに示している。図3Aに示しているように、各オブジェクトは、4つのストリップを固定的に含んでいる。例えば、ストリップサイズは256KBであり、各オブジェクトは4つのストリップを有し、すなわち、オブジェクトサイズは256KB×4=1024KBである。この場合には、第1のオブジェクトはストリップ0からストリップ3を記憶し、第2のオブジェクトはストリップ4からストリップ7を記憶し、第3のオブジェクトはストリップ8からストリップ11を記憶し、…、それゆえ、第1のオブジェクトのIDは0であり、第2のオブジェクトのIDは1であり、第3のオブジェクトのIDは2であり、…となる。
【０２３０】
ストリップオフセットは、オブジェクト内のストリップの相対的位置を表すために使用され、特に、オブジェクト内のストリップの開始データの相対的位置であってもよい。ストリップオフセット=(ストリップインデックス%オブジェクト内のストリップの数量)×ストリップサイズである、ここで、ストリップインデックス%オブジェクト内のストリップの数量は、ストリップインデックスをオブジェクト内のストリップの数量で除算することによる剰余を計算することを指す。
【０２３１】
(1) 同一のファイル内のオブジェクトのサイズは固定されていない、すなわち、同一のファイル内の異なるオブジェクトは、異なる総数のストリップを有していてもよい、(2) オブジェクトの総数は固定されている、すなわち、異なるファイルは同一の数量のオブジェクトを有し、図3Bに示しているように、全体で3つのオブジェクトが存在している、別のオプションのストリップ分散ポリシーを図3Bに示している。例えば、ストリップサイズが256KBであるとともにオブジェクトの総数は3に固定されている場合には、第1のストリップ(ストリップ0)は第1のオブジェクト(オブジェクト0)にあり、第2のストリップ(ストリップ1)は第2のオブジェクト(オブジェクト1)にあり、…、同様に、第4のストリップ(ストリップ3)も第1のオブジェクトにあり、第5のストリップ(ストリップ4)も第2のオブジェクトにある。ストリップインデックスは、0以上の整数であり、ファイル内のストリップ間の位置関係を表している。ストリップが属するオブジェクト内の各ストリップのオフセットも決定され得るし、ファイル内のオブジェクトの識別子は、ファイル内のオブジェクトの総数で除算したストリップインデックスであり得る。具体的な計算式は、ファイル内のオブジェクトの識別子=ストリップインデックス%ファイル内のオブジェクトの数量であるとともに、ストリップオフセット=(ストリップインデックス/オブジェクトの数量)×ストリップサイズであってもよい。
【０２３２】
ストリップインデックスは、書込み予定のデータのオフセットを使用して決定され得る。例えば、ファイル全体については、ファイルを分割した後に取得した開始データは第1のオブジェクト内のストリップ(ストリップ0)にあり、カレント書込み予定のデータのオフセットはオブジェクト1内の第5のストリップ(ストリップ4)にある。この場合には、書込み予定のデータを分割した後に生成されたストリップにおいては、第1のストリップのインデックスは4であり、別のストリップのインデックスは同様に取得される。
【０２３３】
前述したことは、ストリップが属するオブジェクトのIDを計算するための2つのソリューションを説明しており、異なるストリップ分散ポリシーに従って、別の実施形態ソリューションが存在していてもよい。異なる分散ポリシーにおいて使用されるパラメータは異なっていてもよく、これらのパラメータはクライアントサーバに対するクエリを行うことによって一般的に取得されてもよい。
【０２３４】
すべてのストリップの処理方式が同一であるため、説明のための一例として「書込み予定のストリップ」だけを以下では使用している。
【０２３５】
ストリップ要求送信モジュール512は、書込み予定のストリップを記憶するために使用されるOSDを選択するように構成される。
【０２３６】
オプションの計算方法は、書込み予定のストリップのFIDに従って、書込み予定のストリップを記憶するためのOSDを決定することである。例えば、FIDのハッシュ値は、OSDの総数で除算され、剰余は、書込み予定のストリップを記憶するためのOSDの識別子として使用される、すなわち、FIDのハッシュ値 mod OSDの総数である。別のソリューションも存在し得る。例えば、クライアントサーバは、OSDをランダムに選択してオブジェクトに属する書込み予定のストリップを記憶し、同一のオブジェクトに属するストリップは、同一のOSDに記憶され得る。
【０２３７】
加えて、ストリップを記憶するためのOSDはまた、書込み予定のストリップのものであるFIDおよびオブジェクトIDに従って共同して決定され得る。実際には、計算方法を、OSDを選択できるのであればランダムに選択してもよい。
【０２３８】
ストリップ要求送信モジュール512は、ストリップ書込み要求をOSDに送信するようにさらに構成される、ここで、ストリップ書込み要求は、書込み予定のストリップ、書込み予定のストリップのバージョン番号、書込み予定のストリップのサイズ、書込み予定のストリップのオフセット、および書込み予定のストリップが属するオブジェクトのIDを搬送する。
【０２３９】
必要に応じて、OSDがROWおよびCOWの両方をサポートしているケースでは、OSDがクライアントサーバによって指定される書込みモードに従って書込み予定のストリップを書き込めるように、書込みモードがさらに送信されてもよい。書込みモードはROWまたはCOWである。OSDが1つの書込みモードだけをサポートしている場合には、書込みモードがOSDに送信されなくてもよい。
【０２４０】
ストリップ要求受信モジュール521は、ストリップ書込み要求を受信し、書込み予定のストリップをOSDの記憶媒体に書き込むように構成される。
【０２４１】
ストリップ要求受信モジュール521は、ステップ26において方法を実行し得る。例えば、書込み予定のストリップの書込みは、4つの方式のうちの1つまたは複数で実施され得る。
【０２４２】
ストリップ要求生成モジュール511は、ファイル読出し要求を受信するようにさらに構成され得る、ここで、ファイル読出し要求は、ファイル名、読出し予定のデータのサイズ、および読出し予定のデータのオフセットを搬送する。
【０２４３】
ファイル書込み要求と同様に、ファイル読出し要求は、ファイル読出し要求のファイルパスをさらに搬送し得る、ここで、ファイルパスは、マッピング関係テーブルの記憶位置を記録している。ファイルは、ファイルパスおよびファイル名を使用して一意に決定され得る。
【０２４４】
特に、本ステップは、クライアントサーバのファイルシステム内のプログラムによって実行され得る。ファイル読出し要求は、ファイルシステムが識別することができる読出し要求である。ファイル読出し要求は、すべてのファイルまたはファイルのデータの一部を読み出すように要求する。
【０２４５】
読出し予定のデータのオフセットは、ファイル内の読出し予定のデータの相対的位置を表している。特に、読出し予定のデータのオフセットは、読出し予定のデータの開始位置とファイルヘッダとの間の距離を表していてもよい。読出し予定のデータのオフセットが0である場合には、読出し予定のデータの開始位置が読出し予定のファイルの開始位置であることを示している。読出し予定のデータのオフセットが2KBである場合には、読出し予定のデータの開始位置とファイルの開始位置との間の距離が2KBのデータサイズであることを示している。
【０２４６】
必要に応じて、ファイル読出し要求は、ファイルパスをさらに搬送し得る、ここで、ファイルパスは、マッピング関係テーブルの記憶位置を記録している。マッピング関係テーブルの詳細については、ステップ21の説明を参照されたい。
【０２４７】
ファイル名は、読出し予定のデータがあるファイルのファイル名であり得る、または、読出し予定のデータがあるファイルのスナップショットのファイル名であり得る。ファイル名が読出し予定のデータがあるファイルのファイル名である場合には、ファイル読出し要求が最新の読出し予定のデータにアクセスすることを意図していることを示し、ファイル名が読出し予定のデータがあるファイルのスナップショットのファイル名である場合には、ファイル読出し要求がスナップショットの読出し予定のデータにアクセスすることを意図していることを示す。ストリップ記憶モジュール522は、ファイル名を使用してマッピング関係テーブルに対するクエリを行って、読出し予定のデータがあるファイルのFIDを取得し、FIDに従ってファイルメタデータに対するクエリを行ってファイルバージョン番号を取得するように構成される。
【０２４８】
ファイル名が読出し予定のデータがあるファイルのファイル名である場合には、マッピング関係テーブルを記憶しているファイルパスは読出し予定のデータがあるファイルのファイルパスであり、ファイルバージョン番号がファイルに対応するFIDに従ってメタデータに対するクエリを行うことによって獲得される。
【０２４９】
ファイル名がスナップショットのファイル名である場合には、マッピング関係テーブル内のファイルパスは、スナップショットファイルがあるパスであり、ファイルバージョン番号がスナップショットファイルのFIDに従ってメタデータに対するクエリを行うことによって獲得される。
【０２５０】
マッピング関係テーブルは、ファイル名とFIDとの間のマッピング関係を記録しており、ファイル名は、FIDと一対一の対応関係にある。FIDの説明およびFIDとファイルバージョン番号との間の関係については、ステップ21およびステップ22を参照されたい。マッピング関係テーブルの記憶位置は、ファイル読出し要求において搬送されてもよく、書込み要求からクライアントサーバによって取得される、または、マッピング関係テーブルは、クライアントサーバによってクライアントサーバに予め記憶されていてもよく、クライアントサーバは、ファイルパスに従ってマッピング関係テーブルを探し出す、または、マッピング関係テーブルは、別のストレージデバイスに記憶されていてもよい。
【０２５１】
ステップ22を参照すれば、異なる特定のケースに従って、メタデータは、ファイルのinodeに記憶され得る、または、ファイルシステムのルートinodeに記憶され得る。
【０２５２】
スナップショットIDとファイルバージョン番号との間に一対一の対応関係が存在しており、その結果、クライアントサーバは、スナップショットIDに従ってファイルバージョン番号を取得することができる。この対応関係は、ファイルメタデータに記憶され得る。
【０２５３】
ストリップ要求生成モジュール511は、ファイル読出し要求を処理し、ファイル読出し要求をストリップ読出し要求を含む複数の読出し要求に変換することであって、各ストリップ読出し要求はストリップを読み出すように要求するために使用され、ストリップ読出し要求は読出し予定のストリップをOSDから読み出すように要求するために使用される、変換することを行い、各読出し要求に対応するオブジェクトIDを決定するようにさらに構成され得る、ここで、ストリップ読出し要求は、読出し予定のストリップのバージョン番号、読出し予定のストリップのオフセット、読出し予定のストリップのサイズ、および読出し予定のストリップのオブジェクトIDを搬送する。
【０２５４】
特に、読出し予定のストリップを含む、読み出す必要のある各ストリップのオフセットを、読出し予定のデータのサイズおよび読出し予定のデータのオフセットに従って獲得してもよい。
【０２５５】
ステップ23におけるストリップを生成するための方法を参照すれば、書込み予定のデータは、読出し予定のストリップのオフセットを取得するために、ストリップサイズに従って、および書込み予定のデータのオフセットおよび書込み予定のデータの長さを使用して、ストリップに分割され得る。同一の方法により、本ステップにおいて、読み出す必要のある各ストリップのオフセットも、ストリップサイズ、読出し予定のデータのオフセット、および読出し予定のデータの長さを使用して取得してもよい。ストリップサイズはファイルのinodeからもたらされてもよく、この場合には、異なるファイルは異なるストリップサイズを使用してもよいし、または、全システム内のすべてのファイルが1つのストリップサイズを共有する。
【０２５６】
読出し予定のストリップのオフセットを取得した後に、読出し予定のストリップがあるオブジェクトのIDは、ステップ23におけるものと同一の方法に従って取得されてもよい。ファイル名が読出し予定のデータがあるファイルのファイル名であるかまたはスナップショットのファイル名であるかにかかわらず、読出し要求に対応するオブジェクトIDについてクエリを行うためのFIDは読出し予定のデータがあるファイルのFIDであることに留意されたい。
【０２５７】
ストリップ要求送信モジュール512は、ストリップ読出し要求を受信するために使用されるOSDを選択するようにさらに構成され得る。
【０２５８】
特に、本ステップは、クライアントサーバのオブジェクトストレージクライアントによって実行されてもよい。
【０２５９】
同一のストリップのストリップ読出し要求およびストリップ書込み要求は、同一のOSDに対応している必要がある。可能な方法としては、ステップ24におけるものと同一のOSD選択計算方法を使用することがある。
【０２６０】
ストリップ要求送信モジュール512は、ストリップ読出し要求を選択したOSDに送信するようにさらに構成され得る。
【０２６１】
読出し予定のストリップのバージョン番号は、読出し予定のストリップが属するファイルのバージョン番号である。
【０２６２】
必要に応じて、書込みモードは、OSDにさらに送信され得る、ここで、書込みモードは、ステップ25におけるストリップ書込み要求において搬送された書込みモードに一致している。読出し予定のストリップのオブジェクトIDは、読出し予定のストリップが属するオブジェクトのIDである。
【０２６３】
ストリップ要求受信モジュール521は、ストリップ読出し要求を受信し、読出し予定のストリップの記憶位置を探索し、読出し予定のストリップをクライアントサービング装置に送信するようにさらに構成され得る。
【０２６４】
ストリップ要求受信モジュール521は、ステップ32において機能を実施し得るし、例えば、ステップ32において述べた方式1または方式2で読出し予定のストリップを読み出す。したがって、ストリップ要求受信モジュール521の特定の機能については、ステップ32を参照してもよい。
【０２６５】
本発明の各態様または各態様の可能な実施様態は、システム、方法、またはコンピュータプログラム製品として特に実装され得る。したがって、本発明の各態様または各態様の可能な実施様態は、本明細書では「回路」、「モジュール」、または「システム」と一様に称している、ハードウェアのみの実施形態、ソフトウェアのみの実施形態(ファームウェア、常駐ソフトウェアなどを含む)、またはソフトウェアとハードウェアとの組合せを用いた実施形態の形式を使用し得る。加えて、本発明の各態様または各態様の可能な実施様態は、コンピュータプログラム製品の形式をとり得る、ここで、コンピュータプログラム製品は、コンピュータ可読媒体に記憶されているコンピュータ可読プログラムコードを指す。
【０２６６】
コンピュータ可読媒体は、コンピュータ可読信号媒体またはコンピュータ可読記憶媒体であってもよい。コンピュータ可読記憶媒体は、限定を意図するものではないが、ランダムアクセスメモリ(RAM)、リードオンリーメモリ(ROM)、消去可能プログラマブルリードオンリーメモリ(EPROMまたはフラッシュメモリ)、光ファイバ、およびコンパクトディスクリードオンリーメモリ(CD-ROM)などの、電子、磁気、光学、電磁気、赤外線、もしくは半導体のシステム、デバイス、もしくは装置、または任意の適切なその組合せを含む。
【０２６７】
コンピュータ内のプロセッサは、プロセッサが各ステップまたはフローチャート内のステップの組合せに規定されている機能およびアクションを行うことができるように、コンピュータ可読媒体に記憶されているコンピュータ可読プログラムコードを読み出し、装置は、各ブロックまたはブロック図内のブロックの組合せに規定されている機能およびアクションを実施するように生成される。
【符号の説明】
【０２６８】
11  クライアントサーバ
12  オブジェクトストレージデバイス
41  クライアントサーバ
411  プロセッサ
412  記憶媒体
413  インターフェース
42  オブジェクト処理デバイス
421  プロセッサ
422  記憶媒体
423  インターフェース
424  ハードディスク
51  クライアントサービング装置
511  ストリップ要求生成モジュール
512  ストリップ要求送信モジュール
513  スナップショットモジュール
52  オブジェクトストレージ装置
521  ストリップ要求受信モジュール
522  ストリップ記憶モジュール
523  ストリップ読出しモジュール
【図１】
0006607941.tif 000002
【図２】
0006607941.tif 000003
【図３Ａ】
0006607941.tif 000004
【図３Ｂ】
0006607941.tif 000005
【図４】
0006607941.tif 000006
【図５】
0006607941.tif 000007
【図６】
0006607941.tif 000008
【図７】
0006607941.tif 000009