以下に、本発明によるファイル格納システムについて説明する。本発明によるファイル格納システム1は、図1に示すように、単一または複数のストレージ2を個別に管理する複数のストレージ管理手段3と、クライアントからの要求に基づいてストレージ2の何れかに対してファイルを読み書き制御するファイル管理手段5がローカルネットワーク6で接続され、ファイル管理手段5と複数のクライアント4が外部ネットワーク7を介して接続されて構成されている。
ファイル管理手段5は、各ストレージ管理手段3を統括して管理するとともに、クライアントからの読み書き要求に応答して各ストレージ管理手段3との間でデータを遣り取りする装置で、バッファメモリ56を介してクライアント4からのファイル読み書きの要求を処理するクライアント用ファイル受渡し手段50と、クライアント4から格納要求のあったファイルをファイル単位で冗長格納するとともに、読出し要求にあったファイルの格納のために格納先ストレージ2を選択する冗長格納管理手段51と、冗長格納管理手段51により選択された格納先ストレージ2を管理するストレージ管理手段3との間でバッファメモリ56を介してファイルを遣り取りするストレージ用ファイル受渡し手段54と、管理者に報知するために各ストレージ2の残容量や故障等の稼動状況を管理する稼動状況管理手段55と、ストレージ2の増設時に格納済みのファイルを平準化して再格納する平準化処理手段53と、任意のストレージの復旧時に、復旧対象ストレージを修復するストレージ修復管理手段52を備えて構成されている。
ファイル管理手段5は所定のOSプログラムの管理下で動作するパーソナルユースの電子計算機により構成され、上述の冗長格納管理手段51等の各機能ブロックは、OSプログラムまたはOSプログラムの管理下で動作するアプリケーションプログラム及び当該電子計算機のハードウェアリソースで構成されている。尚、ファイル管理手段5はサーバ機器や専用端末等で構成することも可能であり、上述のストレージ管理手段3の何れかに構築することも可能である。
ストレージ管理手段3の夫々は、管理対象となる複数のストレージ2に対してファイルの格納先ストレージ2に対するディレクトリを生成管理するとともに、ファイルの読み書きを管理するファイルシステム30と、各ストレージ2の稼動状態を検査するとともに、各ストレージ2に格納されたファイルの破損を検出する異常検出手段31と、破損したファイルを修復するファイル修復手段32等を備えて構成されている。
夫々のストレージ管理手段3はUSBやSCSI等の汎用のインタフェースを介して磁気ディスク装置でなる単一または複数のストレージ2が接続されたパーソナルユースの電子計算機により構成され、上述のファイルシステム30等の各機能ブロックはOSプログラムまたはOSプログラムの管理下で動作するアプリケーションプログラム及び当該電子計算機のハードウェアリソースで構成されている。尚、ストレージ管理手段3はファイルシステム機能を備えたサーバ機器や専用端末等で構成することも可能である。
クライアント用ファイル受渡し手段50は、例えば、マイクロソフト社から提供されるCIFS(Common Internet File System)等のファイル共有プロトコルに基づいて動作するように構成され、クライアント4からのファイル書込み要求に際して、クライアント4から受信したファイルをバッファメモリ56に記憶し、冗長格納管理手段51を作動させてファイルを格納すべきストレージ2を特定し、特定されたストレージ2への格納処理が完了するとクライアント4との通信を終了し、クライアント4からのファイル読出し要求に際して、冗長格納管理手段51を作動させてファイル格納先のストレージ2を特定し、ストレージ用ファイル受渡し手段54によりストレージ2から読み出されバッファメモリ56に記憶されたファイルをクライアント4へ送信して通信を終了する。
クライアント用ファイル受渡し手段50は、先ずファイルの読み書きの要求を行なうクライアント4との間でネゴシエーションを行ない、次にクライアント4の接続の認証を実行し、認証を確認するとクライアント4から該ファイル格納システム1の公開リソースであるストレージ2への接続を許容し、クライアント4からのストレージ2へのファイルの読み書き処理が可能となる。クライアント用ファイル受渡し手段50は、クライアント4から送信されたファイル操作コマンドを受信し、当該コマンドに対する結果をクライアント4に送信して作業が完了すると通信を終了する。
公開リソースは、当該ファイル格納システム1の全てのストレージ管理手段3が管理する個々のストレージ2が対象となり、個々のストレージ2の何れかにファイルが格納されるのであるが、クライアント用ファイル受渡し手段50は複数のストレージ2を仮想的に1つのストレージとしてクライアント4に公開するように構成されているため、クライアント4からは仮想的に大容量の一つのネットワークストレージ装置が外部ネットワークに接続されているように認識される。
当該ファイルシステム1は仮想的な1つのネットワークストレージに対して全てのファイルが仮想的に同一のディレクトリに格納されることになるため、クライアント4はファイルを格納するストレージ2やディレクトリを意識することなく該ファイル格納システム1を使用することができる。従って、CIFSのコマンドには、ディレクトリ作成や削除のコマンドは許可されておらず、格納されるファイルの識別子にはユニークなファイルの識別子が設定される必要がある。
クライアント用ファイル受渡し手段50は、クライアント4から既に記憶されたファイルと同一識別子を持つファイルの書込み要求があると、当該クライアント4にファイルの識別子を変更するように警告し、読み出したファイルに変更を加えた後に上書き保存することも禁止するように構成され、格納されたファイルの信頼性及び安全性が確保されたファイル格納システムが実現される。
尚、このようなファイル格納システムにファイルを格納する場合には、格納されたファイルの識別子を各クライアント4側で管理しておく必要があり、例えばCTやMRI等のモダリティ装置で取得された医療用画像を管理するファイルサーバのバックアップ用ファイル格納システムとして好適に使用することができる。
以下に、N(Nは正整数値)台のストレージ管理手段3の夫々にM(Mは正整数値)台のストレージ2が接続されている場合、つまり、M×Nのマトリクス状に配列されたストレージ2が接続されている場合を例にファイル格納システム1の具体的な構成及び動作について詳述する。
図2に示すように、稼動状況管理手段55は、各ストレージ管理手段3に「0」から始まる昇順の整数値であるストレージ群番号、各ストレージ管理手段3の配下にあるM台のストレージ2の夫々に「0」から始まる昇順の整数値であるローカルストレージ番号、さらに、ストレージ群番号の昇順に沿って対応するストレージ管理手段3により管理されるストレージ2の夫々に「0」から始まる昇順の整数値であるストレージ番号を割り振り、ストレージ管理手段3及びストレージ2夫々の故障の有無を示す故障フラグや残容量等の稼動状態を管理する稼動状況テーブル57を生成して管理している。
つまり、稼動状況管理手段55は、ストレージ管理手段3夫々を個別に識別するためにユニークなストレージ群番号を付し、ストレージ2夫々を個別に識別するためにユニークなストレージ番号を付した稼動状況テーブル57を生成して管理している。そして、稼動状況テーブル57のこれらの値は対応するストレージ管理手段3と共有されている。例えば、システムの構築時に管理者により各ストレージ管理手段及びストレージにストレージ群番号及びローカルストレージ番号が付与され、夫々が自己を認識可能に設定されていればよく、稼動状況管理手段55がこれらの管理番号を吸い上げて稼動状況テーブル57を生成するように構成すればよい。
図3に示すように、稼動状況管理手段55は、システムの起動時(SA1)、または起動後の所定時間間隔で(SA2)、さらには管理者の操作時(SA3)に、接続されている全てのストレージ管理手段3に対して、夫々が管理するストレージ数及び稼動状況を報告するよう要求し(SA4)、報告に基づいて上述の稼動状況テーブルを生成する(SA5)。システムの起動前に保持していた従前の稼動状況テーブル57と今回生成した稼動状況テーブル57を比較して、相違が生じていると(SA6)、今回作成した稼動状況テーブル57を更新稼動状況テーブル57として従前の稼動状況テーブル57とは別に保持し(SA7)、相違が無ければ(SA6)、今回生成した稼動状況テーブル57を削除する(SA8)。
システムに接続されているストレージ管理手段の数またはストレージ数に変動が生じたときに、必要な処理を行なうために従前の更新稼動状況テーブル57と更新稼動状況テーブルを備えるのであり、稼動状況管理手段55は、例えば、システムに新たなストレージ管理手段3またはストレージ2が増設されたときには平準化処理手段53を起動させ、故障またはシステムから一時切り離されていた任意のストレージが再接続された復旧時にはストレージ修復管理手段52を起動させ、定常処理では冗長格納管理手段51による故障中のストレージへのアクセスを回避する。
定常処理において、冗長格納管理手段51は、クライアント4からのファイル格納要求に応答してクライアント用ファイル受渡し手段50から起動されると、ファイルの識別子を引数とする所定のハッシュ関数により得られるハッシュ値とストレージ数に基づくモデュロ演算により求まるストレージ番号で識別されるストレージ2と、当該ストレージ番号を引数とする可逆平準化関数により求まるストレージ番号で識別されるストレージ2とを冗長格納する特定ストレージとして選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3夫々に対してファイル単位で格納処理を実行させる。
稼動状況テーブル57に基づいて特定ストレージの何れかが故障等により停止していると判断されるときには、正常稼動している特定ストレージ2を管理するストレージ管理手段3夫々に対してファイル単位で格納処理を実行させる。
また、冗長格納管理手段51は、クライアント4からのファイル読出し要求に応答してクライアント用ファイル受渡し手段50から起動されると、ファイルの識別子を引数とする所定のハッシュ関数により得られるハッシュ値とストレージ数に基づくモデュロ演算により求まるストレージ番号で識別されるストレージ2を特定ストレージとして選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3からファイルの読出し処理を実行させる。
当該特定ストレージが稼動状況テーブル57に基づいて故障等により停止していると判断されるときには、当該特定ストレージのストレージ番号を引数とする可逆平準化関数により求まるストレージ番号で識別されるストレージ、つまり、冗長格納されている特定ストレージを選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3からファイルの読出し処理を実行させる。
本実施形態では、所定のハッシュ関数としてMD5(Message Digest 5)が採用され、図4に示すように、冗長格納管理手段51はクライアント4から格納要求のあったファイルの識別子であるファイルネームを引数として128bitのハッシュ値を算出し(SB1)、その下位8バイトの値を当該ファイル格納システム1に備える全てのストレージ数で除した余りを算出するモデュロ演算f=mod(ハッシュ値、ストレージ台数(最大ストレージ番号+1))を行ない(SB2)、得られた値に相当するストレージ番号が割り振られたストレージ2をファイル格納するための1台目の特定ストレージ2として選択する(SB3)。尚、128bitのハッシュ値に対してモデュロ演算fを実行するものであってもよく、モデュロ演算のためのハッシュ値の桁数は適宜設定すればよい。
次にファイルの二重冗長格納を行うために、1台目の特定ストレージ2を管理するストレージ管理手段3に割り振られたストレージ群番号に所定の整数値を加算または減算した値に相当するストレージ群番号が割り振られたストレージ管理手段3を特定し、そのストレージ管理手段3によって管理されるストレージ2のうち1台目の特定ストレージ2に割り振られたローカルストレージ番号と同じ値のローカルストレージ番号が割り振られたストレージ2を2台目の特定ストレージとして選択する(SB4)。
つまり、モデュロ演算により求まるストレージ番号を引数とする可逆平準化関数により求まるストレージ番号で識別されるストレージ2を冗長格納する特定ストレージとして選択するのである。ここで、可逆平準化関数とは、ストレージ番号を引数(変数)として算出される値が引数とは異なる値として出力され、ファイルを格納するストレージ2が分散化されるような可逆関数をいう。
上述のように、ストレージ管理手段3の台数がM、各ストレージ管理手段3により管理されるストレージ2の台数がNとなるマトリクス状に構成されたストレージの場合には、モデュロ演算により求まるストレージ番号をPとして、可逆平準化関数g(P)を(数1)に示すように設定することができる。また、他の例として可逆平準化関数q(P)を(数2)に示すように設定することができる。
ここに、Kは冗長格納数−1の整数値である。
従って、二重冗長の場合にはK=1とするg(P)の値をストレージ番号とする1台のストレージが2台目の特定ストレージとして選択され、三重冗長の場合にはK=1,2とするg(P)の値をストレージ番号とする2台目及び3台目のストレージが特定ストレージとして選択される。
具体的に、図9(a)に示すように、ストレージ管理手段3の台数M=4、各ストレージ管理手段3により管理されるストレージ2の台数N=3、合計12台のストレージ2に対して二重冗長される場合、モデュロ演算により求まるストレージ番号P=3とすると、g(3)=3+3×1=6となり、ストレージ番号3,6の2台のストレージ2(図中、ハッチングで示すストレージ)が選択される。また、図9(b)に示すように、ストレージ管理手段3の台数M=4、各ストレージ管理手段3により管理されるストレージ2の台数N=3、合計12台のストレージ2に対して三重冗長される場合、モデュロ演算により求まるストレージ番号P=2とすると、g(2)=2+3×1=5(K=1)、g(2)=2+3×2=8(K=2)となり、ストレージ番号2,5,8の3台のストレージ2(図中、ハッチングで示すストレージ)が選択される。
(数1)や(数2)に示す可逆平準化関数g、qは、モデュロ演算fにより選択されるストレージ2を管理するストレージ管理手段3以外のストレージ管理手段3により管理されるストレージ2を特定ストレージとして選択するように設定されているため、必ず異なるストレージ管理手段3に管理されるストレージ2にファイルが冗長格納されるようになり、ストレージ管理手段3の故障に対して信頼性の高いファイルの冗長格納が行なえるのであるが、可逆平準化関数はこれに限るものではない。つまり、同一のストレージ管理手段3に管理される異なるストレージ2が冗長格納のためのストレージ2として選択されるように可逆平準化関数を設定するものであってもよい。
また、(数1)や(数2)に示す可逆平準化関数g、qは例示に過ぎず、このような関数に限定されるものでもなく、また、冗長格納数に応じて複数の異なる可逆平準化関数が設定されるものであってもよい。
冗長格納するべき特定ストレージを選択すると、冗長格納管理手段51は稼動状況テーブル57に基づいて正常稼動している特定ストレージを選択して(SB5)、ストレージ用ファイル受渡し手段54を起動し(SB6)、当該特定ストレージ2を管理するストレージ管理手段3夫々に対してファイル単位で格納処理を実行させる(SB7)。
ストレージ用ファイル受渡し手段54は、バッファメモリ56に蓄積されているファイルを各特定ストレージに冗長格納する際に、ストレージ単位で格納処理を順次実行してもよいし、複数のストレージに並行して格納処理を実行してもよい。このようにしてファイルの格納処理が終了すると(SB8)、クライアント用ファイル受渡し手段50によりクライアント4との通信が終了される(SB8)。
本システムでは、選択された全ての特定ストレージが同時に故障しているときには、クライアント4からの要求が拒絶されるが、そのような場合は極めて少なく実稼動に問題は生じない。また、何れかのストレージ2が故障しているときには、後述のストレージ修復管理手段52により修復されるように構成されている。
クライアント4からのファイル読出し要求に対しても同様の処理により特定ストレージが選択され、その後起動されるストレージ用ファイル受渡し手段54により該当するファイルが読み出されてバッファメモリ56に格納され、クライアント用ファイル受渡し手段50を介してクライアント4に出力される。
具体的に、図10に示すように、ストレージ管理手段3の台数M=4、各ストレージ管理手段3により管理されるストレージ2の台数N=3、合計12台のストレージ2に対して二重冗長されている場合、冗長格納管理手段51は、モデュロ演算を実行してストレージ番号を算出する。今、ストレージ番号P=2と算出されると、ストレージ番号P=2で識別されるストレージを特定ストレージとして選択し、ストレージ用ファイル受渡し手段54を起動して当該特定ストレージから該当するファイルが読み出されるように制御するのである。ここで、稼動状況テーブル57に基づいてストレージ番号P=3で識別されるストレージが故障等により停止していると判断されるときには、可逆平準化関数により冗長格納ストレージを選択してストレージ用ファイル受渡し手段54を起動する。この場合、g(3)=2+3×1=5となり、ストレージ番号5のストレージ2が選択される。
ストレージ管理手段3に設けられたファイルシステム30は、ストレージ用ファイル受渡し手段54からのファイル格納要求に対して、ファイル管理手段5からファイルの識別子に対するハッシュ値を取得し、当該ハッシュ値に基づいて複数のディレクトリを生成するディレクトリ生成手段33を備え、個別ファイルに対するハッシュ値に基づいて対応するファイルを何れかのディレクトリの配下に格納するように構成されている。
例えば、各ファイルシステム30は、128ビットのハッシュ値の上位8バイトの値に基づいて上位のディレクトリを生成し、その配下に次の下位4バイトの値に基づいて下位のディレクトリを生成する等、ハッシュ値に基づいて階層化されたディレクトリを生成し、格納要求のあったファイルのハッシュ値が属するディレクトリに当該ファイルを格納する。ディレクトリの名称は夫々のハッシュ値の対応するバイトで構成される数値そのものであってもよいし、その数値を変換テーブルにより文字コードに変換したものでもよい。
このように階層化されたディレクトリに対応するファイルを格納することにより、ファイルのアクセス速度を向上させることが可能になる。つまり、ファイルの読出し要求に対応して当該ファイルのハッシュ値に基づいて検索対象となるディレクトリを一意に特定することができるようになるのである。尚、ファイルシステム30で取り扱われるハッシュ値は、ファイル管理手段5から取得するものとしたが、ファイルシステム30内でファイルの識別子を引数とするハッシュ値を算出するものであってもよい。後者の場合には、ファイル管理手段5で採用されるハッシュ関数と異なる別のハッシュ関数を採用することも可能である。
さらに、ストレージ管理手段3に設けられた異常検出手段31は、ファイルの格納時に、当該ファイルのファイルデータを引数とするハッシュ関数によりファイルデータのハッシュ値を算出し、当該ハッシュ値をファイルの識別子と関連付けた照合用データとしてストレージ2に格納するように構成され、深夜等の所定時間またはファイル管理手段5からの指示に基づいて個々のファイルデータを読み出してファイルデータのハッシュ値を算出し、前記照合用データと比較することによりファイルの破損を検出するように構成されている。照合用データと算出されたハッシュ値が一致するときには正常と判断し、不一致のときにはファイル破損または改竄と判断するものである。
異常検出手段31は、定期的に各ストレージに対して接続確認し、任意の検証データを所定領域に書き込み、ベリファイしてハードディスクの状態を管理するとともに、残容量を確認して、ストレージの接続状態、故障状態、残容量等の稼動状況データを管理する。当該稼動状況データを受信したファイル管理手段5により上述の稼動状況テーブル57が生成されるのである。
異常検出手段31によりファイルの破損が検出されると、ファイル修復手段32が起動され、ファイルの修復処理が実行される。具体的には、当該破損ファイルのファイル識別子がファイル管理手段5の冗長格納管理手段51に送られて、冗長格納管理手段51によりファイル識別子に基づいて冗長格納された他のストレージ管理手段3が割り出され、当該他のストレージ管理手段3に対して同一ファイルを修復ファイルとして転送するように指令するのである。当該他のストレージ管理手段3から転送された修復ファイルを受信したファイル修復手段32は、破損ファイルに代えて修復ファイルを格納することによりファイルの修復を終了する。
尚、複数回の修復処理で修復されないときには、同一ストレージ内で格納領域を変更して格納することにより、ハードディスクの部分的破損に対処することも可能であり、初回の修復時に同一ストレージ内で格納領域を変更して格納するものでもよい。
図5に示すように、稼動状況管理手段55は上述した稼動状況テーブル57を更新したとき、またはシステムの負荷が低い所定時間に、従前の稼動状況テーブル57と比較して故障中のストレージ2が正常に戻り、またはシステムから切り離されていたストレージ2が再度接続されたことを検出すると(SC1)、ストレージ修復管理手段52を起動する(SC2)。
ストレージ修復管理手段52は、任意のストレージ2の復旧時に、復旧対象ストレージ2のストレージ番号と上述した可逆平準化関数に基づいて、復旧対象ストレージに格納されるべきファイルが冗長格納されている複数の関連ストレージ番号を算出し、算出した関連ストレージ番号で識別される複数のストレージに格納されているファイルの識別子に基づいて修復ファイルを特定して復旧対象ストレージを修復するように構成されている。
ストレージ修復管理手段52は、稼動状況管理手段55から復旧したストレージのストレージ番号を受け取り(SC3)、当該ストレージ番号が、上述のモデュロ演算により求められたストレージ番号であった場合、または、可逆平準化関数により求められたストレージ番号であった場合の何れかを想定して、(数1)の可逆平準化関数に基づいて、冗長格納された他の関連ストレージ番号を算出する(SC4)。
具体的に、図11(a)に示すように、ストレージ管理手段の台数M=4、各ストレージ管理手段により管理されるストレージの台数N=3、合計12台のストレージに対してあるファイルが二重冗長されるとき、モデュロ演算により求まるストレージ番号P=1とすると、可逆平準化関数g(1)=1+3×1=4となり、ストレージ番号1,4の2台のストレージが特定ストレージとして冗長格納管理手段51により選択されているような場合を考える。
復旧対象ストレージのストレージ番号が1の場合を想定すると、ストレージ番号が1のストレージには可逆平準化関数によりストレージ番号10または4の何れかのストレージに冗長格納された同一のファイルが存在し、復旧対象ストレージのストレージ番号が4の場合を想定すると、ストレージ番号が4のストレージにはストレージ番号1または7の何れかのストレージに冗長格納された同一のファイルが存在していることになる。
つまり、図11(b)に示すように、復旧対象ストレージのストレージ番号が1の場合には、ストレージ番号10または4に格納されているファイルの何れかが復旧対象ファイルとなるが、さらにストレージ番号10のストレージにはストレージ番号7または1のストレージに冗長格納された同一のファイルが存在し、ストレージ番号4のストレージにはストレージ番号1または7のストレージに冗長格納された同一のファイルが存在する。
従って、ストレージ番号10のストレージに格納されているファイルの中でストレージ番号7のストレージに格納されているファイルの識別子と同一の識別子のファイルを除いたファイル、言い換えれば冗長格納数2に満たないファイルが復旧対象ストレージ(ストレージ番号が1のストレージ)に修復されるファイルとして特定することができ、同様に、ストレージ番号4のストレージに格納されているファイルの中でストレージ番号7のストレージに格納されているファイルの識別子と同一の識別子のファイルを除いたファイル、言い換えれば冗長格納数2に満たないファイルが復旧対象ストレージ(ストレージ番号が1のストレージ)に修復されるファイルとして特定することができるのである。
つまり、ストレージ修復管理手段52はこのような復旧対象ストレージのストレージ番号1と可逆平準化関数に基づいて、復旧対象ストレージに格納されるべきファイルが冗長格納されているストレージと当該ストレージに格納されているファイルが冗長格納されているストレージのストレージ番号4,7,10を、復旧対象ストレージに格納されるべきファイルが冗長格納されているストレージに関連する複数の関連ストレージ番号として算出するのである。
次に、算出した関連ストレージに対して、ファイルの識別子と冗長化数に基づいて修復ファイルを特定する(SC5)。ここでは二重冗長されているので、冗長化数は2である。ストレージ番号4,7のストレージに格納されているファイルの識別子に重複している識別子があるか否かを判別して、ストレージ番号4のストレージにのみ格納されているファイルの識別子を修復ファイルとして特定し、同様に、ストレージ番号7,10のストレージに格納されているファイルの識別子に重複している識別子があるか否かを判別して、ストレージ番号10のストレージにのみ格納されているファイルの識別子を修復ファイルとして特定するのである。つまり、ストレージ修復管理手段は、関連ストレージ番号で識別される何れかのストレージに格納されているファイルの識別子と冗長化数に基づいて修復ファイルを特定するのである。
その後、特定された修復ファイルを管理しているストレージ管理手段3から修復されたストレージ2のストレージ管理手段3に対象ファイルを転送するように指示することにより(SC6)、復旧対象ストレージに格納されていたファイルが修復されると新たな稼動状況テーブル57に復旧完了フラグをリセットして復旧処理を終了する(SC7)。尚、復旧完了フラグは新たな稼動状況テーブル57が生成されるときにセットされ、リセットされるまでは従前の稼動状況テーブル57に基づいて定常処理が実行される。
さらに、ストレージ修復管理手段52によるストレージの修復処理の別の手順を説明する。ストレージ修復管理手段52は、関連ストレージ番号で識別される何れかのストレージに格納されているファイルの識別子を読み出して、当該識別子を引数として前記ハッシュ関数により得られるハッシュ値とストレージ数に基づくモデュロ演算により特定ストレージのストレージ番号、及び/または、当該ストレージ番号を引数とする可逆平準化関数により冗長格納される特定ストレージのストレージ番号を求めて、それら特定ストレージのストレージ番号が復旧対象ストレージのストレージ番号と一致するか否かを判断し、一致する場合に当該ファイルを修復ファイルとして特定するものであってもよい。この場合には、関連ストレージ番号は復旧対象ストレージのストレージ番号と可逆平準化関数に基づいて求まる復旧対象ストレージに格納されるべきファイルが冗長格納されているストレージのストレージ番号となる。図11の例では、復旧対象ストレージのストレージ番号1に対してストレージ番号4,10が関連ストレージ番号となる。
このような手順によれば、関連ストレージ番号のストレージの全てのファイルの冗長化数を識別することなく、ファイルの識別子に基づいて修復ファイルを特定することができる。
図6に示すように、稼動状況管理手段55は上述した稼動状況テーブル57を更新したとき、またはシステムの負荷が低い所定時間に、従前の稼動状況テーブル57と比較して新たなストレージ2またはストレージ管理手段3が増設されたことを検出すると(SD1)、平準化処理手段53を起動して全てのストレージ2に格納されているファイルの平準化処理を開始する(SD2)。
平準化処理手段53は、ストレージの増設時に、前記ハッシュ値と増設後のストレージ数に基づくモデュロ演算により求まるストレージ番号で識別されるストレージと、前記可逆平準化関数により求まるストレージ番号で識別されるストレージを新たな特定ストレージとして選択し、対応するファイルをコピーして冗長格納するとともに、増設前に格納されたファイルを削除する。
平準化処理手段53は、先ず、ストレージ番号の順にストレージに格納されているファイルの識別子を読み取り(SD3)、従前の稼動状況テーブル57によるストレージ数に基づいて、上述のハッシュ値、モデュロ演算値、及び可逆平準化関数値を算出して当該識別子に対応するファイルが冗長格納されていたストレージを特定するとともに(SD4)、新たな稼動状況テーブル57に基づいて上述のハッシュ値、モデュロ演算値、及び可逆平準化関数値を算出して新たに冗長格納すべき特定ストレージを選択する(SD5)。
次に、対象となるストレージ管理手段3に当該ファイルをコピーするように指令する(SD6)。コピー処理が終了すると(SD7)、元のストレージ2に格納されていたファイルを消去するように指令する(SD8)。
ステップSD3からステップSD8までを全てのストレージ2に対して繰り返し、終了すると(SD8)、更新稼動状況テーブル57の平準化完了フラグ(図2には示していない)をリセットして平準化処理を終了する(SD9)。尚、平準化完了フラグは更新稼動状況テーブル57が生成されるときにセットされ、リセットされるまでは従前の稼動状況テーブル57または更新稼動状況テーブル57に基づいて定常処理が実行される。そして、平準化処理が終了するまでの間、つまり平準化完了フラグがリセットされるまでの間は、稼動状況管理手段55により更新された更新稼動状況テーブル57と、従前の稼動状況テーブル57の双方が保持され、平準化完了フラグがリセットされるときに従前の稼動状況テーブル57が消去される。
平準化処理手段53による平準化処理が終了するまでの間は、増設前に冗長格納処理されたファイルと増設後に平準化により冗長格納処理されたファイルが並存する状態となる。このような期間にクライアントからのファイル読出し要求が発生すると、冗長格納管理手段51は、従前の稼動状況テーブル57に基づいて増設前のストレージ数に基づく冗長格納処理で選択される特定ストレージと、新たな稼動状況テーブル57に基づいて増設後のストレージ数に基づく冗長格納処理で選択される特定ストレージの何れかから当該ファイルが格納されたストレージを特定した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3からファイルの読出し処理を実行させる。
また、平準化処理手段53による平準化処理が終了するまでの間に、クライアントからのファイル格納要求が発生すると、クライアント用ファイル受渡し手段50から起動された冗長格納管理手段51は、更新稼動状況テーブル57に基づいて増設後のストレージ数に基づく冗長格納処理、つまり、ファイルの識別子を引数とする所定のハッシュ関数により得られるハッシュ値とストレージ数に基づくモデュロ演算により求まるストレージ番号で識別されるストレージ2と、当該ストレージ番号を引数とする可逆平準化関数により求まるストレージ番号で識別されるストレージ2とを冗長格納する特定ストレージとして選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3夫々に対してファイル単位で格納処理を実行させる。
上述の平準化処理に際して、平準化処理手段53は、ファイルの識別子を管理してファイル単位で平準化処理するように構成されている。例えば、平準化が完了したファイルの識別子をメモリに区画された一時管理テーブルに記録するように構成して、各ストレージに平準化されたファイルが再度平準化対象とならないように管理するのである。さらには、上述した定常処理、修復処理及び平準化処理時に、書込み時間を示すタイムスタンプとともにファイルを書き込むように構成し、平準化処理が開始された時刻より過去のタイムスタンプが付されたファイルのみ平準化対象ファイルとして管理するものであってもよい。
以上、N台のストレージ管理手段3の夫々にM台のストレージ2が接続されている場合、つまり、M×Nのマトリクス状に配列されたストレージ2が接続されている場合について説明したが、以下に、N(Nは正整数値)台のストレージ管理手段3の夫々に異なる台数のストレージ2が接続されている場合について、冗長格納管理手段51及びストレージ修復管理手段52の動作について詳述する。尚、以下の説明では、上述の例で説明した処理と同様の処理を実行するブロックについては説明を割愛する。
定常処理において、冗長格納管理手段51は、クライアント4からのファイル格納要求に応答してクライアント用ファイル受渡し手段50から起動されると、ファイルの識別子を引数とする所定のハッシュ関数により得られるハッシュ値とストレージ群数に基づくモデュロ演算により求まるストレージ群番号で識別されるストレージ管理手段3と、当該ストレージ群番号を引数とする可逆平準化関数により求まるストレージ群番号で識別されるストレージ管理手段3とを冗長格納する特定ストレージ管理手段3として選択するとともに、前記特定ストレージ管理手段3の夫々に対して前記ハッシュ値と当該特定ストレージ管理手段により管理されるストレージ数に基づくモデュロ演算により求まるローカルストレージ番号で識別されるストレージを冗長格納する特定ストレージとして選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理する特定ストレージ管理手3段夫々に対してファイル単位で格納処理を実行させる。
また、冗長格納管理手段51は、クライアント4からのファイル読出し要求に応答してクライアント用ファイル受渡し手段50から起動されると、ファイルの識別子を引数とする所定のハッシュ関数により得られるハッシュ値とストレージ群数に基づくモデュロ演算により求まるストレージ群番号で識別されるストレージ管理手段3を特定ストレージ管理手段3として選択し、当該特定ストレージ管理手段3に対して前記ハッシュ値と当該特定ストレージ管理手段により管理されるストレージ数に基づくモデュロ演算により求まるローカルストレージ番号で識別されるストレージを特定ストレージとして選択した後に、ストレージ用ファイル受渡し手段54を起動して、当該特定ストレージ2を管理するストレージ管理手段3からファイルの読出し処理を実行させる。
本実施形態でも、所定のハッシュ関数としてMD5(Message Digest 5)が採用され、図7に示すように、冗長格納管理手段51はクライアント4から格納要求のあったファイルの識別子であるファイルネームを引数として128bitのハッシュ値を算出し(SE1)、その下位8バイトの値を当該ファイル格納システム1に備える全てのストレージ管理手段3の総数であるストレージ群数で除した余りを算出するモデュロ演算u=mod(ハッシュ値、ストレージ群数)を行ない(SE2)、得られた値に相当するストレージ群番号が割り振られたストレージ管理手段3をファイル格納するためのストレージを管理する1台目の特定ストレージ管理手段3として選択する(SE3)。尚、128bitのハッシュ値に対してモデュロ演算uを実行するものであってもよく、モデュロ演算のためのハッシュ値の桁数は適宜設定すればよい。
次にファイルの二重冗長格納を行うために、当該ストレージ群番号を引数とする可逆平準化関数により求まるストレージ群番号で識別されるストレージ管理手段3とを冗長格納する特定ストレージ管理手段3として選択する(SE4)。
ここで、可逆平準化関数とは、ストレージ群番号を引数(変数)として算出される値が引数とは異なる値として出力され、ファイルを格納するストレージを管理するストレージ管理手段3が分散化されるような可逆関数をいう。例えば、ストレージ管理手段3の台数がMとし、選択されたストレージ管理手段3のストレージ群番号をmとするとき、可逆平準化関数vは、(数3)のように定義することができる。
ここに、Kは冗長格納数−1の整数値である。
次に、特定ストレージ管理手段3の夫々に対して前記ハッシュ値と当該特定ストレージ管理手段3により管理されるストレージ数(つまりローカルストレージ番号の最大数+1)に基づくモデュロ演算w=mod(ハッシュ値、ローカルストレージ台数)により求まるローカルストレージ番号で識別されるストレージ2を冗長格納する特定ストレージとして夫々選択する(SE5)。
具体的に、図12(a)に示すように、ストレージ管理手段3の台数M=4(ストレージ群番号0〜3)、各ストレージ管理手段3により管理されるストレージ2の台数(4,2,4,3台)、合計13台のストレージ2に対して二重冗長される場合、モデュロ演算uにより求まるストレージ群番号m=2とすると、v(2)=2+1=3となり、ストレージ群番号2,3の2台の特定ストレージ管理手段3(図中、ハッチングで示すストレージ管理手段)が選択される。
次に、図12(b)に示すように、選択された特定ストレージ管理手段3の夫々に対して前記ハッシュ値と当該特定ストレージ管理手段3により管理されるストレージ数に基づくモデュロ演算wにより求まるローカルストレージ番号で識別されるストレージ2が冗長格納する特定ストレージ(図中、ハッチングで示すストレージ)として夫々選択される。
(数3)に示す可逆平準化関数vは、モデュロ演算uにより選択されるストレージ2を管理するストレージ管理手段3以外のストレージ管理手段3を特定ストレージ管理手段として選択するように設定されているため、必ず異なるストレージ管理手段3に管理されるストレージ2にファイルが冗長格納されるようになり、ストレージ管理手段3の故障に対して信頼性の高いファイルの冗長格納が行なえるのであるが、可逆平準化関数はこれに限るものではない。
また、(数3)に示す可逆平準化関数vは例示に過ぎず、このような関数に限定されるものでもなく、また、冗長格納数に応じて複数の異なる可逆平準化関数が設定されるものであってもよい。
冗長格納するべき特定ストレージを選択すると、冗長格納管理手段51は稼動状況テーブル57に基づいて正常稼動している特定ストレージを選択して(SE6)、ストレージ用ファイル受渡し手段54を起動し(SE7)、当該特定ストレージ2を管理するストレージ管理手段3夫々に対してファイル単位で格納処理を実行させる(SE8)。
ストレージ用ファイル受渡し手段54は、バッファメモリ56に蓄積されているファイルを各特定ストレージに冗長格納する際に、ストレージ単位で格納処理を順次実行してもよいし、複数のストレージに並行して格納処理を実行してもよい。このようにしてファイルの格納処理が終了すると(SE8)、クライアント用ファイル受渡し手段50によりクライアント4との通信が終了される(SE9)。
クライアント4からのファイル読出し要求に対しても、上述した同様の処理により特定ストレージが選択され、その後起動されるストレージ用ファイル受渡し手段54により該当するファイルが読み出されてバッファメモリ56に格納され、クライアント用ファイル受渡し手段50を介してクライアント4に出力される。
ストレージ修復管理手段52は、任意のストレージ2の復旧時に、復旧対象ストレージを管理するストレージ群番号と前記可逆平準化関数に基づいて、復旧対象ストレージに格納されるべきファイルが冗長格納されている複数の関連ストレージ群番号を算出し、算出した関連ストレージ群番号で識別される複数のストレージ管理手段3により管理されるストレージ2に格納されているファイルの識別子と冗長化数に基づいて修復ファイルを特定して復旧対象ストレージを修復する。
図8に示すように、稼動状況管理手段55は上述した稼動状況テーブル57を更新したとき、またはシステムの負荷が低い所定時間に、従前の稼動状況テーブル57と比較して故障中のストレージ2が正常に戻り、またはシステムから切り離されていたストレージ2が再度接続されたことを検出すると(SF1)、ストレージ修復管理手段52を起動する(SF2)。
ストレージ修復管理手段52は、稼動状況管理手段55から復旧したストレージを管理するストレージ管理手段3のストレージ群番号を受け取り(SF3)、当該ストレージ群番号が、上述のモデュロ演算により求められたストレージ群番号であった場合、または、可逆平準化関数により求められたストレージ群番号であった場合の何れかを想定して、(数3)の可逆平準化関数に基づいて、冗長格納された他の関連ストレージ群番号を算出する(SF4)。
具体的に、図13に示すように、ストレージ管理手段3の台数M=8、各ストレージ管理手段により管理されるストレージの台数(4,2,4,3,4,2,2,3台)、合計24台のストレージ2に対してあるファイルが二重冗長されるとき、モデュロ演算uにより求まるストレージ群番号m=3とすると、可逆平準化関数v(3)=3+1=4となり、ストレージ群番号3、4の2台のストレージ管理手段3が冗長格納管理手段51により選択されているような場合を考える。
復旧対象ストレージを管理するストレージ管理手段のストレージ群番号が3の場合を想定すると、ストレージ群番号が3のストレージ管理手段には可逆平準化関数vによりストレージ群番号2または4の何れかのストレージ管理手段により管理される何れかのストレージに冗長格納された同一のファイルが存在し、復旧対象ストレージを管理するストレージ管理手段のストレージ群番号が4の場合を想定すると、ストレージ群番号が4のストレージ管理手段には可逆平準化関数によりストレージ群番号3または5の何れかのストレージ管理手段により管理される何れかのストレージに冗長格納された同一のファイルが存在していることになる。
つまり、図13に示すように、復旧対象ストレージを管理するストレージ管理手段のストレージ群番号が3の場合には、ストレージ群番号2または4のストレージ管理手段により管理されている何れかのストレージに格納されているファイルの何れかが復旧対象ファイルとなるが、さらにストレージ群番号2のストレージ管理手段にはストレージ群番号1または3のストレージ管理手段により管理されている何れかのストレージに冗長格納された同一のファイルが存在し、ストレージ群番号4のストレージ管理手段にはストレージ群番号3または5のストレージ管理手段により管理されている何れかのストレージに冗長格納された同一のファイルが存在する。
従って、ストレージ群番号2のストレージ管理手段により管理される何れかのストレージに格納されているファイルの中でストレージ群番号1のストレージ管理手段により管理される何れかのストレージに格納されているファイルの識別子と同一の識別子のファイルを除いたファイル、言い換えれば冗長格納数2に満たないファイルが復旧対象ストレージを管理するストレージ管理手段(ストレージ群番号が3のストレージ管理手段)により管理される何れかのストレージに格納されるファイルとして特定することができ、同様に、ストレージ群番号4のストレージ管理手段により管理される何れかのストレージに格納されているファイルの中でストレージ群番号5のストレージ管理手段により管理される何れかのストレージに格納されているファイルの識別子と同一の識別子のファイルを除いたファイル、言い換えれば冗長格納数2に満たないファイルが復旧対象ストレージを管理するストレージ管理手段(ストレージ群番号が3のストレージ管理手段)により管理される何れかのストレージに格納されるファイルとして特定することができるのである。
つまり、ストレージ修復管理手段52はこのような復旧対象ストレージを管理するストレージ管理手段のストレージ群番号と可逆平準化関数に基づいて、復旧対象ストレージに格納されるべきファイルが冗長格納されているストレージを管理するストレージ管理手段と当該ストレージ管理手段に管理されるストレージに格納されているファイルが冗長格納されているストレージを管理するストレージ管理手段のストレージ群番号1,2,3,4,5を、復旧対象ストレージに格納されるべきファイルが冗長格納されているストレージ管理手段に関連する複数の関連ストレージ群番号として算出するのである。
次に、算出した関連ストレージ管理手段に対して、ファイルの識別子と冗長化数に基づいて修復ファイルを特定する(SF5)。ここでは二重冗長されているので、冗長化数は2である。ストレージ群番号1、2、3のストレージ管理手段に管理される各ストレージに格納されているファイルの識別子に重複している識別子があるか否かを判別して、ストレージ群番号2のストレージ管理手段に管理されているストレージ2にのみ格納されているファイルの識別子を修復ファイルとして特定し、同様に、ストレージ群番号3、4、5のストレージ管理手段に管理されている各ストレージに格納されているファイルの識別子に重複している識別子があるか否かを判別して、ストレージ群番号4のストレージ管理手段に管理されているストレージにのみ格納されているファイルの識別子を修復ファイルとして特定するのである。
つまり、ストレージ修復管理手段は、関連ストレージ群番号で識別される何れかのストレージ管理手段に管理されるストレージに格納されているファイルの識別子及び冗長化数に基づいて修復ファイルを特定するように構成されている。
その後、特定された修復ファイルを管理しているストレージ管理手段3から修復されたストレージ2のストレージ管理手段3に対象ファイルを転送するように指示することにより、復旧対象ストレージに格納されていたファイルが修復されると新たな稼動状況テーブル57の復旧完了フラグをリセットして復旧処理を終了する(SF6)。尚、復旧完了フラグは新たな稼動状況テーブル57が生成されるときにセットされ、リセットされるまでは従前の稼動状況テーブル57に基づいて定常処理が実行される。そして、平準化処理が終了するまでの間、つまり平準化完了フラグがリセットされるまでの間は、稼動状況管理手段55により更新された新たな稼動状況テーブル57と、従前の稼動状況テーブル57の双方が保持され、平準化完了フラグがリセットされるときに従前の稼動状況テーブル57が消去される。
平準化処理手段53による平準化処理が終了するまでの間にクライアントからのファイル読出し要求が発生した場合の読出し処理は上述と同様である。また、平準化処理手段53による平準化処理が終了するまでの間に、クライアントからのファイル格納要求が発生した場合の格納処理も上述と同様に更新稼動状況テーブル57に基づいて増設後のストレージ数に基づく冗長格納処理が行なわれる。
以下に、ストレージ修復管理手段52によるストレージの修復処理の別の手順を説明する。ストレージ修復管理手段52は、関連ストレージ群番号で識別される何れかのストレージ管理手段に管理されるストレージに格納されているファイルの識別子を引数として前記ハッシュ関数により得られるハッシュ値とストレージ群数に基づくモデュロ演算により求まるストレージ群番号で識別されるストレージ管理手段、及び/または、当該ストレージ群番号を引数とする可逆平準化関数により求まるストレージ群番号で識別されるストレージ管理手段の何れかが復旧対象ストレージを管理するストレージ管理手段に該当するときに、当該ファイルを修復ファイルの候補として特定し、候補となったファイルの識別子と冗長化数に基づいて修復ファイルを特定するように構成することにより、修復ファイルの特定処理を効率的に行なうことができる。
二重冗長する上述の例ではストレージ管理手段のストレージ群番号2,3,4が関連ストレージ群番号となり、例えば、ストレージ群番号2のストレージ管理手段により管理される何れかのストレージに格納されているファイルの識別子に基づいて冗長格納処理される対象となるストレージ群番号が3となるファイルに対して、ストレージ群番号3のストレージ管理手段により管理される何れかのストレージ(修復対象ストレージを除く)に同一の識別子のファイルが存在しない場合に、当該ファイルが修復ファイルであると特定される。
以下に、ストレージの修復処理のさらに別の手順を説明する。ストレージ修復管理手段52は、関連ストレージ群番号で識別される何れかのストレージ管理手段に管理されるストレージに格納されているファイルの識別子を引数として前記ハッシュ関数により得られるハッシュ値とストレージ群数に基づくモデュロ演算により求まるストレージ群番号で識別されるストレージ管理手段、及び/または、当該ストレージ群番号を引数とする可逆平準化関数により求まるストレージ群番号で識別されるストレージ管理手段の何れかが復旧対象ストレージを管理するストレージ管理手段に該当し、前記ハッシュ値と当該ストレージ管理手段により管理されるストレージ数に基づくモデュロ演算により求まるストレージ番号で識別されるストレージが復旧対象ストレージに該当するときに、当該ファイルを修復ファイルとして特定するように構成してもよい。
二重冗長する上述の例ではストレージ管理手段のストレージ群番号2,4が関連ストレージ群番号となり、例えば、ストレージ群番号2のストレージ管理手段により管理される何れかのストレージに格納されているファイルの識別子に基づいて冗長格納処理される対象となるストレージ群番号が3となるファイルであって、さらに同一のストレージ管理手段により管理されるストレージに対して冗長格納処理される対象となるストレージが復旧対象ストレージとなるファイルが修復ファイルであると特定されるのである。
このような手順によれば、関連ストレージ群番号のストレージの全てのファイルの冗長化数を識別することなく、ファイルの識別子に基づいて修復ファイルを特定することができる。
以下に、他の実施形態について説明する。上述した実施形態では、所定のハッシュ関数としてMD5を用いる構成としたが、これに限定するものではなく、SHA−1等の他のハッシュ関数を用いるものであっても良い。また、ハッシュ関数の引数となるファイルの識別子は、ファイル名そのもののみならず、そのファイル(もしくはディレクトリ)が存在する場所を示すための文字列であるファイルのパスが付加されたフルパス名をファイルの識別子とすることが好ましい。
上述した実施例では、ファイル管理手段5を1台とする構成で説明したが、前記ファイル管理手段5を複数台備える構成としても良い。この場合、クライアント4との間にロードバランサ等の負荷分散装置を配置することで、クライアント4からファイル読み書きの要求を行う際のアクセス方法を変更することなく処理速度を向上させることができる。
尚、上述した実施形態は本発明の一例に過ぎず、本発明の作用効果を奏する範囲において、冗長格納管理手段やストレージ修復管理手段等の各機能ブロックの具体的構成等は適宜変更設計できることは言うまでもなく、各機能ブロックを適宜組み合わせて構成できることも可能である。