(57)【要約】【課題】書き込みの際には冗長性を確保しつつ、読み出す際には高速で読み出す。【解決手段】複数のボリュームを有するストレージ装置３と、ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブル９と、書き込み指令があったときには、ファイルをブロック単位に分割して、ボリュームアロケーションテーブル９に設定されたすべてのボリュームに同一のブロックを書き込む書き込み制御部７と、ファイルの属性及び分割されたブロック情報を記憶するファイルアロケーションテーブル１０と、各ボリュームごとに一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブル１１と、読み込み指令があったときには、ボリュームアロケーションテーブルから読み込むボリュームを決定するとともに、ブロックリーディングテーブル１１からボリュームごとの読み込みブロック数を決定し、これらボリューム及びブロック数とブロック情報とから各ボリューム毎に読み出すブロックを決定して、各ボリュームから並列的に読み込む読み込み制御部８を備える。【選択図】図２
2005148854.tif 000002
【特許請求の範囲】
【請求項１】
複数のボリュームを有するストレージ装置と、
ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブルと、
書き込み指令があったときには、前記ディレクトリに属するファイルをブロック単位に分割して、前記ボリュームアロケーションテーブルに設定されたすべてのボリュームに同一のブロックを書き込む書き込み制御部と、
前記ボリュームに書き込んだファイルの属性及び分割されたブロック情報を記憶するファイルアロケーションテーブルと、
前記各ボリュームごとに、一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルと、
読み込み指令があったときには、ファイルのディレクトリに基づいてボリュームアロケーションテーブルからボリュームを決定するとともに、このボリュームに基づいて前記ブロックリーディングテーブルからボリュームごとの読み込みブロック数を決定し、これらボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック情報とから各ボリューム毎に読み出すブロックを決定して、各ボリュームから前記ブロック数毎に読み込む読み込み制御部と、を備えたことを特徴とするファイルシステム。
【請求項２】
複数のボリュームを有し、所定のボリュームに書き込まれた内容を他のボリュームに複製するストレージ装置と、
ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブルと、
書き込み指令があったときには、前記ディレクトリに属するファイルをブロック単位に分割して、前記ボリュームアロケーションテーブルに設定された所定のボリュームに書き込む書き込み制御部と、
前記ボリュームに書き込んだファイルの属性及び分割されたブロック情報を記憶するファイルアロケーションテーブルと、
前記各ボリュームごとに、一回の読み込み操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルと、
読み込み指令があったときには、ファイルのディレクトリに基づいてボリュームアロケーションテーブルからボリュームを決定するとともに、このボリュームに基づいて前記ブロックリーディングテーブルからボリュームごとの読み込みブロック数を決定し、これらボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック情報とから各ボリューム毎に読み出すブロックを決定して、各ボリュームから前記ブロック数毎に読み込む読み込み制御部と、を備えたことを特徴とするファイルシステム。
【請求項３】
前記読み込み制御部は、ボリュームアロケーションテーブルで設定された全てのボリュームをマウントするとともに、同時に読み込み操作を行うことを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項４】
前記読み込み制御部は、前記読み込んだ各ボリュームのブロックを、前記ファイルアロケーションテーブルのブロック情報に基づいて再配置し、ファイルを生成するブロック再配置部を有することを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項５】
前記読み込み制御部は、前記ディレクトリに基づいてボリュームアロケーションテーブルから読み込んだボリュームと、前記ブロックリーディングテーブルから読み込んだ一回の読み込み操作ごとの読み込みブロック数と、前記ファイルアロケーションテーブルからのブロック情報に基づいて、各ボリュームから読み出すブロックをそれぞれ設定するボリューム読み出しテーブルを生成し、このボリューム読み出しテーブルに基づいて各ボリュームから読み込みを行うことを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項６】
前記ブロックリーディングテーブルは、ボリュームの読み込み性能に応じて、一回の読み込み操作で読み込むブロック数を設定したことを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項７】
前記読み込み制御部は、いずれかのボリュームが読み込み不能なときには、このボリュームに設定されていたブロックを、他のボリュームに再配分するエラー処理部を含むことを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項８】
前記エラー処理部は、読み込み不能となったボリュームに対応するボリューム読み出しテーブルの未処理のブロックを、前記ブロックリーディングテーブルに設定されたブロック数に基づいて、他のボリュームのボリューム読み出しテーブルへ追加することを特徴とする請求項７に記載のファイルシステム。
【請求項９】
前記ファイルアロケーションテーブルは、ファイルのアクセス状態が読み出し中または書き込み中であることを示す属性を有し、前記読み込み制御部は、書き込み中のファイルに対する読み込みを禁止することを特徴とする請求項１または請求項２に記載のファイルシステム。
【請求項１０】
前記書き込み制御部及び読み込み制御部は、ホストコンピュータで実行され、このホストコンピュータと前記ストレージ装置は、ネットワークを介して接続されたことを特徴とする請求項１または請求項２に記載に記載のファイルシステム。
【請求項１１】
アプリケーションからの書き込み指令または読み込み指令に応じてストレージ装置のボリュームに対してファイルの書き込みまたは読み込みを行うプログラムであって、
書き込み指令があったときには、ファイルをブロック単位に分割して、ディレクトリごとに複数のボリュームを設定したボリュームアロケーションテーブルから、当該ファイルのディレクトリに対応するすべてのボリュームに同一のブロックを書き込むボリューム書き込み部と、
前記ファイルのディレクトリ及び書き込んだブロックの情報をファイルアロケーションテーブルに書き込むテーブル書き込み部と、
読み込み指令があったときには、
前記ファイルアロケーションテーブルからディレクトリを取得して、このディレクトリに基づいて前記ボリュームアロケーションテーブルからボリュームを決定するボリューム決定部と、
各ボリュームごとに、一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルからボリューム毎の読み出しブロック数を取得するブロック数取得部と、
前記ボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック情報とから各ボリューム毎に読み出すブロックを決定する読み込みブロック決定部と、
前記読み込みブロック決定部で決定されたボリューム毎のブロックに基づいて、各ボリュームから前記ブロック数毎に読み込む読み込み部と、
をコンピュータに機能させることを特徴とするプログラム。
【請求項１２】
前記読み込み部は、ボリュームアロケーションテーブルで設定された全てのボリュームをマウントするとともに、同時に読み込み操作を行うことを特徴とする請求項１１に記載のプログラム。
【請求項１３】
前記読み込み部は、前記読み込んだ各ボリュームのブロックを、前記ファイルアロケーションテーブルのブロック情報に基づいて再配置し、ファイルを生成することを特徴とする請求項１１に記載のプログラム。
【請求項１４】
前記読み込み部は、前記ディレクトリに基づいてボリュームアロケーションテーブルから読み込んだボリュームと、前記ブロックリーディングテーブルから読み込んだ一回の読み込み操作ごとの読み込みブロック数と、前記ファイルアロケーションテーブルからのブロック情報に基づいて、各ボリュームから読み出すブロックをそれぞれ設定するボリューム読み出しテーブルを生成し、このボリューム読み出しテーブルに基づいて各ボリュームから読み込みを行うことを特徴とする請求項１１に記載のプログラム。
【請求項１５】
前記ブロックリーディングテーブルは、ボリュームの読み込み性能に応じて、一回の読み込み操作で読み込むブロック数を設定したことを特徴とする請求項１１に記載のプログラム。
【請求項１６】
前記読み込み部は、いずれかのボリュームが読み込み不能なときには、このボリュームに設定されていたブロックを、他のボリュームに再配分して読み込みを続行することを特徴とする請求項１１に記載のプログラム。
【請求項１７】
前記読み込み不能となったボリュームに対応するボリューム読み出しテーブルの未処理のブロックを、前記ブロックリーディングテーブルに設定されたブロック数に基づいて、他のボリュームのボリューム読み出しテーブルへ追加することを特徴とする請求項１６に記載のプログラム。
【請求項１８】
前記ファイルアロケーションテーブルは、ファイルのアクセス状態が読み出し中または書き込み中であることを示す属性を有し、前記読み込み部は、書き込み中のファイルに対する読み込みを禁止することを特徴とする請求項１１に記載のプログラム。
【請求項１９】
前記ボリューム書き込み部は、ミラーリングまたはレプリケーションにより同一のファイルを複数のボリュームへ書き込むことを特徴とする請求項１１に記載のプログラム。
【請求項２０】
アプリケーションからの書き込み指令または読み込み指令に応じてストレージ装置のボリュームに対してファイルの書き込みまたは読み込みを行う方法であって、
ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブルと、前記ボリュームに書き込んだファイルの属性及び分割されたブロック情報を記憶するファイルアロケーションテーブルと、前記各ボリュームごとに、一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルと、を備え、
書き込み指令があったときには、ファイルをブロック単位に分割して、前記ボリュームアロケーションテーブルから当該ファイルのディレクトリに対応するすべてのボリュームに同一のブロックを書き込む手順と、
前記ファイルのディレクトリ及び書き込んだブロック番号をファイルアロケーションテーブルに書き込む手順と、
読み込み指令があったときには、前記ファイルアロケーションテーブルからディレクトリを取得して、このディレクトリに基づいて前記ボリュームアロケーションテーブルからボリュームを決定する手順と、
各ボリュームごとに、前記ブロックリーディングテーブルからボリューム毎の読み出しブロック数を取得する手順と、
前記ボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック番号とから各ボリューム毎に読み出すブロック番号を決定する手順と、
前記ボリューム毎のブロック番号に基づいて、各ボリュームから前記ブロック数毎に読み込む手順と、
前記読み込んだ各ボリュームのブロックを、前記ファイルアロケーションテーブルのブロック番号に基づいて再配置し、ファイルを生成する手順と、
を含むことを特徴とするファイルの書き込みまたは読み込み方法。
【請求項２１】
アプリケーションからの読み込み指令に応じてストレージ装置のボリュームからファイルを読み込む方法であって、
ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブルと、
前記ボリュームにブロック単位で分割して書き込んだファイルの属性及び分割されたブロック番号を記憶するファイルアロケーションテーブルと、
前記各ボリュームごとに、一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルと、
前記ファイルのディレクトリ及び書き込んだブロックの情報を記憶したファイルアロケーションテーブルと、を備え、
読み込み指令があったときには、前記ファイルアロケーションテーブルからディレクトリを取得して、このディレクトリに基づいて前記ボリュームアロケーションテーブルからボリュームを決定する手順と、
各ボリュームごとに、前記ブロックリーディングテーブルからボリューム毎の読み出しブロック数を取得する手順と、
前記ボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック番号とから各ボリューム毎に読み出すブロック番号を決定する手順と、
前記ボリューム毎のブロック番号に基づいて、各ボリュームから前記ブロック数毎に読み込む手順と、
前記読み込んだ各ボリュームのブロックを、前記ファイルアロケーションテーブルのブロック番号に基づいて再配置し、ファイルを生成する手順と、
を含むことを特徴とするファイル読み込み方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、冗長性と読み込み性能に優れたファイルシステムに関する。
【背景技術】
【０００２】
従来のファイルシステムでは、ＯＳ（Operation  System）にマウントしたストレージ装置（ディスク）にアクセスする際には、データファイルをいくつかのブロックに分割して単一のボリュームに書き込み、読み出す際にも単一のボリュームからブロックを一つずつ読み込んでいる。
【０００３】
また、データファイルの冗長性を確保するものとしては、ボリュームのバックアップ領域を多重書きボリュームの各々のボリュームに対してあるシリンダ数だけ分割して、同時に並行してその数シリンダ分ずつ入力し、入力したデータをＣＰＵ内のバッファでシリンダ順にバックアップ先に出力することで、多重書きされたボリュームのバックアップ時間を大幅に短縮するものが知られている（特許文献１）。
【０００４】
さらに、ストレージシステム内のディスクコントローラがホストコンピュータから書き込み要求を受けると、ディスクコントローラが同じ書き込み要求を同一ペア内のミラーディスクドライブへ発行するもの知られている（特許文献２）。
【特許文献１】米国特許第５，７２４、５００号
【特許文献２】特開２００３−１５７１５１号
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかしながら、上記従来例では、複数のミラーボリュームやバックアップボリュームがあったとしても、ホスト側（またはＯＳ側）では単一のボリュームがマウントされているだけである。したがって、容量の大きなファイルを読み出す際に要する時間については、考慮されていなかった。
【０００６】
そこで本発明は、上記問題点に鑑みてなされたもので、書き込みの際には冗長性を確保しつつ、読み出す際には複数のボリュームから並列的に読み出すことで、容量の大きなデータファイルを短時間で読み出すことが可能なファイルシステムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明は、複数のボリュームを有するストレージ装置と、ディレクトリごとに複数のボリュームを設定するボリュームアロケーションテーブルとを備えて、書き込み指令があったときには、ファイルをブロック単位に分割して、前記ボリュームアロケーションテーブルに設定されたすべてのボリュームに同一のブロックを書き込み、前記ボリュームに書き込んだファイルの属性及び分割されたブロック情報をファイルアロケーションテーブルに記憶する。
【０００８】
一方、読み込み指令があったときには、ファイルのディレクトリに基づいてボリュームアロケーションテーブルからボリュームを決定し、前記各ボリュームごとに、一回の読み出し操作で読み出すブロック数をそれぞれ設定したブロックリーディングテーブルからブロック数をボリューム毎に取得し、これらボリューム及びブロック数と前記ファイルアロケーションテーブルのブロック情報とから各ボリューム毎に読み出すブロックを決定して、各ボリュームから前記ブロック数毎に並列的に読み込んで、読み込んだ複数のブロックをファイルアロケーションテーブルのブロック情報に基づいて再配置し、ファイルを組み立てる。
【発明の効果】
【０００９】
したがって、本発明は、ファイルの読み込みや書き込み処理の高速化が可能となる。
【発明を実施するための最良の形態】
【００１０】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１１】
図１は、本発明のファイルシステムを、ＳＡＮ（Storage Area Network）２を介して接続したホストコンピュータ１とストレージ装置３に適用した一例を示す。
【００１２】
ホストコンピュータ１は、図示しないＣＰＵ、メモリ、表示装置、キーボード、マウスなどを備えており、ＯＳ（Operating System）５上でアプリケーション４が稼働している。
【００１３】
アプリケーション４やＯＳ５がストレージ装置３へアクセスするときには、ファイルシステム６を介してストレージ装置３にアクセスを行う。ファイルシステム（図中Fast Redundant File System）６は、ＯＳ５からストレージ装置３へのアクセス要求があると、後述するようにアクセスするボリュームとブロックを選択し、ストレージ装置３に要求する。
【００１４】
ストレージ装置３は、複数のボリューム＃１〜♯ｎを備え、各ボリュームはディスクコントローラ３１によって各ボリュームを構成するディスク装置の制御が行われ、ＳＡＮ２を介してホストコンピュータ１のディスク制御部６から要求されたボリューム及びブロックに対して読み書きを行う。なお、ストレージ装置３は、データファイルに冗長性を持たせるため、複数のボリュームに同一のデータを保存する。
【００１５】
図２は、ファイルシステム６を中心とするシステム構成の説明図を示す。
【００１６】
ファイルシステム６は、単一のボリューム＃１〜＃ｎのいずれかに、ブロックに分割したファイルの書き込みを行う書き込み制御部７と、複数のボリューム３０（＃１〜＃ｎ）から並列的にブロック単位で読み込む読み込み制御部８と、ファイルとボリューム３０及びブロックの関連付けを設定した各種テーブル９〜１２と、を主体として構成される。なお、図２においては説明のため、ＯＳ５とファイルシステム６を分離しているが、ファイルシステム６はＯＳ５の一部を構成するものである。
【００１７】
まず、各種テーブル９〜１２について説明する。
【００１８】
図３は、ＯＳ５に管理されるボリュームアロケーションテーブル９の一例を示し、ファイルシステム６がマウント（利用可能に組み込むこと）しているディレクトリとボリュームとの対応関係を示している。
【００１９】
例えば、レコード番号１には、ファイルシステム６にマウントされたディレクトリ「/home」についてのボリュームの情報が記述されており、ディレクトリ「/home」にはボリューム＃１、＃２、＃３、＃４の４つのボリュームがマウントされていることを示す。そして、マウントされたディレクトリに複数のボリュームがある場合は、いずれがプライマリボリュームであるかを識別するためのフラグ（ＹｅｓまたはＮｏ）が用意されており、プライマリボリュームには「Ｙｅｓ」のフラグが設定される。
【００２０】
このプライマリボリュームは、後述するようにファイルの書き込み時にファイルシステム６がアクセスする単一のボリューム３０を示すものである。そして、プライマリボリューム以外のマウントされたボリュームは、後述するようにプライマリボリュームの内容を複製したセカンダリボリュームとなる。
【００２１】
また、ディレクトリにマウントされたボリューム３０がひとつの場合には、特にプライマリボリュームのフラグを設定しなくともよい。例えば、図中マウントされたディレクトリ（Mounted  directory）が「/tmp」には、一つのボリューム＃１０のみがマウントされており、この場合にはフラグは「ＮＯ」のままであるが、ファイルシステム６は単一のボリュームであるためプライマリボリュームとして扱う。
【００２２】
図４は、ＯＳ５に管理されるファイルアロケーションテーブル１０の一例を示しており、ファイルアロケーションテーブルではアイル単位で属性情報を管理する。
【００２３】
すなわち、各ファイルの名前（図中Filename）、修正した日付（図中Date）、アクセス状態（図中Access  State）、アクセス権限（図中Access  right）、ファイルが使用しているボリュームのブロック番号リスト、ファイルが属するディレクトリなどからなり、各ファイルごと（図中Record#）に定義されている。なお、アクセス状態は、readまたはwriteで示される。
【００２４】
図５は、ＯＳ５に管理されるファイルシステム６がファイルを読み出す際に用いるブロックリーディングテーブル１１の一例を示す。
【００２５】
ブロックリーディングテーブル１１は、各ボリュームごとに１回のread命令（読み込み指令）で読み込むブロック数が設定されており、例えば、ボリューム♯１では１回のread命令で４ブロックを読み出し、ボリューム＃２では、１回のread命令で３ブロックを読み込むように設定されている。
【００２６】
なお、ボリュームごとのブロック数の違いは、ボリュームを構成するディスク装置の読み込み速度などの性能に応じて予め設定したものである。
【００２７】
また、ボリューム読み出しテーブル１２は、ファイルの読み込み時に読み込み制御部８が作成するものであり、これについては後述する。
【００２８】
次に、書き込み制御部７と読み込み制御部８について説明する。
【００２９】
まず、書き込み制御部７は、アプリケーション４からwrite命令を受け取ると、上記図３のボリュームアロケーションテーブルを参照して、書き込むデータファイルのディレクトリからプライマリボリュームを判定し、ＳＡＮ２を介してストレージ装置３に対して、プライマリボリュームに対する書き込み指令を発効するとともに、データを転送する。
【００３０】
ストレージ装置３のディスクコントローラ３１は、ファイルシステム６の書き込み制御部７から書き込み指令を受けると、データを指定されたプライマリボリュームに書き込むとともに、プライマリボリュームと対になるセカンダリボリュームにも同一のデータを書き込む。
【００３１】
なお、セカンダリボリュームの指定は、書き込み指令の度に書き込み制御部７がストレージ装置３に通知するか、あるいは、所定のタイミング（初期化時、ボリュームアロケーションテーブルの変更時）でファイルシステム６がストレージ装置３に通知する。
【００３２】
ここで、書き込みの動作について、図６、図７を参照しながら詳述する。なお、図６は書き込み時のデータの流れを示す説明図で、図７は書き込み制御部７で行われる制御の一例を示すフローチャートで、書き込み指令を受けるたびに実行されるものである。
【００３３】
図６は、ファイルシステム６にマウントされたディレクトリ「/home」のファイルを書き込む場合を示す。アプリケーション４から「/home」にあるファイルについてwrite命令を受けると、書き込み制御部７は、まず、所定のデータ長となるように、ファイルをブロックに分割する（図７のステップＳ１）。
【００３４】
次に、書き込み制御部７は、図３のボリュームアロケーションテーブル９を参照して、「/home」がマウントされているレコードから、プライマリとなっているボリューム♯１を検索する（図７のステップＳ２）。
【００３５】
そして、書き込み制御部７は、ストレージ装置３に対して、ボリューム♯１に対する書き込み指令を発効するとともに、データブロックを転送する（図７のステップＳ３）。
【００３６】
これにより、ストレージ装置３のディスクコントローラ３１は、書き込み制御部７から転送されたデータをブロック単位でボリューム♯１へ書き込むとともに、このボリューム♯１のセカンダリボリュームとなっているボリューム♯２、３、４に対しても同一のデータを書き込む。例えば、「/home」のあるファイルが１〜１０ブロックに分割された場合、各ボリューム♯１〜４の各ブロック番号１〜１０にそれぞれ同一のデータが書き込まれる。
【００３７】
そして、書き込みが終了すると、ディスクコントローラ３１は書き込み制御部７に書き込み完了を通知し、さらに書き込み制御部７はアプリケーション４に書き込み完了を通知する（図７のステップＳ４）。なお、書き込み完了時に、書き込み制御部７は、ファイルアロケーションテーブルに、ファイルの属性及びブロックの分割情報を書き込む。
【００３８】
こうして、書き込み時には、マウントしているディレクトリに基づいて、ボリュームアロケーションテーブルから求めたプライマリボリュームに対してブロック単位で書き込みを行い、ストレージ装置３のミラーリングまたはレプリケーション機能により、予め設定したセカンダリボリュームに複製を書き込む。
【００３９】
次に、読み込み制御部８について説明する。
【００４０】
図２において、読み込み制御部８は、各ボリュームごとにブロック単位でデータの読み込みを行う複数のブロック読み込み部（図中Block Reading）８１と、これら複数のブロック読み込み部８１からのデータをブロック番号順に組み立て直すブロック組み立て部（図中Data Block Assembling）８０から構成される。
【００４１】
ここで、ブロック読み込み部８１は、ホストコンピュータ１にＳＡＮ２と接続するポートが複数ある場合、各ポートごとにブロック読み込み部８１を設ければよい。好ましくは、一度に読み込むボリュームの数に応じたブロック読み込み部８１とポートを備えるのが望ましい。あるいは、ＳＡＮ２と接続する物理的なポートが少ない場合には、論理的なポートを一度に読み込むボリュームの数に応じて設け、これら論理ポートに対応してブロック読み込み部８１を複数設ければよい。
【００４２】
ここで、上記図５のブロックリーディングテーブルに示したように、各ボリュームはその性能の差から１回のread命令で読み込むブロック数は異なるの場合があるので、すべてのブロック読み込み部８１が同時に読み込みを完了する訳ではない。
【００４３】
そこで、ブロック組み立て部８０は、上記図３のボリュームアロケーションテーブルに設定されたボリューム番号と、図４のファイルアロケーションテーブルのブロック番号リストに基づいて、各ブロック読み込み部８１が並列的に読み込んだ各ブロックを再配置し、元のファイルに組み立て直すのである。
【００４４】
次に、上記読み込み制御部８の動作について、図８〜図１０を参照しながら以下に詳述する。なお、図８は読み込み時のデータの流れを示す説明図で、図９は読み込み制御部８で行われる制御の一例を示すフローチャートで、読み込み指令を受けるたびに実行されるものである。また図１０は、読み込み制御部８が作成するボリューム読み出しテーブル１２で、各ボリュームからどのブロックを読み込むかを設定するものである。
【００４５】
図９には、ファイルシステム６のディレクトリ「/home」のファイル（Ｘとする）を読み込む場合を示す。図８において、アプリケーション４から「/home」にあるファイルについてread命令を受けると、読み込み制御部８は、まず、上記図３のボリュームアロケーションテーブルに設定されたディレクトリ（Mounted  Directory）に対応するレコードから、マウントされているボリューム番号を読み込む（図９のステップＳ１１）。本実施形態の場合は、ボリューム＃１〜♯４を読み込む。
【００４６】
次に、図１０に示すボリューム読み出しテーブルのボリューム＃に、読み込んだボリューム番号をリストに加える（図９のステップＳ１２）。
【００４７】
そして、図４のファイルアロケーションテーブルからread命令の対象となっているファイル名Ｘに対応したレコードより、ファイルが記憶されているブロック番号リスト（ブロック番号の一覧）を読み込み（図９のステップＳ１３）、さらに、ボリューム読み出しテーブル１２のブロック番号リスト（図中The list of block numbers read from each Volumes）に書き込む（図９のステップＳ１４）。
【００４８】
ここで、ボリューム読み出しテーブル１２のボリューム＃を参照して、ボリュームが複数あるか否かを判定し（図９のステップＳ１５）、複数のブロックがあれば並列的にボリュームの読み込みを行うために、ブロック番号の振り分けを行う（図９のステップＳ１６）一方、ブロックが一つしかない場合には、一つのボリュームから全てのブロック番号を読み込む（図９のステップＳ２４）。
【００４９】
次に、複数のブロックがある場合では、図５のブロックリーディングテーブルから、上記図１０のボリューム＃に書き込んだ各ボリュームが、一回のread命令で読み込むブロック数を取得して、上記図９のステップＳ１３で読み込んだブロック番号リストのブロック番号を、各ボリュームが読み込むブロック数に応じて割り当てを行う（図９のステップＳ１６）。つまり、上記図９のステップＳ１４で書き込まれた全ての図１０のボリューム読み出しテーブル１２のブロック番号リストを、一回のread命令で読み込むブロック数に応じて、ボリューム毎に更新する。
【００５０】
この割り当てについて、例えば、「/home」のあるファイル「Ａ」がボリューム＃１〜♯４に記憶され、ファイルアロケーションテーブル１０には、ブロック番号１〜４０を使用していると記載されていた場合について説明する。
【００５１】
各ボリューム＃１〜♯４は、図５のブロックリーディングテーブル１１より、一回のread命令で読み込むブロック数は、ボリューム＃１が４、ボリューム＃２が３、ボリューム＃３が２、ボリューム＃４が１となっているので、使用しているブロック番号１〜４０を各ボリュームが一回に読み込むブロック数に応じて、ボリューム読み出しテーブル１２の先頭のボリュームから順に割り当てる。
【００５２】
つまり、ボリューム＃１は一回に４ブロックを読み出すから、ブロック番号１〜４を、次に、ボリューム＃２は一回に３ブロックを読み出すから、ボリューム＃１が読み込んだ次のブロック番号から３つのブロック番号５〜７を、ボリューム＃３は一回に２ブロックを読み出すから、ボリューム＃２が読み込んだ次のブロック番号から２つのブロック番号８、９を、ボリューム＃４は、一回に１ブロックを読み出すから、ボリューム＃３が読み込んだ次のブロック番号から１つのブロック番号１０を、そして、再びボリューム読み出しテーブル１２の先頭のボリューム＃１に戻って、ボリューム＃４が読み込んだ次のブロック番号１１から４ブロックのブロック番号１１〜１４を、それぞれボリューム読み出しテーブル１２のブロック番号リストに書き込んで更新し、この処理をブロック番号の最後になるまで続ける。
【００５３】
こうして、図１０で示すように、ボリューム読み出しテーブル１２のブロック番号リストには、各ボリューム番号ごとに読み出すブロック番号が、ボリュームの性能（一回のread命令で読み込むブロック数）に応じて割り当てられる。
【００５４】
次に、図１０のボリューム読み出しテーブル１２で決定されたブロック番号リストに基づいて、読み込み制御部８は、各ボリューム＃１〜♯４に対応するブロック読み込み部８１に対して、ボリューム毎に読み込みを指令する（図９のステップＳ１７）。
【００５５】
図９において、ステップＳ１７以降は各ブロック読み込み部８１毎に並列的に処理が行われる。例えば、ボリューム♯１の読み込みを行うブロック読み込み部８１では、ストレージ装置３のボリューム♯１について、上記図１０のボリューム読み出しテーブル１２で決定されたブロック番号リストと、図５のブロックリーディングテーブルに基づいて読み込みを行って、ボリューム♯１が一回のread命令で読み込むことのできるブロック数（ここでは、４ブロック）を読み込む（図９のステップＳ１８、Ｓ１９）。
【００５６】
そして、このread命令が確実に実行されたか否かを検証し（図９のステップＳ２０）、読み込みが完了していればボリューム読み出しテーブル１２に設定された全てのブロックについて読み込みが完了したか否かを判定し（図９のステップＳ２１）、完了するまで図９のステップＳ１９〜Ｓ２１のループを繰り返す。
【００５７】
一方、図９のステップＳ２０において、一回の読み込みが完了しない場合には、ステップＳ２５〜Ｓ３０のエラートラップ処理に進む。
【００５８】
エラートラップ処理では、まず、所定時間だけ読み込みが完了するのを待ってから（ステップＳ２５、Ｓ２６）、応答がない場合にはこのボリュームが処理不能と判断し（ステップＳ２７）、図１０のボリューム読み出しテーブル１２では、新たにレコードを作成し、処理不能となったボリュームに割り当てられていたブロック番号のうち、未処理のブロック番号について、ブロック番号リストを作成する（ステップＳ２８）。そして、他の正常なボリュームのブロック番号リストへ、一回のread命令でのブロック数に応じて、処理不能となったボリュームに割り当てられていた未処理のブロック番号を追加的に割り当てる（ステップＳ２９）。この後、処理不能となったブロック番号リストのボリューム読み出しテーブル１２は消去される。こうして、一つのボリュームが読み出し不能となった場合には、他の正常なボリュームにブロック番号を割り当てて、読み込みを継続することで、データの冗長性を確保する（ステップＳ３０）。
【００５９】
他のボリューム＃２〜♯４においても、上記ボリューム＃１のステップＳ１８〜Ｓ２１の読み出し処理及びエラートラップ処理を同様に行う。
【００６０】
したがって、一回のread命令で、ボリューム＃１からはブロック番号１〜４が、ボリューム＃２からはブロック番号５〜７が、ボリューム＃３からはブロック番号８、９が、ボリューム＃４からはブロック番号１０が読み込まれ、合計でブロック番号１〜１０が読み込まれる。そして、この読み込みを４回行うことで、図１０のボリューム読み出しテーブル１２に設定されたブロック番号１〜４０の読み込みが完了することになる。
【００６１】
そして、全ての読み込みが完了すると、図８のブロック組み立て部８０では、各ボリューム＃１〜♯４に対応するブロック読み込み部８１が読み出したブロックデータを、ブロック番号の昇順に再配置してファイル「Ａ」を生成する（ステップＳ２２）。そして、全ての読み込みが完了し、ブロックの再構成が完了すると、アプリケーション４に読み込みの完了を通知するとともに、ファイルデータを提供して処理を終了する。なお、この処理の終了に伴って、ボリューム読み出しテーブル１２の内容も削除し、次回の読み込みに備える。
【００６２】
以上の読み込み処理により、要求されたファイルを複数のボリュームから、それぞれ複数のブロック単位で同時（並列的）に読み込むことができるので、容量の大きなファイルを高速で読み込むことが可能となり、例えば、動画ファイルや楽曲ファイルなどの容量の大きなファイルを高速で処理することが可能となるとともに、万一、ストレージ装置３のボリュームに故障などが生じても、他の正常なボリュームから読み込むことができるので、冗長性を備えた高速ファイルシステムを提供できるのである。
【００６３】
さらに、各ボリュームが一回に読み込むことができるブロック数を、ボリュームの読み込み性能（ディスク装置の読み込み性能）に応じた値に設定できるので、全てのボリュームが同一の性能を有する必要がないので、既存のストレージ装置３を有効に利用できる、という利点があり、設備投資の増大を抑制しながらも、高速なファイルシステムを採用することが可能となるのである。
【００６４】
以上のように、本発明のファイルシステム６によれば、書き込み及び読み込みに使用する全てのボリュームをディレクトリ毎にマウントしておくボリュームアロケーションテーブル９を設け、図１１で示すように、書き込み時にはファイルデータを複数のブロックに分割するとともに、各ブロックをマウントされたボリュームの全てに書き込むことでデータの冗長性を確保する。
【００６５】
次に、読み込みの際には、全てのボリュームがマウントされているので、任意のボリュームから任意のブロックを読み込むことができる。そこで、予めボリューム毎に一回のread命令で読み込むブロック数を設定しておき（ブロックリーディングテーブル１１）、ファイルのブロック番号などを記録したファイルアロケーションテーブル１０とブロックリーディングテーブル１１から、読み込むファイルのブロック番号をボリューム単位で割り当てるボリューム読み出しテーブル１２を作成することで、図１１に示すＲｅａｄ１〜４のように、複数のボリュームから同時に複数のブロックを読み込むことが可能になり、容量の大きなファイルであっても高速に読み込みを行うことができるのである。
【００６６】
さらに、読み込みが終了した後、ブロックに分割されたデータを再配置するブロック組み立て部８０を設けることで、各ボリュームからの読み込み完了時点のずれを吸収して、分割されたブロックからファイルを生成することができ、高速性と信頼性を両立させることができるのである。
【００６７】
さらに、読み込み処理中にいずれかのボリュームで障害が生じた場合には、他の正常なボリュームへ、割り当てられたブロック番号を振り替えることでデータの冗長性を確保でき、冗長性と高速な読み込み性能を備えたファイルシステムを実現できるのである。
【００６８】
なお、あるアプリケーションがあるファイルに対して、読み込みを行っている最中に、他のアプリケーションも同じファイルに対して読み込みを行おうとするときは、その読み込みを許可する。一方、書き込みを行っている最中には、他のアプリケーションは同じ書き込み中のファイルに対して、読み込みを実行できるが、書き込みは禁止される。このため、アプリケーションがファイルに対するアクセス動作が読み込み中か書き込み中であることをファイルアロケーションテーブル１０のアクセス状態（Access state）がreadまたはwriteであることから判断することができる。
【００６９】
図１２、図１３は、第２の実施形態を示し、前記第１実施形態の図３に示したボリュームアロケーションテーブル９からプライマリとセカンダリの区別を削除したもので、ディレクトリ毎にマウントされたボリュームの全てに対して、同時に同一のデータを書き込むミラーリングを行うようにしたもので、その他の構成は前記第１実施形態と同様である。
【００７０】
なお、図１２は書き込み時のデータの流れを示す説明図で、図１３は書き込み制御部７で行われる制御の一例を示すフローチャートで、書き込み指令を受けるたびに実行されるものである。
【００７１】
書き込み制御部７は、アプリケーション４から「/home」にあるファイルについてwrite命令を受けると、書き込み制御部７は、まず、所定のデータ長となるように、ファイルを複数のブロックに分割した後、図３のボリュームアロケーションテーブル９を参照して、「/home」がマウントされているレコードから、マウントされている全てのボリューム番号を読み込む（図１３のステップＳ４１）。
【００７２】
次に、ボリューム番号のリストを作成してから（図１３のステップＳ４２）、複数のボリュームに対して並列的に書き込みを行う（図１３のステップＳ４３、４４）。そして、全てのボリュームについて書き込みが完了したらアプリケーション４に通知を行って処理を終了する。なお、各ボリュームの書き込み処理（ステップＳ４４）は、ボリューム番号のリストに対応して生成されるものである。
【００７３】
この場合では、ディレクトリ毎にマウントされたボリュームに、プライマリまたはセカンダリといった識別を行う必要がないので、書き込みに要する処理負荷を低減できる。また、ボリューム単位で並列的に書き込むため、上記ブロック読み込み部８１と同様に、ストレージ装置３の各ボリュームに接続可能な複数のポートを利用してもよい。なお、読み込みについては前記第１実施形態と同様である。
【００７４】
上記では書き込み制御部７においてソフトウェアによりミラーリングを行う場合を示したが、図示はしないがストレージ装置３がハードウェアによりミラーリングを行うようにしてもよい。
【００７５】
なお、上記実施形態においては、図５のブロックリーディングテーブル１１を、ボリュームを構成するディスク装置の読み込み速度に応じて予め設定しているが、具体的には、図１４で示すように、利用するボリュームの読み込み性能リストを作成し、読み込み速度（図中Read Speed[Mbytes/s]）が一番遅いボリュームから読み出すブロック数を１にして、他のボリュームから読み出すブロック数を、読み込み速度が一番遅いボリュームの読み込み速度に対する倍数に設定してもよい。
【００７６】
ディレクトリ毎にボリュームをマウントするにあたって、ＯＳ５がＧＵＩを備えている場合には、ボリュームアロケーションテーブル９をＧＵＩから操作してもよく、例えば、図１５で示すように、マウントするパス（ディレクトリ）を入力するパス入力欄９３と、マウント可能なボリュームを表示するボリューム選択欄９１と、選択したボリュームを表示する決定欄９２を備えた場合について説明する。
【００７７】
まず、パス入力欄９３へ所望のディレクトリ名を入力する。そして、ボリューム選択欄９１から選択したいボリュームをマウスのクリック操作などで選択したのち、ボタン９５をクリックして決定欄９２へ送る。これにより、ボリュームアロケーションテーブル９の設定を行うことができる。
【００７８】
さらに、ボリュームをマウントすると同時に、ブロックリーディングテーブル１１のブロック数を設定してもよく、この場合、図１５のプルダウンリスト９４を決定したボリュームと同一の行に表示し、プルダウンリスト９４から一回のread命令で読み込むブロック数を設定することができる。
【００７９】
上記ボリュームのマウントとブロック数の設定が完了すれば、ＯＫボタン９６をクリックすることにより、図１６で示すように、ボリュームアロケーションテーブル９とブロックリーディングテーブル１１に設定が反映される。なお、図１６では、リスト表示部９７に設定したディレクトリが表示され、ディレクトリを選択してＯＫボタン９６をクリックすることで、図１５に示した設定画面へ移行することができる。
【００８０】
なお、上記実施形態においては、ホストコンピュータ１とストレージ装置３をＳＡＮ２により接続した一例を示したが、ＬＡＮによって接続してもよい。
【００８１】
また、上記実施形態では、ストレージ装置３が書き込み制御部７が書き込んだプライマリボリュームの複製を行う例や、書き込み制御部７がソフトウェアによりミラーリングを行う例を示したが、ストレージ装置３が書き込み時にのみＲＡＩＤ（Redundant Array of Inexpensive Disk）１などのミラーリングを行うようにしてもよい。
【図面の簡単な説明】
【００８２】
【図１】本発明を適用したコンピュータシステムの概略を示す簡略図。
【図２】ファイルシステムを中心とするシステム構成の説明図。
【図３】ディレクトリとマウントするボリュームの関係を設定したボリュームアロケーションテーブルの一例を示す説明図。
【図４】ファイルの属性や格納するブロックを設定したファイルアロケーションテーブルの一例を示す説明図。
【図５】ボリュームが一回のread命令で読み込むブロック数を設定したブロックリーディングテーブルの一例を示す説明図。
【図６】書き込み時のデータの流れを示す説明図。
【図７】書き込み制御部で行われる制御の一例を示すフローチャート。
【図８】読み込み時のデータの流れを示す説明図。
【図９】読み込み制御部８で行われる制御の一例を示すフローチャート。
【図１０】読み込み制御部が作成するボリューム読み出しテーブルで、各ボリュームと読み込むブロックの対応関係を設定する。
【図１１】本発明のデータの流れを示す説明図。
【図１２】第２の実施形態を示し、書き込み時のデータの流れを示す説明図。
【図１３】同じく、書き込み制御部で行われる制御の一例を示すフローチャート。
【図１４】ブロックリーディングテーブルを設定するためのテーブルである。
【図１５】ボリュームアロケーションテーブルの設定画面の説明図。
【図１６】同じくボリュームアロケーションテーブルの設定画面の説明図。
【符号の説明】
【００８３】
１  ホストコンピュータ１
２  ＳＡＮ
３  ストレージ装置
５  ＯＳ
６  ファイルシステム
７  書き込み制御部
８  読み込み制御部
９  ボリュームアロケーションテーブル
１０  ファイルアロケーションテーブル
１１  ブロックリーディングテーブル
１２  ボリューム読み出しテーブル
８０  ブロック組み立て部
８１  ブロック読み込み部
【図１】
2005148854.tif 000003
【図２】
2005148854.tif 000004
【図３】
2005148854.tif 000005
【図４】
2005148854.tif 000006
【図５】
2005148854.tif 000007
【図６】
2005148854.tif 000008
【図７】
2005148854.tif 000009
【図８】
2005148854.tif 000010
【図９】
2005148854.tif 000011
【図１０】
2005148854.tif 000012
【図１１】
2005148854.tif 000013
【図１２】
2005148854.tif 000014
【図１３】
2005148854.tif 000015
【図１４】
2005148854.tif 000016
【図１５】
2005148854.tif 000017
【図１６】
2005148854.tif 000018