(57)【要約】【課題】ストレージシステムにおける重複排除率の低下を抑制すること。【解決手段】本発明のストレージシステム３００は、データバッファ３１１と、当該データバッファに入力されたデータを分割して分割データを生成する分割手段３１２と、分割された分割データを重複記憶を排除して記憶装置３２０に格納する記憶処理手段３１３と、を備え、上記分割手段３１２は、データバッファ３１１に入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しておりデータバッファに入力された連続データと、が当該データバッファ内で連結された連結データを分割基準によって分割する。【選択図】図２７
2014174604.tif 000002
【特許請求の範囲】
【請求項１】
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファと、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段と、
前記分割手段によって分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段と、を備え、
前記分割手段は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
ストレージシステム。
【請求項２】
請求項１に記載のストレージシステムであって、
前記分割手段は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【請求項３】
請求項２に記載のストレージシステムであって、
前記記憶処理手段は、前記書き込み指令の入力を受けたタイミングで、前記前記分割手段にて生成された前記分割データ及び前記残存データを記憶装置に格納する処理を行い、
前記分割手段は、記憶装置に格納された前記残存データを前記データバッファに入力し、当該データバッファに入力された前記残存データ及び前記連続データが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【請求項４】
請求項２又は３に記載のストレージシステムであって、
前記分割手段は、前記残存データの後端側に連続する前記連続データと当該残存データとが、前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【請求項５】
請求項２又は３に記載のストレージシステムであって、
前記分割手段は、前記残存データの前端側に連続する前記連続データと当該残存データとが、前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【請求項６】
請求項２乃至５のいずれかに記載のストレージシステムであって、
前記データバッファは、当該データバッファにそれぞれが分断されて入力された少なくとも２つデータ群を一時的に記憶し、
前記分割手段は、第一の前記データ群の後端側に位置し前記分割基準によって分割されなかった前記残存データである第一残存データの後端側に連続すると共に、第二の前記データ群の前端側に位置し前記分割基準によって分割されなかった前記残存データである第二残存データの前端側に連続する前記連続データと、前記第一残存データ及び前記第二残存データと、に前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【請求項７】
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置に、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段と、
前記分割手段によって分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段と、を実現させると共に、
前記分割手段は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
ことを実現させるためのプログラム。
【請求項８】
請求項７に記載のプログラムであって、
前記分割手段は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
プログラム。
【請求項９】
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置により、
前記データバッファに入力されたデータを分割して分割データを生成する分割処理を行い、
分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除するデータ格納方法であって、
前記分割処理は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
データ格納方法。
【請求項１０】
請求項９に記載のデータ格納方法であって、
前記分割処理は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
データ格納方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージシステムにかかり、特に、同一内容のデータの重複記憶を排除するストレージシステムに関する。
【背景技術】
【０００２】
近年、コンピュータの発達及び普及に伴い、種々の情報がデジタルデータ化されている。このようなデジタルデータを保存しておく装置として、磁気テープや磁気ディスクなどの記憶装置がある。そして、保存すべきデータは日々増大し、膨大な量となるため、大容量なストレージシステムが必要となっている。また、記憶装置に費やすコストを削減しつつ、信頼性も必要とされる。これに加えて、後にデータを容易に取り出すことが可能であることも必要である。その結果、自動的に記憶容量や性能の増大を実現できると共に、重複記憶を排除して記憶コストを削減し、さらには、冗長性の高いストレージシステムが望まれている。
【０００３】
このような状況に応じて、近年では、特許文献１に示すように、コンテンツアドレスストレージシステムが開発されている。このコンテンツアドレスストレージシステムは、データを分散して複数の記憶装置に記憶すると共に、このデータの内容に応じて特定される固有のコンテンツアドレスによって、当該データを格納した格納位置が特定される。また、コンテンツアドレスストレージシステムの中には、所定のデータを複数のフラグメントに分割すると共に、冗長データとなるフラグメントをさらに付加して、これら複数のフラグメントをそれぞれ複数の記憶装置にそれぞれ格納する、というものもある。
【０００４】
そして、上述したようなコンテンツアドレスストレージシステムでは、後に、コンテンツアドレスを指定することにより、当該コンテンツアドレスにて特定される格納位置に格納されているデータつまりフラグメントを読み出し、複数のフラグメントから分割前の所定のデータを復元することができる。
【０００５】
また、上記コンテンツアドレスは、データの内容に応じて固有となるよう生成される値、例えばデータのハッシュ値、に基づいて生成される。このため、重複データであれば同じ格納位置のデータを参照することで、同一内容のデータを取得することができる。従って、重複データを別々に格納する必要がなく、重複記録を排除して、データ容量の削減を図ることができる。
【０００６】
特に、上述したような重複記憶を排除する機能を有するストレージシステムでは、ファイルなど書き込み対象となるデータを所定容量の複数のブロックデータに分割して圧縮し、記憶装置に書き込む。このように、ファイルを分割したブロックデータ単位で重複記憶を排除することで、重複率が増大し、データ容量の削減を図っている。
【０００７】
上述したようなストレージシステムにおいて、最良の重複排除を行うためには、全ファイルの全ブロックデータを比較して、最も重複するブロックデータを求めるのが最適である。ところが、かかる処理を実現するためには、極めて膨大な計算量が必要となる。このため、上述した記憶対象となるデータを分割する際には、例えば、finger printを用いたデータ可変分割方式が用いられている。この方式は、同じような内容のデータを記憶する場合に当該データ中の同じ箇所がデータの分割ポイントとなるように、データの先頭からfinger print値を計算し、ある特定のfinger print値を持った箇所でデータを分割する、という処理方式である。このようにfinger print値を用いてデータを分割する方式は、計算量が少なくて済むというメリットがある反面、分割ポイントがずれた場合、そのポイント以降のデータの重複排除率が低下する、という問題がある。
【０００８】
一方、データ分割を行うタイミングとしては、一旦全てのデータをディスクに書き込んだ後に、ファイルの先頭からデータ分割を行うポストプロセス方式と、データをディスクに書き込む際にリアルタイムでデータ分割を行うインライン方式、の２つの方式がある。上記ポストプロセス方式は、データが全て揃ってからデータ分割を行うため、安定したデータ分割が行える反面、インライン方式と比較してディスクのＩ／Ｏ回数が３倍になることから、ディスクの負荷が高くなる、という問題がある。このため、インライン方式を採用した製品が多く存在している。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２００５−２３５１７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
しかしながら、上述したインライン方式でデータを分割するストレージシステムでは、クライアントからのデータ書き込みシーケンスが変化すると、ディスクへのデータ書き込み時におけるデータの分割ポイントが変わってしまうため、重複排除率が低下する、という問題があった。ここで、データ書き込みシーケンスの変化としては、例えば、クライアントがファイル内のデータをストレージに送ってくる順番の変化や、コミットの発生、などがある。
【００１１】
特に、データバックアップ中にコミットが発生すると、その時点でクライアントからストレージシステムに送られてきていたデータを物理ディスク上に書き込む必要があるため、コミット時にデータバッファ上にあったデータの先頭と終端をデータ分割ポイントとして当該データをブロックデータに分割し、書き込むことになる。このため、finger print値とは関係無くデータの分割が行われる。すると、例えば、同じ内容のデータをバックアップした場合であっても、データの分割ポイントが変化するため、分割されたブロックデータ間で同一内容とは見なされない可能性が高まり、重複排除率が低下する。
【００１２】
以下、上述した問題の具体例を、図１乃至図２を参照して説明する。まず、図１Ａ及び図１Ｂの例は、クライアント５００がファイルＦをストレージ４００にバックアップ中に（矢印Ｂ参照）、図１Ａに示すようにデータＦ１００がデータバッファ４１０にある状態でコミットが発生した場合の動作を示している。コミットが発生すると（矢印Ｃ参照）、図１Ａに示すように、その時点でデータバッファ４２０にあるデータＦ１００は、インラインデータ分割処理４２０でブロックデータＦ１０１とブロックデータＦ１０２に分割される（矢印Ｄ参照）。そして、物理ディスク４３０上にブロックＦ１０１とデータブロックＦ１０２として書き込まれる（矢印Ｒ参照）。
【００１３】
その後、図１Ｂに示すように、データＦ１００に連続するデータＦ２００がデータバッファ４１０にある状態で再びコミットが発生すると（矢印Ｃ参照）、今度はデータＦ２００がインラインデータ分割処理４２０でブロックデータＦ２０１とブロックデータＦ２０２に分割される（矢印Ｄ参照）。そして、物理ディスク４３０上にブロックデータＦ２０１とブロックデータＦ２０２として書き込まれる（矢印Ｒ参照）。
【００１４】
上記場合、ブロックデータＦ１０２の分割ポイントＰは、finger print値で正当に評価された分割ポイントではなく、強制的に分割されたポイントである。このため、ブロックデータＦ１０２，Ｆ２０１，Ｆ２０３は、最適なfinger print値で分割されたデータではない可能性がある。
【００１５】
また、図２Ａ及び図２Ｂの例では、図２Ａに示すように、クライアント５００がファイルＦをストレージ４３０にバックアップ中に（矢印Ｂ参照）、データＦ１００と、当該データＦ１００とは連続せず分断されたデータＦ２００と、がデータバッファ４１０にある状態でコミットが発生した場合の動作を示している。このような例は、ファイルバックアップ時にファイルデータの書き込み順序がオフセット順に保証されないプロトコル（例えばＮＦＳ）でクライアント−ストレージ間のデータの授受を行っている場合に発生しうる。
【００１６】
上述した状態でコミットが発生すると（矢印Ｃ参照）、その時点でデータバッファ４１０にあるデータＦ１００とデータＦ２００は、インラインデータ分割処理４２０でブロックＦ１０１，Ｆ１０２、ブロックデータＦ２０１〜Ｆ２０４に分割される（矢印Ｄ参照）。そして、物理ディスク４３０上にブロックデータＦ１０１，Ｆ１０２，Ｆ２０１〜Ｆ２０４として書き込まれる（矢印Ｒ参照）。
【００１７】
その後、図２Ｂに示すように、上記データＦ１００とＦ２００の間に位置するデータＦ３００がデータバッファ４１０にある状態で再びコミットが発生すると（矢印Ｃ参照）、今度はデータＦ３００がインラインデータ分割処理４２０でブロックデータＦ３０１〜Ｆ３０３に分割される（矢印Ｄ参照）。そして、物理ディスク４３０上にブロックデータＦ３０１〜Ｆ３０３として書き込まれる（矢印Ｒ参照）。
【００１８】
上記場合、ブロックＦ１０２の分割ポイントＰは、finger print値等で正当に評価された分割ポイントではなく、強制的に分割されたポイントのため、ブロックデータＦ１０２以降、つまり、ブロックデータＦ１０２，Ｆ３０１〜Ｆ３０３，Ｆ２０１〜Ｆ２０４は、最適なfinger print値で分割されたデータではない可能性がある。
【００１９】
以上のように、重複記憶を排除する機能を有するストレージシステムにおいては、同じ内容のデータをバックアップした場合であっても、データの分割ポイントが変化することにより重複排除率が低下する、という問題があった。
【００２０】
このため、本発明の目的は、上述した課題である、重複記憶を排除する機能を有するストレージシステムにおける重複排除率の低下、という問題を解決することにある。
【課題を解決するための手段】
【００２１】
本発明の一形態であるストレージシステムは、
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファと、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段と、
前記分割手段によって分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段と、を備え、
前記分割手段は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
という構成をとる。
【００２２】
また、本発明の他の形態であるプログラムは、
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置に、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段と、
前記分割手段によって分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段と、を実現させると共に、
前記分割手段は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
ことを実現させるためのプログラムである。
【００２３】
また、本発明の他の形態であるデータ格納方法は、
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置により、
前記データバッファに入力されたデータを分割して分割データを生成する分割処理を行い、
分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除するデータ格納方法であって、
前記分割処理は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
という構成をとる。
【発明の効果】
【００２４】
本発明は、以上のように構成されることにより、重複記憶を排除する機能を有するストレージシステムにおける重複排除率の向上を図ることができる。
【図面の簡単な説明】
【００２５】
【図１Ａ】本発明に関連するストレージシステムにおけるデータ格納時の様子を示す図である。
【図１Ｂ】本発明に関連するストレージシステムにおけるデータ格納時の様子を示す図である。
【図２Ａ】本発明に関連するストレージシステムにおけるデータ格納時の様子を示す図である。
【図２Ｂ】本発明に関連するストレージシステムにおけるデータ格納時の様子を示す図である。
【図３】本発明の実施形態１におけるストレージシステムを含むシステム全体の構成を示すブロック図である。
【図４】本発明の実施形態１におけるストレージシステムの構成の概略を示すブロック図である。
【図５】本発明の実施形態１におけるストレージシステムの構成を示す機能ブロック図である。
【図６】図５に開示したストレージシステムに記憶されるデータの一例を示す図である。
【図７】図５に開示したストレージシステムに記憶されるデータの一例を示す図である。
【図８】図５に開示したストレージシステムに記憶されるデータの一例を示す図である。
【図９】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明するための説明図である。
【図１０】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明する説明図である。
【図１１Ａ】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明する説明図である。
【図１１Ｂ】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明する説明図である。
【図１２Ａ】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明する説明図である。
【図１２Ｂ】図５に開示したストレージシステムにおけるデータ書き込み処理の様子を説明する説明図である。
【図１３】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１４】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１５】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１６】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１７Ａ】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１７Ｂ】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１８】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図１９】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２０】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２１】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２２】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２３】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２４】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２５】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２６】図５に開示したストレージシステムにおけるデータ書き込み処理の動作を示すフローチャートである。
【図２７】本発明の付記１におけるストレージシステムの構成を示す機能ブロック図である。
【発明を実施するための形態】
【００２６】
＜実施形態１＞
本発明の第１の実施形態を、図３乃至図２６を参照して説明する。図３乃至図８は、ストレージシステムの構成を説明するための図である。図９乃至図１２は、ストレージシステムにおけるデータ書き込み時におけるデータの様子を示す図である。図１３乃至図２６は、ストレージシステムの動作を示すフローチャートである。
【００２７】
ここで、本実施形態は、後述する付記に記載のストレージシステム等の具体的な一例を示すものである。そして、以下では、ストレージシステムが、複数台のサーバコンピュータが接続されて構成されている場合を説明する。但し、本発明におけるストレージシステムは、複数台のコンピュータにて構成されることに限定されず、１台のコンピュータで構成されていてもよい。
【００２８】
［構成］
図３に示すように、本発明におけるストレージシステム１は、ネットワークＮを介してバックアップ処理を制御するバックアップシステム４に接続している。そして、バックアップシステム４は、ネットワークＮを介して接続されたバックアップ対象装置５に格納されているバックアップ対象データ（記憶対象となるデータ）を取得し、ストレージシステム１に対して記憶するよう要求する。これにより、ストレージシステム１は、記憶要求されたバックアップ対象データをバックアップ用に記憶する。
【００２９】
そして、図４に示すように、本実施形態におけるストレージシステム１は、複数のサーバコンピュータが接続された構成を採っている。具体的に、ストレージシステム１は、ストレージシステム１自体における記憶再生動作を制御するサーバコンピュータであるアクセラレータノード２と、データを格納する記憶装置を備えたサーバコンピュータであるストレージノード３と、を備えている。なお、アクセラレータノード２の数とストレージノード３の数は、図４に示したものに限定されず、さらに多くの各ノード２，３が接続されて構成されていてもよい。
【００３０】
さらに、本実施形態におけるストレージシステム１は、データを分割及び冗長化し、分散して複数の記憶装置に記憶すると共に、記憶するデータの内容に応じて設定される固有のコンテンツアドレスによって、当該データを格納した格納位置を特定するコンテンツアドレスストレージシステムである。このコンテンツアドレスストレージシステムについては、後に詳述する。
【００３１】
なお、以下では、ストレージシステム１が１つのシステムであるとして、当該ストレージシステム１が備えている構成及び機能を説明する。つまり、以下に説明するストレージシステム１が有する構成及び機能は、アクセラレータノード２あるいはストレージノード３のいずれに備えられていてもよい。なお、ストレージシステム１は、図４に示すように、必ずしもアクセラレータノード２とストレージノード３とを備えていることに限定されず、いかなる構成であってもよく、例えば、１台のコンピュータにて構成されていてもよい。さらには、ストレージシステム１は、コンテンツアドレスストレージシステムであることにも限定されず、重複排除機能を有しているストレージシステムであればよい。
【００３２】
図５に、上述したストレージシステム１のさらに詳細な構成を示す。この図において、クライアント６〜９は、上述したバックアップ対象装置５に相当し、ＬＡＮ回線などのネットワークＮを介して、ストレージシステム１に対して記憶しているデータであるファイルＦのバックアップを行う。なお、ＬＡＮ回線Ｎは、クライアント６〜９とストレージシステム１とを繋ぐネットワーク回線であり、クライアント６〜９とストレージシステム１と間でデータの受け渡しを行うために用いられる。なお、本実施例では、ネットワーク回線の一例としてＬＡＮ回線Ｎとしているが、クライアント６〜９とストレージシステム１と間でデータの受け渡しを行えるものであれば、ファイバーチャネルやＳＣＳＩケーブルなどいかなる回線であってもよい。
【００３３】
ストレージシステム１は、装備された演算装置にプログラムが読み出されることで構築された、以下に説明する各処理を行う各処理部等を備えている。また、ストレージシステム１は、装備されたメモリなどの記憶装置に形成された各格納部等を備えている。
【００３４】
具体的に、ストレージシステム１は、図５に示すように、データ処理部１１と、コミット処理部１２と、データバッファ制御部１３と、データバッファ管理情報格納部１４と、データバッファ１５（メモリ）と、を備えている。また、ストレージシステム１は、インラインデータ分割処理部１６と、データ分割ポイント情報格納部１７と、インライン分割対象データ格納部１８と、ポストプロセスデータ分割処理部１９と、ポストプロセスデータ分割対象領域情報格納部２０と、ポストプロセス分割対象データ格納部２１と、ディスク入出力制御部２１と、を備える。そして、ストレージシステム１は、記憶対象となるデータを格納する記憶装置である物理ディスク２３を備える。
【００３５】
なお、上述したストレージシステム１が備える構成は、実際には、図４に示したアクセラレータノード２及びストレージノード３がそれぞれ備えているＣＰＵ（Central Processing Unit）などの演算装置やハードディスクドライブなどの記憶装置にて構成されている。
【００３６】
次に、上述したストレージシステム１が備える各部について詳述する。まず、データ処理部１１は、クライアント６〜９から送られてきたファイルＦのデータを受け取り、データバッファ制御部１３に引き渡す。コミット処理部１２は、クライアント６〜９からのコミット要求を受け取り、コミット要求があったことをデータバッファ制御部１３に伝える。なお、データバッファ制御部１３は、データバッファ更新部１３１、データコミット部１３３、インラインデータ分割処理起動部１３２、データバッファ廃棄部１３４を備えている。
【００３７】
データバッファ制御部１３は、データ処理部１１から受け取ったファイルＦのデータを、データバッファ更新部１３１を用いてデータバッファ１５に格納するとともに、データバッファ管理情報格納部１４に格納されているデータバッファ管理表１４１を更新する。なお、バックアップ対象となるファイルＦのデータバッファ管理表１４１が無い場合は、データバッファ管理表１４１を作成する。また、データバッファ１５に空きが無く、データ処理部１１から受け取ったファイルＦのデータをデータバッファ１５に格納できない場合は、インラインデータ分割処理起動部１３２を用いてデータバッファ１５に空きを作り、その空いた場所にデータ処理部１１から受け取ったファイルのデータを格納する。
【００３８】
さらに、データバッファ制御部１３は、コミット処理部１２からのコミット要求を受け取ると、データコミット部１３３を用いてデータバッファ１５に格納されている全てのデータをインラインデータ分割処理部１６に受け渡し、物理ディスク２３に書き込む。また、データバッファ廃棄部１３４は、データバッファ管理表１４１の更新状況を監視しており、一定時間クライアント６〜９からデータが届かない場合は、バックアップ処理が完了したと判断し、データコミット部１３３を用いてデータバッファ１５の全てのデータを物理ディスク２３上に書き出す。そして、書き出したファイルＦのデータバッファ１５内のデータ、および、データバッファ管理表１４１を削除する。
【００３９】
インラインデータ分割処理部１６は、図５に示すように、インラインデータ分割部１６１、分割データ出力部１６２、データ分割処理終了判定部１６３、データバッファ廃棄部１６４、ポストプロセスデータ分割対象領域判定部１６５、ポストプロセスデータ分割処理起動部１６６、を備えている。まず、インラインデータ分割処理部１６は、データバッファ制御部１３から受け取ったデータを、インラインデータ分割部１６１を用いて分割してブロックデータを生成する。その後、分割データ出力部１６２を用いて、分割されたブロックデータを物理ディスク２３に書き込み、そして、書き込んだデータの情報を、データ分割ポイント情報格納部１７に格納されているデータ分割ポイント管理表１７１に記録する。
【００４０】
そして、分割データ出力部１６２から書込データを受け取ったディスク入出力制御部２２は、物理ディスク２３へのデータの入出力制御を行う。このとき、分割データ出力部１６２が備えるデータ書込部２２１は、書込データを受け取ると、そのデータを物理ディスク２３上に格納し、そのコンテンツアドレスを返却する。そして、ディスク入出力制御部２２が備えるデータ読込部２２２は、データの読み出し要求に応じてコンテンツアドレスを受け取ると、物理ディスク２３上に格納された、そのコンテンツアドレスに対応するデータを返却する。
【００４１】
ここで、本実施形態におけるストレージシステム１では、データの分割処理に特徴を有するが、分割されたブロックデータをコンテンツアドレスを用いての重複排除を行い、物理ディスク２３に書き込む処理及び読み出す処理の一例を、図９乃至図１０を参照して説明する。なお、ストレージシステム１における書き込み及び読み出しの処理は、以下に説明する手法にて実行されることに限定されない。
【００４２】
まず、図９及び図１０の矢印Ｙ１に示すように、ストレージシステム１が書き込み要求されたファイルＦの入力を受ける。すると、図９及び図１０の矢印Ｙ２に示すように、ファイルＦを後述する分割手法により、ブロックデータＤに分割する。
【００４３】
続いて、分割されたブロックデータＤのデータ内容に基づいて、当該データ内容を代表する固有のハッシュ値Ｈを算出する（図１０の矢印Ｙ３）。例えば、ハッシュ値Ｈは、予め設定されたハッシュ関数を用いて、ブロックデータＤのデータ内容から算出する。
【００４４】
続いて、ファイルＦのブロックデータＤのハッシュ値Ｈを用いて、当該ブロックデータＤが既に格納されているか否かを調べる。具体的には、まず、既に格納されているブロックデータＤは、そのハッシュ値Ｈと格納位置を表すコンテンツアドレスＣＡとが、関連付けられてＭＦＩ（Ｍａｉｎ  Ｆｒａｇｍｅｎｔ  Ｉｎｄｅｘ）ファイルに登録されている。従って、格納前に算出したブロックデータＤのハッシュ値ＨがＭＦＩファイル内に存在している場合には、既に同一内容のブロックデータＤが格納されていると判断できる（図１０の矢印Ｙ４）。この場合には、格納前のブロックデータＤのハッシュ値Ｈと一致したＭＦＩ内のハッシュ値Ｈに関連付けられているコンテンツアドレスＣＡを、当該ＭＦＩファイルから取得する。そして、このコンテンツアドレスＣＡを、書き込み要求されたブロックデータＤのコンテンツアドレスＣＡとして返却する。
【００４５】
そして、返却されたコンテンツアドレスＣＡが参照する既に格納されているデータを、書き込み要求されたブロックデータＤとして使用する。つまり、書き込み要求されたブロックデータＤの格納先として、返却されたコンテンツアドレスＣＡが参照する領域を指定することで、当該書き込み要求されたブロックデータＤを記憶したこととする。これにより、書き込み要求にかかるブロックデータＤを、実際に物理ディスク２３内に記憶する必要がなくなる。
【００４６】
また、書き込み要求にかかるブロックデータＤがまだ記憶されていないと判断された場合には、以下のようにして書き込み要求にかかるブロックデータＤの書き込みを行う。まず、書き込み要求にかかるブロックデータＤを圧縮して、図１０の矢印Ｙ５に示すように、複数の所定の容量のフラグメントデータに分割する。例えば、図９の符号Ｄ１〜Ｄ９に示すように、９つのフラグメントデータ（分割データ９１）に分割する。そしてさらに、分割したフラグメントデータのうちいくつかが欠けた場合であっても、元となるブロックデータを復元可能なよう冗長データを生成し、上記分割したフラグメントデータ９１に追加する。例えば、図９の符号Ｄ１０〜Ｄ１２に示すように、３つのフラグメントデータ（冗長データ９２）を追加する。これにより、９つの分割データ９１と、３つの冗長データ９２とにより構成される１２個のフラグメントデータからなるデータセット９０を生成する。
【００４７】
続いて、上述したように生成されたデータセットを構成する各フラグメントデータを、記憶装置に形成された各記憶領域に、それぞれ分散して格納する。例えば、図９に示すように、１２個のフラグメントデータＤ１〜Ｄ１２を生成した場合には、複数の記憶装置内にそれぞれ形成したデータ格納ファイルに、各フラグメントデータＤ１〜Ｄ１２を１つずつそれぞれ格納する（図１０の矢印Ｙ６参照）。
【００４８】
続いて、ストレージシステム１は、上述したように格納したフラグメントデータＤ１〜Ｄ１２の格納位置、つまり、当該フラグメントデータＤ１〜Ｄ１２にて復元されるブロックデータＤの格納位置を表すコンテンツアドレスＣＡを生成して管理する。具体的には、格納したブロックデータＤの内容に基づいて算出したハッシュ値Ｈの一部（ショートハッシュ）（例えば、ハッシュ値Ｈの先頭８Ｂ（バイト））と、論理格納位置を表す情報と、を組み合わせて、コンテンツアドレスＣＡを生成する。そして、このコンテンツアドレスＣＡを、ストレージシステム１内のファイルシステムに返却する（図１０の矢印Ｙ７）。すると、ストレージシステム１は、バックアップ対象データのファイル名などの識別情報と、コンテンツアドレスＣＡとを関連付けてファイルシステムで管理する。
【００４９】
また、ブロックデータＤのコンテンツアドレスＣＡと、当該ブロックデータＤのハッシュ値Ｈと、を関連付けて、各ストレージノード３がＭＦＩファイルにて管理する。このように、上記コンテンツアドレスＣＡは、ファイルを特定する情報やハッシュ値Ｈなどと関連付けられて、アクセラレータノード２やストレージノード３の記憶装置に格納される。
【００５０】
さらに、ストレージシステム１は、上述したように格納したファイルを読み出す制御を行う。例えば、ストレージシステム１に対して、特定のファイルを指定して読み出し要求があると、まず、ファイルシステムに基づいて、読み出し要求にかかるファイルに対応するハッシュ値の一部であるショートハッシュと論理位置の情報からなるコンテンツアドレスＣＡを指定する。そして、コンテンツアドレスＣＡがＭＦＩファイルに登録されているか否かを調べる。登録されていなければ、要求されたデータは格納されていないため、エラーを返却する。
【００５１】
一方、読み出し要求にかかるコンテンツアドレスＣＡが登録されている場合には、上記コンテンツアドレスＣＡにて指定される格納位置を特定し、この特定された格納位置に格納されている各フラグメントデータを、読み出し要求されたデータとして読み出す。このとき、各フラグメントが格納されているデータ格納ファイルと、当該データ格納ファイルのうち１つのフラグメントデータの格納位置が分かれば、同一の格納位置から他のフラグメントデータの格納位置を特定することができる。
【００５２】
そして、読み出し要求に応じて読み出した各フラグメントデータからブロックデータＤを復元する。さらに、復元したブロックデータＤを複数連結し、ファイルＡなどの一群のデータに復元して返却する。
【００５３】
なお、本実施形態におけるストレージシステム１は、上述したようにＣＡＳ（Contents Addressiable Storage）としているため、コンテンツアドレスを介したデータの入出力を行っているが、ブロックアクセスを行うストレージシステムであってもよい。その場合は、コンテンツアドレスの代わりにブロックアドレスが用いられる。
【００５４】
次に、上述したように物理ディスク２３に書き込むブロックデータを生成するデータの分割処理の詳細について説明する。上述したように、インラインデータ分割処理部１６は、データバッファ制御部１３から受け取ったデータを分割し、その後、分割されたデータを物理ディスク２３に書き込んで、その情報をデータ分割ポイント管理表１７１に記録する。さらに、インラインデータ分割処理部１６は、データ分割処理終了判定部１６３を用い、データ分割処理を終了させるか、ポストプロセスデータ分割処理部１９で後続データの再分割を行うかを判断する。
【００５５】
そして、データ分割処理終了判定部１６３でデータ分割処理を終了させると判断した場合は、バッファ残留データ判別部１６４を用いて、後続データが届いた際のデータの再分割処理に必要なデータを選出し、そのデータをデータバッファ制御部１３に引き渡し、再度、データバッファ１５にデータを格納する。一方、データ分割処理終了判定部１６３で、ポストプロセスデータ分割処理部１９にて後続データの再分割を行うと判断した場合は、ポストプロセスデータ分割対象領域設定部１６５を用いてポストプロセスデータ分割対象領域情報格納部２０内のポストプロセスデータ分割対象領域管理表２０１に情報を設定する。そして、ポストプロセスデータ分割処理起動部１６６で、ポストプロセスデータ分割処理部１９にポストプロセスのデータ再分割処理に必要となるデータを引き渡し、当該ポストプロセスデータ分割処理部１９を起動させる。
【００５６】
ポストプロセスデータ分割処理部１９は、ポストプロセスデータ分割部１９１とポストプロセスデータ分割処理終了判定部１９２とを備えている。そして、ポストプロセスデータ分割処理部１９は、インラインデータ分割処理部１６から受け取ったデータをポストプロセス分割対象データ格納部２１に格納後、ポストプロセスデータ分割部１９１を用いて物理ディスク２３に書き込み済データの再分割処理を開始する。その後、ポストプロセスデータ分割処理終了判定部１９２でデータ再分割処理の終了判定がされるまで、データの再分割処理を継続する。なお、その間に再分割されたデータは、分割データ出力部１６２を用いて、物理ディスク２３に書き出される。
【００５７】
上述した構成のストレージシステム１によるデータの分割処理の一例を、図１１及び図１２を参照して説明する。まず、図１１Ａ及び図１１Ｂの例は、クライアント６がファイルＦをストレージシステム１にバックアップ中に（矢印Ｂ参照）、図１１Ａに示すようにデータＦ１がデータバッファ１５にある状態でコミットが発生した場合の動作を示している。なお、図１１や図１２では、インラインデータ分割処理部１６やポストプロセスデータ分割処理部１９等によるデータの分割処理及び再分割処理を、符号１６’で示している。
【００５８】
図１１Ａの状態でコミット（書き込み指令の入力）が発生すると（矢印Ｃ参照）、その時点でデータバッファ１５にあるデータＦ１はインラインデータ分割処理１６’で、ブロックデータＦ１１とブロックデータＦ１２に分割し（矢印Ｄ１参照）、物理ディスク２３上にブロックデータＦ１１とブロックデータＦ１２として書き込む（矢印Ｒ参照）。このとき、データＦ１の分割処理は、インライン方式でデータＦ１の先頭からfinger print値を計算し、ある特定のfinger print値を持った箇所に分割ポイントＰを決定して、可変長のブロックデータに分割する、という方式で行われる。なお、finger print値は、データの同一性を確認するために使用される値であり、例えば、データの内容をハッシュ関数にかけて得たハッシュ値である。但し、分割ポイントＰを決定する方法は、上述したfinger print値を用いて行うことに限定されず、データの内容に基づいて他の手法により行ってもよい。
【００５９】
そして、図１１Ａの例では、ブロックデータＦ１１は、最適なfinger print値で分割、つまり、予め設定された分割基準によって分割されたこととする（図１１Ａの網掛け部分参照）。一方、ブロックデータＦ１２は、コミットにタイミングで強制的に分割されたため、最適なfinger print値で分割されたデータではなく、予め設定された分割基準によって分割されていないこととする（図１１Ａの斜線部分参照）。
【００６０】
このため、インラインデータ分割処理１６’は、コミット後に後続データが書き込まれた際にブロックデータＦ１２部分を含めてデータの再分割を行えるようにするために、ブロックデータＦ１２（残存データ）をデータバッファ１５上にデータＦ１２として残しておく（矢印Ｄ２参照）。なお、ブロックデータＦ１２は、物理ディスク２３に書き込まれたものが、データバッファ１５に再度格納されてもよい。
【００６１】
その後、図１１Ｂに示すように、データＦ１の後端側に位置するブロックデータＦ１２（残存データ）の後端側に連続するデータＦ２（連続データ）が、データバッファ１５に入力される。そして、ブロックデータＦ１２に後続するデータＦ２が、データバッファ１５にある状態で再びコミットが発生すると（符号Ｃ参照）、ブロックデータＦ１２（残存データ）とデータＦ２（連続データ）とが連結された状態（連結データ）で、インラインデータ分割処理１６’にて、各ブロックデータＦ２１，Ｆ２２，Ｆ２３に分割（再分割）される（符号Ｄ１参照）。そして、分割された各ブロックデータＦ２１，Ｆ２２，Ｆ２３は、それぞれ物理ディスク２３上に、ブロックデータＦ２１，Ｆ２２，Ｆ２３として書き込まれる（符号Ｒ参照）。
【００６２】
このとき、ブロックデータＦ１２（残存データ）とデータＦ２（連続データ）とが連結されたデータの分割は、当該データの先頭から計算したfinger print値を用いて行われる。このため、ブロックデータＦ２１，Ｆ２２の分割ポイントＰは、finger print値で正当に評価された分割ポイントとなり、重複排他に最適な分割データとなる（図１１Ｂの網掛け部分参照）。
【００６３】
続いて、図１２Ａ及び図１２Ｂの例は、クライアント６がファイルＦをストレージシステム１にバックアップ中に、図１２Ａに示すようにデータＦ１（第一のデータ群）と、当該データ１から分断されたデータＦ２（第二のデータ群）と、がデータバッファ１５にある状態でコミットが発生した場合の動作を示している。
【００６４】
図１２Ａの状態でコミットが発生すると、その時点でデータバッファ１５にあるデータＦ１とデータＦ２はインラインデータ分割処理１６’でブロックデータＦ１１，Ｆ１２，Ｆ２１〜Ｆ２４に分割され、物理ディスク２３上にブロックデータＦ１１，Ｆ１２，Ｆ２１〜Ｆ２４として書き込まれる。このとき、データＦ１の分割処理では、上述同様に、当該データＦ１の先頭からfinger print値を計算して分割ポイントＰが決定される。このため、ブロックデータＦ１１は予め設定された分割基準によって分割され（図１２Ａの網掛け部分参照）、ブロックデータＦ１２は、予め設定された分割基準によって分割されていない（図１２Ａの斜線部分参照）。同様に、データＦ２の分割処理では、ブロックデータＦ２３のみが予め設定された分割基準によって分割され（図１２Ａの網掛け部分参照）、ブロックデータＦ２１，Ｆ２２，Ｆ２４は、予め設定された分割基準によって分割されていない（図１２Ａの斜線部分参照）。
【００６５】
このため、インラインデータ分割処理１６’は、コミット後に後続データが書き込まれた際にブロックデータＦ１２，Ｆ２１，Ｆ２２，Ｆ２４部分を含めてデータの再分割を行えるようにするために、これらブロックデータＦ１２，Ｆ２１，Ｆ２２，Ｆ２４（残存データ）をデータバッファ１５上に残しておく（点線矢印参照）。なお、ブロックデータＦ１２，Ｆ２１等は、物理ディスク２３に書き込まれたものが、データバッファ１５に再度格納されてもよい。
【００６６】
その後、図１２Ｂに示すように、データＦ１の後端側に位置するブロックデータＦ１２（第一残存データ）の後端側に連続するデータであり、かつ、データＦ２の前端側に位置するブロックデータＦ２１（第二残存データ）の前端側に連続するデータであるデータＦ３（連続データ）が、データバッファ１５に入力される。つまり、データＦ１とデータＦ２の間に位置するデータＦ３がデータバッファ１５に入力される。そして、ブロックデータＦ１２及びＦ２１に連続するデータＦ３が、データバッファ１５にある状態で再びコミットが発生すると、ブロックデータＦ１２、データＦ２、ブロックデータＦ２１，２２が連結された状態（連結データ）で、インラインデータ分割処理１６’にて、ブロックデータＦ３１〜Ｆ３５に分割（再分割）される。そして、分割された各ブロックデータＦ３１〜Ｆ３５，Ｆ２４は、それぞれ物理ディスク２３上に書き込まれる。
【００６７】
このとき、上述したデータの分割は、当該データの先頭から計算したfinger print値を用いて行われる。このため、ブロックデータＦ３１，Ｆ３２，Ｆ３３，Ｆ３４の分割ポイントＰは、finger print値で正当に評価された分割ポイントとなり、重複排他に最適な分割データとなる（図１２Ｂの網掛け部分参照）。
【００６８】
なお、上述した図１２Ａに示すブロックデータＦ２１の分割ポイントと、図１２Ｂに示すブロックデータＦ３４の分割ポイントが一致していない場合は、図１２Ｂに示すブロックデータＦ３５からＦ２４の間は最適な分割データではない可能性が高い。このため、ポストプロセスでブロックＦ３５からＦ２４の間のデータを再分割することにより、重複排除に最適なデータ分割を行う。
【００６９】
［動作］
次に、上述したストレージシステム１において、クライアントがファイルをストレージシステム１にバックアップするとき詳細な動作を、図１３乃至図２６のフローチャートを参照して説明する。
【００７０】
図１３は、データバッファ制御部１３内のデータバッファ更新部１３１の動作を示している。データバッファ更新部１３１は、データ処理部１１よりファイルＦのデータを受け取ると、ファイルＦ用のデータバッファ１５とデータバッファ管理表１４１が存在するかどうかを確認する（ステップＡ１）。ファイルＦ用のデータバッファ１５とデータバッファ管理表１４１が存在しない場合は（ステップＡ１：Ｎｏ）、ファイルＦ用のデータバッファ１５とデータバッファ管理表１４１を新たに作成する（ステップＡ２）。
【００７１】
次に、受け取ったデータを格納する空き領域がデータバッファ１５にあるかを確認する（ステップＡ３）。受け取ったデータを格納する空き領域がデータバッファ１５に無い場合は（ステップＡ３：Ｎｏ）、インラインデータ分割処理起動部１３２を用いて、データバッファ１５に空き領域を作成する（ステップＡ４）。
【００７２】
データバッファ更新部１３１は、受け取ったデータを格納する空き領域がデータバッファ１５にある場合は（ステップＡ３：Ｙｅｓ）、受け取ったデータをデータバッファ１５に格納し（ステップＡ５）、データバッファ管理表１４１にエントリを追加する（ステップＡ６）。
【００７３】
さらに、連続したデータがデータバッファ管理表１４１上の複数のエントリに跨って格納されている場合は、１エントリにマージする（ステップＡ７）。なお、データバッファ管理表１４１内のエントリは、ファイル内オフセットが小さい順に格納する。
【００７４】
なお、データバッファ管理表１４１の一例を、図６に示す。データバッファ管理表１４１内の各データは、以下の内容となっている。
・ファイル名：バックアップ中のファイル名
・データバッファアドレス：バックアップ中のファイル用のデータバッファのアドレス
・データバッファサイズ：バックアップ中のファイル用に確保されたデータバッファサイズ
・ファイル内オフセット：データバッファ中に格納されているデータのファイル内オフセット（エントリはファイル内オフセットの小さい順に登録される）
・データ長：データバッファ中に格納されているデータの長さ
・分割済データ数：このデータ中に含まれている、一度分割された後にデータバッファに残されたデータの数
・分割未データフラグ：このデータ中にまだ一度も分割されていないデータが含まれているかどうかを示すフラグ
・データアドレス：データが格納されているデータバッファ内のアドレス
【００７５】
図１４は、データバッファ制御部１３内のインラインデータ分割処理起動部１３２の動作を示している。
【００７６】
まず、インラインデータ分割処理起動部１３２は、データバッファ管理表１４１上のエントリを以下の優先順位で検索する（ステップＢ１）。
（１）分割済データ数が２以上でファイル内オフセットが一番小さいエントリ
（２）分割済データ数＝１かつ分割未データフラグ＝１Ｂでファイル内オフセットが一番小さいエントリ
（３）分割未データフラグ＝１Ｂでデータ長が一番大きいエントリ
【００７７】
次に、上記ステップＢ１で選択したエントリをパラメータとして渡して、インラインデータ分割処理部１６を起動する（ステップＢ２）。最後に、データバッファ管理表２４１からステップＢ１で選択したエントリを削除する（ステップＢ３）。
【００７８】
図１５は、データバッファ制御部１３内のデータコミット部１３３の動作を示している。
【００７９】
まず最初に、データコミット部１３３は、データバッファ管理表１４１上のエントリの検索開始ポイントを先頭エントリとする（ステップＣ１）。次に、データバッファ管理表１４１上のエントリの検索し（ステップＣ２）、エントリが無かった場合（ステップＣ２：Ｎｏ）は、処理を終了させる（ステップＣ３）。
【００８０】
ステップＣ２でエントリがあった場合は（ステップＣ３：Ｙｅｓ）、その内容を確認し（ステップＣ４）、「分割済データ数＝１かつ分割未データフラグ＝１Ｂ」の場合は（ステップＣ４：Ｙｅｓ）、次のエントリを検索する（ステップＣ２）。そうでない場合は（ステップＣ４：Ｎｏ）、検索したエントリをパラメータに指定してインラインデータ分割処理部１６を起動し（ステップＣ５）、データバッファ管理表１４１上のエントリを削除する（ステップＣ６）。その後、次のエントリを検索する（ステップＣ２）。
【００８１】
図１６は、データバッファ制御部１３内のデータバッファ廃棄部１３４の動作を示している。データバッファ廃棄部１３４は、一定時間待ち合わせ後（ステップＮ１）、データバッファ管理表１４１が更新されたか否かを判断する（ステップＮ２）。データバッファ管理表１４１が更新されていた場合は（ステップＮ２：Ｙｅｓ）、再び一定時間待ち合わせる（ステップＮ１）。
【００８２】
一方、データバッファ管理表１４１が更新されていなかった場合は（ステップＮ２：Ｎｏ）、データコミット部１３３を呼び出した後（ステップＮ３）、データバッファ１５、および、データバッファ管理表１４１を削除する（ステップＮ４）。
【００８３】
図１７Ａ及び図１７Ｂは、インラインデータ分割部１６の動作を示している。まず、インラインデータ分割部１６は、インラインデータ分割処理起動部１３２よりパラメータとして受け取ったデータを、インライン分割対象データ格納部１８に格納する（ステップＤ１）。
【００８４】
そして、インラインデータ分割部１６は、パラメータとして受け取ったデータのデータ分割ポイント管理表１７１が存在するかどうかをチェックし（ステップＤ２）、データ分割ポイント管理表１７１が存在しない場合は（ステップＤ２：Ｎｏ）、データ分割ポイント管理表１７１を作成する（ステップＤ３）。
【００８５】
次に、インラインデータ分割部１６は、データの先頭よりfinger print値を計算して、データ分割ポイントを算出する（ステップＤ４）。そして、インラインデータ分割部１６は、データ分割ポイントが発見されたかどうかを判断する（ステップＤ５）。データ分割ポイントが発見された場合は（ステップＤ５：Ｙｅｓ）、分割データ出力部１６２で分割されたデータを物理ディスク２３に書き込み（ステップＤ６）、データ分割ポイント管理表１７１を更新して（ステップＤ７）、次のデータ分割ポイントを算出する（ステップＤ８）。
【００８６】
一方、インラインデータ分割部１６は、データ分割ポイントが発見されなかった場合は（ステップＤ５：Ｎｏ）、インラインデータ分割部１６１がデータコミット部１３３から起動されたかどうかを判断する（ステップＤ９）。データコミット部１３３から起動された場合は（ステップＤ９：Ｙｅｓ）、分割データ出力部１６２でインライン分割対象データ格納部１８に残ったデータを物理ディスク２３に書込み（ステップＤ１０）、データ分割ポイント管理表１７１を更新する（ステップＤ１１）。
【００８７】
なお、データ分割ポイント管理表１７１の一例を、図７に示す。データ分割ポイント管理表１７１内の各データは、以下の内容となっている。
・ファイル名：バックアップ中のファイル名
・ファイル内オフセット：データバッファ中に格納されているデータのファイル内オフセット
・データ長：データバッファ中に格納されているデータの長さ
・finger print値：当該データを分割したポイントのfinger print値
・コンテンツアドレス：当該データが格納されているコンテンツアドレス
【００８８】
次に、インラインデータ分割処理部１６は、データ分割処理終了判定部１６３を呼び出し（ステップＤ１２）、データ分割処理を終了させるかどうかを判断する（ステップＤ１３）。そして、データ分割処理を終了させる場合には（ステップＤ１３：Ｙｅｓ）、バッファ残留データ判別部１６４を呼び出してデータバッファに残すデータを決定し（ステップＤ１４）、そのデータをデータバッファ制御部１３に引き渡す（ステップＤ１５）。
【００８９】
一方、データ分割処理を継続させる場合には（ステップＤ１３：Ｎｏ）、ポストプロセスデータ分割対象領域設定部１６５を呼び出して（ステップＤ１６）、ポストプロセスでデータの再分割を行う領域を設定する。そして、ポストプロセスデータ分割処理起動部１６６でポストプロセスデータ分割処理部１９を起動する（ステップＤ１７）。
【００９０】
図１８は、インラインデータ分割処理部１６内の分割データ出力部１６２の動作を示している。分割データ出力部１６２は、データ書込部２２１で物理ディスク２３にデータを書き込む（ステップＥ１）。そして、データ書込部２２１から返却されたコンテンツアドレスを使って、データ分割ポイント管理表１７１にエントリを追加する（ステップＥ２）。
【００９１】
図１９は、インラインデータ分割処理部１６内のデータ分割処理終了判定部１６３の動作を示している。データ分割処理終了判定部１６３は、データ分割ポイント管理表１７１を検索し（ステップＦ１）、上述したステップＥ２で再分割された新しいデータが登録され、不要になったエントリが無いかを確認する（ステップＦ２）。
【００９２】
そして、不要になったエントリが無い場合は（ステップＦ２：Ｎｏ）、データ分割を終了させる。不要になったエントリがある場合は（ステップＦ２：Ｙｅｓ）、旧エントリの分割ポイントと新エントリの分割ポイントを比較し（ステップＦ３）、旧エントリと新エントリの分割ポイントが同じかどうかを判断する（ステップＦ４）。そして、分割ポイントが同じだった場合は（ステップＦ４：Ｙｅｓ）、データ分割を終了させ、分割ポイントが異なる場合は（ステップＦ４：Ｎｏ）、データ分割を継続させる。
【００９３】
なお、本実施形態では、旧エントリと新エントリの分割ポイントが同じだった場合にのみデータ分割処理を終了させているが、新エントリの分割ポイントのfinger print値が一定の条件、例えば、新エントリの分割ポイントのfinger print値が旧エントリの分割ポイントのfinger print値と同等の強度を持つ等、を満たせば、旧エントリと新エントリの分割ポイントが同じでなくても、妥協して新エントリの分割ポイントをデータ分割ポイントとし、データ分割を終了させる方法も考えられる。
【００９４】
図２０は、インラインデータ分割処理部１６内のバッファ残留データ判別部１６４の動作を示している。バッファ残留データ判別部１６４は、ファイルの先頭から今回のデータ分割処理で分割したデータまで、全データがデータ分割済でデータ分割ポイント管理表１７１にエントリが登録されているかどうかを判断する（ステップＧ１）。
【００９５】
全データがデータ分割済でない場合は（ステップＧ１：Ｎｏ）、今回のデータ分割処理で分割したデータの内、オフセットが最小の分割データとその次にオフセットが小さな分割データを、データバッファ１５に残すデータとする（ステップＧ２）。さらに、上記結果に関係なく、今回のデータ分割処理で分割したデータの内、オフセットが最大の分割データをデータバッファ１５に残すデータとする（ステップＧ３）。
【００９６】
図２１は、インラインデータ分割処理部１６内のポストプロセスデータ分割対象領域設定部１６５の動作を示している。ポストプロセスデータ分割対象領域設定部１６５は、今回のデータ分割処理の最終データのオフセットを、再分割開始オフセットに登録する（ステップＨ１）。そして、今回のデータ分割処理の最終データ以降のまだデータ分割されていない直近のデータのオフセットを、再分割終了オフセットに登録する（ステップＨ２）。
【００９７】
図２２は、インラインデータ分割処理部１６内のポストプロセスデータ分割処理起動部１６６の動作を示している。ポストプロセスデータ分割処理起動部１６６は、今回のデータ分割処理の最終データをパラメータとして渡して、ポストプロセスデータ分割処理を起動する（ステップＩ１）。
【００９８】
図２３は、ポストプロセスデータ分割処理部１９内のポストプロセスデータ分割部１９１の動作を示している。ポストプロセスデータ分割部１９１は、ポストプロセスデータ分割処理起動部１６６より受け取ったデータを、ポストプロセス分割対象データ格納部２１に格納する（ステップＪ１）。
【００９９】
次に、ポストプロセスデータ分割部１９１は、ポストプロセスデータ分割対象領域情報格納部２０内のポストプロセスデータ分割対象領域管理表２０１を参照し（ステップＪ２）、物理ディスク、および、データバッファより、分割対象のデータをポストプロセス分割対象データ格納部２１に複写する（ステップＪ３）。
【０１００】
なお、ポストプロセスデータ分割対象領域管理表２０１の一例を、図８に示す。ポストプロセスデータ分割対象管理表２０１内の各データは、以下の内容となっている。
・ファイル名：ポストプロセスで再分割するファイル名
・再分割開始オフセット：ポストプロセスで再分割を開始するデータのファイル内オフセット
・再分割終了オフセット：ポストプロセスで再分割を終了するデータのファイル内オフセット
【０１０１】
次に、ポストプロセスデータ分割部１９１は、finger print値を計算してポストプロセス分割対象データ格納部２１のデータのデータ分割ポイントを算出して（ステップＪ４）、当該データを分割する。そして、分割されたデータを分割データ出力部１６２で物理ディスク２３に出力し、データ分割ポイント管理表１７１にエントリを追加する（ステップＪ５）。さらに、ポストプロセスデータ分割処理終了判定部１９２を呼び出し（ステップＪ６）、ポストプロセスデータ分割処理を終了させるかどうかを判断する（ステップＪ７）。
【０１０２】
そして、ポストプロセスデータ分割処理を終了させる場合は（ステップＪ７：Ｙｅｓ）、データ分割ポイント管理表１７１から、新データが登録されたために不要になった旧データのエントリを削除し（ステップＪ８）、処理を終了させる。ポストプロセスデータ分割処理を終了させない場合は（ステップＪ７：Ｎｏ）、上記ステップＪ４から処理を繰り返す。
【０１０３】
図２４は、ポストプロセスデータ分割処理部１９内のポストプロセスデータ分割処理終了判定部１９２の動作を示している。ポストプロセスデータ分割処理終了判定部１９２は、データ分割ポイント管理表１７１の旧データのエントリの分割ポイントとポストプロセスデータ分割処理で再分割された新データのエントリの分割ポイントを比較し（ステップＫ１）、分割ポイントが同じかどうかを判断する（ステップＫ２）。
【０１０４】
そして、旧データと新データのエントリの分割ポイントが同じ場合は（ステップＫ２：Ｙｅｓ）、ポストプロセスデータ分割処理を終了させる。旧データと新データのエントリの分割ポイントが異なる場合は（ステップＫ２：Ｎｏ）、ポストプロセスデータ分割処理を継続させる。具体的に、旧データと新データのエントリの分割ポイントが異なる場合は、ポストプロセスデータ分割対象領域管理表２０１の再分割終了オフセットまでデータの再分割が完了しているかどうかを判断する（ステップＫ３）。そして、再分割終了オフセットまでデータの再分割が完了している場合は（ステップＫ３：Ｙｅｓ）、ポストプロセスデータ分割処理を終了させ、再分割終了オフセットまでデータの再分割が完了していない場合は（ステップＫ３：Ｎｏ）、ポストプロセスデータ分割処理を継続させる。
【０１０５】
図２５は、ディスク入出力制御部２２内のデータ書込部２２１の動作を示している。データ書込部２２１は、書込データを物理ディスクに格納し（ステップＬ１）、書込データのコンテンツアドレスを返却する（ステップＬ２）。
【０１０６】
図２６は、ディスク入出力制御部２２内のデータ読込部２２２の動作を示している。データ読込部２２２は、指定されたコンテンツアドレスのデータを物理ディスクから読み込んで返却する（ステップＭ１）。
【０１０７】
以上のように、本実施形態におけるストレージシステム１によると、finger printを用いるなどデータ内容に基づいてインライン方式でデータを可変長分割し、データの重複排除を行うストレージシステムにおいて、データバックアップ時にコミットが発生しても、性能への影響を最小限に止めて、ストレージの重複排他率の低下を抑制できる。その理由は、コミット時にディスクに書き込んだ部分のデータを含めてデータを再分割するために必要な最低限の情報をデータバッファに残しておくことにより、コミット後に連続するデータが送られてきた際に、コストをかけずにデータを重複排除に最適なデータに再分割することが可能となるからである。
【０１０８】
＜付記＞
上記実施形態の一部又は全部は、以下の付記のようにも記載されうる。以下、本発明におけるストレージシステム（図２７参照）、プログラム、データ格納方法の構成の概略を説明する。但し、本発明は、以下の構成に限定されない。
【０１０９】
（付記１）
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファ３１１と、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段３１２と、
前記分割手段によって分割された前記分割データを記憶装置３２０に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段３１３と、を備え、
前記分割手段３１２は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
ストレージシステム３００。
【０１１０】
（付記２）
付記１に記載のストレージシステムであって、
前記分割手段は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【０１１１】
（付記３）
付記２に記載のストレージシステムであって、
前記記憶処理手段は、前記書き込み指令の入力を受けたタイミングで、前記前記分割手段にて生成された前記分割データ及び前記残存データを記憶装置に格納する処理を行い、
前記分割手段は、記憶装置に格納された前記残存データを前記データバッファに入力し、当該データバッファに入力された前記残存データ及び前記連続データが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【０１１２】
（付記４）
付記２又は３に記載のストレージシステムであって、
前記分割手段は、前記残存データの後端側に連続する前記連続データと当該残存データとが、前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【０１１３】
（付記５）
付記２又は３に記載のストレージシステムであって、
前記分割手段は、前記残存データの前端側に連続する前記連続データと当該残存データとが、前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【０１１４】
（付記６）
付記２乃至５のいずれかに記載のストレージシステムであって、
前記データバッファは、当該データバッファにそれぞれが分断されて入力された少なくとも２つデータ群を一時的に記憶し、
前記分割手段は、第一の前記データ群の後端側に位置し前記分割基準によって分割されなかった前記残存データである第一残存データの後端側に連続すると共に、第二の前記データ群の前端側に位置し前記分割基準によって分割されなかった前記残存データである第二残存データの前端側に連続する前記連続データと、前記第一残存データ及び前記第二残存データと、に前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
ストレージシステム。
【０１１５】
（付記７）
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置に、
前記データバッファに入力されたデータを分割して分割データを生成する分割手段と、
前記分割手段によって分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除する記憶処理手段と、を実現させると共に、
前記分割手段は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
ことを実現させるためのプログラム。
【０１１６】
（付記８）
付記７に記載のプログラムであって、
前記分割手段は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
プログラム。
【０１１７】
（付記９）
記憶対象となる所定容量のデータの入力を受けて一時的に記憶するデータバッファを備えたストレージ装置により、
前記データバッファに入力されたデータを分割して分割データを生成する分割処理を行い、
分割された前記分割データを記憶装置に格納すると共に、当該記憶装置に既に記憶されている分割データと同一内容の他の分割データを記憶装置に格納する場合に、当該記憶装置に既に記憶されている分割データを前記他の分割データとして参照させることで重複記憶を排除するデータ格納方法であって、
前記分割処理は、予め設定されたタイミングで、前記データバッファに入力されたデータを当該データの内容に基づく予め設定された分割基準によって分割して前記分割データを生成すると共に、当該分割基準によって分割されなかった残存データと、当該残存データに対して連続しており前記データバッファに入力された連続データと、が当該データバッファ内で連結された連結データを前記分割基準によって分割する、
データ格納方法。
【０１１８】
（付記１０）
付記９に記載のデータ格納方法であって、
前記分割処理は、予め設定された書き込み指令の入力を受けたタイミングで、前記データバッファに入力されたデータを前記分割基準によって分割することにより、当該分割基準によって分割された分割データと、前記分割基準によって分割されなかった前記残存データと、を生成すると共に、その後に前記データバッファに入力された前記連続データと前記残存データとが前記データバッファ内で連結された前記連結データを、前記分割基準によって分割する、
データ格納方法。
【０１１９】
なお、上述したプログラムは、記憶装置に記憶されていたり、コンピュータが読み取り可能な記録媒体に記録されている。例えば、記録媒体は、フレキシブルディスク、光ディスク、光磁気ディスク、及び、半導体メモリ等の可搬性を有する媒体である。
【０１２０】
以上、上記実施形態等を参照して本願発明を説明したが、本願発明は、上述した実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明の範囲内で当業者が理解しうる様々な変更をすることができる。
【符号の説明】
【０１２１】
１  ストレージシステム
２  アクセラレータノード
３  ストレージノード
４  バックアップシステム
５  バックアップ対象装置
６〜９  クライアント
１１  データ処理部
１２  コミット処理部
１３  データバッファ制御部
１３１  データバッファ更新部
１３２  インラインデータ分割処理起動部
１３３  データコミット部
１３４  データバッファ廃棄部
１４  データバッファ管理情報格納部
１４１  データバッファ管理表
１５  データバッファ
１６  インラインデータ分割処理部
１６１  インラインデータ分割部
１６２  分割データ出力部
１６３  データ分割処理終了判定部
１６４  バッファ残留データ判定部
１６５  ポストプロセスデータ分割対象領域設定部
１６６  ポストプロセスデータ分割処理起動部
１７  データ分割ポイント情報格納部
１７１  データ分割ポイント管理表
１８  インライン分割対象データ格納部
１９  ポストプロセスデータ分割処理部
１９１  ポストプロセスデータ分割部
１９２  ポストプロセスデータ分割処理終了判定部
２０  ポストプロセスデータ分割対象領域情報格納部
２０１  ポストプロセスデータ分割対象領域管理表
２１  ポストプロセス分割対象データ格納部
２２  ディスク入出力制御部
２２１  データ書込部
２２２  データ読込部
２３  物理ディスク
３００  ストレージシステム
３１１  データバッファ
３１２  分割手段
３１３  記憶処理手段
３２０  記憶装置
【図１Ａ】
2014174604.tif 000003
【図１Ｂ】
2014174604.tif 000004
【図２Ａ】
2014174604.tif 000005
【図２Ｂ】
2014174604.tif 000006
【図３】
2014174604.tif 000007
【図４】
2014174604.tif 000008
【図５】
2014174604.tif 000009
【図６】
2014174604.tif 000010
【図７】
2014174604.tif 000011
【図８】
2014174604.tif 000012
【図９】
2014174604.tif 000013
【図１０】
2014174604.tif 000014
【図１１Ａ】
2014174604.tif 000015
【図１１Ｂ】
2014174604.tif 000016
【図１２Ａ】
2014174604.tif 000017
【図１２Ｂ】
2014174604.tif 000018
【図１３】
2014174604.tif 000019
【図１４】
2014174604.tif 000020
【図１５】
2014174604.tif 000021
【図１６】
2014174604.tif 000022
【図１７Ａ】
2014174604.tif 000023
【図１７Ｂ】
2014174604.tif 000024
【図１８】
2014174604.tif 000025
【図１９】
2014174604.tif 000026
【図２０】
2014174604.tif 000027
【図２１】
2014174604.tif 000028
【図２２】
2014174604.tif 000029
【図２３】
2014174604.tif 000030
【図２４】
2014174604.tif 000031
【図２５】
2014174604.tif 000032
【図２６】
2014174604.tif 000033
【図２７】
2014174604.tif 000034