JP2010287036A - ストレージサーバー装置及びコンピュータプログラム - Google Patents

ストレージサーバー装置及びコンピュータプログラム Download PDF

Info

Publication number
JP2010287036A
JP2010287036A JP2009140214A JP2009140214A JP2010287036A JP 2010287036 A JP2010287036 A JP 2010287036A JP 2009140214 A JP2009140214 A JP 2009140214A JP 2009140214 A JP2009140214 A JP 2009140214A JP 2010287036 A JP2010287036 A JP 2010287036A
Authority
JP
Japan
Prior art keywords
file
directory
name
storage server
server device
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2009140214A
Other languages
English (en)
Other versions
JP5367470B2 (ja
Inventor
Yutaka Kaneko
金子  豊
Minsok Hwang
▲ミン▼錫 黄
Shinya Takeuchi
真也 竹内
Yoshinori Izumi
吉則 和泉
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Japan Broadcasting Corp
Original Assignee
Nippon Hoso Kyokai NHK
Japan Broadcasting Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Nippon Hoso Kyokai NHK, Japan Broadcasting Corp filed Critical Nippon Hoso Kyokai NHK
Priority to JP2009140214A priority Critical patent/JP5367470B2/ja
Publication of JP2010287036A publication Critical patent/JP2010287036A/ja
Application granted granted Critical
Publication of JP5367470B2 publication Critical patent/JP5367470B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Computer And Data Communications (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

【課題】ネットワークを介して接続された複数のストレージサーバー装置から構成される分散ファイル管理システムにおいて、ファイルやディレクトリを分散して管理する。
【解決手段】分散ファイル管理システムを構成するストレージサーバー装置は、当該分散ファイル管理システム内で一意なファイル名を付けられたiノードファイル、ディレクトリファイル、データファイルを分散してファイル蓄積部32に記憶している。高レベルインタフェース部24が、ディレクトリ名及びユーザ利用ファイル名によるファイル操作要求を受信した場合、パス検索部5は、iノードファイル、及び、ディレクトリファイルを参照して、ユーザ利用ファイル名に対応したデータファイル名を取得する。低レベルインタフェース部23は、高レベルインタフェース部24からの指示を受け、取得したデータファイル名のファイルに対して要求されたファイル操作を行なう。
【選択図】図1

Description

本発明は、ネットワークを介して接続された複数のストレージサーバー装置から構成される分散ファイル管理システムにおけるストレージサーバー装置及びコンピュータプログラムに関する。
コンピュータではユーザが保存するデータをファイルと呼ばれる一連のデータの塊として取り扱う。ファイルはハードディスクドライブ等の蓄積装置に記録される。ファイルのどこのデータを蓄積装置のどの場所に記録したかを管理している部分をファイルシステムと呼び、OS(オペレーティングシステム)の一部として動作している。ファイルシステムが利用する各ファイルの管理情報もまた蓄積装置内にデータ本体とともに記録される。また、多くのファイルシステムではファイルの管理だけでなく、複数のファイルを階層的に管理するため、ディレクトリとよばれる階層構造の管理も可能としている。
ファイルシステムには、主にMS−DOS(登録商標)やWindows(登録商標)で使われているFAT(File Allocation Table)ファイルシステム、NTSF(NT File System)や、UNIX(登録商標)系OSで使われているUFS(UNIX(登録商標) File System)、FFS(Fast File System)、ext2/3(Second Extended File System/Third Extended File System)、また、Macintosh(登録商標)で使われているHFS(Hierarchical File System)+、BTRON(Business TRON)系OSで使われているファイルシステムなど様々な方式が存在する。
ここで、UNIX(登録商標)系OSで使われているUFS、FFS、ext2/3などのファイルシステムについて図33を使って説明する。
図33は、iノードによるファイル管理を説明する図である。UFS、FFS、ext2/3などのファイルシステムでは、ファイルのデータおよびディレクトリのデータはiノードと呼ばれる情報により管理され、1つのファイルのデータまたは1つのディレクトのデータ毎に1つのiノードが割り当てられる。iノードにはファイルのデータまたはディレクトリのデータが格納されているディスク上の位置、ファイルの作成時刻、ファイルサイズ等のファイルに関する情報が保存されている。iノードには一意な番号が割り振られ、このiノード番号によりファイルシステム内で一意に特定できる。
同図に示すように、iノードはディスク領域の特定の場所にその情報が保存される。一方、ディレクトリに関する基本的な情報を定義するディレクトリのデータや、ファイルのデータ本体は、データ格納領域に保存される。同図では「/usr」ディレクトリに保存されている「test.txt」ファイルを例に、iノードとディレクトリのデータ及びファイルのデータ本体との関係を示している。ディレクトリのデータには、そのディレクトリ内に作成されたディレクトリやファイルの名前とそのディレクトリやファイルのiノード番号が保存されている。そこで、「/usr/test.txt」のファイルを見つけ出すには、まず、iノード番号(i_no)が2のルートiノードから開始し、当該ルートiノードにより示されるディレクトリのデータを得る。このディレクトリのデータから「usr」ディレクトリのiノード番号が10であることがわかる。さらに、iノード番号10のディレクトリのデータから、「test.txt」という名前のファイルはiノード番号44のファイルということがわかる。以上のように、ルートiノードを始点として、すべてのファイルに到達することができる。
また、Macintosh(登録商標)系OSで主に使われているHFS+ファイルシステムでは、ファイルはデータフォークとリソースフォークと呼ばれる2つの領域を扱うことができる。データフォークはアプリケーションが自由にデータを書き込む領域である。一方、リソースフォークにはアイコンやウインドウの形状、メニューの内容や定義など、メタデータを保存する領域として使われる。さらにBTRON系OSで使われるファイルシステムでは、ファイルは複数のレコード列から構成される。レコードにはタイプ番号が付けられ、利用用途によって番号を決め、そのレコードのデータを利用目的により使い分けている。
このように、UNIX(登録商標)/Windows(登録商標)系OSでは1ファイル1レコード、Macintosh(登録商標)系OSでは1ファイル2レコード、BTRON系OSでは1ファイル複数レコードのファイル構造に対応してファイルシステムが作られている。
以上説明したファイルシステムは、1つのディスク内または1つのコンピュータ内でのファイルの管理であるため、ローカルファイルシステムとも呼ばれる。
一方、近年、コンピュータの高性能化、ネットワーク技術の向上により、複数のコンピュータをネットワークで接続し、複数のユーザがファイルを共有して扱うことが可能となり始めた。複数のコンピュータに保管されたファイルを仮想的に同一のディレクトリ構造で管理するための機構を分散ファイルシステムと呼ぶ。分散ファイルシステムでは、どのコンピュータのユーザからも同一のディレクトリパスによりファイルにアクセスできる。例えば、「/usr/test.txt」というファイルは、どのコンピュータのユーザからでも、ファイル本体がどこに保存されているかを気にすることなく「/usr/test.txt」というパス付きのファイル名でファイルにアクセスできる。
図34は、分散ファイルシステムの一つであるGFS(Google File system)の例を示す。GFSではファイルを64MB毎に分割したチャンクと呼ばれる単位でファイルが保存される。これらのチャンクはチャンクサーバーと呼ばれるサーバー群に分散して保存する。どのファイルのどのチャンクがどこのチャンクサーバーに保管されているかはマスターサーバーが管理しており、ユーザ(クライアント)は、まずマスターサーバーに問い合わせを行い、目的のファイルのチャンクがどのチャンクサーバーに保存されているかを知り、そのチャンクサーバーにアクセスすることで、目的のファイルにアクセスする。ディレクトリに関しても同様にマスターサーバーにより管理されている。これは、例えば、非特許文献1に記述されている。
また、分散ファイルシステムの他の例としてGfarmがある。GfarmでもGFS同様にファイルは断片化して複数のサーバーに保存される。断片化の分割数、サイズなどは自由に決めることができる。これらの情報はGFS同様、メタデータサーバーにより一元的に管理されている。これは、例えば、非特許文献2に記述されている。
一方、ファイル名等から分散的に保存されたファイルの保管場所を高速に検索する方法として、P2P(Peer-to-Peer)型のファイル管理方法がある。P2P型の検索方法では、ファイル名とその保管先を一元管理しているサーバーが存在しないため、障害に強い特長を持つ。
P2P型のファイル管理方法は、非構造型と構造型に分類されるが、ここでは、DHT(Distributed Hash Table)を使った構造型P2Pによるファイル管理技術を説明する。
DHTを使ったP2Pでは、複数のサーバーによりオーバーレイネットワークを構成する。図35はDHTを用いたP2Pオーバーレイネットワークを図示したものであり、この例では、円形のオーバーレイネットワークを形成している。オーバーレイネットワークに参加するサーバーは、例えばサーバーのアドレスを、ある決められたハッシュ関数(例えば、SHA−1(Secure Hash Algorithm 1)、MD−5(Message Digest 5))により演算して得たハッシュ値を当該サーバーのノードIDとして生成し、オーバーレイネットワーク内では、このノードIDにより各サーバーを識別する。円形のオーバーレイネットワークはノードIDを小さい順に時計周りに並べた状態を示している。各サーバーが記憶しているファイルには、例えばファイル名を元にハッシュ関数を用いて演算したハッシュ値をファイルIDとして用いる。オーバーレイネットワーク内では、ファイルIDに近いノードIDのサーバーがそのファイルを管理する。ここで、ファイルの管理とは、ファイルIDとそのファイルを記憶しているサーバーの情報(例えば、アドレスや、ポート番号)を保存することである。そこで、ファイルを利用したいユーザは、利用したいファイルIDから、ファイルIDに時計周りに近いノードIDのサーバーをオーバーレイネットワーク上で発見し、発見したサーバーから、その利用したいファイルを保有するサーバーのアドレスを読み出す。そして、この読み出したアドレスを用いることによって、利用したいファイルにアクセスすることができる。
上記のDHTの代表的な例であるChordは、非特許文献3に記述されている。
S.Ghemawat, H.goboff, S−T.Leung, "The Google File System, "Proceedings of ACM Symposium on Operating Systems Principles(ACM SIGOPS), pp.29−43, 2003 建部、森田、松岡、関口、曾田,"ペタスケール広域分散データ解析のためのGrid Datafarmアーキテクチャ",情報処理学会研究報告,ハイパフォーマンスコンピューティング87−31,pp.177−182,2001 I.Stoica et al, "Chord:A Scalable Peer−to−Peer Look up Service for Internet Applications", Proc. ACM SIGCOMM'01, Aug. 2001
以上説明したように、従来の分散ファイルシステムでは、ファイルの保管場所は複数のストレージサーバーに分散されて保存されているが、ファイルの管理、ディレクトリの管理などは特定のサーバーにより一元的に管理する方式がとられているため、SPOF(単一障害点)がある不完全な分散型ファイルシステムであった。つまり、ファイルやディレクトリを管理するサーバーが障害となった場合は、いずれのファイルにもアクセスすることができなくなってしまう。また、このようにファイルの管理やディレクトリの管理を特定の管理サーバーにより一元的に管理するシステムでは、同時に多数のユーザがファイルを利用した場合、この管理サーバーにアクセスが集中してしまうため、速度性能が低下するという問題があった。さらに、管理するファイル数やディレクトリ数が多くなると、管理サーバーにおいて管理するデータ量が大きくなり、検索時間が長くなってしまうという問題もあった。
また、P2P型のファイル管理方法では、ファイルの管理は参加しているホストによって分散して行なっているため、SPOFの無い完全分散型として管理されるものの、ここでのファイル管理とはファイル名からファイルの保存先サーバーを検索するという単純な管理のみであり、従来のローカルファイルシステムがもつディレクトリ管理やファイルの情報を管理する方法はなかった。
さらに、従来のローカルファイルシステムではOSによりファイルを複数のレコードで扱うものもあり、OSごとに異なるファイルシステムを用いる必要があったため、分散ファイルシステムでは対応が難しかった。
本発明は、このような事情を考慮してなされたもので、その目的は、ネットワークを介して接続された複数のストレージサーバー装置から構成される分散ファイル管理システムにおいて、ファイルやディレクトリを、特定のストレージサーバー装置において一元的に管理することなく、分散して管理することができるストレージサーバー装置及びコンピュータプログラムを提供することにある。
[1] 本発明の一態様は、他のストレージサーバー装置と協同して、データファイルおよびディレクトリファイルを含むファイルを分散管理するストレージサーバー装置であって、配下のディレクトリ名とディレクトリファイルのファイル名との対応関係、および、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係に関する管理情報を含む前記ディレクトリファイルと、前記データファイルと、を記憶するファイル蓄積部と、ファイル名とファイルを記憶するストレージサーバー装置とを対応付けるテーブルを記憶する所在管理テーブル蓄積部と、当該ストレージサーバー装置が所在を管理する前記ファイルについて、指定されるファイル名に基づいて前記テーブルを参照することにより、前記ファイルを記憶するストレージサーバー装置を特定する所在検索部と、指定されたファイル名に基づいて前記ファイルの所在を管理するストレージサーバー装置を選択し、選択されたストレージサーバー装置の前記所在検索部に対して前記ファイルを記憶するストレージサーバー装置の特定を指示する検索インタフェース部と、ファイル名の指定に基づき前記ファイル蓄積部が記憶する前記ファイルに対する操作を行なう低レベルインタフェース部と、ファイル名を指定して前記ファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示し、特定されたストレージサーバー装置の前記低レベルインタフェース部に対してファイル名を指定した読出指示を行うことによって前記ディレクトリファイルを読み出し、読み出した前記ディレクトリファイル内の前記管理情報に基づいて、指定されたディレクトリ名またはユーザ利用ファイル名に対応するファイル名を取得するとともに、取得したファイル名が配下のディレクトリファイルのファイル名である場合には取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置から再帰的にディレクトリファイルの読み出しを行い、取得したファイル名が配下のデータファイルのファイル名である場合には取得した前記ファイル名を出力するパス検索部と、指定されたディレクトリ名およびユーザ利用ファイル名を用いて前記パス検索部から前記データファイルのファイル名を取得し、取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置の前記低レベルインタフェース部に操作指示を行う高レベルインタフェース部と、を備えることを特徴とするストレージサーバー装置である。
この発明によれば、データファイルとディレクトリファイルを複数のストレージサーバー装置からなる分散ファイル管理システム内で分散して記憶し、ストレージサーバー装置の高レベルインタフェース部が、ディレクトリ名及びユーザ利用ファイル名によるファイル操作指示を受信した場合、パス検索部が、ディレクトリファイルを参照してユーザ利用ファイル名に対応したデータファイル名を取得する。高レベルインタフェース部は、取得されたデータファイル名を用いたファイル操作指示を低レベルインタフェース部へ出力し、低レベルインタフェース部は、ファイル蓄積部に記憶されている当該データファイル名のデータファイルに対するファイル操作を行なう。データファイルの所在は、予め分散ファイル管理システム内に登録しておいた、ファイル名と、ストレージサーバー装置との対応を示すテーブルから取得する。
これにより、分散ファイル管理システムを構成する複数のストレージサーバー装置によって、ファイルおよびディレクトリの分散管理が可能となり、多数のファイルおよびディレクトリを一元的に管理するサーバーが不要である。従って、多数のユーザから同時にファイルへのアクセスがあった場合でも特定のストレージサーバー装置に負荷が集中することがなく、また、多くのファイルやディレクトリが作成された場合でも、各ストレージサーバー装置が管理するファイルは少なくてよいため、ファイルの検索に要する時間が長くならないようにすることができる。
[2] 本発明の一態様は、上述するストレージサーバー装置であって、前記ファイル蓄積部は、ディレクトリファイルまたはデータファイルのファイル名を含むiノードファイルを更に記憶し、前記ディレクトリファイル内の前記管理情報は、配下のディレクトリの前記ディレクトリ名または配下のデータファイルの前記ユーザ利用ファイル名と、対応する前記iノードファイルのファイル名との対応関係を含むものであり、前記パス検索部は、読み出した前記ディレクトリファイルから、指定された前記ディレクトリ名または前記ユーザ利用ファイル名に基づいて前記iノードファイルのファイル名を取得し、取得した前記ファイル名を指定して前記iノードファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示するとともに、特定されたストレージサーバー装置の前記低レベルインタフェース部に対して前記ファイル名を指定した読出指示を行うことにより前記iノードファイルを読み出し、読み出した前記iノードファイルから前記ディレクトリファイルまたは前記データファイルの前記ファイル名を取得する、ことを特徴とする。
この発明によれば、ディレクトリファイルまたはデータファイルのファイル名を含むiノードファイル、配下のディレクトリのディレクトリ名または配下のデータファイルのユーザ利用ファイル名と、対応するiノードファイルのファイル名との対応関係を含むディレクトリファイル、及び、データファイルを、複数のストレージサーバー装置からなる分散ファイル管理システム内で分散して記憶し、ストレージサーバー装置の高レベルインタフェース部が、ディレクトリ名及びユーザ利用ファイル名によるファイル操作指示を受信した場合、パス検索部が、iノードファイル、及び、ディレクトリファイルを参照して、ユーザ利用ファイル名に対応したデータファイル名を取得する。
これにより、分散ファイル管理システムを構成する複数のストレージサーバー装置において、iノードファイル及びディレクトリファイルを用いて、ファイルおよびディレクトリを分散管理することが可能となる。
[3] 本発明の一態様は、上述するストレージサーバー装置であって、読み出したファイルを記憶するキャッシュ蓄積部をさらに有し、前記パス検索部は、読み出した前記iノードファイルまたは前記ディレクトリファイルを前記キャッシュ蓄積部に書き込み、取得した前記ファイル名のiノードファイルまたはディレクトリファイルが前記キャッシュ蓄積部に記憶されている場合は、当該iノードファイルまたはディレクトリファイルを当該キャッシュ蓄積部から読み出す、ことを特徴とする。
この発明によれば、一旦ダウンロードしたiノードファイルやディレクトリファイルをキャッシュ蓄積部に記憶しておき、パス検索時に読み出しが必要となったiノードファイルやディレクトリファイルがキャッシュ蓄積部に記憶されている場合は、その記憶されているファイルを使用する。
これにより、キャッシュ蓄積部に記憶したダウンロード済みファイルを利用し、パス検索部によるパス検索処理を高速にすることができる。
[4] 本発明の一態様は、上述するストレージサーバー装置であって、前記iノードファイルは、複数に分割されたデータファイルのファイル名と、当該分割されたデータファイルの番号とを含み、前記ユーザ利用ファイル名には、前記分割されたデータファイルの番号が付加され、前記パス検索部は、指定された前記ユーザ利用ファイル名に基づいて読み出した前記ファイル名の前記iノードファイルから、前記データファイルの番号に対応したデータファイルのファイル名を出力する、ことを特徴とする。
この発明によれば、ユーザ利用ファイルを複数のデータファイルに分割して複数のストレージサーバー装置において分散して記憶しておき、この分割されたデータファイルのうちファイル操作の対象となるデータファイルのファイル名を特定する。
これにより、マルチレコード構造のファイルに対応した分散ファイル管理システムを提供することができる。
[5] 本発明の一態様は、上述するストレージサーバー装置であって、前記iノードファイルは、メタデータを含み、前記ファイル入出力部は、前記操作がメタデータの読み出しである場合、読み出した前記iノードファイルから前記メタデータを読み出し、前記操作がメタデータの書き込みである場合、読み出した前記iノードファイルへメタデータの書き込みを行なう、ことを特徴とする。
この発明によれば、iノードファイルにディレクトリやユーザ利用ファイルに関する付加的な情報を示すメタデータ書き込んだり、iノードファイルに記述されたメタデータを読み出したりする。
これにより、ディレクトリ及びユーザ利用ファイルに任意のメタデータを追加して利用することができる。
[6] 本発明の一態様は、他のストレージサーバー装置と協同して、データファイルおよびディレクトリファイルを含むファイルを分散管理するストレージサーバー装置として用いられるコンピュータを、配下のディレクトリ名とディレクトリファイルのファイル名との対応関係、および、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係に関する管理情報を含む前記ディレクトリファイルと、前記データファイルと、を記憶するファイル蓄積部、ファイル名とファイルを記憶するストレージサーバー装置とを対応付けるテーブルを記憶する所在管理テーブル蓄積部、当該ストレージサーバー装置が所在を管理する前記ファイルについて、指定されるファイル名に基づいて前記テーブルを参照することにより、前記ファイルを記憶するストレージサーバー装置を特定する所在検索部、指定されたファイル名に基づいて前記ファイルの所在を管理するストレージサーバー装置を選択し、選択されたストレージサーバー装置の前記所在検索部に対して前記ファイルを記憶するストレージサーバー装置の特定を指示する検索インタフェース部、ファイル名の指定に基づき前記ファイル蓄積部が記憶する前記ファイルに対する操作を行なう低レベルインタフェース部、ファイル名を指定して前記ファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示し、特定されたストレージサーバー装置の前記低レベルインタフェース部に対してファイル名を指定した読出指示を行うことによって前記ディレクトリファイルを読み出し、読み出した前記ディレクトリファイル内の前記管理情報に基づいて、指定されたディレクトリ名またはユーザ利用ファイル名に対応するファイル名を取得するとともに、取得したファイル名が配下のディレクトリファイルのファイル名である場合には取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置から再帰的にディレクトリファイルの読み出しを行い、取得したファイル名が配下のデータファイルのファイル名である場合には取得した前記ファイル名を出力するパス検索部、指定されたディレクトリ名およびユーザ利用ファイル名を用いて前記パス検索部から前記データファイルのファイル名を取得し、取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置の前記低レベルインタフェース部に操作指示を行う高レベルインタフェース部、として機能させることを特徴とするコンピュータプログラムである。
この発明によれば、データファイルとディレクトリファイルを複数のストレージサーバー装置からなる分散ファイル管理システム内で分散して記憶し、ストレージサーバー装置の高レベルインタフェース部が、ディレクトリ名及びユーザ利用ファイル名によるファイル操作指示を受信した場合、パス検索部が、ディレクトリファイルを参照してユーザ利用ファイル名に対応したデータファイル名を取得する。高レベルインタフェース部は、取得されたデータファイル名を用いたファイル操作指示を低レベルインタフェース部へ出力し、低レベルインタフェース部は、ファイル蓄積部に記憶されている当該データファイル名のデータファイルに対するファイル操作を行なう。データファイルの所在は、予め分散ファイル管理システム内に登録しておいた、ファイル名と、ストレージサーバー装置との対応を示すテーブルから取得する。
これにより、分散ファイル管理システムを構成する複数のストレージサーバー装置によって、ファイルおよびディレクトリの分散管理が可能となるり、多数のファイルおよびディレクトリを一元的に管理するサーバーが不要である。従って、多数のユーザから同時にファイルへのアクセスがあった場合でも特定のストレージサーバー装置に負荷が集中することがなく、また、多くのファイルやディレクトリが作成された場合でも、各ストレージサーバー装置が管理するファイルは少なくてよいため、ファイルの検索に要する時間が長くならないようにすることができる。
本発明によれば、ディレクトリやユーザ利用ファイルの管理情報をファイル化して複数のストレージサーバー装置に分散して保存し、ディレクトリ名及びユーザ利用ファイル名によって指定されたディレクトリ配下のファイルに対するファイル操作を行なうことができる。これにより、一元的に集中管理するサーバーを必要としないP2P型の分散ファイルシステムにおいて、ファイルの管理およびディレクトリの管理を実現することが可能となる。
本発明の第1の実施形態による分散ファイル管理システムのブロック図である。 第1の実施形態によるホストテーブル蓄積部31に保存されるホストテーブルの例を示す図である。 第1の実施形態による所在管理テーブル蓄積部33に保存されるキーテーブルの例を示す図である。 第1の実施形態によるiノードファイル、ディレクトリファイル、データファイルの関係を示す図である。 第1の実施形態によるiノードファイルのXMLタグの一覧を示す図である。 第1の実施形態によるディレクトリファイルのXMLタグの一覧を示す図である。 第1の実施形態による登録インタフェース部21におけるput(key, value)関数実行処理の流れ図である。 第1の実施形態によるファイル登録部3におけるファイル登録処理の流れ図である。 第1の実施形態による検索インタフェース部22におけるget(key)関数実行処理の流れ図である。 第1の実施形態による低レベルインタフェース部23において実行されるインタフェース関数の一覧である。 第1の実施形態による高レベルインタフェース部24において実行されるインタフェース関数の一覧である。 第1の実施形態によるhi_read関数実行処理の流れ図である。 第1の実施形態によるパス検索部5におけるパス検索処理の流れ図である。 第1の実施形態によるパス検索部5におけるファイルのダウンロード処理の流れ図である。 第1の実施形態によるhi_write関数実行処理の流れ図である。 第1の実施形態によるファイル生成削除部6におけるファイル作成処理の流れ図である。 第1の実施形態によるファイルアップロード処理の流れ図である。 第1の実施形態によるファイル生成削除部6におけるファイル削除処理の流れ図である。 第1の実施形態によるファイル生成削除部6におけるiノードファイル削除処理の流れ図である。 第1の実施形態によるファイル生成削除部6におけるディレクトリ作成処理の流れ図である。 第1の実施形態によるファイル生成削除部6におけるディレクトリ削除処理の流れ図である。 第2の実施形態による分散ファイル管理システムのブロック図である。 第2の実施形態によるキーテーブルの構成を示す図である。 第2の実施形態によるput(key, value)関数のパラメータ構造を示す図である。 第2の実施形態によるlow_write関数実行処理の流れ図である。 第2の実施形態によるファイルのダウンロード処理の流れ図である。 第3の実施形態によるiノードファイルの記述例を示す図である。 第3の実施形態による高レベルインタフェース部24において実行されるhi_read関数およびhi_write関数を示す図である。 第4の同実施形態によるiノードファイルの記述例を示す図である。 第4の実施形態による高レベルインタフェース部24の追加関数の一覧を示す図である。 第4の実施形態によるhi_read_param関数実行動作の流れ図である。 第4の実施形態によるhi_write_param関数実行処理の流れ図である。 従来技術のiノードによるファイル管理を説明する図である。 従来技術のGFSにおけるファイル管理を説明する図である。 従来技術のP2P方式におけるコンテンツの分散管理を説明する図である。
以下、図面を参照しながら本発明の実施形態を詳細に説明する。
[1. 第1の実施形態]
[1.1 構成]
図1は、本発明の第1の実施形態による分散ファイル管理システムのブロック図であり、本発明と関係する機能ブロックのみ抽出して示している。同図に示すように、第1の実施形態による分散ファイル管理システムは、複数のストレージサーバー装置1を、ネットワーク装置100に接続することにより構成されている。ネットワーク装置100は、例えば、ルータなどの通信装置やケーブルなどの通信線からなり、IP(Internet Protocol)による通信ネットワークを構成する。ネットワーク装置100にはさらに、ユーザ端末装置50が接続されており、分散ファイル管理システムは、複数のサーバー装置1に記憶されているファイルの共有利用をユーザ端末装置50へ提供する。
また、第1の実施形態による分散ファイル管理システムは、ネットワークを介して接続される複数のストレージサーバー装置1により、DHT(分散ハッシュテーブル、Distributed Hash Table)を用いたP2P(Peer-to-Peer)型のオーバーレイネットワークを実現し、各ストレージサーバー装置1に記憶されているファイル、及び、分散ファイル管理システム全体に共通したディレクトリの管理を、当該オーバーレイネットワークに参加しているストレージサーバー装置1で分散して行なう。これにより、第1の実施形態では、ユーザ端末装置50から、分散ファイル管理システム全体で共通のディレクトリ構造により、複数のストレージサーバー装置1に分散して記憶されているファイルへのアクセスが可能である。
なお、DHTを用いたP2P型のオーバーレイネットワークの構成方法として複数の方法が考案されているが、ここではOneHop方式を用いるものとして説明を行う。OneHop方式では、従来技術における図35で示したように、ストレージサーバー装置1により円形のオーバーレイネットワークを構成する。これは、例えば、(文献)A.Gupta, B.Liskov and R.Rodrigues, “One Hop Lookups for Peer−to−Peer Overlays,” 9th Workshop on Hot Topics in Operating Systems(HotOS−IX), 2003に記載されている。
図1において、ストレージサーバー装置1は、外部インタフェース部2、ファイル登録部3、ファイル入出力部4、パス検索部5、ファイル生成削除部6、サーバー選択部7、ID(識別子)生成部8、所在検索部9、ホストテーブル蓄積部31、ファイル蓄積部32、所在管理テーブル蓄積部33、及び、記憶部34を含んで構成される。
ホストテーブル蓄積部31、ファイル蓄積部32、所在管理テーブル蓄積部33及び記憶部34は、ハードディスク装置や半導体メモリなどで実現される。
ホストテーブル蓄積部31は、ストレージサーバー装置1を特定するノードIDと、当該ストレージサーバー装置1のアドレスとの対応付けを示すホストテーブルを記憶する。
ファイル蓄積部32は、ユーザがユーザ端末装置50により生成し、読み書きするファイル(以下、「ユーザ利用ファイル」と記載)のデータ本体をデータファイルとして記憶する。さらに、ファイル蓄積部32は、ユーザがユーザ端末装置50により生成し、利用するディレクトリについての管理データをディレクトリファイルとして記憶する。これらのデータファイルおよびディレクトリファイルそれぞれに対して、iノードファイルが1つ生成され、ファイル蓄積部32は、このiノードファイルも記憶している。iノードファイル、ディレクトリファイル、データファイルのファイル名は、ID生成部8により生成されたIDに基づくファイル名であり、オーバーレイネットワーク内で使用するファイル名である。ユーザ端末装置50により生成されたユーザ利用ファイルやディレクトリの名前は、当該ユーザ利用ファイルやディレクトリを配下に含むディレクトリのディレクトリファイル内に記述される。以下では、ファイル蓄積部32に記憶されているiノードファイル、データファイル、ディレクトリファイルのファイル名、つまり、オーバーレイネットワーク内で使用するファイル名を単に「ファイル名」と記載する。
所在管理テーブル蓄積部33は、key(キー)とvalue(値)との対応付けを示すキーテーブルを記憶する。keyは、ファイル名のハッシュ値であり、ファイルを一意に特定するファイルIDを示す。valueはサーバーアドレスであり、keyの生成元となったファイル名のファイルを記憶しているストレージサーバー装置1のアドレスを示す。
記憶部34は、作成あるいは修正途中のファイルなどを一時的に記憶する。
外部インタフェース部2は、ネットワーク装置100を介して、他のストレージサーバー装置1およびユーザ端末装置50と情報を送受信する。外部インタフェース部2は、登録インタフェース部21、検索インタフェース部22、低レベルインタフェース部23、及び、高レベルインタフェース部24を備える。
登録インタフェース部21は、オーバーレイネットワークに、つまり、keyを管理すべきストレージサーバー装置1が保持するキーテーブルに、keyとvalueの対応付けを登録する。検索インタフェース部22は、keyを管理しているストレージサーバー装置1の所在検索部9に、当該keyに対応したvalueの取得を指示する。
低レベルインタフェース部23は、指定されたファイル名のファイルに対する操作、すなわち、ファイルの読み出し、書き込み及び削除を行なうための他のストレージサーバー装置1へのインタフェースを実現する。ここで指定されるファイル名は、オーバーレイネットワーク内で使用するファイル名である。また、低レベルインタフェース部23は、ネットワーク内で一意のIDを生成すためのインタフェースを実現する。
高レベルインタフェース部24は、ルートディレクトリからパスにより指定された名前のユーザ利用ファイルやディレクトリに対する操作、すなわち、ユーザ利用ファイルの読み出し、書き込みまたは削除、あるいは、ディレクトリの作成または削除を行なうためのユーザ端末装置50及び他のストレージサーバー装置1へのインタフェースを実現する。ここで指定されるユーザ利用ファイル名やディレクトリ名は、ユーザが付与した名前である。なお、ディレクトリ名とは、階層構造の中のある階層におけるディレクトリに対して与えられる名前である。以下、ルートディレクトリからのパスにより指定されたユーザ利用ファイルのファイル名を「パス付きユーザ利用ファイル名」、ルートディレクトリからのパスにより指定されたディレクトリ名を「パス付きディレクトリ名」と記載する。
ファイル登録部3は、自ストレージサーバー装置1が備えるファイル蓄積部32に記憶されているファイルのファイル名を取得し、当該ファイル名のハッシュ値であるkeyと、サーバーアドレスとして自ストレージサーバー装置1のアドレスを設定したvalueとの対応付けをオーバーレイネットワークへ登録するよう、登録インタフェース部21に指示する。所在検索部9は、検索インタフェース部22からkeyを受信し、自ストレージサーバー装置1が備える所在管理テーブル蓄積部33に記憶されているキーテーブルから当該keyに対応するvalueを取得する。
ファイル入出力部4は、ファイル蓄積部32に記憶されているファイルに対する書き込み、読み出し、あるいは、削除を行なう。パス検索部5は、パス付きユーザ利用ファイル名に対応したデータファイルのファイル名を検索したり、パス付きディレクトリ名に対応したディレクトリファイルを取得したりする。ファイル生成削除部6は、iノードファイル、ディレクトリファイル、データファイル等の各ファイルを生成または修正して自ストレージサーバー装置1または他のストレージサーバー装置1のファイル蓄積部32への書き込みを指示したり、自ストレージサーバー装置1または他のストレージサーバー装置1のファイル蓄積部32に記憶されているファイルの削除を指示したりする。サーバー選択部7は、ファイルを記憶させるべきストレージサーバー装置1を選択する。ID生成部8は、オーバーレイネットワーク内で一意のIDを生成する。
[1.2 データ構成]
次に、ストレージサーバー装置1に記憶されている各データについて説明する。
図2は、ストレージサーバー装置1のホストテーブル蓄積部31に記憶されているホストテーブルの例を示す図である。ホストテーブルには、ストレージサーバー装置1のノードIDと、当該ストレージサーバー装置1のアドレスであるサーバーアドレスとを対応付けたレコードが、ノードIDの小さい順に並んだリストとして保管されている。このノードIDは、ネットワーク装置100に接続されているストレージサーバー装置1のIP(Internet Protocol)アドレス及びポート番号を元にハッシュ関数を用いて生成したハッシュ値である。同図においては、4台のストレージサーバー装置1であるサーバーA、B、C,Dがネットワーク装置100を介して接続されており、そのノードIDをnodeID:A, nodeID:B, nodeID:C, nodeID:Dとした場合の例を示しており、ノードIDの値はnodeID:A<nodeID:C<nodeID:D<nodeID:Bである。同図に示すホストテーブルは、図35に示す円形のオーバーレイネットワークに対応している。以下、ストレージサーバー装置1を単に「サーバー」と記述する場合がある。
OneHop方式では、オーバーレイネットワークに参加している各サーバーは、当該オーバーレイネットワークに参加している全てのサーバーのホストリストを共通に持っている。従って、第1の実施形態の各ストレージサーバー装置1が記憶しているホストテーブルには、ネットワーク装置100を介して接続される全てのストレージサーバー装置1のレコードが登録される。なお、ホストテーブルの作成方法、サーバーの参加や離脱によるホストテーブルの変更は、既存の技術と同様であるため、ここでは説明を省略する。
以下、参加しているすべてのストレージサーバー装置1のホストテーブル蓄積部31には、正しく同じホストテーブルが記憶されているものとして説明を続ける。
図3は、ストレージサーバー装置1の所在管理テーブル蓄積部33に記憶されているキーテーブルの例を示す図である。同図に示すように、キーテーブルには、ファイル名のハッシュ値を示すkeyと、当該ファイル名のファイルを記憶しているストレージサーバー装置1のアドレスを示すvalueと、keyとvalueの組の登録日時とを対応づけた複数のレコードからなる。
図4は、ストレージサーバー装置1のファイル蓄積部32に記憶されているiノードファイル、ディレクトリファイル、データファイルの関係を示す図である。第1の実施形態では個々のiノードファイル、ディレクトリファイル、データファイルには、複数のストレージサーバー装置1で構成される分散ファイル管理システム内で唯一のファイル名が付与され、いずれかのストレージサーバー装置1のファイル蓄積装置32内に記憶されている。
同図において、ファイル名が「00000.ino」、「B.ino」、「C.ino」、「F.ino」、「G.ino」のファイルはiノードファイルであり、ファイル名が「00000.dir」、「C.dir」のファイルはディレクトリファイルであり、ファイル名が「B.dat」、「F.dat」、「G.dat」のファイルはデータファイルである。なお、ルートディレクトリのiノードファイルをルートiノードファイルと呼び、このファイル名は固定であらかじめ付与される。ここでは、ルートiノードファイルのファイル名を「00000.ino」としている。iノードファイルおよびディレクトリファイル内のデータはXML(extensible markup language)により記述される。以下、ファイル名「X」のファイルをファイル「X」と記載する。
図5は、iノードファイルのXMLのタグの一覧を示す図である。
同図に示すように、iノードファイルの<inode>タグは、iノードファイルのXMLの開始を表している。
<type>タグは、要素内容に、iノードファイルが示すファイルのタイプ、すなわち、ディレクトリファイルか、データファイルかが記述されることを表す。ディレクトリファイルの場合は「directory」が、データファイルの場合は「normal」が<type>タグの要素内容として記述される。
<body>タグは、要素内容に、iノードファイルが紐付けするディレクトリファイルまたはデータファイルのファイル名が記述されることを表す。ここでのファイル名はファイル蓄積部32で記憶されているファイル名である。
図6は、ディレクトリファイルのXMLのタグの一覧を示す図である。
同図に示すように、ディレクトリファイルの<dir_entry>タグは、ディレクトリファイルのXMLの開始を表している。
<entry>タグは、属性値noにより特定される番号のディレクトリエントリの開始を表す。
<body>タグは、要素内容に、当該<body>タグが含まれるディレクトリエントリに対応したファイル名が記述されることを表す。ここでのファイル名は、当該ディレクトリファイルが対応するディレクトリを親ディレクトリとする配下のファイルまたはディレクトリのiノードファイルのファイル名である。
<name>タグは、要素内容に、当該<name>タグが含まれるディレクトリエントリに対応した、配下のファイルのユーザ利用ファイル名、または、配下のディレクトリのディレクトリ名が記述されることを示す。
上記のように、ディレクトリファイルは、配下のディレクトリのディレクトリ名とディレクトリファイルのファイル名との対応関係、及び、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係を管理情報として含むものである。つまり、配下のディレクトリのディレクトリ名とディレクトリファイルのファイル名との対応関係とは、配下のディレクトリのディレクトリ名とディレクトリファイルのファイル名が記述されたiノードファイルのファイル名との対応付けであり、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係とは、配下のユーザ利用ファイル名とデータファイルのファイル名が記述されたiノードファイルのファイル名との対応付けである。
図4において、ルートiノードファイル「00000.ino」のXMLデータにおける<body>タグの要素内容から、ルートディレクトリのディレクトリファイルのファイル名は「00000.dir」であることがわかる。このディレクトリファイル「00000.dir」のXMLデータに記述されている<dir_entry>タグの要素内容から、このディレクトリには4つのディレクトリエントリがあり、各ディレクトリエントリの<name>タグの要素内容から、1番目(no=”0”)のディレクトリエントリの名前は「.」、2番目のディレクトリエントリ(no=”1”)の名前は「..」、3番目のディレクトリエントリ(no=”2”)の名前は「test.mxf」、4番目のディレクトリエントリ(no=”3”)の名前は「work」であることがわかる。ここで、名前「.」はカレントディレクトリ(現在のディレクトリ)、「..」は親のディレクトリを示す。
そして、3番目のディレクトリエントリ(no=”2”)の<body>タグの要素内容から、ユーザ付与した名前「test.mxf」のiノードファイル名は「B.ino」であり、iノードファイル「B.ino」の<type>タグの要素内容が「normal」であることから、<body>タグにはデータ本体を記述したデータファイルのファイル名が記述されており、その要素内容からファイル名は「B.dat」であることがわかる。
また、4番目のディレクトリエントリ(no=”3”)の<body>タグの要素内容から、ユーザが付与した名前「work」のiノードファイル名は「C.ino」であり、そのiノードファイル「C.ino」の<type>タグの要素内容が「directory」であることから、<body>タグにはディレクトリファイル名が記述されており、その要素内容からファイル名は「C.dir」であることがわかる。
また、ディレクトリファイル「C.dir」のXMLデータに記述されている<dir_entry>タグの要素内容から、このディレクトリには4つのディレクトリエントリがあり、各ディレクトリエントリの<name>タグの要素内容から、1番目(no=”0”)のディレクトリエントリの名前は「.」、2番目のディレクトリエントリ(no=”1”)の名前は「..」、3番目のディレクトリエントリ(no=”2”)の名前は「fish.mxf」、4番目のディレクトリエントリ(no=”3”)の名前は「cat.mxf」であることがわかる。
そして、3番目のディレクトリエントリ(no=”2”)の<body>タグの要素内容から、ユーザが付与した名前「fish.mxf」のiノードファイル名は「F.ino」であり、そのiノードファイル「F.ino」の<type>タグの要素内容が「normal」であることから、<body>タグにはデータ本体を記述したデータファイルのファイル名が記述されており、その要素内容からファイル名は「F.dat」であることがわかる。
同様に、4番目のディレクトリエントリ(no=”3”)の<body>タグの要素内容から、ユーザが付与した名前「cat.mxf」のiノードファイル名は「G.ino」であり、そのiノードファイル「G.ino」の<type>タグの要素内容が「normal」であることから、<body>タグにはデータ本体を記述したデータファイルのファイル名が記述されており、その要素内容からファイル名は「G.dat」であることがわかる。
以上説明したように、本実施形態では、ルートiノードファイル「00000.ino」から、所望のディレクトリファイルおよびデータファイルを見つけ出すことができる。
[1.3 ストレージサーバー装置1の動作]
次に、ストレージサーバー装置1の処理について説明する。
[1.3.1 keyの登録]
まず、登録インタフェース部21において実行される登録(put)インタフェースについて説明する。登録インタフェースは、オーバーレイネットワークに、指定されたファイルの所在を登録するためのインタフェースである。
つまり、登録インタフェース部21は、自ストレージサーバー装置1の他の処理部から、または、他のストレージサーバー装置1から実行要求を受け、put(key, value)関数を実行する。関数とは、他のプログラムモジュールから呼び出され、当該他のプログラムモジュールから引数と呼ばれるデータを受信して一連の命令群からなる処理を実行し、その実行結果のデータを引数として当該関数の呼び出し元へ返すプログラムモジュールである。なお、関数には、呼び出し元が設定する引数や、呼び出し元へ返す引数がないものもある。
登録インタフェース部21がput(key, value)関数を実行することにより、パラメータとして指定されたkeyとvalueの組(以下、keyとvalueの組を(key, value)とも記載)をオーバーレイネットワークに登録することができる。オーバーレイネットワークに(key, value)を登録するとは、keyを管理すべき適切なストレージサーバー装置1のキーテーブルに、(key, value)を登録するということである。
図7は、登録インタフェース部21によるput(key, value)関数実行処理の流れ図を示す。同図において、登録インタフェース部21は、put(key, value)関数の実行要求を受信すると、ホストテーブル蓄積部31のホストテーブルを参照して、時計周りの方向でkeyの値に近いノードIDのうち、当該keyの値に最も近いノードIDを特定し、この特定したノードIDに対応したサーバーアドレスを読み出す(ステップS7−1)。
登録インタフェース部21は、ステップS7−1における検索の結果得られたサーバーアドレスが、自ストレージサーバー装置1のアドレスであるか否かを判断する(ステップS7−2)。読み出したサーバーアドレスが、自ストレージサーバー装置1のアドレスである場合(ステップS7−2:YES)、登録インタフェース部21は、所在管理テーブル蓄積部33に記憶されているキーテーブルに新規レコードを追加し、この追加したレコードに受信したパラメータで示される(key, value)値を書き込む(ステップS7−3)。さらに、登録インタフェース部21は、この追加したレコードに、現在の日時を示す登録日時を書き込む。
一方、ステップS7−2において、読み出したサーバーアドレスが、自ストレージサーバー装置1のアドレスではない場合、すなわち、keyを管理すべきサーバーが自ストレージサーバー装置1ではない場合(ステップS7−2:NO)、登録インタフェース部21は、読み出したサーバーアドレスを宛先として用いて、他のトレージサーバー装置1へput(key, value)関数の実行要求を出力する(ステップS7−4)。
これにより、put(key, value)関数の実行要求を受信した他のストレージサーバー装置1の登録インタフェース部21において、put(key, value)関数が実行され、上述したステップS7−1からの処理が行なわれる。ただし、この場合、ステップS7−1において、当該他のストレージサーバー装置1のアドレスが読み出されることになるため、当該他のストレージサーバー装置1の所在管理テーブル蓄積部33が記憶しているキーテーブルに、(key, value)値、及び、登録日時を設定したレコードが追加される。
以上の動作により、オーバーレイネットワーク上に(key, value)値が登録される。
なお、キーテーブルに登録されている(key, value)値が一定時間後になっても再登録されない場合、キーテーブルから削除する。つまり、登録インタフェース部21は、一定時間毎に、所定の時間を経過した登録日時が設定されているキーテーブルのレコードを検出し、検出したレコードを削除する。
[1.3.2 蓄積ファイルの所在登録]
次に、ファイル登録部3において実行されるファイル登録手順の動作について説明する。
ファイル登録部3は、自ストレージサーバー装置1のファイル蓄積部32に記憶されているファイルに使用されているファイル名のハッシュ値をkeyとし、自ストレージサーバー装置1のアドレスをvalueとして、登録インタフェース部21に登録インタフェースを実行させ、オーバーレイネットワークへ自ストレージサーバー装置1が保持するファイルの所在を登録する。
図8は、ファイル登録部3におけるファイル登録処理の流れ図を示す。
まず、ファイル登録部3はファイル蓄積部32に記憶されているファイル数Nを取得する(ステップS8−1)。次に、ファイル登録部3は、カウンタ値nを0にセットし(ステップS8−2)、以下のステップS8−4〜S8−6の操作をnがNに達するまで、N回繰り返す(ステップS8−3:YES)。
すなわち、ファイル登録部3は、n番目のファイルのファイル名のハッシュ値をkeyに、自ストレージサーバー装置1のアドレスをvalueにセットし(ステップS8−4)、登録インタフェース部21にput(key, value)関数の実行要求を出力する(ステップS8−5)。これにより、登録インタフェース部21は、図7に示すput(key, value)関数の処理を実行し、オーバーレイネットワークへ(key, value)値を登録する。ファイル登録部3は、nの値を1加算した値に更新する(ステップS8−6)。
nがファイル数Nに達し、ファイル蓄積部32内のN個の全ファイルについて、ステップS8−3〜S8−6を行い、(key, value)の登録を終了すると(ステップS8−3:NO)、ファイル登録部3は、あらかじめ決めた時間Tだけ待った後(ステップS8−7)、再びステップS8−1からの処理を行い、登録動作を繰り返す。
以上により、ストレージサーバー装置1は、自身が備えるファイル蓄積部32に記憶されているiノードファイル、ディレクトリファイル、データファイル等の全てのファイルの所在を定期的にオーバーレイネットワークに登録する。
[1.3.3 ファイルの所在検索]
次に、オーバーレイネットワークに登録されている(key, value)を取得する検索(get)インタフェースについて説明する。検索インタフェース部22は、自ストレージサーバー装置1の他の処理部から、または、他のストレージサーバー装置1からの実行要求を受け、get(key)関数を実行する。get(key)関数は、指定されたkeyに対応するvalue値を検索するインタフェースである。
図9は、検索インタフェース部22におけるget(key)関数実行処理の流れ図を示す。
検索インタフェース部22は、get(key)関数の実行要求を受け付けると、ホストテーブル蓄積部31に記憶されているホストテーブルを参照して、受信したkeyの値に時計周りで近いノードIDのうち、当該keyの値に最も近いノードIDを特定し、この特定したノードIDに対応したサーバーアドレスを読み出す(ステップS9−1)。
検索インタフェース部22は、ステップS9−1における検索の結果得られたサーバーアドレスが、自ストレージサーバー装置1のアドレスであるか否かを判断する(ステップS9−2)。読み出したサーバーアドレスが、自ストレージサーバー装置1のアドレスであると判断した場合(ステップS9−2:YES)、検索インタフェース部22は、自ストレージサーバー装置1の所在検索部9へステップS9−1において受信したkeyを出力し、valueの読み出しを指示する。所在検索部9は、所在管理テーブル蓄積部33に記憶されているキーテーブルから、受信したkeyに対応するvalue値を読み出す。検索インタフェース部22は、所在検索部9により読み出されたvalue値をget(key)関数の実行要求元へ出力する(ステップS9−3)。
一方、ステップS9−2において、読み出したサーバーアドレスが、自ストレージサーバー装置1のアドレスではないと判断した場合、すなわち、keyを管理すべきサーバーが他のストレージサーバー装置1であると判断した場合(ステップS9−2:NO)、検索インタフェース部22は、読み出したサーバーアドレスを宛先として用い、他のストレージサーバー装置1へget(key)関数の実行要求を出力する(ステップS9−4)。
これにより、get(key)関数の実行要求を受信した他のストレージサーバー装置1の検索インタフェース部22において、get(key)関数が実行され、上述したステップS9−1からの処理が行なわれる。ただし、この場合、ステップS9−1において、当該他のストレージサーバー装置1のアドレスが読み出されることになる。よって、他のストレージサーバー装置1の所在検索部9により、当該他のストレージサーバー装置1の所在管理テーブル蓄積部33が記憶しているキーテーブルからkeyに対応したvalue値が読み出され、当該他のストレージサーバー装置1の検索インタフェース部22により、get(key)関数の実行要求を出力したストレージサーバー装置1へ出力されることになる。他のストレージサーバー装置1からvalue値を受信したストレージサーバー装置1は、get(key)関数の実行要求元へ当該value値を出力する。
以上により、オーバーレイネットワークで管理されている(key, value)を取得する、すなわち、ファイル名からそのファイルを記憶しているストレージサーバー装置1のアドレスを検索することができる。
[1.3.4 オーバーレイネットワークで使用されるファイル名によるファイル操作]
オーバーレイネットワークで使用されるファイル名、つまり、ファイル蓄積部32に記憶されているファイルのファイル名によるファイル操作は、低レベルインタフェース部23により実行される。
図10は、低レベルインタフェース部23において実行されるインタフェース関数を示す。低レベルインタフェース部23で実行されるインタフェース関数は、ファイル蓄積部32に記憶されているiノードファイル、ディレクトリファイル、データファイルに対する操作を行なうものである。
同図に示すように、低レベルインタフェース部23において実行される関数には、ファイルに対して、読み出し、書き込み、削除をそれぞれ行なうlow_read関数、low_write関数、low_delete関数がある。さらに、低レベルインタフェース部23は、オーバーレイネットワークで一意のIDを生成するlow_create_id関数を実行する。それぞれの関数の引数の欄で示されるinは関数の呼び出し側が値を設定する引数、outは関数が呼び出された側が値を設定して呼び出し側に値を戻す引数である。引数fnameは、ファイル蓄積部32において記憶されているファイルのファイル名である。
以下に、低レベルインタフェース23における各関数の動作について順に説明する。
[1.3.4.1 low_read関数]
low_read関数は、ファイル蓄積部32に記憶されているファイルからデータを読み出す関数である。引数fnameは、データ読み出し対象ファイルのファイル名を示す。引数offsetは、データの読み出しを行なう先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、読み出すデータのバイトサイズを示す。また、引数dataは、読み出されたデータを示す。
低レベルインタフェース部23は、自ストレージサーバー装置1の各部または他のストレージサーバー装置1からlow_read関数の実行要求を受信すると、ファイル入出力部4へ受信した引数を出力し、ファイルからのデータ読み出しを指示する。ファイル入出力部4は、引数fnameで示されるファイル蓄積部32内のファイルを特定すると、特定したファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を読み出し開始位置とし、この読み出し開始位置から引数offsetで示されるバイト数のデータを読み出す。低レベルインタフェース部23は、ファイル入出力部4が読み出したデータを引数dataに設定して、low_read関数の実行要求元へ返送する。
[1.3.4.2 low_write関数]
low_write関数は、ファイル蓄積部32に記憶されているファイルにデータを書き込む関数である。引数fnameは、データ書き込み対象ファイルのファイル名を示す。引数offsetは、データの書き込みを行なう先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、書き込むデータのバイトサイズを示す。また、引数dataは、ファイルに書き込むデータを示す。
低レベルインタフェース部23は、自ストレージサーバー装置1の各部または他のストレージサーバー装置1からlow_write関数の実行要求を受信すると、ファイル入出力部4へ受信した引数を出力し、ファイルへのデータ書き込みを指示する。ファイル入出力部4は、引数fnameで示されるファイル蓄積部32内のファイルを特定すると、特定したファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、引数dataで示されるデータを書き込む。
なお、引数fnameで指定されたファイルがファイル蓄積装置32に存在しない場合、ファイル入出力部4は、引数fnameで指定された名前のファイルを新たにファイル蓄積装置32に作成する。そして、作成したファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、引数dataで示されるデータを書き込む。
[1.3.4.3 low_delete関数]
low_delete関数は、ファイル蓄積装置32に記憶されているファイルを削除する関数であり、引数fnameは、削除対象のファイル名を示す。低レベルインタフェース部23は、自ストレージサーバー装置1の各部または他のストレージサーバー装置1からlow_delete関数の実行要求を受信すると、ファイル入出力部4へ受信した引数を出力し、ファイルの削除を指示する。ファイル入出力部4は、引数fnameで示されるファイル蓄積部32内のファイルを特定すると、当該ファイルをファイル蓄積部32から削除する。
[1.3.4.4 low_create_id関数]
low_create_id関数は、第1の実施形態における分散ファイル管理システム、つまり、オーバーレイネットワークにおいて、唯一であることを保証したIDを生成する関数である。
低レベルインタフェース部23は、自ストレージサーバー装置1の各部または他のストレージサーバー装置1からlow_create_id関数の実行要求を受信すると、ID生成部8の生成を指示する。低レベルインタフェース部23は、ID生成部8が生成したIDを引数idに設定してlow_create_id関数の実行要求元へ返送する。
なお、本実施形態におけるIDの生成方法は特に制限されるものではないが、例えば、SMPTE(Society of Motion Picture and Television Engineers)-330MのUMID(Unique Material Identifier)や、RFC(Request for Comments)4122のUUID(Universally Unique Identifier)などの既存の技術による生成方法を用いることができる。
[1.3.5 ユーザ利用ファイル名及びディレクトリ名による操作]
ユーザ利用ファイル名、ディレクトリ名による操作は、高レベルインタフェース部24により実行される。
図11は、高レベルインタフェース部24において実行されるインタフェース関数を示す。高レベルインタフェース部24で実行されるインタフェース関数は、ユーザ利用ファイル、あるいは、オーバーレイネットワークで管理されるディレクトリに対する操作を行なうものである。これらのインタフェース関数の実行要求は、ユーザ端末装置50、あるいは、ストレージサーバー装置1から出力される。
同図に示すように、高レベルインタフェース部24において実行される関数には、ルートディレクトリからのパスで記述されたパス付きユーザ利用ファイル名により示されるユーザ利用ファイルに対して、読み出し、書き込み、削除をそれぞれ行なうhi_read関数、hi_write関数、hi_delete関数がある。さらに、高レベルインタフェース部24において実行される関数には、ルートディレクトリからのパスで記述されたパス付きディレクトリの作成、削除をそれぞれ行なうhi_make_dir関数、hi_delete_dir関数がある。それぞれの関数の引数の欄で示されるinは関数の呼び出し側が値を設定する引数、outは関数が呼び出された側が値を設定して呼び出し側に値を戻す引数である。なお、ディレクトリファイルの<name>タグの要素内容が、パス付きユーザ利用ファイル名、パス付きディレクトリ名に使用される。
hi_read関数の引数pathは、データ読み出し対象ファイルのパス付きユーザ利用ファイル名を示す。引数offsetは、データを読み出す先頭位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、読み出すデータのバイトサイズを示す。また、引数dataは、読み出されたデータを示す。
hi_write関数の引数pathは、データ書き込み対象ファイルのパス付きユーザ利用ファイル名を示す。引数offsetは、書き込みを行なうデータの位置を示し、ファイルの先頭からのバイト数が設定される。引数sizeは、データの書き込み位置から書き込みを行なうデータのバイトサイズを示す。引数dataは、書き込むデータを示す。
hi_delete関数の引数pathは、削除対象ファイルのパス付きユーザ利用ファイル名を示す。
hi_make_dir関数の引数pathは、ルートディレクトリからのパスで示された、作成対象ディレクトリのパス付きディレクトリ名を示す。
hi_delete_dir関数の引数pathは、ルートディレクトリからのパスで示された、削除対象ディレクトリのパス付きディレクトリ名を示す。
引数pathは、例えば、「/usr」ディレクトリ内の「local」ディレクトリ内にある「sample.txt」というファイルであれば、「/usr/local/sample.txt」のようにパス付きユーザ利用ファイル名を指定することができる。「/usr」ディレクトリ内の「local」ディレクトリであれば、「/usr/local」のようにパス付きディレクトリ名を指定することができる。
以下に、高レベルインタフェース部24における各関数の動作について順に説明する。
[1.3.5.1 hi_read関数]
[1.3.5.1.1 hi_read関数の動作]
図12は、高レベルインタフェース部24によるhi_read関数実行処理の流れ図を示す。
同図において、まず、高レベルインタフェース部24は、引数pathにより指定された読み出し対象ユーザ利用ファイルがどのようなファイル名のデータファイルによってファイル蓄積部32に記憶されているかを取得するため、パス検索の実行をパス検索部5に指示する(ステップS12−1)。
例えば、図4に示すiノードファイル、ディレクトリファイル、データファイルがオーバーレイネットワークに記憶されており、引数pathに「/work/fish.mxf」が設定さているものとする。この場合、高レベルインタフェース部24は、ステップS12−1におけるパス検索の結果、パス検索部5からデータファイル名「H.dat」を取得する。なお、パス検索の詳細は後述する。
次に、高レベルインタフェース部24は、ステップS12−1において取得したファイル名のファイルを記憶しているストレージサーバー装置1を検索するため、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS12−2)。keyには、ステップS12−1において取得したファイル名のハッシュ値を設定する。検索インタフェース部22は、図9に示す処理を行い、その実行結果として、ステップS12−1で取得したファイル名のデータファイルが記憶されているストレージサーバー装置1のアドレスをvalue値として得、高レベルインタフェース部22へ出力する。
次に、高レベルインタフェース部24は、get(key)関数の実行結果として得られたvalue値で示されるサーバーアドレスを宛先としてlow_read関数の実行要求を出力する(ステップS12−3)。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_read関数の実行要求を出力する。
このとき、low_read関数の引数fnameにはステップS12−1において取得したファイル名が設定され、引数offset、sizeのそれぞれには、hi_read関数の引数offset、sizeが設定される。low_read関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、引数に基づいてlow_read関数を実行し、ファイル入出力部4からファイル蓄積部32に記憶されているファイルから読み出されたデータを取得すると、取得したデータを引数dataに設定して、実行要求元のストレージサーバー装置1の高レベルインタフェース部24へ出力する。高レベルインタフェース部24は、受信した引数dataを、hi_write関数の実行要求元へ出力する。
以上の動作により、パス名から分散ファイル管理システムで管理されている実際のファイルのデータを読み出すことができる。
[1.3.5.1.2 パス検索の動作]
ここでは、パス検索部5におけるパス検索の動作について説明する。パス検索は、図4において説明した、第1の実施形態によるiノードファイル、ディレクトリファイル、データファイルの関係に基づいて、パス付きユーザ利用ファイル名により指定されたユーザ利用ファイルのデータ本体が設定されているデータファイルのファイル名、つまり、ファイル蓄積部32内のデータファイルに使用されている、オーバーレイネットワーク内でのファイル名を取得するものである。また、パス検索部5は、パス付きディレクトリ名により指定されたディレクトリのディレクトリファイルを取得する。
図13は、パス検索部5によるパス検索処理の流れ図を示す。まず、パス検索部5は、パス解析をルートiノードファイルから開始するため、ダウンロード対象iノードファイルのファイル名FNに、ルートiノードファイルのファイル名「00000.ino」を設定する(ステップS13−1)。パス検索部5は、ファイル名FNのiノードファイルをダウンロードする(ステップS13−2)。このファイルダウンロード処理の詳細は後述する。
パス検索部5は、ダウンロードしたiノードファイルのXMLデータを解析し、<body>タグの要素内容で示されるファイル名、および、<type>タグの要素内容で示されるファイルタイプを取得する(ステップS13−3)。タイプが「normal」、すなわち、ディレクトリでない場合には(ステップS13−4:NO)、<body>タグの要素内容から取得したファイル名が、パス付きユーザ利用ファイル名により特定されるデータファイルのファイル名であるので処理を終了する。
一方、タイプが「directory」の場合には(ステップS13−4:YES)、<body>タグの要素内容から得られたファイル名はディレクトリファイルのファイル名であるため、パス検索部5は、後述するファイルダウンロード処理によって、当該ファイル名のディレクトリファイルをダウンロードする(ステップS13−5)。
次に、パス検索部5は、ダウンロードしたディレクトリファイルのXMLデータを解析し、<entry>タグで示されるディレクトリエントリの中から、<name>タグの要素内容に示されるファイル名が、パス付きユーザ利用ファイル名で示されるディレクトリ名またはファイル名に一致するものを検索する。一致するものがある場合(ステップS13−6:YES)、そのディレクトリエントリの<body>タグの要素内容からiノードファイル名を取得すると、ファイル名FNに設定し(ステップS13−7)、ステップS13−2からの処理を繰り返し行う。このように、ルートディレクトリから順にパス付きユーザ利用ファイル名で指定されたパスを解析し、目的のファイルのファイル名を取得する。
なお、<name>タグの記述内容に示されるファイル名に、パス付きユーザ利用ファイル名で示されるディレクトリ名またはファイル名に一致するものがない場合(ステップS13−6:NO)、処理を終了する。
[1.3.5.1.3 ファイルダウンロードの動作]
図14は、パス検索部5によるファイルのダウンロード処理の流れ図である。同図において、まず、パス検索部5は、ダウンロード対象ファイルのファイル名のハッシュ値をkeyとし、検索インタフェース部22へget(key)関数の実行要求を出力する。get(key)関数の実行要求を受信した検索インタフェース部22は、図9に示す処理を行い、その実行結果として、value値として得、パス検索部5へ出力する。これにより、パス検索部5は、ダウンロード対象ファイルを記憶しているストレージサーバー装置1のアドレスを取得する(ステップS14−1)。
次に、パス検索部5は、get(key)関数の実行結果として得られたvalue値で示されるサーバーアドレスを宛先としてlow_read関数の実行要求を出力する(ステップS14−2)。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_read関数の実行要求を出力する。low_read関数の引数fnameにはダウンロード対象ファイルのファイル名が、引数offset、sizeには、ファイルの先頭から終了までの全体を読み出し対象とするための値が設定される。
low_read関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、引数に基づいてlow_read関数を実行し、ファイル入出力部4からファイル蓄積部32に記憶されているファイルから読み出されたデータを取得すると、取得したデータを引数dataに設定して、実行要求元のストレージサーバー装置1のパス検索部5へ出力する。これにより、パス検索部5は、ダウンロード対象ファイルの全データを取得し、ダウンロード要求元へ出力する。
[1.3.5.1.4 hi_read関数の動作例]
分散ファイル管理システムに図4のファイルが分散して記憶されている場合の、hi_read関数実行処理の動作例を説明する。例えば、図12において、高レベルインタフェース部24が、引数pathにパス付きユーザ利用ファイル名「/work/fish.mxf」が設定されたhi_read関数の実行指示を受信したとする。高レベルインタフェース部24は、パス検索部5へ引数pathとパス検索の実行指示とを出力する(ステップS12−1)。
図13において、パス付きユーザ利用ファイル名「/work/fish.mxf」のパス検索処理を行う場合、まず、パス検索部5は、ダウンロード対象としてルートiノードファイル「00000.ino」を選択し(ステップS13−1)、当該ルートiノードファイルを記憶しているストレージサーバー装置1からダウンロードする(ステップS13−2)。つまり、図14において、パス検索部5は、keyにルートiノードファイル名「00000.ino」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力する。これにより、検索インタフェース部22は、ルートiノードファイルを記憶しているストレージサーバー装置1のサーバーアドレスを示すvalue値を取得し(ステップS14−1)、当該value値が示すサーバーアドレスを宛先として、引数fnameにルートiノードファイル名「00000.ino」を設定したlow_read関数の実行要求を出力する(ステップS14−2)。
ダウンロードしたiノードファイル「00000.ino」の<type>タグの要素内容には「directory」が設定されているため(ステップS13−3、S13−4:YES)、パス検索部5は、<body>タグの要素内容から取得したファイル名「00000.dir」のディレクトリファイルを、当該ディレクトリファイルを記憶しているストレージサーバー装置1からダウンロードする(ステップS13−5)。つまり、図14において、パス検索部5は、keyにディレクトリファイル名「00000.dir」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力する。これにより、検索インタフェース部22は、ディレクトリファイル「00000.dir」を記憶しているストレージサーバー装置1のサーバーアドレスを示すvalue値を取得し(ステップS14−1)、当該value値が示すサーバーアドレスを宛先として、引数fnameにディレクトリファイル名「00000.dir」を設定したlow_read関数の実行要求を出力する(ステップS14−2)。
パス検索部5は、ディレクトリファイル「00000.dir」から、パス付きユーザ利用ファイル名「/work/fish.mxf」におけるルート配下のディレクトリ名「work」が<name>タグの要素内容として記述されている「no="3"」のエントリを検出すると(ステップS13−6:YES)、このディレクトリエントリの<body>タグの要素内容からiノードファイル名「C.ino」を取得する(ステップS13−7)。
パス検索部5は、iノードファイル「C.ino」を、当該iノードファイルを記憶しているストレージサーバー装置1からダウンロードする(ステップS13−2)。iノードファイル「C.ino」の<type>タグの要素内容には「directory」が設定されているため(ステップS13−3、S13−4:YES)、パス検索部5は、<body>タグの要素内容から取得したファイル名「C.dir」のディレクトリファイルをダウンロードする(ステップS13−5)。パス検索部5は、ディレクトリファイル「C.dir」から、パス付きユーザ利用ファイル名「/work/fish.mxf」で示される「work」配下のファイル名「fish.mxf」が<name>タグの要素内容に記述されている「no="2"」のエントリを検出すると(ステップS13−6:YES)、このディレクトリエントリの<body>タグの要素内容からiノードファイル名「F.ino」を取得する(ステップS13−7)。
パス検索部5は、iノードファイル「F.ino」をダウンロードする(ステップS13−2)。iノードファイル「F.ino」の<type>タグの要素内容には「normal」が設定されているため、パス検索部5は、<body>タグの要素内容から取得したファイル名「H.dat」を、パス付きユーザ利用ファイル名「/work/fish.mxf」のデータファイル名と判断し、処理を終了する(ステップS13−3、S13−4:NO)。
図12において、高レベルインタフェース部24は、keyにデータファイル名「H.dat」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力する。これにより、検索インタフェース部22は、データファイル「H.dat」を記憶しているストレージサーバー装置1のサーバーアドレスを示すvalue値を取得する(ステップS12−2)。高レベルインタフェース部24は、検索インタフェース部22が取得したvalue値が示すサーバーアドレスを宛先として、引数fnameにデータファイル名「H.dat」を設定したlow_read関数の実行要求を出力し、データファイル「H.dat」から読み出されたデータを取得すると、hi_read関数の実行要求元へ出力する(ステップS12−3)。
[1.3.5.2 hi_write関数]
[1.3.5.2.1 hi_write関数の動作]
hi_write関数はパス付きユーザ利用ファイル名で示されたユーザ利用ファイルへデータを書き込むインタフェースである。書き込み対象ユーザ利用ファイルがどのようなファイル名のデータファイルによってファイル蓄積部32に記憶されているかを取得する手順はhi_read関数と基本的に同じであるが、ファイルが存在しない場合には、新規にファイルを作成する点が異なる。
図15は、高レベルインタフェース部24によるhi_write関数実行処理の流れ図である。
同図において、まず、高レベルインタフェース部24は、引数pathにより指定された書き込み対象ユーザ利用ファイルがどのようなファイル名のデータファイルによってファイル蓄積部32に記憶されているかを取得するため、パス検索部5へ引数pathとパス検索の実行指示とを出力する(ステップS15−1)。これにより、パス検索部5は、図13に示すパス検索処理を行う。パス検索の結果、データファイルのファイル名が取得できた場合、つまり、パス付きユーザ利用ファイル名で指定されたデータファイルが存在する場合(ステップS15−2:NO)、高レベルインタフェース部24は、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS15−3)。keyには、ステップS15−1において取得したデータファイルのファイル名のハッシュ値を指定する。検索インタフェース部22は、図9に示す処理を行い、その実行結果として、ステップS15−1で取得したファイル名のデータファイルが記憶されているストレージサーバー装置1のアドレスをvalue値として得、高レベルインタフェース部22へ出力する。
続いて、高レベルインタフェース部24は、get(key)関数の実行結果として得られたvalue値で示されるサーバーアドレスを宛先としてlow_write関数の実行要求を出力する(ステップS15−5)。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_write関数の実行要求を出力する。low_write関数の引数fnameにはステップS15−1で取得したファイル名が、引数offset、size、dataのそれぞれには、hi_write関数の引数offset、size、dataが設定される。
一方、パス検索の結果、データファイルのファイル名が取得できなかった場合、つまり、パス付きユーザ利用ファイル名で指定されたファイルが存在しない場合(ステップS15−2:YES)、後述するファイル作成処理をファイル生成削除部6に指示する(ステップS15−4)。ファイル作成処理では、ユーザ利用ファイルのデータ本体を記述したデータファイル、当該データファイルに対応したiノードファイルを適切なストレージサーバー装置1のファイル蓄積部32に新規に登録するとともに、ユーザ利用ファイルが属するディレクトリのディレクトリファイルの更新を行なう。
ファイル作成処理を行なった後、高レベルインタフェース部24は、ステップS15−3において新たにデータファイルを生成したサーバーアドレスを宛先としてlow_write関数の実行要求を出力する(ステップS15−5)。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_write関数の実行要求を出力する。low_write関数の引数fnameにはステップS15−4で生成したデータファイルのファイル名が、引数offset、size、dataのそれぞれには、hi_write関数の引数offset、size、dataが設定される。
[1.3.5.2.2 ファイル新規作成の動作]
ここでは、図15のステップS15−4において実行されるファイル新規作成処理の動作を説明する。ファイルの新規作成処理は、ファイル作成削除部3が実行する。
図16は、ファイル作成削除部3によるファイル作成の処理フローを示す。
同図において、始めに、ファイル生成削除部6は、新規に作成するユーザ利用ファイルが記憶されているディレクトリと、パス検索の実行指示とをパス検索部5に出力する(ステップS16−1)。パス検索部5は、図13に示すパス検索処理を行い、新規に作成するユーザ利用ファイルが登録されるディレクトリのディレクトリファイルをダウンロードし、ファイル生成削除部6へ返送する(ステップS16−2)。
次に、ファイル生成削除部6は、新規に作成するiノードファイルおよびデータファイルの2つのファイルを記憶させるサーバーの決定をサーバー選択部7に指示する(ステップS16−3)。iノードファイルおよびデータファイルはそれぞれ、同じストレージサーバー装置1に記憶しても、異なるストレージサーバー装置1に記憶しても、どちらでもかまわない。本実施形態では、同じストレージサーバー装置1のファイル蓄積部32に記憶するものとして説明する。
具体的には、サーバー選択部7は、ホストテーブル蓄積部31に記憶されているホストテーブルから適当なストレージサーバー装置1を選択することで、ファイルの記憶先を決定する。ストレージサーバー装置1の選択方法には、ホストテーブル内のストレージサーバー装置1を順番に選択する方法(ラウンドロビン方式)や、定期的またはファイルの記憶先を選択する度に各ストレージサーバー装置1から空きディスク容量を受信し、空きディスク容量の多いストレージサーバー装置1を選択する方法(容量選択方式)、ネットワーク的に近くのストレージサーバー装置1を選択する方法など、色々な方法が考えられるが、本実施形態はその方法に依存するものではないため、任意の方法を適用するものとし、詳細は省略する。本実施形態ではラウンドロビン方式を用いるものとする。
続いて、サーバー選択部7によってファイルを記憶すべきストレージサーバー装置1が選択された後、ファイル生成削除部6は、選択されたストレージサーバー装置1のアドレスをホストテーブル蓄積部31から読み出し、読み出したアドレスを宛先としてlow_create_id関数の実行要求を出力する。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_create_id関数の実行要求を出力する。low_create_id関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、low_create_id関数を実行した結果、ID生成部8により生成されたIDを、実行要求元のストレージサーバー装置1のファイル生成削除部6へ返送する(ステップS16−4)。
第1の実施形態では、ファイル生成削除部6は、ステップS16−4において取得したIDを使って新規に作成するファイルのファイル名を作成する(ステップS16−5)。例えば、ステップS16−4において、low_create_id関数を2回実行させてIDを2つ取得し、それぞれのIDを新規に作成するiノードファイル名、データファイル名に用いても良いし、ステップS16−4において、low_create_id関数を1回だけ実行してIDを1つ取得し、そのIDの拡張子を「.ino」,「.dat」などとしてそれぞれiノードファイル名、データファイル名としても良い。
なお、新規に生成したファイルのファイル名が分散ファイル管理システム内で一意に特定できるファイル名であれば、ファイルの生成方法に特に制限されるものではない。例えば、第1の実施形態では新たなiノードファイル、データファイルを記憶させるストレージサーバー装置1において実行されるlow_create_id関数によりIDを生成しているが、ファイル生成削除部6が動作しているストレージサーバー装置1の低レベルインタフェース部23においてlow_create_id関数を実行してIDを生成し、そのIDからファイル名を生成してもよい。
次に、ファイル生成削除部6は、作成したiノードファイル、データファイルのファイル名それぞれを引数fnameに設定したlow_write関数の実行要求を、当該ファイルの記憶先ストレージサーバー装置1へ出力し、実行要求先のストレージサーバー装置1の低レベルインタフェース部23へlow_write関数を実行させる。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_write関数の実行要求を出力する。low_write関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、引数のfnameにより指定されるファイル名のiノードファイル、データファイルをファイル蓄積部32に作成する(ステップS16−6)。なお、この時点では、iノードファイル、データファイルともにファイルの中身は未確定である。
次に、ファイル生成削除部6は、新規に作成するiノードファイル及びデータファイルを記憶部34に作成する(ステップS16−7)。これらのファイルは、現在実行しているファイル生成削除部6のストレージサーバー装置1内に一時的に作成するファイルである。ファイル生成削除部6は、iノードファイルには<type>タグの要素内容に「normal」を、<body>タグの要素内容にステップS16−5で生成したデータファイルのファイル名を設定する。また、ファイル生成削除部6は、ファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、引数dataで示されるデータを書き込んだデータファイルを生成して記憶部34に書き込む。
次に、ファイル生成削除部6は、S16−2でダウンロードしたディレクトリファイルに、新規に作成したファイルのディレクトリエントリを追加し、記憶部34に書き込む(ステップS16−8)。新規に追加するディレクトリエントリの<body>タグの要素内容には、ステップS16−5で生成したiノードファイルのファイル名を、<name>タグの要素内容には引数pathからパス名、つまり、ディレクトリ名を除いたユーザ利用ファイル名を設定する。
ファイル生成削除部6は、ステップS16−7で新規に作成したiノードファイル及びデータファイルと、ステップS16−8で修正したディレクトリファイルの3つのファイルを記憶部34から読み出し、それぞれ後述するアップロード手順によりアップロードする(ステップS16−9〜11)。
[1.3.5.2.3 ファイルアップロードの動作]
図17は、ファイルのアップロードの処理手順を示す。ファイル生成削除部6は、アップロード対象ファイルのファイル名のハッシュ値をkeyとし、検索インタフェース部22へget(key)関数の実行要求を出力する。get(key)関数の実行要求を受信した検索インタフェース部22は、図9に示す処理を行い、その実行結果として、アップロード対象ファイルが記憶されているストレージサーバー装置1のアドレスを示すvalue値を得、パス検索部5へ出力する。これにより、パス検索部5は、アップロード対象ファイルを記憶しているストレージサーバー装置1のアドレスを取得する(ステップS17−1)。
なお、アップロード対象ファイルのアップロード先となるストレージサーバー装置1がすでにわかっている場合、本ステップを省略することができる。例えば、図16のステップS16−9、S16−10から本処理が呼ばれた場合、ステップS16−3において選択されたストレージサーバー装置1がアップロード先となる。また、ステップS16−11から本処理が呼ばれた場合、ステップS16−2においてディレクトリファイルのダウンロードを要求した先のストレージサーバー装置1がアップロード先となる。
次に、ファイル生成削除部6は、get(key)関数の実行結果として得られたvalue値で示されるサーバーアドレスを宛先としてlow_write関数の実行要求を出力する(ステップS17−2)。なお、サーバーアドレスが自ストレージサーバー装置1のアドレスであれば、自ストレージサーバー装置1の低レベルインタフェース部23へlow_write関数の実行要求を出力する。low_write関数の引数fnameにはアップロード対象ファイルのファイル名が、引数dataには新たなファイルの内容全てが設定され、引数offset、sizeには、ファイルの先頭から最後までを新たなファイルの内容全体を書き込むみ対象とするための値が設定される。
low_write関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、引数に基づいてlow_write関数を実行し、ファイル蓄積部32に記憶されている、引数fnameがファイル名であるファイルを、引数dataの内容により上書する。
[1.3.5.2.4 hi_write関数の動作例]
分散ファイル管理システムに図4のファイルが分散して記憶されている場合の、hi_write関数実行処理の動作例を説明する。例えば、図15において、高レベルインタフェース部24が、引数pathにパス付きユーザ利用ファイル名「/work/dog.mxf」が設定されたhi_write関数の実行指示を受信したとする。高レベルインタフェース部24は、パス検索部5へ引数pathとパス検索の実行指示とを出力する(ステップS15−1)。
図13において、パス検索部5は、高レベルインタフェース部24が引数pathにパス付きユーザ利用ファイル名「/work/fish.mxf」が設定されたhi_read関数を受信したときと同様の処理を行い、親のディレクトリのディレクトリファイル「C.dir」をダウンロードする。つまり、パス検索部5は、ルートiノードファイル「00000.ino」をダウンロードし、<body>タグの要素内容に基づいてディレクトリファイル名「00000.dir」をダウンロードする。さらに、パス検索部5は、ディレクトリファイル「00000.dir」から、ディレクトリ名「work」が<name>タグの要素内容として記述されているディレクトリエントリを特定し、その<body>タグの要素内容に基づいてiノードファイル「C.ino」をダウンロードする。パス検索部5は、iノードファイル「C.ino」の<body>タグの要素内容に基づいてディレクトリファイル「C.dir」をダウンロードする。ここでは、ディレクトリファイル「C.dir」のダウンロードを要求した先のストレージサーバー装置1をストレージサーバー装置1aとする。
パス検索部5は、ディレクトリファイル「C.dir」に、パス付きユーザ利用ファイル名「/work/dog.mxf」で示される「work」配下のファイル名「dog.mxf」がいずれのディレクトリエントリの<name>タグの要素内容にも記述されていないため(ステップS13−6:NO)、処理を終了する。
ここで、図15において、ファイル生成削除部6は、ファイルが存在しないと判断し(ステップS15−2)、ファイル作成を行なう(ステップS15−3)。
図16において、ファイル生成削除部6は、新規に作成するユーザ利用ファイルが記憶されているディレクトリ「/work」のディレクトリファイル「C.dir」がすでに読み出されているため、ステップS16−1及びS16−2の処理を省略し、新規に作成するiノードファイルおよびデータファイルの2つのファイルを記憶させるストレージサーバー装置1の決定をサーバー選択部7に指示する(ステップS16−3)。ここでは、ファイルを記憶させるストレージサーバー装置1をストレージサーバー装置1bとする。
続いて、ファイル生成削除部6は、ホストテーブル蓄積部31から読み出したストレージサーバー装置1bのアドレスを宛先としてlow_create_id関数の実行要求を出力する。ストレージサーバー装置1bの低レベルインタフェース部23は、生成したID「H」を返送する(ステップS16−4)。ファイル生成削除部6は、iノードファイル名を「H.ino」、データファイル名を「H.dat」とする(ステップS16−5)。
ファイル生成削除部6は、ストレージサーバー装置1bへ引数fnameに「H.ino」を設定したlow_write関数の実行要求と、引数fnameに「H.dat」を設定したlow_write関数の実行要求を出力する。ストレージサーバー装置1bの低レベルインタフェース部23は、ファイル蓄積部32にファイル「H.ino」及び「H.dat」を新規に生成する(ステップS16−6)。
次に、ファイル生成削除部6は、<type>タグの要素内容に「normal」を、<body>にデータファイル名である「H.dat」を設定したiノードファイル「H.ino」を生成し、ファイル生成削除部6の備える記憶部に書き込む。さらに、ファイル生成削除部6は、ファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、引数dataで示されるデータを書き込んだデータファイル「H.dat」を生成し、ファイル生成削除部6の備える記憶部34に書き込む(ステップS16−7)。
次に、ファイル生成削除部6は、ディレクトリファイル「C.dir」に、新たな属性値no="4"を割当てた<entry no="4">タグを追加し、このディレクトリエントリ内の<body>タグの要素内容に、生成したiノードファイルのファイル名「H.ino」を書き込むとともに、<name>タグの要素内容に、引数path「/work/fish.mxf」からパスを除いたユーザ利用ファイル名「fish.mxf」を設定し、記憶部34に書き込む(ステップS16−8)。
ファイル生成削除部6は、記憶部34から読み出したiノードファイル「H.ino」及びデータファイル「H.dat」をストレージサーバー装置1bにアップロードし(ステップS16−9、S16−10)、更新したディレクトリファイル「C.dir」をストレージサーバー装置1aにアップロードする(ステップS16−11)。
具体的には、図17のステップS17−2において、ファイル生成削除部6は、引数fnameに「H.ino」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶しているiノードファイル「H.ino」のデータ全体を書き込み対象とする値を設定したlow_write関数の実行要求と、引数fnameに「H.dat」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶しているデータファイル「H.dat」のデータ全体を書き込み対象とする値を設定したlow_write関数の実行要求をストレージサーバー装置1bへ出力する。さらに、ファイル生成削除部6は、引数fnameに「C.dir」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶している更新後のディレクトリファイル「C.dir」のデータ全体、あるいは、ステップS16−8において変更された箇所のみを書き込み対象とする値を設定したlow_write関数の実行要求をストレージサーバー装置1aへ出力する。
[1.3.5.3 hi_delete関数]
[1.3.5.3.1 hi_delete関数の動作]
次に高レベルインタフェース部24におけるhi_delete関数の動作を説明する。hi_delete関数は、パス付きユーザ利用ファイル名で示されたユーザ利用ファイルを削除するインタフェースである。高レベルインタフェース部24は、hi_delete関数の実行要求を受信すると、ファイル生成削除部6へファイル削除を指示する。
図18は、ファイル生成削除部6によるファイル削除処理の流れ図である。
同図において、始めに、ファイル生成削除部6は、引数pathにより指定されたパス付きユーザ利用ファイル名から、削除対象ユーザ利用ファイルが属する親ディレクトリのパスを取得し、この取得したパスのパス検索をパス検索部5に指示する(ステップS18−1)。これにより、パス検索部5は、図13に示すパス検索処理を行う。このパス検索において、パス検索部5は、ユーザ利用ファイルが属するディレクトリのディレクトリファイルをダウンロードする(ステップS18−2)。
次に、ファイル生成削除部6は、ダウンロードしたディレクトリファイルのXMLデータを解析し、パス付きユーザ利用ファイル名におけるユーザ利用ファイルのファイル名が<name>タグの要素内容として記述されているディレクトリエントリを検索し、その<body>タグの要素内容からiノードファイルのファイル名を取得する(ステップS18−3)。
ファイル生成削除部6は、ステップS18−3において読み出したiノードファイルの削除を実行する(ステップS18−4)。このときのiノードファイルの削除は、後述するように、iノードファイルの削除だけでなく、当該iノードファイルに紐付けされるデータファイルの削除も行う。
続いて、ファイル生成削除部6は、ステップS18−2においてダウンロードしたディレクトリファイルのXMLデータから、削除対象ファイルのディレクトリエントリを削除し(ステップS18−5)、修正したディレクトリファイルを、当該ディレクトリファイルをダウンロードした元のストレージサーバー装置1へアップロードする(ステップS18−6)。
以上の動作により、指定されたパスのファイルが削除される。
[1.3.5.3.2 iノードファイルの削除の動作]
次に、図18のステップS18−4において実行されるiノードファイルの削除動作を説明する。図19は、ファイル生成削除部6によるiノードファイル削除処理の流れ図である。
同図において、まず、ファイル生成削除部6は、削除対象のiノードファイルを記憶しているストレージサーバー装置1を検索するため、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS19−1)。keyには、削除対象のiノードファイルのファイル名のハッシュ値を設定する。
次に、ファイル生成削除部6は、get(key)関数の実行結果として得られたvalue値で示されるサーバーアドレスを宛先として、図14の処理を行い、削除対象のiノードファイルをダウンロードする(ステップS19−2)。
ファイル生成削除部6は、取得したiノードファイルのXMLデータを解析し、<body>タグで示されるファイル名、および、<type>タグの要素内容で示されるファイルタイプを取得する(ステップS19−3)。ファイルタイプが「normal」、すなわち、データファイルである場合(ステップS19−4:normal)、ファイル生成削除部6は、ステップS19−3において読み出したデータファイルのファイル名のハッシュ値をkeyに設定し、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS19−7)。これにより、ファイル生成削除部6は、当該データファイルを記憶しているストレージサーバー装置1のアドレスを示すvalue値を取得する。
ファイル生成削除部6は、ステップS19−7において取得したvalue値で示されるサーバーアドレスを宛先として、ステップS19−7で取得したデータファイル名を引数fnameに設定したlow_delete関数の実行指示を出力する。low_delete関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、ファイル入出力部4に指示し、引数fnameのデータファイルをファイル蓄積部32から削除する(ステップS19−8)。
さらに、ファイル生成削除部6は、削除対象のiノードファイルのファイル名を引数fnameに設定したlow_delete関数の実行指示を、当該iノードファイルのダウンロードを要求した先のストレージサーバー装置1へ出力する。low_delete関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、ファイル入出力部4に指示し、引数fnameで示されるiノードファイルをファイル蓄積部32から削除する(ステップS19−9)。上記処理により、最終的に、S19−1においてiノードファイルのダウンロードを要求した先のストレージサーバー装置1でlow_delete関数が実行され、iノードファイルが削除される。
一方、ステップS19−4において、ファイルタイプがディレクトリ「directory」である場合(ステップS19−4:directory)、ファイル生成削除部6は、図14に示す処理を行い、ステップS19−3において読み出したファイル名のディレクトリファイルをダウンロードする(ステップS19−5)。ファイル生成削除部6は、ダウンロードしたディレクトリファイルのエントリから、カレントディレクトリ「.」、親のディレクトリ「..」が設定されているディレクトリエントリ以外の各ディレクトリエントリ内の<body>タグの要素内容からiノードファイルのファイル名を読み出す。そして、読み出したそれぞれのiノードファイルについて、再帰的にステップS19−1からのiノードファイルの削除の処理を再帰的な実行を起動する(ステップS19−6)。その後、ファイル生成削除部6は、ステップS19−7から処理を行なう。つまり、ファイル生成削除部6は、ステップS19−5においてダウンロードしたディレクトリァイルのファイル名のハッシュ値をkeyに設定し、検索インタフェース部22にget(key)関数の実行要求を出力してvalue値を取得し(ステップS19−7)、取得したvalue値で示されるサーバーアドレスを宛先として、ステップS19−7で取得したディレクトリファイル名を引数fnameに設定したlow_delete関数の実行指示を出力する。さらに、ファイル生成削除部6は、削除対象のiノードファイルのファイル名を引数fnameに設定したlow_delete関数の実行指示を、当該iノードファイルのダウンロードを要求した先のストレージサーバー装置1へ出力する(ステップS19−9)。なお、ステップS19−5において、ディレクトリファイルのダウンロードを要求した先のストレージサーバー装置1がわかっている場合、ステップS19−7の処理は省略することができる。
[1.3.5.3.3 hi_delete関数の動作例]
分散ファイル管理システムに図4のファイルが分散して記憶されている場合の、hi_delete関数実行処理の動作例を説明する。例えば、図18において、高レベルインタフェース部24が、引数pathにパス付きディレクトリ名「/work/cat.mxf」が設定されたhi_delete関数の実行指示を受信したとする。ファイル生成削除部6は、パス検索部5へ、ユーザ利用ファイル「cat.mxf」が属する親ディレクトリ「/work」のパス検索の実行指示を出力する(ステップS18−1)。
パス検索部5は、図13に示す処理により、hi_write関数を受信したときと動作例と同様の処理を行い、親のディレクトリ「/work」のディレクトリファイル「C.dir」をダウンロードする(ステップS18−2)。
パス検索部5は、ディレクトリファイル「C.dir」から、パス付きユーザ利用ファイル名「/work/cat.mxf」で示される「work」配下のファイル名「cat.mxf」が<name>タグの要素内容に記述されている「no="3"」のディレクトリエントリを検出すると、このディレクトリエントリの<body>タグの要素内容からiノードファイル名「G.ino」を取得する(図18:ステップS18−3)。
次に、ファイル生成削除部6は、ステップS18−3において読み出したiノードファイル「G.ino」の削除を実行する(ステップS18−4)。
具体的には、図19に示すように、ファイル生成削除部6は、keyにiノードファイルのファイル名「G.ino」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS19−1)。これにより、iノードファイル「G.ino」を記憶するストレージサーバー装置1のサーバーアドレスを示すvalue値が得られる。ファイル生成削除部6は、value値が示すサーバーアドレスを宛先としてストレージサーバー装置1へアクセスし、図14の処理によりiノードファイル「G.ino」をダウンロードする(ステップS19−2)。ファイル生成削除部6は、取得したiノードファイル「G.ino」からファイル名「G.dat」、および、ファイルタイプ「normal」を取得する(ステップS19−3)。ファイルタイプが「normal」であるため(ステップS19−4:normal)、ファイル生成削除部6は、データファイル名「G.dat」のハッシュ値をkeyに設定し、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS19−7)。これにより、ファイル生成削除部6は、データファイル「G.dat」を記憶しているストレージサーバー装置1のアドレスを示すvalue値を取得する。
ファイル生成削除部6は、取得したvalue値で示されるサーバーアドレスを宛先としてデータファイル名「G.dat」を引数fnameに設定したlow_delete関数の実行指示を出力する。low_delete関数の実行要求を受信した自ストレージサーバー装置1または他のストレージサーバー装置1の低レベルインタフェース部23は、ファイル入出力部4に指示し、引数fnameのデータファイルをファイル蓄積部32から削除する(ステップS19−8)。
さらに、ファイル生成削除部6は、削除対象のiノードファイルのファイル名「G.ino」を引数fnameに設定したlow_delete関数の実行指示を、ステップS18−3においてダウンロードを要求した先のストレージサーバー装置1へ出力する。low_delete関数の実行要求を受信したストレージサーバー装置1の低レベルインタフェース部23は、ファイル入出力部4に指示し、引数fnameのiノードファイル「G.ino」をファイル蓄積部32から削除する(ステップS19−9)。
図18において、ファイル生成削除部6は、ステップS18−2においてダウンロードしたディレクトリファイル「C.dir」から、削除対象ファイル「G.ino」が含まれている<entry no="3">のディレクトリエントリを削除し(ステップS18−5)、エントリ削除後のディレクトリファイル「C.dir」を、当該ディレクトリファイルのダウンロードを要求した先のストレージサーバー装置1へアップロードする(ステップS18−6)。
[1.3.5.4 hi_make_dir関数]
[1.3.5.4.1 hi_make_dir関数の動作]
次に高レベルインタフェース部24におけるhi_make_dir関数の動作を説明する。hi_make_dir関数は、パス付きディレクトリ名で示されたディレクトリを新規に作成するインタフェースである。高レベルインタフェース部24は、hi_make_dir関数の実行要求を受信すると、ファイル生成削除部6へディレクトリ作成を指示する。
図20は、ファイル生成削除部6によるディレクトリファイル作成処理の流れ図である。
同図において、始めに、ファイル生成削除部6は、新規ディレクトリが配下に作成されるディレクトリ、つまり、新規ディレクトリの親となるディレクトリのパス検索の実行指示をパス検索部5に出力する(ステップS20−1)。パス検索部5は、図13に示すパス検索処理を行い、新規に作成するディレクトリの親となるディレクトリのディレクトリファイルをダウンロードし、ファイル生成削除部6へ返送する(ステップS20−2)。
次に、ファイル生成削除部6は、図16におけるステップS16−3〜S16−6と同様の処理を行う。ただし、図16におけるデータファイルは、ここでは、ディレクトリファイルとする。つまり、新規に作成するiノードファイルおよびディレクトリファイルの2つのファイルを保管するストレージサーバー装置1の決定をサーバー選択部7により指示し(ステップS20−3)、選択されたストレージサーバー装置1の低レベルインタフェース部23のlow_create_id関数を実行し(ステップS20−4)、新規のディレクトリファイルとiノードファイルのファイル名を決定する(ステップS20−5)。ここでは、ステップS20−4において、low_create_id関数を1回だけ実行してIDを1つ取得し、そのIDの拡張子を「.ino」,「.dir」としてそれぞれiノードファイル名、ディレクトリファイル名とする。そして、決定したファイル名でiノードファイルとディレクトリファイルを作成するために、S20−3で選択したサーバーのlow_write関数を実行する(ステップS20−6)。
次に、ファイル生成削除部6は、新規のiノードファイルとディレクトリファイルを一時的なファイルとして作成し、記憶部34に記憶する(ステップS20−7)。
新規のiノードファイルの<type>タグの要素内容には「directory」を、<body>タグの要素内容にはS20−5で作成したディレクトリファイルのファイル名を設定する。新規のディレクトリファイルには、<name>タグの要素内容にカレントディレクトリ「.」を、<body>タグの要素内容にS20−5で作成したiノードファイルのファイル名を設定したディレクトリエントリ、及び、<name>タグの要素内容に親ディレクトリ「..」、<body>タグの要素内容にS20−2でダウンロードした親ディレクトリのiノードファイル名を設定したディレクトリエントリを記述する。
次に、S20−2でダウンロードしたディレクトリファイルに、新規に作成するディレクトリのディレクトリエントリを追加し、記憶部34に書き込む(ステップS20−8)。新規に追加するディレクトリエントリの<body>タグの要素内容には、ステップS20−5で生成したiノードファイルのファイル名を、<name>タグの要素内容には引数pathから親のディレクトリを除いた新規に追加するディレクトリ名を設定する。
以上の動作の後、ステップS20−7で新規に作成したiノードファイル及びディレクトリファイルと、ステップS20−8で修正した親のディレクトリのディレクトリファイルを記憶部34から読み出し、それぞれを図17の手順によりアップロードする(ステップS20−9〜11)。iノードファイル及びディレクトリファイルのアップロード先は、ステップS20−6において、iノードファイル及びディレクトリファイルを新規に生成したストレージサーバー装置1であり、ディレクトリファイルのアップロード先は、ステップS20−2において当該ディレクトリファイルのダウンロードを要求した先のストレージサーバー装置1である。
[1.3.5.4.2 hi_make_dir関数の動作例]
分散ファイル管理システムに図4ファイルが分散して記憶されている場合の、hi_read関数実行処理の動作例を説明する。例えば、図20において、高レベルインタフェース部24が、引数pathにパス付きディレクトリ名「/work/tmp」が設定されたhi_make_dir関数の実行指示を受信したとする。ファイル生成削除部6は、新たなディレクトリの親ディレクトリのパスと、パス検索の実行指示とをパス検索部5へ出力する(ステップS20−1)。
パス検索部5は、図13に示す処理により、hi_write関数を受信したときの動作例と同様の処理を行い、親のディレクトリ「/work」のディレクトリファイル「C.dir」をダウンロードする(ステップS20−2、ステップS13−5)。ここでは、ディレクトリファイル「C.dir」を要求した先のストレージサーバー装置1をストレージサーバー装置1aとする。
パス検索部5は、ディレクトリファイル「C.dir」に、パス付きユーザ利用ファイル名「/work/tmp」で示される「/work」配下のディレクトリ名「tmp」がいずれの<name>タグの要素内容にも記述されていないため(ステップS13−6:NO)、処理を終了する(ステップS13−8)。
ファイル生成削除部6は、新規に作成するiノードファイルおよびデータファイルの2つのファイルを記憶させるストレージサーバー装置1の決定をサーバー選択部7に指示する(ステップS20−3)。ここでは、ファイルを記憶させるストレージサーバー装置1をストレージサーバー装置1bとする。ファイル生成削除部6は、ホストテーブル蓄積部31から読み出したストレージサーバー装置1bのアドレスを宛先としてlow_create_id関数の実行要求を出力する。ストレージサーバー装置1bの低レベルインタフェース部23は、生成したID「J」を返送する(ステップS20−4)。ファイル生成削除部6は、iノードファイル名を「J.ino」、ディレクトリファイル名を「J.dir」とする(ステップS20−5)。
ファイル生成削除部6は、ストレージサーバー装置1bへ引数fnameに「J.ino」を設定したlow_write関数の実行要求と、引数fnameに「J.dir」を設定したlow_write関数の実行要求を出力する。ストレージサーバー装置1bの低レベルインタフェース部23は、ファイル蓄積部32にファイル「J.ino」及び「J.dir」を新規に生成する(ステップS20−6)。
ファイル生成削除部6は、<type>タグの要素内容に「directory」を、<body>の要素内容にディレクトリファイル名である「J.dir」を設定したiノードファイル「J.ino」を生成し、ファイル生成削除部6の備える記憶部34に書き込む。さらに、ファイル生成削除部6は、<name>タグの要素内容にカレントディレクトリ「.」を、<body>タグの要素内容にS20−5で作成したiノードファイルのファイル名「J.ino」を設定した<entry "no=0">のディレクトリエントリ、及び、<name>タグの要素内容に親ディレクトリ「..」、<body>タグの要素内容にS20−2でダウンロードした親ディレクトリのiノードファイル名「C.ino」を設定した<entry "no=1">のディレクトリエントリを記述したディレクトリファイル「J.dir」を作成し、記憶部34に書き込む(ステップS20−7)。
ファイル生成削除部6は、親ディレクトリのディレクトリファイル「C.dir」に、新たな属性値no="4"を割当てた<entry no="4">タグを追加し、このディレクトリエントリ内の<body>タグの要素内容に、生成したiノードファイルのファイル名「J.ino」を書き込むとともに、<name>タグの要素内容に、引数path「/work/tmp」から親のパスを除いたディレクトリ名「tmp」を設定し、記憶部34に書き込む(ステップS20−8)。
ファイル生成削除部6は、記憶部34から読み出したiノードファイル「J.ino」及びデータファイル「J.dir」をストレージサーバー装置1bにアップロードし(ステップS20−9、S20−10)、更新したディレクトリファイル「C.dir」をストレージサーバー装置1aにアップロードする(ステップS20−11)。
具体的には、図17のステップS17−2において、ファイル生成削除部6は、引数fnameに「J.ino」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶しているiノードファイル「J.ino」のデータ全体を書き込み対象とする値を設定したlow_write関数の実行要求と、引数fnameに「J.dir」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶しているディレクトリファイル「J.dir」のデータ全体を書き込み対象とする値を設定したlow_write関数の実行要求をストレージサーバー装置1bへ出力する。さらに、ファイル生成削除部6は、引数fnameに「C.dir」を設定し、引数offset、size、dataに、ファイル生成削除部6の備える記憶部34に記憶している更新後のディレクトリファイル「C.dir」のデータ全体、あるいは、ステップS20−8において変更された箇所のみを書き込み対象とする値を設定したlow_write関数の実行要求をストレージサーバー装置1aに出力する。
[1.3.5.5 hi_delete_dir関数]
[1.3.5.5.1 hi_delete_dir関数処理の動作]
次に高レベルインタフェース部24のhi_delete_dir関数の動作の説明をする。hi_delete_dir関数は、指定されたパスのディレクトリを削除するインタフェースである。高レベルインタフェース部24は、hi_delete_dir関数の実行要求を受信すると、ファイル生成削除部6へディレクトリ削除を指示する。ここでは、ディレクトリの削除が実行されると、そのディレクトリに含まれるファイルおよびディレクトリもすべて削除されるものとして説明する。
図21は、ファイル生成削除部6によるディレクトリ削除処理の流れ図である。
同図において、始めに、ファイル生成削除部6は、引数pathにより指定される削除対象ディレクトリの親のディレクトリのパス検索をパス検索部5に指示する(ステップS21−1)。パス検索部5は、図13に示すパス検索処理を行い、削除対象ディレクトリの親ディレクトリのディレクトリファイルをダウンロードし、ファイル生成削除部6へ返送する(ステップS21−2)。
次に、ファイル生成削除部6は、ダウンロードしたディレクトリファイルのXMLデータを解析し、削除対象のディレクトリのディレクトリ名が<name>タグの要素内容として記述されているディレクトリエントリを検索し、その<body>タグの要素内容から削除対象ディレクトリのiノードファイル名を取得する(ステップS21−3)。
次に、ファイル生成削除部6は、ステップS21−3において取得したiノードファイルについて、図19に示す削除の処理を実行する(ステップS21−4)。図19に示す処理で説明したように、iノードファイル削除を実行することで、指定されたディレクトリに関するファイルが分散ファイル管理システムから削除される。
最後に、ファイル生成削除部6は、ステップS21−1においてダウンロードした親ディレクトリファイルから、削除対象のディレクトリのディレクトリエントリを削除し(ステップS21−5)、この削除を行なったディレクトリファイルをアップロードする(ステップS21−6)。
[1.3.5.5.2 hi_delete_dir関数の動作例]
分散ファイル管理システムに図4のファイルが分散して記憶されている場合の、hi_read関数実行処理の動作例を説明する。例えば、図21において、高レベルインタフェース部24が、引数pathにパス付きディレクトリ名「/work」が設定されたhi_delete_dir関数の実行指示を受信したとする。ファイル生成削除部6は、「/work」が属する親ディレクトリ「/」(ルートディレクトリ)のパス検索の実行をパス検索部5へ指示する(ステップS21−1)。
パス検索部5は、図13に示す処理により、ルートiノードファイル「00000.ino」をストレージサーバー装置1からダウンロードし、<body>タグの要素内容に基づいてディレクトリファイル名「00000.dir」をストレージサーバー装置1からダウンロードする(ステップS21−2)。さらに、パス検索部5は、ディレクトリファイル「00000.dir」から、パス付きディレクトリ名で示されるディレクトリ名「work」が<name>タグの要素内容として記述されているディレクトリエントリを特定すると、その<body>タグの要素内容からiノードファイル名「C.ino」の取得する(ステップS21−3)。
続いて、ファイル生成削除部6は、iノードファイル名「C.ino」の削除を行なう。
具体的には、ファイル生成削除部6は、図19に示す処理により、keyにiノードファイルのファイル名「C.ino」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力する(ステップS19−1)。ファイル生成削除部6は、図14の処理により、value値が示すサーバーアドレスを宛先としてストレージサーバー装置1へlow_write関数の実行要求を出力し、iノードファイル「C.ino」をダウンロードする(ステップS19−2)。
ファイル生成削除部6は、取得したiノードファイル「C.ino」からファイル名「C.dir」、および、ファイルタイプ「directory」を取得する(ステップS19−3)。ファイルタイプが「directory」であるため(ステップS19−4:directory)、ファイル名「C.dir」のディレクトリファイルをダウンロードする。つまり、図14の処理によりファイル生成削除部6は、keyにiノードファイルのファイル名「C.dir」のハッシュ値を設定し、検索インタフェース部22にget(key)関数の実行要求を出力し、返送されたvalue値が示すサーバーアドレスを宛先としてストレージサーバー装置1へlow_write関数の実行要求を出力して、ディレクトリファイル「C.dir」をダウンロードする(ステップS19−5)。
ファイル生成削除部6は、カレントディレクトリ「.」、親のディレクトリ「..」が設定されているディレクトリエントリ以外の各ディレクトリエントリ<entry no="2">、<entry no="3">内の<body>タグの要素内容からiノードファイルのファイル名「F.ino」、「G.ino」を読み出す。そして、読み出したそれぞれのiノードファイルについて、再帰的にステップS19−1からのiノードファイルの削除処理の再帰的な実行を起動する(ステップS19−6)。
iノードファイル「F.ino」について、ステップS19−1からの処理が起動された場合、ファイル生成削除部6は、keyにファイル名「F.ino」のハッシュ値を設定して検索インタフェース部22にget(key)関数の実行要求を出力し、返送されたvalue値により示されるサーバーアドレスを宛先として引数fnameに「F.ino」を設定したlow_readの実行要求を出力して、iノードファイル「F.ino」をダウンロードする(ステップS19−2)。ファイル生成削除部6は、取得したiノードファイル「F.ino」からファイル名「F.dat」、および、ファイルタイプ「normal」を取得する(ステップS19−3)。ファイルタイプが「normal」であるため(ステップS19−4:normal)、ファイル生成削除部6は、データファイル名「F.dat」のハッシュ値をkeyに設定して検索インタフェース部22にget(key)関数の実行要求を出力し(ステップS19−7)、返送されたvalue値により示されるサーバーアドレスを宛先として、引数fnameにデータファイル名「F.dat」を設定したlow_delete関数の実行要求を出力し、データファイル「F.dat」を削除する(ステップS19−8)。続いて、引数fnameにiノードファイル名「F.ino」を設定したlow_delete関数の実行指示を、iノードファイル「F.ino」のダウンロードを要求した先のストレージサーバー装置1へ出力し、iノードファイル「F.ino」を削除する(ステップS19−9)。
iノードファイル「G.ino」についてもiノードファイル「F.ino」と同様の処理を行い、iノードファイル「G.ino」とデータファイル「G.dat」を削除する。
ファイル生成削除部6は、iノードファイル「F.ino」、「G.ino」について削除処理の再帰的な実行を起動した後、データファイル「C.dir」のダウンロードを要求した先のストレージサーバー装置1へ引数fnameにディレクトリファイル名「C.dir」を設定したlow_delete関数の実行要求を出力し、ディレクトリファイル「C.dir」を削除する(ステップS19−8)。続いて、ファイル生成削除部6は、iノードファイル「C.ino」のダウンロードを要求した先のストレージサーバー装置1へ、引数fnameにiノードファイル名「C.ino」を設定したlow_delete関数の実行指示を出力し、iノードファイル「C.ino」を削除する(ステップS19−9)。
上記のように、iノードファイルの削除を実行した後、ファイル生成削除部6は、親ディレクトリファイル「00000.dir」から、削除対象のディレクトリの名前「work」が記述されているディレクトリエントリ<entry no="3">〜</entry>までの行を削除し(ステップS21−5)、この削除を行なったディレクトリファイル「00000.dir」を、当該ディレクトリファイルのダウンロードを要求した先のストレージサーバー装置1へアップロードする(ステップS21−6)。
[1.4 効果]
以上、説明した第1の実施形態による分散ファイル管理システムにより、当該分散ファイル管理システムを構成する複数のストレージサーバー装置1によって、ファイルおよびディレクトリの分散管理が可能となり、多数のファイルおよびディレクトリを一元的に管理するサーバーが不要である。従って、多数のユーザから同時にファイルへのアクセスがあった場合でも特定のサーバーに負荷が集中することがなく、また、多くのファイルやディレクトリが作成された場合でも、各ストレージサーバー装置1が管理するファイルは少なくてよいため、ファイルの検索に要する時間が長くならないようにすることができる。また、分散ファイル管理システムで保持するファイルは、各ストレージサーバー装置1の外部インタフェース部2を介して操作することが可能となり、ユーザ利用ファイル名によって指定されたファイルや、ディレクトリ名によって指定されたディレクトリに対する操作を行なうことができる。
[2. 第2の実施形態]
上述した第1の実施形態の図13に示すパス検索では、iノードファイルやディレクトリファイル等のファイルが必要となる度に、当該ファイルを記憶しているストレージサーバー装置1からダウンロードを行なっていた。一方、第2の実施形態は、ストレージサーバー装置1は、パス検索において、ダウンロードしたiノードファイルやディレクトリファイルを記憶しておき、更新を検出するまで、記憶しているダウンロードファイルを用いて処理を実行するキャッシュを行い、パス検索動作を高速化するものである。以下、第1の実施形態との差分を説明する。
[2.1 構成]
図22は、第2の実施形態による分散ファイル管理システムのブロック図であり、図1に示す第1の実施形態による分散ファイル管理システムと同一の部分には同一の符号を付し、その説明を省略する。この図に示す分散ファイル管理システムが第1の実施形態と異なる点は、ストレージサーバー装置1がキャッシュ蓄積部35を備える点である。キャッシュ蓄積部35は、ハードディスク装置や半導体メモリなどで実現され、ダウンロードしたiノードファイル及びディレクトリファイルを記憶する。
[2.2 データ構成]
図23は、第2の実施形態によるキーテーブルの構成を示す図である。同図に示すように、キーテーブルには、ファイル名のハッシュ値を示すkeyと、当該ファイル名のファイルを蓄積しているストレージサーバー装置1のアドレス及び当該ファイルのバージョン番号とを示すvalueと、登録日時とを対応づけた複数のレコードからなる。
図24は、第2の実施形態によるput(key, value)関数のパラメータ構造を示す図である。同図において、keyは第1の実施形態と同様にファイル名のキャッシュ値が設定される。一方、valueは、サーバーアドレスと、ファイルのバージョン番号とからなる。
[2.3 ストレージサーバー装置1の動作]
[2.3.1 low_write関数の動作]
キャッシュされたファイルを使うためには、すでにダウンロードしたファイルが最新のファイルと同じものかどうかを判断する必要がある。そのため、第2の実施形態では、ファイルの登録におけるvalue値にファイルのバージョン番号を追加する。第2の実施形態では、低レベルインタフェース部23のlow_write関数が実行されるたびに、ファイルのバージョン番号に1を加算する。
第1の実施形態において、低レベルインタフェース部23におけるlow_write関数の処理は、ファイル蓄積部32に記憶されたファイルにデータを書き込む動作のみであった。第2の実施形態においては、low_write関数の実行要求があると、ファイル蓄積部32内の指定したファイルのデータを書き換え、次に、バージョン番号に1を加算して、登録インタフェース部21のput(key, value)を実行しファイルの再登録を行う。詳細な処理を以下に示す。
図25は、低レベルインタフェース部23によるlow_write関数実行処理の流れ図を示す。同図において、低レベルインタフェース部23が、自ストレージサーバー装置1の各部または他のストレージサーバー装置1から、low_write関数の実行要求を受信すると、ファイル入出力部4は、引数fnameで示されるファイル蓄積部32内のファイルを特定する。
引数fnameで示されるファイルがファイル蓄積部32に存在しない場合(ステップS25−1:YES)、ファイル入出力部4は、新たにfnameで指定された名前のファイルをファイル蓄積装置32に作成する。そして、ファイル入出力部4は、作成したファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、dataで示されるデータを書き込む(ステップS25−2)。さらに、低レベルインタフェース部23は、新たに作成したファイルに対応づけて、初期値のバージョン番号をファイル蓄積部32に書き込むようファイル入出力部4へ指示する(ステップS25−3)。低レベルインタフェース部23は、引数fnameのハッシュ値をkeyに、自ストレージサーバー装置1のアドレス及びステップS25−3で書き込んだバージョン番号をvalueに設定し、put(key, value)の実行要求を登録インタフェース部21へ出力する(ステップS25−4)。登録インタフェース部21が、第1の実施形態の図7と同様の登録処理を行うことによって、所在管理テーブル蓄積部33内のキーテーブルに、(key, value)が登録される。
一方、引数fnameで示されるファイルがファイル蓄積部32に存在する場合(ステップS25−1:NO)、ファイル入出力部4は、引数fnameをファイル名とするファイルの先頭から、引数offsetで示されるバイト数だけ進んだ位置を書き込み開始位置とし、この書き込み開始位置から引数offsetで示されるバイト数分、dataで示されるデータを書き込む(ステップS25−5)。続いて、低レベルインタフェース部23は、書き込みを行なったファイルに対応付けてファイル蓄積部32に記憶されているバージョン番号を、1加算した値の番号に更新するようファイル入出力部4へ指示する(ステップS25−6)。低レベルインタフェース部23は、引数fnameのハッシュ値をkeyに、自ストレージサーバー装置1のアドレス及びステップS25−6で書き込んだバージョン番号をvalueに設定し、put(key, value)の実行要求を登録インタフェース部21へ出力する(ステップS25−4)。これにより、所在管理テーブル蓄積部33内のキーテーブルに、(key, value)が登録される。
[2.3.2 パス検索の動作]
第2の実施形態では、パス検索部5におけるパス検索動作は、図13で説明した第1の実施形態の動作と全く同じである。但し、パス検索で実行されるダウンロードの動作において、キャッシュ蓄積部35内のファイルを使うかどうかのチェックが必要であるため、第1の実施形態の図14に示すダウンロードの動作を、図26で示す動作に変更する。
図26は、第2の実施形態によるファイルダウンロード処理の流れ図を示す。
始めに、パス検索部5は、ダウンロード対象ファイルのファイル名のハッシュ値をkeyとし、検索インタフェース部22へget(key) 関数の実行要求を出力する。get(key)関数の実行要求を受信した検索インタフェース部22は、図9に示す処理を行い、その実行結果として取得したvalue、つまり、ダウンロード対象のファイルを記憶しているストレージサーバー装置1のサーバーアドレス、および、ファイルのバージョン番号を取得する(ステップS26−1)。
次に、パス検索部5は、キャッシュ蓄積部35にダウンロード対象ファイルのファイル名と同じファイル名のファイルが記憶されているかにより、ダウンロード済みかどうかをチェックする(ステップS26−2)。すでにダウンロード済み(ステップS26−2:YES)の場合には、キャッシュ蓄積部35に記憶されているダウンロード済みファイルのバージョン番号と、ステップS26−1において取得したバージョン番号とが同じであるかを判断する(ステップS26−3)。バージョン番号が同じ場合には(ステップS26−3:YES)、キャッシュ蓄積部35に記憶されているダウンロードファイルを読み出して用いる。
一方、キャッシュ蓄積部35にダウンロードファイルが存在しないか(ステップS26−2:No)、または、ダウンロード済みファイルのバージョン番号がステップS26−1において取得したバージョン番号より古い場合(ステップS26−3:NO)には、第1の実施形態と同様に、ダウンロード対象ファイルを記憶しているストレージサーバー装置1にlow_read関数の実行要求を出力し、ダウンロード対象ファイルの全データを、バージョン番号と併せて取得する。パス検索部5は、取得したダウンロード対象ファイルの全データを、バージョン番号と対応づけてファイル蓄積部32に書き込む(ステップS26−5)。
[2.4 効果]
以上説明したように、第2の実施形態では、キャッシュ蓄積部35に記憶したダウンロード済みファイルを利用することによって、パス検索部5のパス検索処理を高速にした分散ファイル管理システムを実現することができる。
[3. 第3の実施形態]
第1の実施形態では、ユーザ利用ファイルは、1ファイル1レコードとしていた。第3の実施形態では、分散ファイル管理システムにおいて、ユーザ利用ファイルをマルチレコードとして複数のストレージサーバー装置1に分散して記憶し、アクセスを可能としたものである。以下、第1の実施形態との差分について説明する。
[3.1 データ構成]
図27は、第3の実施形態によるiノードファイルのXMLデータ記述例を示す図である。同図に示すように、第3の実施形態では、マルチレコードに対応するため、データファイルに紐付けされるiノードファイルのXMLデータのタグに、<record>タグを追加する。そして、ユーザ利用ファイルを分割した各レコード1ずつを1つのデータファイルとし、1つのiノードファイルにこれら分割した各レコードのデータファイルを記述することによって、レコードに分割されたユーザ利用ファイルのデータ本体を管理する。
図27においては、no=0〜2の<record>タグが記述されており、3つのレコードに分割されたユーザ利用ファイルの例を図示している。iノードファイル内の<body>タグは、各レコードを記憶したデータファイルのファイル名、つまり、ファイル管理部32で記憶されているファイル名を示している。
[3.2 ストレージサーバー装置1の動作]
図28は、第3の実施形態による高レベルインタフェース部24が実行するhi_read関数及びhi_write関数を示す図である。
同図に示すように、本実施形態では、マルチレコードでのファイル操作を行うため、高レベルインタフェース部24のhi_read関数およびhi_write関数の引数として、レコード番号recnoを追加する。これにより、hi_read関数およびhi_write関数のデータの操作は、pathで示されるファイルの中のrecno番目のレコードを操作の対象とする。
また、hi_read関数およびhi_write関数の内部的な動作は、図13に示す第1の実施形態におけるパス検索部5のパス検索動作のステップS13−3において、iノードファイルのXMLデータの解析を行ない、<body>タグを取得するときに、引数recnoで示されるレコード番号xの<record no="x">タグを検索する動作を追加するだけでよい。これにより、<body>タグ内における<record no="x">タグの要素内容で示されるファイル名を取得する。
[3.3 効果]
以上説明したように、第3の実施形態によれば、マルチレコードに対応した分散ファイル管理システムを実現することができる。マルチレコード構造のファイルを利用する利用方法は、本発明を制限するものではないが、例えば、主データ(1つのレコードのデータ)に対して、データの変更を判断するための、チェックサムデータを他のレコードに記録する、主データのメタデータ(例えば、Macintosh(登録商標)系のOSにおけるリソースフォークのようなアイコンやウインドウの形状などのデータ)を記録する、BTRON系OSで用いられているように、機能によってレコード番号を決めて利用するなどがある。また、GFSやGframのようにファイルのデータを複数のチャンクに分割して記憶することと同様な動作もマルチレコードのファイル構造により実現できる。
[4. 第4の実施形態]
第4の実施形態は、分散ファイル管理システムにおいて、ファイルに対して任意のメタデータを付加できるようにしたものである。そこで本実施形態では、ファイルおよびディレクトリに任意のメタデータを付加するため、iノードファイルのXMLデータに任意のタグを追加する機能を分散ファイル管理システムに備える。以下、第1の実施形態との差分について説明する。
[4.1 データ構成]
図29に、メタデータを追加したiノードファイルの例を示す。同図に示すように、iノードファイルに、作成者を記述する<access>タグが追加され、要素内容にメタデータ「userA」が記述されている。ここでは、タグを<access>としているが、下記の手順により、予め決められた予約されているタグ(inode、type、body等)以外の任意のタグを追加することができる。
[4.2 高レベルインタフェースの追加関数]
第4の実施形態では、高レベルインタフェース部24の関数として、図30に示すhi_read_param関数及びhi_write_param関数を追加する。
hi_read_parm関数は、指定したディレクトリまたはユーザ利用ファイルのiノードファイルから、指定したメタデータを読み出すインタフェースである。hi_read_param関数の引数pathは、メタデータ読み出し対象のパス付きユーザ利用ファイル名、または、パス付きディレクトリ名を示す。引数meta_keyは、読み出し対象のメタデータのタグを示す。引数meta_valueは、読み出されたメタデータを示す。
hi_write_param関数は、指定したディレクトリまたはパス指定ファイルのiノードファイルへ、指定したタグの指定したメタデータを書き込むインタフェースである。hi_write_param関数の引数pathは、メタデータ書き込み対象のパス付きユーザ利用ファイル名、または、パス付きディレクトリ名を示す。引数meta_keyは、メタデータ書き込む対象のタグを示す。引数meta_valueは、メタデータへ書き込む内容を示す。
[4.2.1 引数meta_keyの説明]
hi_read_param関数およびhi_write_param関数の引数であるmeta_keyは、iノードファイルのXMLデータに対応するものである。第4の実施形態におけるmeta_keyのフォーマットについて説明する。例えば、図27で示したiノードファイル「R.ino」の場合、レコード番号1の<body>タグのデータを取得したい場合には、XMLデータを「/」で階層的に表現した、「/inode/record[1]/body」を引数meta_keyに設定し、hi_read_param関数を実行することで、引数meta_valueとして「B.dat」を得ることができる。
なお、XMLデータへのアクセスは他にもW3C(World Wide Web Consortium)で定められているXPath(XML Path Language)などを使うことも可能であるが、本発明は特定のXMLデータのハンドリング方法に依存するものではないので、これ以上の説明は行わない。
[4.3 ストレージサーバー装置1の動作]
[4.3.1 hi_read_param関数の動作]
次に、hi_read_paramの動作について説明する。図31は、hi_read_param関数実行処理の流れ図である。
まず、高レベルインタフェース部24は、引数pathにより指定された対象ユーザ利用ファイル名またはパス付きディレクトリ名と、パス検索の実行指示とをパス検索部5に出力する(ステップS31−1)。これにより、指定した対象ユーザ利用ファイル名またはパス付きディレクトリ名のiノードファイルがダウンロードされる。高レベルインタフェース部24は、ダウンロードしたiノードファイルから、引数meta_keyで指定されたタグのメタデータを検索し、その値を引数meta_valueに設定し、read_param関数の実行要求元へ返送する(ステップS31−2)。
分散ファイル管理システムに図4のファイルが分散して記憶されている場合の、ファイル「F.ino」のみが図30のものであったとする。そして、高レベルインタフェース部24が、引数pathに「/work/fish.mxf」が、引数meta_keyに「/inode/access」が設定されたhi_read_param関数の実行要求を受信したとする。この場合、高レベルインタフェース部24が、パス検索部5へパス検索をさせることにより、第1の実施形態で説明した動作例と同様の処理により、iノードファイル「F.ino」を取得する(ステップS31−1)。高レベルインタフェース部24は、引数meta_key「/inode/access」が設定されているタグ<inode>内のタグ<access>を特定すると、当該タグの設定内容「userA」を取得して引数meta_valueに設定し、read_param関数の実行要求元へ返送する(ステップS31−2)。
[4.3.2 hi_write_param関数の動作]
次に、hi_write_param関数の動作について説明する。図32は、hi_read_param関数の処理フローを示す。
まず、高レベルインタフェース部24は、引数pathにより指定された対象ユーザ利用ファイル名またはパス付きディレクトリ名と、パス検索の実行指示とをパス検索部5に指示し、iノードファイルを取得し、記憶部34に書き込む(ステップS30−1)。高レベルインタフェース部24は、取得したiノードファイルのXMLデータを解析して引数met_keyで指定されたタグを検索し、当該タグの要素内容を引数meta_valueに設定されている値に変更する(ステップS30−2)。引数meta_keyで指定されたタグのメタデータが存在しない場合、高レベルインタフェース部24は、iノードファイルに引数meta_keyにより指定されたメタデータを追加し、引数meta_valueに設定されている値を要素内容として書き込む。最後に、高レベルインタフェース部24は、修正したiノードファイルを、当該iノードファイルを記憶しているストレージサーバー装置1へアップロードする(ステップS30−3)。
分散ファイル管理システムに図4のファイルが分散して記憶されているとする。そして、高レベルインタフェース部24が、引数pathに「/work/fish.mxf」が、引数meta_keyに「/inode/access」が、引数meta_valueに「userA」が設定されたhi_write_param関数の実行要求を受信したものとする。この場合、高レベルインタフェース部24が、パス検索部5へパス検索をさせることにより、第1の実施形態で説明した動作例と同様の処理により、iノードファイル「F.ino」を取得する(ステップS32−1)。高レベルインタフェース部24は、引数meta_key「access」が設定されているタグがないため、タグ<access>〜</access>を追加し、その要素内容に、引数meta_value「userA」を設定する(ステップS32−2)。
[4.4 効果]
以上説明したように、第4の実施形態により、ディレクトリ及びユーザ利用ファイルに任意のメタデータを追加し、利用することができる。このメタデータの利用方法は、自由であり、その内容で本発明が制限されるものではないが、利用方法の例として、ディレクトリやファイルのアクセス制御を行うためのメタデータを書き込むなどの利用方法が考えられる。
また、従来のローカルファイルシステムでは、iノード情報はディスクのフォーマット時に決められた固定したディスク領域に保存されるため、書き込めるデータ量に制限があり、任意のメタデータを追加することが困難であったが、第4の実施形態ではiノードファイルを、データ書き込み可能なストレージサーバー装置1を選択して記憶させることができ、保存するデータ量に制限がないため、任意のメタデータの追加が可能となる。
[5. その他]
以上説明した本発明の実施形態によれば、P2P型の分散ストレージ装置において以下の特徴をもつ分散ファイル管理システムおよび分散ファイルシステムを提供できる。
すなわち、一元的に集中管理するサーバーを必要としないP2P型の分散ファイルシステムにおいて、ファイルの管理およびディレクトリの管理を提供することができる。
また、マルチレコード構造のファイルに対応した分散ファイル管理システムを提供することができる。
加えて、ノードデータには、XMLなどの拡張可能なマーク付け言語を利用して記述することにより、ファイルおよびディレクトリに関係する情報(メタデータ)を任意に拡張可能な分散ファイル管理システムを提供することができる。
なお、上述のストレージサーバー装置1は、内部にコンピュータシステムを有している。そして、ストレージサーバー装置1のファイル登録部3、ファイル入出力部4、パス検索部5、ファイル生成削除部6、サーバー選択部7、ID生成部8、所在検索部9、登録インタフェース部21、検索インタフェース部22、低レベルインタフェース部23、及び、高レベルインタフェース部24の動作の過程は、プログラムの形式でコンピュータ読み取り可能な記録媒体に記憶されており、このプログラムをコンピュータシステムが読み出して実行することによって、上記処理が行われる。ここでいうコンピュータシステムとは、CPU及び各種メモリやOS、周辺機器等のハードウェアを含むものである。
また、「コンピュータシステム」は、WWWシステムを利用している場合であれば、ホームページ提供環境(あるいは表示環境)も含むものとする。
また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ROM、CD−ROM等の可搬媒体、コンピュータシステムに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムを送信する場合の通信線のように、短時間の間、動的にプログラムを保持するもの、その場合のサーバーやクライアントとなるコンピュータシステム内部の揮発性メモリのように、一定時間プログラムを保持しているものも含むものとする。また上記プログラムは、前述した機能の一部を実現するためのものであっても良く、さらに前述した機能をコンピュータシステムにすでに記録されているプログラムとの組み合わせで実現できるものであっても良い。
1…ストレージサーバー装置
2…外部インタフェース部
3…ファイル登録部
4…ファイル入出力部
5…パス検索部
6…ファイル生成削除部
7…サーバー選択部
8…ID生成部
9…所在検索部
21…登録インタフェース部
22…検索インタフェース部
23…低レベルインタフェース部
24…高レベルインタフェース部
31…ホストテーブル蓄積部
32…ファイル蓄積部
33…所在管理テーブル蓄積部
34…記憶部
35…キャッシュ蓄積部
50…ユーザ端末装置
100…ネットワーク装置

Claims (6)

  1. 他のストレージサーバー装置と協同して、データファイルおよびディレクトリファイルを含むファイルを分散管理するストレージサーバー装置であって、
    配下のディレクトリ名とディレクトリファイルのファイル名との対応関係、および、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係に関する管理情報を含む前記ディレクトリファイルと、前記データファイルと、を記憶するファイル蓄積部と、
    ファイル名とファイルを記憶するストレージサーバー装置とを対応付けるテーブルを記憶する所在管理テーブル蓄積部と、
    当該ストレージサーバー装置が所在を管理する前記ファイルについて、指定されるファイル名に基づいて前記テーブルを参照することにより、前記ファイルを記憶するストレージサーバー装置を特定する所在検索部と、
    指定されたファイル名に基づいて前記ファイルの所在を管理するストレージサーバー装置を選択し、選択されたストレージサーバー装置の前記所在検索部に対して前記ファイルを記憶するストレージサーバー装置の特定を指示する検索インタフェース部と、
    ファイル名の指定に基づき前記ファイル蓄積部が記憶する前記ファイルに対する操作を行なう低レベルインタフェース部と、
    ファイル名を指定して前記ファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示し、特定されたストレージサーバー装置の前記低レベルインタフェース部に対してファイル名を指定した読出指示を行うことによって前記ディレクトリファイルを読み出し、読み出した前記ディレクトリファイル内の前記管理情報に基づいて、指定されたディレクトリ名またはユーザ利用ファイル名に対応するファイル名を取得するとともに、取得したファイル名が配下のディレクトリファイルのファイル名である場合には取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置から再帰的にディレクトリファイルの読み出しを行い、取得したファイル名が配下のデータファイルのファイル名である場合には取得した前記ファイル名を出力するパス検索部と、
    指定されたディレクトリ名およびユーザ利用ファイル名を用いて前記パス検索部から前記データファイルのファイル名を取得し、取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置の前記低レベルインタフェース部に操作指示を行う高レベルインタフェース部と、
    を備えることを特徴とするストレージサーバー装置。
  2. 前記ファイル蓄積部は、ディレクトリファイルまたはデータファイルのファイル名を含むiノードファイルを更に記憶し、
    前記ディレクトリファイル内の前記管理情報は、配下のディレクトリの前記ディレクトリ名または配下のデータファイルの前記ユーザ利用ファイル名と、対応する前記iノードファイルのファイル名との対応関係を含むものであり、
    前記パス検索部は、読み出した前記ディレクトリファイルから、指定された前記ディレクトリ名または前記ユーザ利用ファイル名に基づいて前記iノードファイルのファイル名を取得し、取得した前記ファイル名を指定して前記iノードファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示するとともに、特定されたストレージサーバー装置の前記低レベルインタフェース部に対して前記ファイル名を指定した読出指示を行うことにより前記iノードファイルを読み出し、読み出した前記iノードファイルから前記ディレクトリファイルまたは前記データファイルの前記ファイル名を取得する、
    ことを特徴とする請求項1に記載のストレージサーバー装置。
  3. 読み出したファイルを記憶するキャッシュ蓄積部をさらに有し、
    前記パス検索部は、読み出した前記iノードファイルまたは前記ディレクトリファイルを前記キャッシュ蓄積部に書き込み、取得した前記ファイル名のiノードファイルまたはディレクトリファイルが前記キャッシュ蓄積部に記憶されている場合は、当該iノードファイルまたはディレクトリファイルを当該キャッシュ蓄積部から読み出す、
    ことを特徴とする請求項2に記載のストレージサーバー装置。
  4. 前記iノードファイルは、複数に分割されたデータファイルのファイル名と、当該分割されたデータファイルの番号とを含み、
    前記ユーザ利用ファイル名には、前記分割されたデータファイルの番号が付加され、
    前記パス検索部は、指定された前記ユーザ利用ファイル名に基づいて読み出した前記ファイル名の前記iノードファイルから、前記データファイルの番号に対応したデータファイルのファイル名を出力する、
    ことを特徴とする請求項2または請求項3に記載のストレージサーバー装置。
  5. 前記iノードファイルは、メタデータを含み、
    前記ファイル入出力部は、前記操作がメタデータの読み出しである場合、読み出した前記iノードファイルから前記メタデータを読み出し、前記操作がメタデータの書き込みである場合、読み出した前記iノードファイルへメタデータの書き込みを行なう、
    ことを特徴とする請求項2から請求項4のいずれかの項に記載のストレージサーバー装置。
  6. 他のストレージサーバー装置と協同して、データファイルおよびディレクトリファイルを含むファイルを分散管理するストレージサーバー装置として用いられるコンピュータを、
    配下のディレクトリ名とディレクトリファイルのファイル名との対応関係、および、配下のユーザ利用ファイル名とデータファイルのファイル名との対応関係に関する管理情報を含む前記ディレクトリファイルと、前記データファイルと、を記憶するファイル蓄積部、
    ファイル名とファイルを記憶するストレージサーバー装置とを対応付けるテーブルを記憶する所在管理テーブル蓄積部、
    当該ストレージサーバー装置が所在を管理する前記ファイルについて、指定されるファイル名に基づいて前記テーブルを参照することにより、前記ファイルを記憶するストレージサーバー装置を特定する所在検索部、
    指定されたファイル名に基づいて前記ファイルの所在を管理するストレージサーバー装置を選択し、選択されたストレージサーバー装置の前記所在検索部に対して前記ファイルを記憶するストレージサーバー装置の特定を指示する検索インタフェース部、
    ファイル名の指定に基づき前記ファイル蓄積部が記憶する前記ファイルに対する操作を行なう低レベルインタフェース部、
    ファイル名を指定して前記ファイルを記憶するストレージサーバー装置を特定するよう前記検索インタフェース部に指示し、特定されたストレージサーバー装置の前記低レベルインタフェース部に対してファイル名を指定した読出指示を行うことによって前記ディレクトリファイルを読み出し、読み出した前記ディレクトリファイル内の前記管理情報に基づいて、指定されたディレクトリ名またはユーザ利用ファイル名に対応するファイル名を取得するとともに、取得したファイル名が配下のディレクトリファイルのファイル名である場合には取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置から再帰的にディレクトリファイルの読み出しを行い、取得したファイル名が配下のデータファイルのファイル名である場合には取得した前記ファイル名を出力するパス検索部、
    指定されたディレクトリ名およびユーザ利用ファイル名を用いて前記パス検索部から前記データファイルのファイル名を取得し、取得した前記ファイル名を指定して他のストレージサーバー装置または当該ストレージサーバー装置の前記低レベルインタフェース部に操作指示を行う高レベルインタフェース部、
    として機能させることを特徴とするコンピュータプログラム。
JP2009140214A 2009-06-11 2009-06-11 ストレージサーバー装置及びコンピュータプログラム Expired - Fee Related JP5367470B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2009140214A JP5367470B2 (ja) 2009-06-11 2009-06-11 ストレージサーバー装置及びコンピュータプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2009140214A JP5367470B2 (ja) 2009-06-11 2009-06-11 ストレージサーバー装置及びコンピュータプログラム

Publications (2)

Publication Number Publication Date
JP2010287036A true JP2010287036A (ja) 2010-12-24
JP5367470B2 JP5367470B2 (ja) 2013-12-11

Family

ID=43542687

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2009140214A Expired - Fee Related JP5367470B2 (ja) 2009-06-11 2009-06-11 ストレージサーバー装置及びコンピュータプログラム

Country Status (1)

Country Link
JP (1) JP5367470B2 (ja)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20140099892A (ko) * 2011-12-09 2014-08-13 마이크로소프트 코포레이션 상응하는 프라이머리 애플리케이션 데이터로부터 유래된 식별자에 기초한 보조 데이터로의 액세스 기법
JP2014522518A (ja) * 2011-07-22 2014-09-04 ▲ホア▼▲ウェイ▼技術有限公司 コンテンツ処理方法、コンテンツ処理デバイス、およびコンテンツ処理システム
JPWO2013145222A1 (ja) * 2012-03-29 2015-08-03 富士通株式会社 情報処理装置およびデータ保存処理プログラム
JP2016021264A (ja) * 2015-10-23 2016-02-04 株式会社東芝 メモリシステムのデータ管理方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290096A (ja) * 1993-03-31 1994-10-18 Matsushita Electric Ind Co Ltd パス名解決装置
JP2003216474A (ja) * 2002-01-23 2003-07-31 Hitachi Ltd ネットワークストレージ仮想化方法
JP2007073004A (ja) * 2005-09-09 2007-03-22 Canon Inc データ保全情報装置、分散ストレージシステム及びその方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06290096A (ja) * 1993-03-31 1994-10-18 Matsushita Electric Ind Co Ltd パス名解決装置
JP2003216474A (ja) * 2002-01-23 2003-07-31 Hitachi Ltd ネットワークストレージ仮想化方法
JP2007073004A (ja) * 2005-09-09 2007-03-22 Canon Inc データ保全情報装置、分散ストレージシステム及びその方法

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014522518A (ja) * 2011-07-22 2014-09-04 ▲ホア▼▲ウェイ▼技術有限公司 コンテンツ処理方法、コンテンツ処理デバイス、およびコンテンツ処理システム
US9503308B2 (en) 2011-07-22 2016-11-22 Huawei Technologies Co., Ltd. Method, device and system for processing content
KR20140099892A (ko) * 2011-12-09 2014-08-13 마이크로소프트 코포레이션 상응하는 프라이머리 애플리케이션 데이터로부터 유래된 식별자에 기초한 보조 데이터로의 액세스 기법
JP2015501050A (ja) * 2011-12-09 2015-01-08 マイクロソフト コーポレーション 対応するプライマリ・アプリケーションデータから導出される識別子に基づく補足データへのアクセス
JP2017162506A (ja) * 2011-12-09 2017-09-14 マイクロソフト テクノロジー ライセンシング,エルエルシー 対応するプライマリ・アプリケーションデータから導出される識別子に基づく補足データへのアクセス
KR102032583B1 (ko) 2011-12-09 2019-11-08 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 상응하는 프라이머리 애플리케이션 데이터로부터 유래된 식별자에 기초한 보조 데이터로의 액세스 기법
JPWO2013145222A1 (ja) * 2012-03-29 2015-08-03 富士通株式会社 情報処理装置およびデータ保存処理プログラム
JP2016021264A (ja) * 2015-10-23 2016-02-04 株式会社東芝 メモリシステムのデータ管理方法

Also Published As

Publication number Publication date
JP5367470B2 (ja) 2013-12-11

Similar Documents

Publication Publication Date Title
US9183213B2 (en) Indirection objects in a cloud storage system
US8255430B2 (en) Shared namespace for storage clusters
US20170249330A1 (en) Identification of moved or renamed files in file synchronization
US8990257B2 (en) Method for handling large object files in an object storage system
JP2019517043A (ja) ハイブリッドアプリケーションの自動更新
US11726967B2 (en) Systems and methods for restoring an interface to a global file system
JP2015530629A (ja) 移行先ファイルサーバ及びファイルシステム移行方法
WO2015049747A1 (ja) データ管理システム、及び、データ管理方法
JP5638608B2 (ja) メタデータに従ってファイルシステムのファイルにアクセスする方法、およびその方法を実装する装置
JP5375972B2 (ja) 分散ファイルシステム、そのデータ選択方法およびプログラム
JP4713257B2 (ja) データ記憶装置及びバージョン管理プログラム
US20180107404A1 (en) Garbage collection system and process
Rupprecht et al. SwiftAnalytics: Optimizing object storage for big data analytics
JP5367470B2 (ja) ストレージサーバー装置及びコンピュータプログラム
WO2011088757A1 (zh) 建立目录组织结构的方法、装置及数字电视前端服务器
KR20070038665A (ko) 분산 파일 시스템 및 그 운용 방법
JP4343669B2 (ja) ファイル管理装置,動的名前空間生成方法および動的名前空間生成プログラム
WO2018102392A1 (en) Garbage collection system and process
Hwang et al. Analysis of NDN repository architecture and its improvement for I/O intensive applications
CN116820347A (zh) 一种分布式对象的处理方法和装置
TW201527997A (zh) 文件版本控制系統及方法
JP2015103130A (ja) マニュアル情報管理システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120113

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20130612

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130618

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130725

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20130813

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130911

R150 Certificate of patent or registration of utility model

Ref document number: 5367470

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees