(57)【要約】【課題】格納実効データ量の増加を図るための重複排除と、並列アクセス処理とを両立する。【解決手段】第１のネットワークを介してデータ参照装置に接続される自律分散型ファイルシステムであって、前記自律分散型ファイルシステムは、第２のネットワークを介して相互に接続されると共に各々前記第１のネットワークに接続される複数の記憶装置ユニットを備え、前記各記憶装置ユニットは、各々、ローカルストレージと、ローカルコントローラとを備えており、前記各ローカルコントローラは、ストレージディレクトリと重複データ維持ユニットとを備えており、前記重複データ維持ユニットは、前記ストレージディレクトリを参照して、自ノードのストレージ容量を圧迫しない範囲で、同一内容のデータを重複して複数保持し続け、前記ストレージ容量に余裕が無い場合には、前記同一内容のデータの重複書き込みを排除する。【選択図】  図１
2014160311.tif 000002
【特許請求の範囲】
【請求項１】
第１のネットワークを介してデータ参照装置に接続される自律分散型ファイルシステムであって、
前記自律分散型ファイルシステムは、第２のネットワークを介して相互に接続されると共に各々前記第１のネットワークに接続される複数の記憶装置ユニットと、ストレージディレクトリと、重複データ維持ユニットとを備えており、
前記各記憶装置ユニットは、各々、ローカルストレージを備えており、
前記ストレージディレクトリは、保持されるデータに関して、前記各記憶装置ユニットの前記ローカルストレージの論理的ブロックのＩＤ及び物理的ブロックのＩＤ、同じ若しくは他の前記記憶装置ユニットのノードＩＤへのリンク及び該ノードＩＤの前記論理的ブロックブロックＩＤへのリンクの値を保持する機能を有しており、
前記重複データ維持ユニットは、前記ストレージディレクトリを参照して、前記各記憶装置ユニットのストレージ容量を圧迫しない範囲で、前記データの１つの実データ及び少なくとも１つの複製データとを重複して保持し続け、前記ストレージ容量に余裕が無い場合には、前記複製データの書き込みを制限若しくは排除する
ことを特徴とする自律分散型ファイルシステム。
【請求項２】
請求項１において、
前記各記憶装置ユニットを構成する各ノードには、各々、固有のノードＩＤの値が予め与えられており、特定のノードＩＤを有する前記ノードが特定ノードとして設定されており、
前記重複データ維持ユニットは、
前記何れかのノードに関して、当該ノードのストレージ容量に余裕が無い場合には、前記特定ノードに１つの実データを保持し、該特定ノード若しくは他の前記ノードに１つ以上の複製を保持しあるいはリンクを作成する
ことを特徴とする自律分散型ファイルシステム。
【請求項３】
請求項２において、
前記重複データ維持ユニットは、前記各記憶装置ユニットの何れかにおいて、自ノードのローカルストレージの論理ブロックに空きが有る場合には、前記同一内容のデータの重複書き込みを許容し、前記論理ブロックに空きが無い場合には、前記ストレージディレクトリから前記自ノード若しくは他の前記ノードの重複した前記物理ブロックへのポインタを削除し、前記同一内容のデータの重複書き込みを排除する
ことを特徴とする自律分散型ファイルシステム。
【請求項４】
請求項２において、
前記各記憶装置ユニットは、各々、ストレージインタフェースと、ローカルコントローラとを備えており、
前記各ローカルコントローラは、前記ストレージディレクトリ及び前記重複データ維持ユニットの機能を有しており、
前記重複データ維持ユニットは、
自ノードの前記ストレージディレクトリを参照し、
前記自ノードのローカルストレージの論理ブロックに空きが有る場合には、前記同一内容のデータの重複書き込みを許容し、前記論理ブロックに空きが無い場合には、前記ストレージディレクトリから前記自ノード若しくは前記他ノードの重複した前記物理ブロックへのポインタを削除し、前記同一内容のデータの重複書き込みを排除する
ことを特徴とする自律分散型ファイルシステム。
【請求項５】
請求項４において、
前記重複データ維持ユニットは、
前記データ参照装置からのデータの書き込み要求に対して、前記自ノードのストレージディレクトリを参照し、
前記ローカルストレージの前記論理ブロックに空きが有る場合には、前記同一内容のデータの重複書き込みを許容し、
前記論理ブロックに空きが無い場合には、前記ストレージディレクトリから重複した前記物理ブロックへのポインタを削除し、空きブロックを確保してこの空きブロックに前記要求データを格納し、
前記自ノード若しくは前記他ノードの異なる前記ファイルに前記データと同一のデータが存在する場合には、前記特定ノードに１つの実データを残し他の同一のデータへのリンクを張って前記実データの重複書き込みを排除し、
前記ストレージディレクトリの値を更新する
ことを特徴とする自律分散型ファイルシステム。
【請求項６】
請求項５において、
前記ストレージディレクトリは、前記データのハッシュ値を保持する機能、及び、前記各ノードが処理中の状態にあるか否かを表す処理中フラグの値を保持する機能を有しており、
該ハッシュ値を用いて、前記自ノード及び前記何れかの他ノードに同じデータが存在するか否かのチェックを行い、
前記処理中フラグの値を用いて、前記他ノードに、前記自ノードのデータと同じデータが存在することを通知する
ことを特徴とする自律分散型ファイルシステム。
【請求項７】
請求項２において、
自律分散型ファイルシステムは、前記データ参照装置である複数のサーバが前記第１のネットワークを介して、複数の自律分散型の前記記憶装置ユニットに接続されており、
前記第１のネットワーク及び前記第２のネットワークは、ＳＡＮ、ＬＡＮ、若しくはＷＡＮで構成されており、
前記ローカルコントローラは、管理端末を有し、前記サーバから受信したコマンドに従って前記ローカルストレージに対する制御を行う
ことを特徴とする自律分散型ファイルシステム。
【請求項８】
請求項２において、
前記第１、第２のネットワークに接続された管理サーバを備え、
該管理サーバは、前記ストレージディレクトリの機能及び前記重複データ維持ユニットの機能を備えており、
前記データ書き込み時の、前記各記憶装置ユニット内の論理位置と前記データ及び特徴量を保持し、
前記データ参照装置からの前記データの読み出し時には、前記管理サーバが前記ストレージディレクトリを参照して当該データを持つ前記記憶装置ユニットの位置の情報を得る
ことを特徴とする自律分散型ファイルシステム。
【請求項９】
請求項８において、
第１の前記記憶装置ユニットのストレージ容量に余裕が無い場合において、
該第１の記憶装置ユニット若しくは他の記憶装置ユニットに前記データと同一のデータが存在する場合には、前記各記憶装置ユニットのノードのＩＤの比較結果に基づいて、前記特定ノードの前記実データを残し他の前記同一のデータへのリンクを張って前記実データの重複書き込みを排除する
ことを特徴とする自律分散型ファイルシステム。
【請求項１０】
自律分散型ファイルシステムを構成する記憶装置ユニットであって、
ローカルストレージと、ローカルコントローラとを備えており、
前記ローカルコントローラは、ストレージディレクトリと、重複データ維持ユニットとを備えており、
前記ストレージディレクトリは、保持されるデータに関して、前記各記憶装置ユニットの前記ローカルストレージの論理的ブロックのＩＤ及び物理的ブロックのＩＤ、同じ若しくは他の前記記憶装置ユニットのノードＩＤへのリンク及び該ノードＩＤの前記論理的ブロックブロックＩＤへのリンクの値を保持する機能を有しており、
前記重複データ維持ユニットは、前記ストレージディレクトリを参照して、前記ローカルストレージのストレージ容量を圧迫しない範囲で、前記データの１つの実データ及び少なくとも１つの複製データとを重複して保持し続け、前記ストレージ容量に余裕が無い場合には、前記複製データの書き込みを制限若しくは排除する
ことを特徴とする記憶装置ユニット。
【請求項１１】
請求項１０において、
前記重複データ維持ユニットは、
前記データ参照装置からのデータの書き込み要求に対して、自ノードのストレージディレクトリを参照し、
前記ローカルストレージの前記論理ブロックに空きが有る場合には、前記同一内容のデータの重複書き込みを許容し、
前記論理ブロックに空きが無い場合には、前記ストレージディレクトリから重複した前記物理ブロックへのポインタを削除し、空きブロックを確保してこの空きブロックに前記要求データを格納し、
前記自ノード若しくは前記他ノードの異なる前記ファイルに前記データと同一のデータが存在する場合には、１つの実データを残し他の同一のデータへのリンクを張って前記実データの重複書き込みを排除し、
前記ストレージディレクトリの値を更新する
ことを特徴とする記憶装置ユニット。
【請求項１２】
自律分散型ファイルシステムへのデータアクセス方法であって、
前記自律分散型ファイルシステムは、データ参照装置である複数のサーバが複数のアクセスパスにより繋がれており、各アクセスパスは複数の記憶装置ユニットに繋がれている、ファイルシステムであり、
前記各記憶装置ユニットは、ストレージインタフェースと、ローカルコントローラとローカルストレージを備えており、
前記各ローカルコントローラは、自ノードの前記記憶装置ユニットに対するデータの書き込みや読み出しを、該記憶装置ユニットの空き容量に応じて管理するためのテーブルであるストレージディレクトリを備えており、
前記サーバからのデータの書き込み要求を受け付け、
前記ストレージディレクトリを参照して、自ノードのストレージ容量を圧迫しない範囲で、前記データの１つの実データ及び少なくとも１つの複製データとを重複して保持し続け、
前記ストレージ容量に余裕が無い場合には、前記複製データの書き込みを制限若しくは排除する
ことを特徴とするデータアクセス方法。
【請求項１３】
請求項１２において
前記各記憶装置ユニットを構成する各ノードには、各々、固有のノードＩＤの値が予め与えられており、特定のノードＩＤを有する前記ノードが特定ノードとして設定されており、
前記何れかのノードに関して、当該ノードのストレージ容量に余裕が無い場合には、前記特定ノードに１つの実データを保持し、該特定ノード若しくは他の前記ノードに１つ以上の複製を保持しあるいはリンクを作成する
ことを特徴とするデータアクセス方法。
【請求項１４】
請求項１３において
前記ファイルシステムのデータへアクセスする手順は、
前記サーバから第１の記憶装置ユニットにデータの読み込みを要求するステップと、
データの読み込み要求を受け取った前記第１の記憶装置ユニットに要求データが存在する場合に該データを前記サーバに転送するステップと、
前記データの読み込み要求を受け取った前記第１の記憶装置ユニットに前記要求データが存在しない場合に同じデータのリンクの存在を探すステップと、
前記リンクが張られている場合にリンク先の第２の記憶装置ユニットに前記データを前記第１の記憶装置ユニットに転送することを要求するステップと、
前記第１の記憶装置ユニットからの要求を受信した前記第２の記憶装置ユニットにおいて、要求された前記データを前記第１の記憶装置ユニットに送信するステップと、
前記第２の記憶装置ユニットから前記データを受信した前記第１の記憶装置ユニットが受信した前記データを前記サーバに送るステップを含む
ことを特徴とするデータアクセス方法。
【請求項１５】
請求項１３において
前記ファイルシステムのデータへアクセスする手順は、
前記サーバから第１の記憶装置ユニットにデータの読み込みを要求するステップと、
前記データの読み込み要求を受け取った前記第１の記憶装置ユニットに前記要求データが存在する場合に該データを前記サーバに転送するステップと、
前記データの読み込み要求を受け取った前記第１の記憶装置ユニットに前記要求データが存在しない場合に同じデータのリンクの存在を探すステップと、
前記リンクが張られている場合に該リンク先の第２の記憶装置ユニットに前記データを前記第１の記憶装置ユニットに転送することを要求するステップと、
前記第１の記憶装置ユニットからの要求を受信した前記第２の記憶装置ユニットにおいて、要求された前記データを前記サーバに送るステップを含む
ことを特徴とするデータアクセス方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、自律分散型ファイルシステムにおけるファイルのデータ列の重複排除のための装置及び方法に係り、特に、複数の異種ネットワークに接続可能な記憶装置の複製データを制御するのに適用して有効な技術に関するものである。
【背景技術】
【０００２】
コンピュータシステムで取り扱われるデータ量が急激に増加するのに伴い、膨大なデータを効率良く利用して管理するために、複数のディスクアレイ装置（以下、記憶装置システムと称する）とサーバとを専用のネットワーク（Storage Area Network、以下ＳＡＮと記す）で接続し、記憶装置システムへの高速かつ大量なアクセスを実現する技術が開発されている。記憶装置システムとサーバとをＳＡＮで接続して高速なデータ転送を実現するためには、ファイバチャネルプロトコルに従った通信機器を用いてネットワークを構築するのが一般的である。
【０００３】
一般に、ファイルの内容が同じであっても、ファイル名が異なっていれば、記憶装置に記憶される。この場合、実体が全く同じ内容のファイル（つまり、内容が完全に重複したファイル）が記憶装置に記憶されるので、その分、無駄に記憶容量が消費されることになる。そこで、このような内容の重複したファイルの保存を排除する技術が重要になってくる。
【０００４】
特許文献１には、複数のファイルサーバに保存されたデータの増加量を低減し、ファイル保管のためのストレージコストを削減するサーバが開示されている。特許文献１の発明では、ファイルサーバ管理用のプロキシサーバが、統括するファイルサーバに格納されたファイルの中で、重複するファイルがあった場合、利用者端末からは複数個のファイルに見せるが、保管されたファイルの実態は１つとすることで、重複ファイルの削減を図っている。このサーバによれば、ファイルアクセス管理手段が、利用者端末からのファイル保存要求の際に、当該保存要求されたファイルのハッシュ値を取得し、当該ハッシュ値に基づいて同一ファイルの有無を確認し、ファイル管理手段が、保存要求されたファイルと同一ファイルがあれば保存要求されたファイルの登録情報のみを管理し、保存要求されたファイルと同一ファイルがなければ、保存要求されたファイルの登録情報とファイルデータを管理する。
【０００５】
特許文献２にも、現在の仮想ファイルのハッシュ値を算出し、同じハッシュ値について実ファイル情報を検索して、記憶システムにおけるデータの非重複化を行う技術が開示されている。特許文献２の発明では、重複排除による容量圧縮と、データの保全性の両立を図っている。すなわち、まず重複する実データを削除する。ただし、重複度が閾値以上になると重複排除処理を行わない。これにより、記憶データに対する損失のリスク、ならびに、多数のデータ対象にわたる信頼性および性能の低下などの問題を緩和している。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００９−２３７９７９号公報
【特許文献２】特開２００９−１２９４４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
ビッグデータ分野で扱われる、数百ＴＢ〜数百ＰＢにもなるデータ手の格納・処理では、記憶装置ユニットを分散し、並列にアクセス可能な分散ストレージシステムにすると共に、データを大量に格納可能とする重複排除技術との両立が望まれる。  
従来のストレージ機器で行われる重複排除は、完全に同一内容のセクタを排除することで実質データ量を削減するものである。
【０００８】
特許文献１の発明では、重複ファイルの削減によりデータ量は削減される。しかし、それらのデータに対する複数の利用者端末からのアクセスに対する並列処理の機会が失われる。  
特許文献２の発明では、重複度が閾値に達するまでは重複する実データが削除される。この重複する実データの削減によりデータ量は削減されるが、それらのデータに対する複数の利用者端末からのアクセスに対する並列処理の機会は失われる。
【０００９】
このように、特許文献１や特許文献２では、ファイルシステムにおける同一データの重複排除と、並列アクセス処理とを両立することについての十分な配慮はなされていない。
【００１０】
本発明の主たる課題は、格納実効データ量の増加を図るための同一データの過度の重複の排除と、並列アクセス処理とを両立する、自律分散型のファイルシステム、記憶装置及びデータアクセス方法を提供することにある。
【課題を解決するための手段】
【００１１】
本発明の代表的なものを示すと、次のとおりである。ファイルシステムは、第１のネットワークを介してデータ参照装置に接続される自律分散型ファイルシステムであって、前記自律分散型ファイルシステムは、第２のネットワークを介して相互に接続されると共に各々前記第１のネットワークに接続される複数の記憶装置ユニットと、ストレージディレクトリと、重複データ維持ユニットとを備えており、前記各記憶装置ユニットは、各々、ローカルストレージを備えており、前記ストレージディレクトリは、保持されるデータに関して、前記各記憶装置ユニットの前記ローカルストレージの論理的ブロックのＩＤ及び物理的ブロックのＩＤ、同じ若しくは他の前記記憶装置ユニットのノードＩＤへのリンク及び該ノードＩＤの前記論理的ブロックブロックＩＤへのリンクの値を保持する機能を有しており、前記重複データ維持ユニットは、前記ストレージディレクトリを参照して、前記各記憶装置ユニットのストレージ容量を圧迫しない範囲で、前記データの１つの実データ及び少なくとも１つの複製データとを重複して保持し続け、前記ストレージ容量に余裕が無い場合には、前記複製データの書き込みを制限若しくは排除することを特徴とする。
【発明の効果】
【００１２】
本発明によれば、ファイルシステムにおいて、同一データの重複度が適度に制御され、過度の重複の排除と並列アクセスの両立を実現することができる。
【図面の簡単な説明】
【００１３】
【図１】本発明の第一の実施例に係る自律分散型ファイルシステムの全体構成の例を示すブロック図である。
【図２】第一の実施例の記憶装置システムの全体構成を示すブロック図である。
【図３】第一の実施例における、管理端末の構成例を示す図である。
【図４】第一の実施例における、記憶装置ユニットの構成例を示す概念図である。
【図５Ａ】第一の実施例における、１つの記憶装置ユニットのストレージディレクトリの、データ書き込み前の例を示す図である。
【図５Ｂ】図６のフローに対応した、他の記憶装置ユニットにおけるストレージディレクトリの例を示す図である。
【図６】第一の実施例における、サーバから１つの記憶装置ユニットに対するデータ書き込み要求があったときの、処理を示すフロー図である。
【図７】図６のフローに対応する、他の記憶装置ユニットにおける、１つの記憶装置ユニットからのハッシュ値の受信時の処理を示すフロー図である。
【図８】図６のフローに対応する、他の記憶装置ユニットにおける、１つの記憶装置ユニットからのデータの受信時の処理を示すフロー図である。
【図９】図６のフローにおける、１つの記憶装置ユニットと他の記憶装置ユニットとの間でのデータの流れを示す図である。
【図１０Ａ】第一の実施例における、ストレージディレクトリの、データ書き込み途中の例を示す図である。
【図１０Ｂ】第一の実施例における、ストレージディレクトリのデータ書き込み終了後の例を示す図である。
【図１１】図６のフローにおける、２つの記憶装置ユニットでのデータ書き込みの同時処理時のデータの流れを示す図である。
【図１２】比較例における、２つの記憶装置ユニットでのデータ書き込みの同時処理時のデータの流れを示す図である。
【図１３】第一の実施例の１つの記憶装置ユニットに対するデータ読み出しの処理を示すフロー図である。
【図１４】第一の実施例の１つの記憶装置ユニットに対する、複数のサーバからのデータ読み出しのアクセスについて説明する図である。
【図１５】本発明の第二の実施例における、１つの記憶装置ユニットに対するデータ書き込みの処理を示すフロー図である。
【図１６】第二の実施例における、ストレージディレクトリのデータ書き込み終了後の例を示す図である。
【図１７】第二の実施例の１つの記憶装置ユニットに対する、複数のサーバからのデータ読み出しのアクセスについて説明する図である。
【発明を実施するための形態】
【００１４】
本発明の代表的な実施例によれば、データ参照装置に接続される自律分散型ファイルシステムは、ファイル（データ列）の書き込みと重複排除を行う機能・構成を備えている。ファイルは、データを保持するための容器または保持されたデータ自体であり、１つのファイルは、順序づけられたレコード列で構成される。１つのファイルのレコード列の中に、他のファイルを参照するポインタがリンクとして埋め込まれる。本発明の自律分散型ファイルシステムでは、各記憶装置ユニットが異なるファイル（データ列）に含まれる同一部分、すなわち、実データの同一内容にリンクを張ると共にその実データの実体を、当該記憶装置ユニットのストレージ容量を圧迫しない範囲で保持し続け、データの読み出し時には最も近い場所にあるファイル内容を読み出すことで、アクセスタイムの軽減および並列アクセスを可能とする。当該記憶装置ユニットのストレージ容量が圧迫される状況では、実データの同一部分にリンクを張ると共にその実体を削除し、これら同一内容の実体の数を減らすことで、ファイルシステムのストレージ総容量を増やさずに、格納データ（異なるデータ）の量を増加させ、かつ、並列処理の効率を維持する。
【００１５】
なお、本発明において、「データ」とは、データ参照装置から書き込み要求のあった単位のデータ、換言すると、異なるファイルに保持されるデータを意味する。例えば、ある研究論文の全文ｄａｌｌが、タイトル（ｄ１）＋抄録（ｄ２）＋本文（ｄ３〜ｄ９８）＋結論（ｄ９９）で構成されているものと仮定する。全文ｄａｌｌのデータＤｌ−９９、抄録（ｄ２）のデータＤ２、本文中の特定のテーマ（ｄ２０〜ｄ２５）のデータＤ２０−２５、等が各々、「データ」であり、これらの「データ」毎に各々異なるファイルに保持される。「データの同一」とは、例えば、データＤ２０−２５と、これと同じ特定のテーマ（ｄ２０〜ｄ２５）のデータＤ‘２０−２５を意味する。逆に、データＤ２０−２５と、これを内部に含む本文のデータＤ３−９８とは、同一ではなく、異なるデータとなる。
【００１６】
以下、図面を参照しながら、本発明の詳細について、説明する。  
なお、自律分散型ファイルシステムに対するデータ参照装置として、以下では、ネットワークに接続されたサーバを例に挙げて説明するが、本発明はこれに限定されるものではなく、各種の端末に適用可能である。
【実施例１】
【００１７】
図１は、本発明の第一の実施例に係る自律分散型ファイルシステムの全体構成を示すブロック図である。  
自律分散型ファイルシステムは、データ参照装置である複数のサーバが複数のアクセスパスにより繋がれており、各アクセスパスはデータを保持したファイルが格納される記憶装置ユニットに繋がれている。すなわち、複数のサーバ１０００（ａ〜ｎ）が、第１のネットワーク１００６を介して、複数の自律分散型の記憶装置ユニット１００１（ａ〜ｍ）に接続されている。各記憶装置ユニット（以下、ノードとも記す）１００１ａ〜１００１ｎは、各サーバからの要求に基づいて、ファイル（データ列）のデータの書き込みや読み出しを行う。
【００１８】
各記憶装置ユニット１００１（ａ〜ｍ）は、第２のネットワーク１００７を介して相互に接続されている。第１のネットワーク１０６及び第２のネットワーク１００７は、例えばＳＡＮ、ＬＡＮ（Local Area Network）、ＷＡＮ（Wide Area Network）、インターネット、公衆回線又は専用回線などから構成される。例えば、ネットワークがＬＡＮ又はＷＡＮである場合にはＮＡＳ（Network Attached Storage）により、複数の記憶装置ユニットとサーバとが相互に接続され、ＴＣＰ／ＩＰプロトコルに従って通信が行われる。ネットワークがＳＡＮである場合にはファイバチャネルプロトコルに従って通信が行われる。ここでは、第１のネットワーク１００６はＳＡＮで構成され、第２のネットワーク１００７はＬＡＮで構成されている。
【００１９】
各記憶装置ユニット１００１（ａ〜ｍ）は、ストレージインタフェース１１０１と、ローカルストレージ１１０２と、ローカルコントローラ１１０３とを備えている。ローカルコントローラ１１０３は、ハッシュ値を計算するハッシュ値演算器１１３０と、データを比較するデータ比較器１１３１と、データのハッシュ値を比較するハッシュ値比較器１１３２と、ネットワークインタフェース１１３３と、ストレージディレクトリ１１３４と、重複データ維持ユニット１１３５とを備えている。
【００２０】
なお、ファイルシステム全体としての記憶装置ユニット１００１（ａ〜ｍ）の数は、用途に応じて適宜選定すれば良いが、一例として、１つのファイルシステムを１０個若しくはそれより少ない複数個の記憶装置ユニット１００１で構成するのが望ましい。各記憶装置ユニット１００１（ａ〜ｍ）には、固有のノードのＩＤの値が予め与えられている。例えば、記憶装置ユニット１００１ａのＩＤの値が最も小さく、記憶装置ユニット１００１ｎのＩＤの値が最も大きい。これは逆の関係でも良く、他の設定方法でも良い。以下では，記憶装置ユニット１００１ａのＩＤの値が最も小さいとして説明する。
【００２１】
図２は、第一の実施例の記憶装置ユニット１００１を含む自律分散型ファイルシステムの全体構成を示すブロック図である。
【００２２】
各記憶装置ユニット１００１（ａ〜ｍ）は、ストレージインタフェースとして機能するチャネル制御部１１０１と、ローカルストレージ１１０２と、ローカルコントローラ１１０３とを備えている。ローカルコントローラ１１０３は、ネットワークインタフェース１１３３と、接続部１１３７と、管理端末１１４０を含み、サーバ１０００（ａ〜ｎ）から受信したコマンドに従ってローカルストレージ１１０２に対する制御を行う。例えば、サーバ１０００ａからデータ入出力要求を受信して、ローカルストレージ１１０２ａに記憶されているデータの入出力のための処理を行う。ローカルコントローラ１１０３ａは、サーバ１０００（ａ〜ｎ）との間及び自記憶装置ユニット１００１ａを管理するための各種コマンドの授受も行う。
【００２３】
チャネル制御部１１０１は、個々にネットワークアドレス（例えばＩＰアドレス）が割り当てられており、ローカルコントローラ１１０３は、チャネル制御部１１０１よりＳＡＮ１００６を介してサーバ１０００からのファイルアクセス要求を個々に受け付ける。サーバ１０００からは、各記憶装置ユニット１００１に対して、ファイバチャネルプロトコルに従ってデータ・ブロック単位のデータアクセス要求（ブロックアクセス要求）が送信される。
【００２４】
ローカルストレージ１１０２は、多数のディスクドライブ（物理ディスク）を備えており、サーバ１０００に対して記憶領域を提供する。データは、ディスクドライブにより提供される物理的な記憶領域上に論理的に設定される記憶領域である論理ボリューム（ＬＵ）に記憶されている。ローカルストレージ１１０２は、例えば複数のディスクドライブによりディスクアレイを構成するようにすることもできる。この場合、サーバ１０００に対して提供される記憶領域は、ＲＡＩＤ（Redundant Arrays of Inexpensive Disks）により管理された複数のディスクドライブにより提供される。
【００２５】
ローカルコントローラ１１０３とローカルストレージ１１０２の間には、ローカルストレージ１１０２の制御を行うディスク制御部１１３９があり、チャネル制御部１１０１、およびディスク制御部１１３９の間でのデータやコマンドの授受は、接続部１１３７を介して行われる。
【００２６】
ディスク制御部１１３９は、チャネル制御部１１０１がサーバ１０００から受信したデータ書き込みコマンドに従ってローカルストレージ１１０２へのデータの書き込みを行う。また、チャネル制御部１１０１により送信された論理アドレス指定によるＬＵへのデータアクセス要求を、物理アドレス指定による物理ディスクへのデータアクセス要求に変換する。ローカルストレージ１１０２における物理ディスクがＲＡＩＤにより管理されている場合には、ＲＡＩＤ構成に従ったデータのアクセスを行う。また、ディスク制御部１１３９は、ローカルストレージ１１０２に記憶されたデータの複製管理の制御やバックアップ制御も行う。
【００２７】
管理端末１１４０は、記憶装置ユニット１００１を保守・管理するコンピュータであり、図３に示すように、ＣＰＵ１１４１、メモリ１１４２、ポート１１４７、記憶装置１１４８、バス１１４９および入出力装置（図示略）を備える。
【００２８】
メモリ１１４２には、物理ディスク管理テーブル１１４３とＬＵ管理テーブル１１４４と、ストレージディレクトリ１１３４と、プログラム１１４６とが記憶されている。ＣＰＵ１１４１は、プログラム１１４６を実行することにより管理端末１１４０の全体の制御を行う。
【００２９】
ストレージディレクトリ１１３４は、自律分散型ファイルシステムにおける各記憶装置ユニット１００１（ａ〜ｍ）に対する各サーバからのデータの書き込みや読み出しを、各記憶装置ユニットの空き容量に応じて管理するためのものであり、各ストレージディレクトリ１１３４（ａ〜ｍ）間で相互に連係するように構成されている。そのため、ストレージディレクトリ１１３４は、ＬＵ管理テーブルや物理ディスク管理テーブルが本来有する機能の一部を取り込んで構成されている。すなわち、各ストレージディレクトリ１１３４は、以下に述べる、物理ディスク管理テーブル１１４３及びＬＵ管理テーブル１１４４の一部若しくは全体の機能を含み、これらの上位のテーブルとして構成される。あるいはまた、ＬＵ管理テーブル１１４４を省略し、記憶装置ユニット毎に１つのストレージディレクトリ１１３４を設けるように構成しても良い。
【００３０】
物理ディスク管理テーブル１１４３は、ローカルストレージ１１０２に備えられる物理ディスク（ディスクドライブ）を管理するためのテーブルである。この物理ディスク管理テーブル１１４３は、ローカルストレージ１１０２が備える多数の物理ディスクのそれぞれのディスク番号、物理ディスクの容量、ＲＡＩＤ構成、使用状況を記録、管理する。ＬＵ管理テーブル１１４４は、物理ディスク上に論理的に設定されるＬＵを管理するためのテーブルである。このＬＵ管理テーブル１１４４は、ローカルストレージ１１０２上に設定される多数のＬＵのＬＵ番号、物理ディスク番号、容量、ＲＡＩＤ構成を記録、管理する。ポート１１４７は、内部ＬＡＮやＳＡＮに接続される。記憶装置１１４８は、例えばハードディスク装置やフレキシブルディスク装置、半導体記憶装置などである。
【００３１】
図４は、記憶装置ユニット１００１の構成を示す概念図である。図４の例では、記憶装置ユニット１００１ｂ及び１００１ｅの各物理ディスクにデータを保持するファイルの実体が１つずつ存在し、それらのアドレス（論理位置）等がストレージディレクトリ１１３４ｂ及び１１３４ｅに記録されている。
【００３２】
図５Ａは、データ書き込み（図６）を行う前の、記憶装置ユニット１００１ｅのストレージディレクトリ１１３ｅの構成例を示す概念図である。ストレージディレクトリ１１３４ｅは、自ノードに記録されているデータの論理的ブロックのＩＤ１１３４１及び物理的ブロックのＩＤ１１３４２、データのハッシュ値１１３４３、自身の記録されているデータの他のノード（記憶装置ユニット）のＩＤへのリンク１１３４４、及びその他のノードの物理的ブロックＩＤへのリンク１１３４５、及び処理中フラグ１１３４６の６つの属性で構成されている。
【００３３】
論理的ブロックＩＤ１１３４１は、各記憶装置ユニット１００１（１００１ａ〜１００１ｍ）内で管理する論理的なファイルパスであり、ローカルストレージのすべてのファイルに対してユニークに設定される。例えば、記憶装置ユニット１００１ｅには、論理的ブロックＩＤとして、４０００，４００１，４００２，４００３，−が設定されている。
【００３４】
物理的ブロックＩＤ１１３４２は、実際に各記憶装置ユニット１００１（１００１ａ〜１００１ｍ）内に格納されているファイルの実ファイルパスである。例えば、記憶装置ユニット１００１ｅには、論理的ブロックＩＤ＝４０００に、ファイルの実データが格納された物理的ブロックのＩＤとして、５１２３が設定されている。各サーバは、このストレージディレクトリ１１３４のＩＤを利用して、各記憶装置ユニット１００１のファイルにアクセスすることができる。
【００３５】
ハッシュ値１１３４３は、ファイルアクセスに必要なファイルのハッシュ値（６１００等）を示している。重複するファイルの場合は、ハッシュ値が同じ値になる。ハッシュ値に代えて、他の特徴値を用いても良い。
【００３６】
ノードＩＤへのリンク１１３４４は、自ノードの記憶装置ユニット１００１から他のノードの記憶装置ユニットへのリンクを示し、ブロックＩＤへのリンク１１３４５は、その論理的ブロックＩＤへのリンクを示している。例えば、記憶装置ユニット１００１ｅの論理的ブロックＩＤ４００２に、ハッシュ値６１０３のデータに関して、記憶装置ユニット１００１ｃの論理的ブロックＩＤ４１２１にリンクが張られていることを表している。  
処理中フラグ１１３４６は、各ノードが処理中の状態にあるか（＝１）、否か（＝０）を表している。
【００３７】
他の各記憶装置ユニットも、各々、記憶装置ユニット１００１ｅと同様なストレージディレクトリ１１３４を備えている。図５Ｂに、記憶装置ユニット１００１ｆのストレージディレクトリ１１３４ｆの例を示す。記憶装置ユニット１００１ｆには、論理的ブロックＩＤとして、４１００，４１０１，−が設定されており、論理的ブロックＩＤ＝４１００にハッシュ値６１０２のファイルの格納を示す物理的ブロックのＩＤ＝５００１が設定されている。
【００３８】
なお、本実施例の代案として、自律分散型ファイルシステムの第１、第１のネットワークに接続された管理サーバを設け、各記憶装置ユニットのローカルコントローラ１１０３の機能の一部を、この管理サーバで一括して管理するようにしても良い。すなわち、この管理サーバにストレージディレクトリ１１３４を設け、各記憶装置ユニットには物理ディスク管理テーブル及びＬＵ管理テーブルを設ける。そして、管理サーバのストレージディレクトリに、データ書き込み時の、各記憶装置ユニット１００１内の論理位置とデータ及び特徴量を保持する。この場合、データの読み出し時には、サーバがこの管理サーバに問い合わせ、ストレージディレクトリ１１３４を参照してデータを持つ記憶装置ユニットの位置を得るようにする。
【００３９】
次に、図４を参照しながら、本実施例に係る自律分散型ファイルシステムの特徴的な機能を説明する。  
記憶装置ユニットｂ及びｅのローカルコントローラは、重複データ維持ユニット及びハッシュ値・データ値の演算比較機能を備えており、ローカルストレージの論理ブロックに空きが有る場合、換言するとストレージ容量を圧迫しない場合には、データの１つの実データ及び少なくとも１つの複製データとを重複して保持し続け、論理ブロックに空きが無い場合、換言するとストレージ容量に余裕が無い場合には、複製データの書き込みを制限若しくは排除する機能を有している。より具体的には、次の通りである。
［書き込みと重複制御］
（１）各記憶装置ユニット１００１は、ストレージディレクトリ１１３４に自身のノードが有するデータの特徴値（ハッシュ値等）を演算し記録する。  
（２）（ストレージに接続された）サーバが、（論理・物理ブロック）の論理位置ｐに対して新規データＤを書き込むと、データを受け取った記憶装置ユニット（この例では１００１ｅ）は、前記新規データＤの特徴（ハッシュ値）Ｈを演算し、自ノードに記録されている特徴値のリストから同一のハッシュ値を持つデータを抽出し、自ノードに前記新規データＤと重複するデータＤ’が有ればそれにリンクを張る。  
（３）データを受け取った記憶装置ユニット１００１ｅは、前記新規データＤの特徴（ハッシュ値）Ｈを、ストレージシステムを構成する他の各記憶装置ユニットｉ（以下、代表して記憶装置ユニット１００１ｂ）に報告する。  
（４）前記特徴値を受け取った記憶装置ユニットｂは、自ノードに記録されている特徴値のリストから同一のハッシュ値を持つデータを選択する。同一値Ｈ‘が存在した記憶装置ユニットｂは記憶装置ユニットｅにデータＤを要求する。
【００４０】
（５）記憶装置ユニットｅは記憶装置ユニットｂにデータＤを転送する。  
（６）記憶装置ユニットｂはデータＤと同一のデータＤ’を自ノードが有するか判定し、結果を記憶装置ユニットｅに返す。  
（７）もし同一のデータＤ’を有している記憶装置ユニットｂがあった場合、記憶装置ユニットｅはデータＤをデータＤ’の複製として保持すると共に、データＤからデータＤ’へのリンクを作成し、ストレージディレクトリ１１３４ｅに記録する。この記憶装置ユニットｂへのリンクの作成は、データＤが、記憶装置ユニットｅのストレージ容量が圧迫される状態になった時に「重複排除できるデータ」としてあるとマークされたことを意味する。
【００４１】
また、記憶装置ユニットｂのストレージディレクトリには、記憶装置ユニットｂが有する（データＤと同一の）データＤ’は他からリンクされたことを記録する。
［読み出し］
（１）サーバ（ｘ）は論理位置ｐを指定して記憶装置ユニットｅにデータＤを要求する。
（２）記憶装置ユニットｅは、自身が論理値ｐのデータＤを有する場合、それを返す。
（３）記憶装置ユニットｅは自ノードに要求されたデータはないが、ｐに対するリンクが存在する場合、そのリンク先の記憶装置ユニットｂに対してデータＤ’の転送を要求する。  
（４）記憶装置ユニットｅは、記憶装置ユニットｂからデータＤ’を受け取り後、それをサーバに返す。
【００４２】
次に、図５Ａ〜図１０Ｂを参照しながら、サーバから１つの記憶装置ユニットｅへ、データ書き込みが行われる場合の、重複データ維持ユニット１１３５を主体とする処理について、説明する。  
図６は、記憶装置ユニットｅに対するデータ書き込み時の、重複データ維持ユニット１１３５を主体した処理（Ｓ２０００）を示すフロー図である。  
記憶装置ユニットｅは、サーバ（ｘ）からのデータ（Ｄ１）の書き込みを受信すると（Ｓ２００１）、自ノードのストレージディレクトリ１１３４ｅの論理ブロックに空きが有るかを判定する（Ｓ２００２）。
【００４３】
ディレクトリの論理ブロックに空きが無ければ、ストレージに「空き容量無し」として処理を終了する（Ｓ２００３）。もし、ディレクトリの論理ブロックに空きが有る場合、次に、ディレクトリの物理ブロックに空きが有るかを判定する（Ｓ２００４）。ディレクトリの物理ブロックに空きが無い場合（Ｓ２００４でＮＯ）には、ディレクトリにリンクを持つ論理ブロックが有るかを判定する（Ｓ２００５）。リンクを持つ論理ブロックが無ければ、ストレージに「空き容量無し」と応答して処理を終了する（Ｓ２００３）。もし、ディレクトリから重複した物理ブロック、例えば物理ブロック（Ｄ２）があれば、その物理ブロックへのポインタを削除し（Ｓ２００６）、空きブロックを確保する。そして、この空きブロックにデータ（Ｄ１）を格納し、ストレージディレクトリに、このブロックのエントリを作成し（Ｓ２００７）、ストレージディレクトリに「処理中フラグ」をセットする（Ｓ２００８）。
【００４４】
さらに、データＤ１のハッジュ値Ｈ１を計算する（Ｓ２００９）。そして、自ノードのストレージディレクトリに同一のハッジュ値Ｈ１を持つブロックが存在するかを判定する（Ｓ２０１０）。もし、同一ハッジュ値Ｈ１を持つブロックが存在する場合には、さらに、自ノードのストレージディレクトリに同一のデータＤ１‘を持つブロックが存在するかを判定する（Ｓ２０１１）。異なるファイルに含まれる同一のデータＤ１‘を持つブロックが存在する場合には、ステップ２０１９に進み、データＤ１‘へのリンクを作成し、データＤ１をデータＤ１‘の複製ブロックとする。一方、自ノードのストレージディレクトリに同一のデータを持つブロックが存在しない場合、ハッジュ値Ｈ１を他のノードに分配する（Ｓ２０１２）。
【００４５】
図７は、他の記憶装置ユニットｂにおける、記憶装置ユニットｅからのハッシュ値Ｈ１の受信時（Ｓ７００）の処理を示すフロー図である。各記憶装置ユニットｉ（ここではｉ＝ｂ）では自ノードのストレージディレクトリに同一のハッシュ値Ｈ１‘が有るかないかを判定する（Ｓ７０１）。もし、そのストレージディレクトリにハッシュ値Ｈ１‘が無ければＮＯ、同一のハッシュ値Ｈ１‘が有ればＹＥＳを記憶装置ユニットｅへ返して終了する（Ｓ７０２〜Ｓ７０４）。
【００４６】
図６において、記憶装置ユニットｅでは、他のノードからの応答を受けて、同一のハッジュ値Ｈ１を持つノードが存在する場合（Ｓ２０１３でＹＥＳ）には、さらに、そのノードにデータＤ１を分配する（Ｓ２０１４）。
【００４７】
図８は、他の記憶装置ユニットｂにおける、記憶装置ユニットｅからのデータＤ１の受信時（Ｓ８００）の処理を示すフロー図である。各記憶装置ユニットｉ（ここではｉ＝ｂ）では自ノードのストレージディレクトリにＤ１と同一のデータＤ１‘が有るかないかを判定する（Ｓ８０１）。もし、そのストレージディレクトリにデータＤ１‘が無ければＮＯ、同一のデータＤ１‘が有ればＹＥＳを記憶装置ユニットｅへ返して処理を終了する（Ｓ８０２〜Ｓ８０４）。なお、Ｓ８０１で、同一のデータＤ１‘が有る場合には、ストレージディレクトリに「処理中フラグ」を１にセットし、Ｓ８０３では、ＹＥＳと共に、「処理中フラグ」の値“１”を返す。
【００４８】
図６において、記憶装置ユニットｅでは、他の各ノードからの応答を受けて、同一のデータを持つブロックが存在するかを判定する（Ｓ２０１５）。もし、同一のデータを持つブロックが１つ若しくは複数存在する場合（Ｓ２０１５でＹＥＳ）には、それらのノードからの受信結果に「処理中フラグ」がセットされているかを判定する（Ｓ２０１６）。「処理中フラグ」がセットされている場合には、自ノードのＩＤと結果を返したノードのＩＤの値の大小関係を比較する（Ｓ２０１７）。自ノードのＩＤが小さい場合には、ステップ２０１８に進み、複数のノードにデータＤ１と同一のデータＤ１‘が存在する場合には、それらのノードの中で自ノードのＩＤが最小かを判定する。もし、自ノードのＩＤが最小ではない場合には、ステップ２０１９に進む。ステップ２０１６で「処理中フラグ」がセットされていない場合にも、ステップ２０１９に進む。ステップ２０１９では、自ノードのデータＤ１‘若しくは自ノードよりもＩＤの小さい他のノードのデータＤ１‘へのリンクを作成してストレージディレクトリに記録し、自ノードのデータＤ１をデータＤ１‘の複製ブロックとする。逆に、ステップ２０１７で自ノードのＩＤの方が大きい場合や、ステップ２０１８でノードのＩＤが最小の場合には、データＤ１‘へのリンクを作成せずに、ステップ２０２０に進み、データＤ１をそのまま保存する。このようにして、ＩＤの小さい側の特定の１つのノード（以下、特定ノード）に実データが保存され、ＩＤの大きいノードには実データの複製ブロックが保存されあるいは実データへの（直接的有る生は間接的な）リンクが作成される。なお、特定ノードには実データの複製ブロックも保存されあるいはリンクが作成され得る。すなわち、ステップ２０１７〜２０１９は同一データに関し、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」を実現するものである。この機能により、各記憶装置ユニットは、異なる複数のファイルに同一内容のデータを保持し続けることで、アクセスタイムの軽減および並列アクセスを可能にする。
【００４９】
図９に、図６のフローのステップ２０００からステップ２０１２までに対応する、データ書き込み時の、１つの記憶装置ユニットｅと他の記憶装置ユニットｂとの間でのデータの流れを（１）〜（７）として示す。ここでは、記憶装置ユニット１００１ｅのストレージディレクトリｅの論理ブロックが「空き無し」となっている場合、自ノードの重複した物理ブロック（Ｄ２）を削除し、この空いた物理ブロックにデータＤ１を格納している。また、自ノードのストレージディレクトリｅに同一のデータＤ１‘を持つブロックが存在しないので、ハッジュ値Ｈ１を他のノードｂに分配している。
【００５０】
図１０Ａに、ストレージディレクトリ１１３４ｅの、データ書き込み途中の例を示す。この例では、自ノードの論理的ブロックＩＤ４００３、物理的ブロックＩＤ５３９１に記録されているハッシュ値６１００及びデータＤ１が、自ノードの論理的ブロックＩＤ４０００、物理ブロック５１２３のハッシュ値６１００及びデータＤ１‘と同じであり、ノードＩＤへのリンク１１３４４に、自ノード１００１ｅの論理的ブロックＩＤ４０００へのリンク１００１ｅが設定され、「処理中フラグ」がセットされている。
【００５１】
図９に、図６のフローのステップ２０１３からステップ２０２１までに対応する、記憶装置ユニットｅと記憶装置ユニットｂとの間でのデータの流れを（８）〜（１１）として示す。ストレージディレクトリｅに、記憶装置ユニット１００１ｂのデータＤ１‘へのリンクを作成し、データＤ１をデータＤ１‘の複製ブロックとしている。すなわち、異なるファイルに含まれる同一のデータ部分についてはファイルシステムに少なくとも１つの実体を１つ残し、他は複製データを保持し、あるいはリンクを作成する。この複製データは「重複排除」の対象としてマークされたデータである。これにより、ファイルシステム内におけるデータ総量を増やさずに並列処理の効率向上を図ることができる。
【００５２】
図１０Ｂに、ストレージディレクトリ１１３４ｅの、データ書き込み終了後の例を示す。ここでは、自ノードの論理的ブロックＩＤ４００３から論理的ブロックＩＤ４０００へのリンクとして、ブロックＩＤへのリンク１１３４５に、値４０００が設定され、「処理中フラグ」は解除されている。なお、物理的ブロックのＩＤとして、同一のデータＤ１、Ｄ１‘に関するＩＤである５１２３と５３９１が設定されており、記憶装置ユニットｅの異なるファイルに同一のデータが重複して保持されていることを示している。
【００５３】
図６において、同一のハッジュ値Ｈ１や同一のデータを持つノードが存在しない場合（Ｓ２０１３及びＳ２０１５でＮＯ）、及び、自ノードのＩＤが大きい場合（Ｓ２０１７でＮＯ）には、ステップ２０２０に進み、ストレージディレクトリの「処理中フラグ」をリセットして、終了する（Ｓ２０２１）。
【００５４】
なお、図６のステップ２０１７において、「処理中フラグ」がセットされている場合に、自ノードのＩＤと結果を返したノードのＩＤの大小関係を比較するのは、同一のデータＤ１、Ｄ１‘の実体が同時に削除されるのを防止するためである。これを、図１２、図１３で説明する。
【００５５】
図１１は、図６のステップ２０１７〜２０１９が有る場合、すなわち、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」がある場合の、２つの記憶装置ユニットでのデータ書き込み時の、同時処理時のデータの流れを示す図である。記憶装置ユニット１００１ｂと記憶装置ユニット１００１ｅとが同時（ｔ＝ｔ１）に、サーバからのデータＤ１、Ｄ１‘の書き込みを受信した場合、ステップ１１０１（ｂ，ｅ）からｔ＝ｔ２のステップ１１１０（ｂ，ｅ）までは、並行して同じ内容の処理がなされる。次に、記憶装置ユニット１００１ｂではステップ１１１１ｂにおいてノードの大小関係が比較されるが、自ノードのＩＤの値が記憶装置ユニット１００１ｅのＩＤの値よりも小さいので（図６のステップ２０１７のＹＥＳに相当）、ステップ１１１３ｂで、データ間のリンクは作成されない（図６のステップ２０１９に相当）。一方、記憶装置ユニット１００１ｅでも、ステップ１１１２ｅにおいてノードの大小関係が比較されるが、自ノードのＩＤの値が記憶装置ユニット１００１ｂのＩＤの値よりも大きいので、結果を返したノードのＩＤよりも小さくないと判定され（図６のステップ２０１７のＮＯ、ステップ２０１８のＹＥＳに相当）、データＤ１‘からデータＤ１へのリンクが作成される。
【００５６】
その後、ステップ１１１５（ｂ，ｅ）で、すなわち記憶装置ユニット１００１ｂはｔ＝ｔ３でデータＤｎ、記憶装置ユニット１００１ｅはｔ＝ｔ４でデータＤｍの書き込みを、各々サーバから受信したものとする。双方の記憶装置ユニットのディレクトリの論理ブロックに空きが有り物理ブロックに空きが無い状態（図６のＳ２００４でＮＯに相当）では、記憶装置ユニット１００１ｂではディレクトリにリンクを持つ論理ブロックが無く、ステップ１１１６ｂの確認の結果リンクが無いので（図６のＳ２００５でＮＯに相当）、ステップ１１１８ｂでストレージに「空き容量無し」としてリンクが張られずに処理を終了する。そのため、データＤｎと共にデータＤ１が実体として残る。一方、記憶装置ユニット１００１ｅでは、ステップ１１１７ｅで、ディレクトリにリンクを持つ論理ブロックが有るので（図６のＳ２００５でＹＥＳに相当）、ステップ１１１９ｅで、Ｄ１‘のリンクが削除され（図６のＳ２００６に相当）、データＤｍが格納される（図６のＳ２００７に相当）。そのため、データＤｍのみが保持される。このようにして、ファイルシステムでは、１つのデータＤ１がＤ１、Ｄ１‘の実体として、特定ノードである記憶装置ユニット１００１ｂに残り、ＩＤの値が大きい記憶装置ユニット１００１ｅにおいては、データＤ１‘からＤ１へのリンクが作成され、Ｄ１‘の実体は削除される。
【００５７】
次に、図１２は、比較例として、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」、すなわち図６のステップ２０１７〜２０１９が無い場合の、２つの記憶装置ユニットでのデータ書き込み時の、同時処理時のデータの流れを示す図である。記憶装置ユニット１００１ｂと記憶装置ユニット１００１ｅとが同時（ｔ＝ｔ１）に、サーバからのデータＤ１、Ｄ１‘の書き込みを受信した場合、ステップ１１０１（ｂ，ｅ）からｔ＝ｔ２すなわちステップ１１０９（ｂ，ｅ）までは、並行して同じ内容の処理がなされる。さらに、ステップ１１１４（ｂ，ｅ）で、データＤ１‘からＤ１へのリンクと共に、Ｄ１からＤ１‘へのリンクも作成される（図６のステップ２０１９に相当）。その後、ステップ１１１５（ｂ，ｅ）で、すなわち記憶装置ユニット１００１ｂはｔ＝ｔ３でデータＤｎ、記憶装置ユニット１００１ｅはｔ＝ｔ４でデータＤｍの書き込みを、各々サーバから受信したものとする。双方の記憶装置ユニットのディレクトリの論理ブロックに空きが有り物理ブロックに共に空きが無い場合（図６のＳ２００４でＮＯに相当）には、記憶装置ユニット１００１ｂ、記憶装置ユニット１００１ｅ共にディレクトリにリンクを持つ論理ブロックが有るのでステップ１１１７（ｂ，ｅ）の確認の結果、リンクを持つ論理ブロック有となり（図６のＳ２００５でＹＥＳに相当）、ステップ１１１９（ｂ，ｅ）で、Ｄ１、Ｄ１‘のリンクがストレージディレクトリから共に削除され（図６のＳ２００６に相当）、データＤｎ、Ｄｍが格納される（図６のＳ２００７に相当）。このようにして、ファイルシステムから、データＤ１、Ｄ１‘の実体が同時に削除される（図６のＳ２００６に相当）。
【００５８】
本発明では、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」により、実体の同じデータが複数存在する場合には、特定ノードのデータ、例えば、ノードＩＤの小さい側のデータのみを残すようにすることで、記憶装置ユニット１００１からデータの実体が同時に削除されることを防止している。なお、この特定ノードの設定方法としては、ノードのＩＤの値の大小関係を逆にしても良く、あるいは、ＩＤの値が最小ではなく例えば中間値を基準にして大小関係を判定するようにしても良い。
【００５９】
次に、図１３は、１つの記憶装置ユニットにおける、データ読み出しの処理を示すフロー図である。記憶装置ユニット１００１ｅは、サーバ（ｘ）から論理値ｐのデータＤ１の読み出し要求を受信すると（Ｓ１５００）、自身のストレージディレクトリｅに要求された論理値ｐ（論理・物理ブロック）のデータを有する場合（Ｓ１５０１でＹＥＳ）、データを添付してサーバ（ｘ）に応答する（Ｓ１５０６）。もし、要求された論理値ｐが自身のストレージディレクトリｅにはないが、ストレージディレクトリｅに、論理値ｐに対するリンク１１３４が存在する場合（Ｓ１５０２でＹＥＳ）、リンク先の記憶装置ユニットユニットｂに対してデータ転送を要求する（Ｓ１５０４）。記憶装置ユニット１００１ｅは、記憶装置ユニットｂからデータを受け取り、それをサーバ（ｘ）に転送して（Ｓ１５０５）、終了する（Ｓ１５０７）。論理値ｐに対するリンク１１３４が存在しない場合（Ｓ１５０２でＮＯ）は、要求された論理値ｐのデータが抽出されなかったものとしてサーバ（ｘ）に応答し、処理を終了する（Ｓ１５０３）。
【００６０】
なお、上記例のＳ１５０４〜Ｓ１５０６に代えて、ストレージディレクトリｅに論理値ｐに対するリンク１１３４が存在する場合（Ｓ１５０２でＹＥＳ）は、記憶装置ユニット１００１ｅからリンク先の記憶装置ユニットユニットｂに対して、記憶装置ユニットユニットｂから直接サーバ（ｘ）に送信することを要求し、この要求を受信した記憶装置ユニットユニットｂにおいて、要求されたデータをサーバ（ｘ）に直接送るようにしても良い。
【００６１】
本実施例によれば、ディレクトリの論理ブロックに空きが有る場合には、同一データの重複書き込みが許容されているので、サーバ（ｘ）からのアクセスタイムの軽減および複数のサーバ（ｘ）からの並列アクセスを可能とする。
【００６２】
すなわち、複数のサーバが複数のアクセスパスによって繋がっている記憶装置ユニットにデータの読み書きの要求をする場合に、各サーバは別の記憶装置ユニットに読み書きの要求をすることができ、各記憶装置ユニットは独立にデータの読み書きの要求を処理できる。そのため、１つの記憶装置ユニットにデータの読み書きの要求が集中しないことによりデータへのアクセスを高速化するとことができる。
【００６３】
図１４を用いて、本実施例のファイルシステムにおける、１つの記憶装置ユニットに対する、複数のサーバからのアクセスが有った場合の処理について説明する。ここでは、複数の記憶装置ユニット１００１ｂ、１００１ｅ、１００１ｍの相互の関係を例に挙げる。
【００６４】
図１４の上段はサーバ（ｘ）からデータＤ１の書き込み要求を受け付ける前の状態、図１４の下段はデータＤ１の書き込み要求を処理した、図１０Ｂの状態に相当する。
【００６５】
図１４の上段において、ノード１００１ｂ、１００１ｅ、１００１ｍに、複数個の同一のデータＤ１‘（１）〜Ｄ１‘（３）が重複して保存されている。すなわち、特定ノード１００１ｂに実データＤ１‘（３）、他のノード１００１ｅ、１００１ｍに実データＤ１‘（３）の複製データＤ１‘（１）、Ｄ１‘（２）が保存されている。また、特定ノード１００１ｂに実データＤ２、ノード１００１ｅにリンクの張られた複製のデータＤ２‘が保存されている。この状態では、複数のサーバからの同一のデータＤ１‘（１）〜Ｄ１‘（３）、及びデータＤ２、Ｄ２‘に対するアクセスを並列的に受け付けることができる。
【００６６】
次に、図１４の下段において、ノード１００１ｅにデータＤ１を書き込んだ後の状態で、特定ノード１００１ｂ、及び、他のノード１００１ｅ、１００１ｍに、複数個の同一のデータＤ１、Ｄ１‘（１）〜Ｄ１‘（３）が重複して存在している。ノード１００１ｅにおいて、複製のデータＤ１から複製のデータＤ１‘（１）へリンクが張られている。一方、データＤ２‘に関しては、複製のデータＤ２‘が削除され、特定ノード１００１ｂの実データＤ２へのリンクのみが記録されている。この状態では、複数のサーバからの同一のデータＤ１、Ｄ１‘（１）〜Ｄ１‘（３）、及びデータＤ２に対するアクセスを、並列的に受け付けることができる。一方、データＤ２‘に関しては、リンクを介した直列的なアクセスを受け付けることができる。このようにして、アクセスタイムの軽減しながら、かつ、格納データ（異なるデータ）の量を増加させることができる。
【００６７】
本実施例の重複データ維持ユニットによる「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」によりデータの書き込み処理を継続して行うと、最終的には、ファイルシステム内に、１つの実データＤ１、Ｄ２、−、ＤＺと、１つ若しくは複数の複製データＤ１‘、Ｄ２’、−、ＤＺ‘とが保持され、かつ、これら各データへの１つのリンクが作成されるようになる。但し、各記憶装置ユニットに効率よく均一にデータを保存し、ファイルシステム内の格納データ（異なるデータ）の量をより増加させるためには、図６のステップ２０１８のＹＥＳの後の処理で特定ノードに多数の複製データが保持されないようにする等、重複データ維持ユニットを機能させる必要がある。
【００６８】
このように、本実施例のファイルシステムは、記憶装置ユニット１００１の論理ブロック及び物理ブロックに空きが有る場合には、同じノードあるいは他のノードに、同一のデータが重複して存在するのを許容し、かつ、リンクの張られている他のデータも残す。すなわち、同一内容のデータの実体及び複製を、ストレージ容量を圧迫しない範囲で、ファイルシステム内に複数個保持し続け、サーバからのデータの読み出し時には最も近い場所にある内容を読み出すことで、アクセスタイムの軽減および並列アクセスを可能とする。
【００６９】
一方、記憶装置ユニット１００１の論理ブロック及び物理ブロックに空きが無い場合には、ファイルシステムは、同じノードあるいは他のノードに、同一のデータが複数個存在するのを排除する。これにより、ファイルシステムは、データ総量を増やさずに、任意のデータに対する各サーバからのアクセスタイムの軽減を図ることができる。すなわち、ストレージ容量が有る程度圧迫される状況下では、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」を実現する。
【００７０】
これにより、ファイルシステムにおいて、同一データの重複度が適度に制御され、過度の重複の排除と並列アクセスの両立を実現することができる。
【実施例２】
【００７１】
次に、本発明の第二の実施例に係る自律分散型ファイルシステムについて説明する。第一の実施例との相違点は、各記憶装置ユニットが自ノードにおける重複書き込みを積極的に排除する点にある。実施例１の［重複排除］機能は、いわば、「他ノードの重複排除」を行う機能とも言える。実施例２のデータ維持ユニットは、実施例１の「他ノードの重複排除」機能に加えて、次のような「自ノード重複排除」の機能を有する。
【００７２】
（１）サーバが、（論理・物理ブロック）の論理位置ｐに対して新規データＤを書き込むと、データを受け取った記憶装置ユニット（この例では１００１ｅ）は、前記新規データＤの特徴（ハッシュ値）Ｈを演算し、自ノードに記録されている特徴値のリストから同一のハッシュ値を持つデータを抽出し、自ノードに重複するデータＤ’が有ればそれにリンクを張る。
【００７３】
（２）記憶装置ユニット１００１ｅは、前記新規データＤの特徴（ハッシュ値）Ｈを、ストレージシステムを構成する他の各記憶装置ユニットｉ（以下、代表して記憶装置ユニット１００１ｂ）に報告する。  
（以下、実施例１と同様にして、「他ノードの重複排除」機能を実行）。
【００７４】
（３）容量が切迫した等データを削除すべき状態になった際には、記憶装置ユニットｅは重複する自ノードの複製データＤ’を削除する。
【００７５】
図１５は、第二の実施例における、１つの記憶装置ユニットに対するデータ書き込みの処理を示すフロー図である。
【００７６】
ステップ１２０００からステップ１２０１１までは、第一の実施例のフローのステップ２０００からステップ２０１１までと同じである。ステップ１２０１１において、同一のデータＤ１‘を持つブロックが存在する場合には、Ｄ１‘に関し、自ノードの複製データＤ’を削除する。すなわち、ストレージディレクトリｅにおける物理ブロックへのポインタを削除し（Ｓ１２０２２）、その後、ステップ１２０１８に進む。一方、自ノードのストレージディレクトリに同一のデータを持つブロックが存在しない場合、ハッジュ値Ｈ１を他のノードに分配する（Ｓ１２０１２）。以下、第一の実施例のフローと同じである。
【００７７】
図１６は、第二の実施例における、記憶装置ユニット１００１ｅのストレージディレクトリ１１３４ｅのデータ書き込み終了後の一例を示す図である。図１０Ｂと異なり、論理ブロック４００３において、物理的ブロックＩＤが削除されている。すなわち、物理的ブロックＩＤ１１３４２から、データＤ１‘のＩＤが削除されており、記憶装置ユニット１００１ｅにおいてデータＤ１‘と重複するデータＤ１の実体若しくは複製が削除されていることを示している。
【００７８】
図１７を用いて、第二の実施例における、１つの記憶装置ユニットに対する、複数のサーバからのアクセスについて説明する。図１４と同様に、複数の記憶装置ユニット１００１ｂ、１００１ｅ、１００１ｍの相互の関係を例に挙げる。
【００７９】
記憶装置ユニット１００１ｅの物理ブロックに空きが有る場合には、同じノードあるいは他のノード１００１ｂ、１００１ｍに、同一のデータ、例えばデータＤ１‘が複数個重複して存在するのを許容し、かつ、リンクの張られているデータＤ２‘の複製も残す。これは、図１４の場合と同じである。
【００８０】
一方、記憶装置ユニット１００１ｅの物理ブロックに空きが無い場合には、同じノードあるいは他のノードに、同一のデータが複数個存在するのを排除する。例えば記憶装置ユニット１００１ｅにおいて、記憶装置ユニット１００１ｂのデータＤ２にリンクが張られている複製データＤ２‘を削除すると共に、自ノードでデータＤ１‘（１）と重複している複製データＤ１も削除し、データＤ１からデータＤ１‘（１）へはリンクを張る。一方、特定ノードである記憶装置ユニット１００１ｂのデータＤ１‘（３）は実体としてそのまま残す。これにより、データ総量を増やさずに、任意のデータ、例えばデータＤ１とデータＤ１‘（２）〜Ｄ１‘（３）に対するアクセスタイムの軽減を図っている。
【００８１】
本実施例の重複データ維持ユニットによる「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」によりデータの書き込み処理を継続して行うと、最終的には、ファイルシステム内に、１つの実データＤ１、Ｄ２、−、ＤＺと、１つの複製データＤ１‘、Ｄ２’、−、ＤＺ‘とが保持され、かつ、これら各データへの１つのリンクが作成されるようになる。これによりファイルシステム内の格納データ（異なるデータ）の量を増加させることができる。但し、ファイルシステムの用途がアクセスタイムの軽減を必要とする場合には、図１６のステップ１２０２２で各ノードに２乃至３個程度の複製データの保持を許容するように、重複データ維持ユニットを機能させるようにしても良い。
【００８２】
このように、本実施例によれば、ストレージ容量を圧迫しない範囲で、同一内容のデータを複数保持し続け、ストレージ容量が圧迫される状況下では、「特定ノードに１つの実データを保持し、この特定ノード若しくは他ノードに１つ以上の複製を保持しあるいはリンクを作成する機能」を実現する。これにより、ファイルシステムにおいて、同一データの重複度が適度に制御され、過度の重複の排除と並列アクセスの両立を実現することができる。
【符号の説明】
【００８３】
１０００…サーバ、１００１…記憶装置ユニット、１００６…第１のネットワーク、１００７…第２のネットワーク、１１０１…ストレージインタフェース（チャネル制御部）、１１０２…ローカルストレージ、１１０３…ローカルコントローラ、１１３０…ハッシュ値演算器、１１３１…データ比較器、１１３２…ハッシュ値比較器、１１３３…ネットワークインタフェース、１１３４…ストレージディレクトリ、１１３５…重複データ維持ユニット、１１３７…接続部、１１３９…ディスク制御部、１１４０…管理端末、１１４１…ＣＰＵ、１１４２…メモリ、１１４３…物理ディスク管理テーブル、１１４４…ＬＵ管理テーブル１１４６…プログラム、１１４８…記憶装置、１１０１…チャネル制御部、１３４１…論理的ブロックのＩＤ、１１３４２…物理的ブロックのＩＤ、１１３４３…データのハッシュ値、１１３４４…他のノード（記憶装置ユニット）のＩＤへのリンク、１１３４５…他のノードの物理的ブロックＩＤへのリンク、１１３４６…処理中フラグ。
【図１】
2014160311.tif 000003
【図２】
2014160311.tif 000004
【図３】
2014160311.tif 000005
【図４】
2014160311.tif 000006
【図５Ａ】
2014160311.tif 000007
【図５Ｂ】
2014160311.tif 000008
【図６】
2014160311.tif 000009
【図７】
2014160311.tif 000010
【図８】
2014160311.tif 000011
【図９】
2014160311.tif 000012
【図１０Ａ】
2014160311.tif 000013
【図１０Ｂ】
2014160311.tif 000014
【図１１】
2014160311.tif 000015
【図１２】
2014160311.tif 000016
【図１３】
2014160311.tif 000017
【図１４】
2014160311.tif 000018
【図１５】
2014160311.tif 000019
【図１６】
2014160311.tif 000020
【図１７】
2014160311.tif 000021