(57)【特許請求の範囲】
【請求項１】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置であって、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得する取得部と、
前記取得部により取得された管理情報を記憶する記憶部と、
前記記憶部に記憶された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
を含み、
前記取得部が、前記複数のファイルのうちの特定のファイルが記録された位置として、当該特定のファイルを分断して得られたＮ個（Ｎは２以上の整数）のファイル断片がそれぞれ記録されたＮ個の位置を管理する管理情報を取得した場合に、
前記記憶部は、前記取得部により取得された管理情報を、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報を記憶する、装置。
【請求項２】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置であって、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得する取得部と、
前記取得部により取得された管理情報を記憶する記憶部と、
前記記憶部に記憶された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
を含み、
前記取得部が、前記複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を取得した場合に、
前記記憶部は、前記取得部により取得された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶する、装置。
【請求項３】
前記取得部が、前記複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を取得した場合に、
前記記憶部は、前記取得部により取得された管理情報を、前記複数のファイルのうち特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶する、請求項２の装置。
【請求項４】
シーケンシャルメディア上の複数のファイルを列挙した列挙情報を生成する装置であって、
前記複数のファイルを列挙するために用いる列挙方法として、第１の列挙方法、第２の列挙方法、第３の列挙方法、及び第４の列挙方法を含む列挙方法群の中から選択された列挙方法を受け付ける受付部と、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理し、当該複数のファイルのうちの特定のファイルがＮ個（Ｎは２以上の整数）のファイル断片に分断されて記録されている場合には、当該特定のファイルが記録された位置として当該Ｎ個のファイル断片がそれぞれ記録されたＮ個の位置を管理し、当該複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を、当該シーケンシャルメディアから取得する取得部と、
前記受付部にて前記第１の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を記憶し、
前記受付部にて前記第２の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報を記憶し、
前記受付部にて前記第３の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶し、
前記受付部にて前記第４の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更し、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報を記憶する記憶部と、
前記記憶部に記憶された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
を含む、装置。
【請求項５】
前記受付部は、前記複数のファイルを列挙するために用いる列挙方法として、第５の列挙方法及び第６の列挙方法を更に含む前記列挙方法群の中から選択された列挙方法を受け付け、当該第５の列挙方法又は当該第６の列挙方法を受け付けた場合には、特定のディレクトリの指定を更に受け付け、
前記記憶部は、
前記受付部にて前記第５の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を、前記複数のファイルのうち前記特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶し、
前記受付部にて前記第６の列挙方法を受け付けた場合には、前記取得部により取得された管理情報を、前記複数のファイルのうち前記特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更し、前記特定のファイルが前記特定のディレクトリの配下に存在する場合に、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報を記憶する、請求項４の装置。
【請求項６】
シーケンシャルメディアに複数のファイルを記録する記録装置と、当該シーケンシャルメディア上の当該複数のファイルを列挙した列挙情報を生成する生成装置とを含むシステムであって、
前記記録装置は、
前記シーケンシャルメディア上の第１の位置に書き込まれたファイルが更新されると、当該ファイルの少なくとも一部を無効化し、更新後の当該少なくとも一部を当該シーケンシャルメディア上の他のファイルが記録されていない第２の位置に書き込む書込み部と、
前記シーケンシャルメディア上の全体が無効化されたファイルを除く前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから読み出す読出し部と、
前記読出し部により読み出された管理情報を前記生成装置に送信する送信部と
を含み、
前記生成装置は、
前記送信部により送信された管理情報を受信する受信部と、
前記受信部により受信された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
を含み、
前記受信部が、前記複数のファイルのうちの特定のファイルが記録された位置として、当該特定のファイルを分断して得られたＮ個（Ｎは２以上の整数）のファイル断片がそれぞれ記録されたＮ個の位置を管理する管理情報を受信した場合に、
前記生成部は、前記受信部により受信された管理情報を、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報に基づいて、前記列挙情報を生成する、システム。
【請求項７】
シーケンシャルメディアに複数のファイルを記録する記録装置と、当該シーケンシャルメディア上の当該複数のファイルを列挙した列挙情報を生成する生成装置とを含むシステムであって、
前記記録装置は、
前記シーケンシャルメディア上の第１の位置に書き込まれたファイルが更新されると、当該ファイルの少なくとも一部を無効化し、更新後の当該少なくとも一部を当該シーケンシャルメディア上の他のファイルが記録されていない第２の位置に書き込む書込み部と、
前記シーケンシャルメディア上の全体が無効化されたファイルを除く前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから読み出す読出し部と、
前記読出し部により読み出された管理情報を前記生成装置に送信する送信部と
を含み、
前記生成装置は、
前記送信部により送信された管理情報を受信する受信部と、
前記受信部により受信された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
を含み、
前記受信部が、前記複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を受信した場合に、
前記生成部は、前記受信部により受信された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報に基づいて、前記列挙情報を生成する、システム。
【請求項８】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する方法であって、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得するステップと、
取得された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成するステップと
を含み、
前記複数のファイルのうちの特定のファイルが記録された位置として、当該特定のファイルを分断して得られたＮ個（Ｎは２以上の整数）のファイル断片がそれぞれ記録されたＮ個の位置を管理する管理情報が取得された場合に、
取得された管理情報を、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報に基づいて、前記列挙情報を生成する、方法。
【請求項９】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する方法であって、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得するステップと、
取得された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成するステップと
を含み、
前記複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報が取得された場合に、
取得された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報に基づいて、前記列挙情報を生成する、方法。
【請求項１０】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得する取得部と、
前記取得部により取得された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
して機能させ、
前記取得部が、前記複数のファイルのうちの特定のファイルが記録された位置として、当該特定のファイルを分断して得られたＮ個（Ｎは２以上の整数）のファイル断片がそれぞれ記録されたＮ個の位置を管理する管理情報を取得した場合に、
前記生成部は、前記取得部により取得された管理情報を、前記Ｎ個のファイル断片を前記複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、当該Ｎ個のファイルが記録された位置として前記Ｎ個の位置を管理するように変更した管理情報に基づいて、前記列挙情報を生成する、プログラム。
【請求項１１】
第１の位置に記録されたファイルが更新されると、当該ファイルの少なくとも一部が無効化され、更新後の当該少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置として、コンピュータを機能させるプログラムであって、
前記コンピュータを、
前記シーケンシャルメディア上の前記複数のファイルが記録された位置を管理する管理情報を、当該シーケンシャルメディアから取得する取得部と、
前記取得部により取得された管理情報に基づいて、前記複数のファイルが記録された位置に応じた順序で当該複数のファイルを列挙した前記列挙情報を生成する生成部と
して機能させ、
前記取得部が、前記複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を取得した場合に、
前記生成部は、前記取得部により取得された管理情報を、前記複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報に基づいて、前記列挙情報を生成する、プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のファイルを列挙した情報を生成する装置及び方法に関する。特に、本発明は、シーケンシャルメディア上の複数のファイルを列挙した情報を生成する装置及び方法に関する。
【背景技術】
【０００２】
複数のファイルをコピーする場合や、複数のファイルに対してコンピューターウィルスのスキャンを行う場合等に、複数のファイルが連続してストレージから読み出される。その際、ストレージがＨＤＤ（Hard Disk Drive）、ＵＳＢ（Universal Serial Bus）メモリ等のランダムアクセス可能な媒体であれば、ファイルへのアクセス順序はさほど問題にはならない。
しかしながら、ストレージがシーケンシャルにアクセスされるテープ等の媒体であれば、ファイルへアクセスする順序によっては、複数のファイルの読出しにかかる時間が長くなることがある。
【０００３】
実際、ＬＴＯ（Linear Tape-Open）規格のテープ上の標準的なファイルシステムであるＬＴＦＳ（Linear Tape File System）を用いても、ＬＴＦＳ上のファイルをＨＤＤにコピーする場合に、ファイルが記録されている位置がテープ上で前後していれば、ファイルのコピー順序によってパフォーマンス（時間のかかり方）が大きく違う。
例えば、ファイルＡ、ファイルＢ、ファイルＣがこの順序でテープに書かれている場合を考える。この場合、ファイルＡ、ファイルＢ、ファイルＣの順にアクセスすれば、ＬＴＯ第５世代では最大１４０ＭＢ／ｓの速さで読み出せるが、ファイルＣ、ファイルＢ、ファイルＡの順にアクセスすれば、数ＭＢ／ｓ程度の速さでしか読み出せないこともある。
【０００４】
このように、ＬＴＦＳ上のファイルをＨＤＤにコピーする場合、ファイルへのアクセス順序がパフォーマンスに大きく関与する。
【０００５】
尚、公報記載の技術としても、ファイルへのアクセス順序を考慮することでファイルに対するアクセス効率を向上させるものは知られている（例えば、特許文献１参照）。
特許文献１において、テープ駆動制御装置は、テープの走行を制御するテープ走行制御部と、ヘッドを制御する書き込み／読み出し制御部と、書き込まれたファイル順にＢＯＴからのシーク時間が登録されるシーク管理テーブルを備える。シーク管理テーブルには、シーク時間が未確定のファイルに対してはシーク時間が仮に登録され、その後シーク情報が確定すると確定したシーク時間が登録される。複数のファイルの読み出し要求があると、テープ走行制御部は、シーク管理テーブルを参照して、読み出し要求のあった複数のファイルに対してシーク時間の昇順にヘッドがアクセスできるようにテープの走行を制御する。
【０００６】
また、公報記載の技術として、ファイルへのアクセスの高速化を図る技術は、これ以外にも種々提案されている（例えば、特許文献２参照）。
特許文献２は、磁気テープボリュームのＢＯＴの前にファイル管理情報ブロックを設けてこれにファイル名および位置情報を書き込み、アクセス時にこれを参照してヘッドの位置を決める構成を開示している。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２０１０−９７６４６号公報
【特許文献２】特開平２−２４６０７５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
ところで、ファイルをコピーする際の一般的な動作は、次のようなものである。
即ち、Ｗｉｎｄｏｗｓ７（登録商標）を例にとると、複数のファイルが存在するディレクトリをコピーするには、通常、Ｅｘｐｌｏｒｅｒ（登録商標）でそのディレクトリを選択してコピー先にドラッグアンドドロップする操作、又は、コマンドプロンプトからｘｃｏｐｙコマンドを投入する操作が行われる。そして、ドラッグアンドドロップ操作及びｘｃｏｐｙコマンドの投入操作の何れが行われた場合の何れにおいても、ディレクトリ内のファイルを列挙してそれらのファイルを順番にコピーしていくという動作となる。
【０００９】
より詳しく言えば、アプリケーション（Ｅｘｐｌｏｒｅｒ（登録商標）、ｘｃｏｐｙ等）は、ファイルをコピーする際、ＡＰＩ（Application Program Interface）を呼ぶことでＯＳ（Operating System）に問い合わせを行う。すると、ＯＳは、ＩＲＰ（I/O Request Packet）を使ってファイルシステムに問い合わせを行う。これに対し、ファイルシステムは、このＩＲＰにより用意されたバッファに、コピー対象のディレクトリの下にあるファイルのファイル名を列挙して返す。このとき、ファイルシステムは、内部で使用するファイルＩＤを０から順にカウントしていき、各ファイルＩＤに対応するファイルとしてディレクトリ内のファイルを列挙する。
【００１０】
但し、各ファイルＩＤにディレクトリ内のどのファイルを対応させるかについて、明確な規定はない。即ち、ファイルを列挙した場合にディレクトリ内のファイル名がどのような順序で列挙されるかは、ファイルシステムの実装に依存している。例えば、Ｗｉｎｄｏｗｓ（登録商標）で標準的なＮＴＦＳ（NT File System）は、ファイル名をアルファベット順に列挙し、ＬＴＦＳバージョン１．２は、ファイル名をファイルの作成順に列挙する。
【００１１】
ここで、テープ上にファイルＡ、ファイルＢ、ファイルＣをこの順序で作成した後、ファイルＢ、ファイルＡをこの順序で更新した場合を考える。通常、テープ上のファイルの更新において上書きは行われないので、テープ上の更新前のファイルＡ及び更新前のファイルＢは無効化され、更新後のファイルＢ及び更新後のファイルＡがこの順序でファイルＣの後ろに追記されることになる。即ち、テープ上の有効な（無効化されていない）ファイルは、テープの先頭から順に、ファイルＣ、ファイルＢ、ファイルＡとなる。
しかしながら、ＬＴＦＳは、更新時間順ではなく、作成時間順でファイルを列挙するので、ファイルはファイルＡ、ファイルＢ、ファイルＣの順に列挙される。そのため、これらのファイルが存在するディレクトリをドラッグアンドドロップ又はｘｃｏｐｙでコピーすると、ファイルＡ、ファイルＢ、ファイルＣの順にコピーすることになり、コピーにかかる時間が長くなってしまうという問題が発生する。
【００１２】
この問題に対しては、ファイルコピー専用のアプリケーションを用いてファイルを記録位置の順にコピーする、という方法も考えられるが、この方法では、ファイルのテープ上の記録位置を知る必要が生じる。
ＬＴＦＳはオープンスタンダードなフォーマットであり、フォーマット仕様も公開されているため、アプリケーションがテープを直接読むことによって、テープ上のファイルの記録位置を知ることはできるが、これにはハードウェアデバイスに依存した実装が必要になってしまう。また、たとえハードウェアデバイスに依存した実装を施したとしても、ドラッグアンドドロップ、ｘｃｏｐｙ等のＯＳに付属した非常に一般的な機能を用いてファイルをコピーすることができなくなってしまう。
【００１３】
尚、特許文献１、２は、このような問題を解決するための手段を何ら開示するものではない。
【００１４】
本発明の目的は、アプリケーション側にハードウェアデバイスに依存した実装を施すことなく、シーケンシャルメディアに特化したパフォーマンスを落とさないアクセスを行うことにある。
【課題を解決するための手段】
【００１５】
かかる目的のもと、本発明は、第１の位置に記録されたファイルが更新されると、ファイルの少なくとも一部が無効化され、更新後の少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置であって、シーケンシャルメディア上の複数のファイルが記録された位置を管理する管理情報を、シーケンシャルメディアから取得する取得部と、取得部により取得された管理情報を記憶する記憶部と、記憶部に記憶された管理情報に基づいて、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報を生成する生成部とを含む、装置を提供する。
【００１６】
ここで、この装置において、取得部が、複数のファイルのうちの特定のファイルが記録された位置として、特定のファイルを分断して得られたＮ個（Ｎは２以上の整数）のファイル断片がそれぞれ記録されたＮ個の位置を管理する管理情報を取得した場合に、記憶部は、取得部により取得された管理情報を、Ｎ個のファイル断片を複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、Ｎ個のファイルが記録された位置としてＮ個の位置を管理するように変更した管理情報を記憶する、ものであってよい。
【００１７】
また、この装置において、取得部が、複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を取得した場合に、記憶部は、取得部により取得された管理情報を、複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶する、ものであってよい。
【００１８】
更に、この装置において、取得部が、複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を取得した場合に、記憶部は、取得部により取得された管理情報を、複数のファイルのうち特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶する、ものであってよい。
【００１９】
また、本発明は、シーケンシャルメディア上の複数のファイルを列挙した列挙情報を生成する装置であって、複数のファイルを列挙するために用いる列挙方法として、第１の列挙方法、第２の列挙方法、第３の列挙方法、及び第４の列挙方法を含む列挙方法群の中から選択された列挙方法を受け付ける受付部と、シーケンシャルメディア上の複数のファイルが記録された位置を管理し、複数のファイルのうちの特定のファイルがＮ個（Ｎは２以上の整数）のファイル断片に分断されて記録されている場合には、特定のファイルが記録された位置としてＮ個のファイル断片がそれぞれ記録されたＮ個の位置を管理し、複数のファイルを複数のディレクトリの何れかの配下に存在するものとして管理する管理情報を、シーケンシャルメディアから取得する取得部と、受付部にて第１の列挙方法を受け付けた場合には、取得部により取得された管理情報を記憶し、受付部にて第２の列挙方法を受け付けた場合には、取得部により取得された管理情報を、Ｎ個のファイル断片を複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、Ｎ個のファイルが記録された位置としてＮ個の位置を管理するように変更した管理情報を記憶し、受付部にて第３の列挙方法を受け付けた場合には、取得部により取得された管理情報を、複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶し、受付部にて第４の列挙方法を受け付けた場合には、取得部により取得された管理情報を、複数のファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更し、Ｎ個のファイル断片を複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、Ｎ個のファイルが記録された位置としてＮ個の位置を管理するように変更した管理情報を記憶する記憶部と、記憶部に記憶された管理情報に基づいて、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報を生成する生成部とを含む、装置も提供する。
【００２０】
ここで、この装置において、受付部は、複数のファイルを列挙するために用いる列挙方法として、第５の列挙方法及び第６の列挙方法を更に含む列挙方法群の中から選択された列挙方法を受け付け、第５の列挙方法又は第６の列挙方法を受け付けた場合には、特定のディレクトリの指定を更に受け付け、記憶部は、受付部にて第５の列挙方法を受け付けた場合には、取得部により取得された管理情報を、複数のファイルのうち特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更した管理情報を記憶し、受付部にて第６の列挙方法を受け付けた場合には、取得部により取得された管理情報を、複数のファイルのうち特定のディレクトリの配下に存在するファイルをルートディレクトリの直下に存在するものとして区別して管理するように変更し、特定のファイルが特定のディレクトリの配下に存在する場合に、Ｎ個のファイル断片を複数のファイルのうちのＮ個のファイルとして区別して管理するように変更し、かつ、Ｎ個のファイルが記録された位置としてＮ個の位置を管理するように変更した管理情報を記憶する、ものであってよい。
【００２１】
また、本発明は、シーケンシャルメディアに複数のファイルを記録する記録装置と、シーケンシャルメディア上の複数のファイルを列挙した列挙情報を生成する生成装置とを含むシステムであって、記録装置は、シーケンシャルメディア上の第１の位置に書き込まれたファイルが更新されると、ファイルの少なくとも一部を無効化し、更新後の少なくとも一部をシーケンシャルメディア上の他のファイルが記録されていない第２の位置に書き込む書込み部と、シーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルが記録された位置を管理する管理情報を、シーケンシャルメディアから読み出す読出し部と、読出し部により読み出された管理情報を生成装置に送信する送信部とを含み、生成装置は、送信部により送信された管理情報を受信する受信部と、受信部により受信された管理情報に基づいて、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報を生成する生成部とを含む、システムも提供する。
【００２２】
更に、本発明は、第１の位置に記録されたファイルが更新されると、ファイルの少なくとも一部が無効化され、更新後の少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する方法であって、シーケンシャルメディア上の複数のファイルが記録された位置を管理する管理情報を、シーケンシャルメディアから取得するステップと、取得された管理情報に基づいて、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報を生成するステップとを含む、方法も提供する。
【００２３】
更にまた、本発明は、第１の位置に記録されたファイルが更新されると、ファイルの少なくとも一部が無効化され、更新後の少なくとも一部が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディア上の全体が無効化されたファイルを除く複数のファイルを列挙した列挙情報を生成する装置として、コンピュータを機能させるプログラムであって、コンピュータを、シーケンシャルメディア上の複数のファイルが記録された位置を管理する管理情報を、シーケンシャルメディアから取得する取得部と、取得部により取得された管理情報に基づいて、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報を生成する生成部として機能させる、プログラムも提供する。
【発明の効果】
【００２４】
本発明によれば、アプリケーション側にハードウェアデバイスに依存した実装を施すことなく、シーケンシャルメディアに特化したパフォーマンスを落とさないアクセスを行えるようになる。
【図面の簡単な説明】
【００２５】
【図１】本発明の実施の形態で第１の列挙方法が指定されたときの概略動作について説明するための図である。
【図２】本発明の実施の形態で第２の列挙方法が指定されたときの概略動作について説明するための図である。
【図３】本発明の実施の形態で第３の列挙方法が指定されたときの概略動作について説明するための図である。
【図４】本発明の実施の形態におけるストレージシステムの全体構成例を示した図である。
【図５】本発明の実施の形態におけるホストのハードウェア構成例を示した図である。
【図６】本発明の実施の形態におけるホストの機能構成例を示したブロック図である。
【図７】本発明の実施の形態におけるホストのテープマウント時の動作例を示したフローチャートである。
【図８】本発明の実施の形態におけるホストのテープマウント時の動作によりインデックス記憶部に記憶される情報の例を示した図である。
【図９】本発明の実施の形態におけるホストのファイル列挙時の動作例を示したフローチャートである。
【発明を実施するための形態】
【００２６】
以下、添付図面を参照して、本発明の実施の形態について詳細に説明する。
本実施の形態は、テープをマウントする際に選択されるオプションにより、ファイルの列挙方法を変化させるというものである。ファイルの列挙方法としては、例えば、次のような見せ方に対応したものが考えられる。
【００２７】
（第１の列挙方法）
第１の列挙方法は、ディレクトリ構造はそのままで、各ディレクトリ内でのファイルを列挙する順序がテープ上での先頭からの順序となるような列挙方法である。
【００２８】
図１は、この第１の列挙方法について説明するためのテープ上のファイルの配置を示した図である。
図は、「FileA」、「FileB」、「FileC」という３つのファイルをこの順序でテープに書き込んだ後、「FileB」を更新し、その後、「FileA」を更新した場合について示している。通常、テープ上のファイルを更新した場合、そのファイルに対しては上書きが行われるのではなく書き直しが行われる。従って、図では、更新前の「FileA」及び「FileB」は無効化され、更新後の「FileB」及び「FileA」がこの順序で「FileC」の後ろに追記されている。即ち、斜線ハッチングを施したファイルのみが有効となっている。この場合、「FileA」、「FileB」、「FileC」が同じディレクトリの直下にあるとすると、第１の列挙方法では、「FileC」、「FileB」、「FileA」がこの順序で列挙されることになる。
【００２９】
（第２の列挙方法）
第２の列挙方法は、第１の列挙方法において、更に、テープ上で１つのファイルが複数の断片に分断されている場合には、各断片に特殊なファイル名が付けられ、複数の断片のそれぞれがファイルの１つとして扱われるような列挙方法である。
【００３０】
図２は、この第２の列挙方法について説明するためのテープ上のファイルの配置を示した図である。
図は、「FileA」、「FileB」、「FileC」という３つのファイルをこの順でテープに書き込んだ後、「FileA」の一部を更新した場合について示している。つまり、「FileA」の更新部分のみが「FileC」の後ろに追記されることにより、「FileA」が分断された場合である。ここでも、有効なファイルは、斜線ハッチングを施して示している。この場合、「FileA」、「FileB」、「FileC」が同じディレクトリの直下にあるとすると、第２の列挙方法では、「FileA~1」、「FileB」、「FileC」、「FileA~2」という４つのファイルがこの順序で列挙されることになる。尚、ここでは、特別な文字列の一例として「~」を採用したが、他の文字列又は他の表現方法を採用してもよい。
【００３１】
（第３の列挙方法）
第３の列挙方法は、ディレクトリ構造がなくなり、全てのファイルがルートディレクトリの直下に、パスが分かる形式のファイル名が付けられて配置され、ファイルを列挙する順序がテープ上での先頭からの順序となるような列挙方法である。
【００３２】
図３は、この第３の列挙方法について説明するためのディレクトリ構造を示した図である。
図は、ルートディレクトリの下に「dir1」、「dir2」という２つのディレクトリがあり、各ディレクトリの下に「File1」、「File2」という２つのファイルがある場合について示している。
例えば、オプションなしでテープをマウントした場合には、図示したような見え方となるが、この第３の列挙方法を指定するオプションを選択してマウントすることで、ルートディレクトリの下に、「dir1~~File1」、「dir1~~File2」、「dir2~~File1」、「dir2~~File2」という４つのファイルが列挙されることになる。尚、ここでは、特別な文字列の一例として「~~」を採用したが、他の文字列又は他の表現方法を採用してもよい。
【００３３】
（第４の列挙方法）
第４の列挙方法は、第３の列挙方法において、更に、テープ上で１つのファイルが複数の断片に分断されている場合には、各断片に特殊なファイル名が付けられ、複数の断片のそれぞれがファイルの１つとして扱われるような列挙方法である。
【００３４】
（第５の列挙方法）
第５の列挙方法は、オプションで指定された特定のディレクトリの下のみ、第３の列挙方法でファイルが列挙される列挙方法である。
（第６の列挙方法）
第６の列挙方法は、オプションで指定された特定のディレクトリの下のみ、第４の列挙方法でファイルが列挙される列挙方法である。
（第７の列挙方法）
第７の列挙方法は、通常のディレクトリ構造を見せた状態で、これに加え、ルートディレクトリの直下に特別なディレクトリが配置され、その特別なディレクトリの下に第１の列挙方法から第６の列挙方法までの何れかの列挙方法でディレクトリが配置される列挙方法である。
【００３５】
次に、以上の列挙方法でファイルを列挙するファイルシステムについて詳細に説明する。
図４は、このようなファイルシステムが適用されるストレージシステムの構成例を示した図である。
図示するように、ストレージシステムは、テープドライブ１０と、ホスト３０とを備える。
このうち、テープドライブ１０は、記録装置の一例であり、ホストインターフェイス（以下、「ホストＩ／Ｆ」という）１１と、バッファ１２と、チャネル１３と、ヘッド１４と、モータ１５とを含む。また、コントローラ１６と、ヘッド位置制御システム１７と、モータドライバ１８とを含む。更に、テープドライブ１０には、テープカートリッジ２０が挿入されることにより装填可能となっているので、ここでは、テープカートリッジ２０も図示している。このテープカートリッジ２０は、リール２１、２２に巻かれたテープ２３を含む。テープ２３は、リール２１、２２の回転に伴い、リール２１からリール２２の方向へ、又は、リール２２からリール２１の方向へ、長手方向に移動する。尚、テープ２３としては、磁気テープが例示されるが、磁気テープ以外のテープ媒体でもよい。
【００３６】
ここで、ホストＩ／Ｆ１１は、ホスト３０との通信を行う。例えば、ホスト３０から、テープ２３へのデータの書込みを指示するコマンド、テープ２３を目的の位置に移動させるコマンド、テープ２３からのデータの読出しを指示するコマンド等を受け取る。尚、このホストＩ／Ｆ１１で用いる通信規格としては、ＳＣＳＩが例示される。ＳＣＳＩの場合、１つ目のコマンドは、Ｗｒｉｔｅコマンドに相当し、２つ目のコマンドは、ＬｏｃａｔｅコマンドやＳｐａｃｅコマンドに相当し、３つ目のコマンドは、Ｒｅａｄコマンドに相当する。また、ホストＩ／Ｆ１１は、送信部の一例であり、ホスト３０に対し、これらのコマンドに応じて読み出したデータ及びこれらのコマンドに応じた処理が成功したのか失敗したのかの応答を返す。
【００３７】
バッファ１２は、テープ２３に書き込むべきデータやテープ２３から読み出されたデータを蓄積するメモリである。例えば、ＤＲＡＭ（Dynamic Random Access Memory）によって構成される。また、バッファ１２は、複数のバッファセグメントからなり、各バッファセグメントが、テープ２３に対する読み書きの単位であるデータセットを格納している。
チャネル１３は、テープ２３に書き込むべきデータをヘッド１４に送ったり、テープ２３から読み出されたデータをヘッド１４から受け取ったりするために用いられる通信経路である。
ヘッド１４は、書込み部及び読出し部の一例であり、テープ２３が長手方向に移動するとき、テープ２３に対して情報を書き込んだり、テープ２３から情報を読み出したりする。
モータ１５は、リール２１、２２を回転させる。尚、図では、１つの矩形でモータ１５を表しているが、モータ１５としては、リール２１、２２の各々に１つずつ、合計２個設けるのが好ましい。
【００３８】
コントローラ１６は、テープドライブ１０の全体を制御する。例えば、ホストＩ／Ｆ１１で受け付けたコマンドに従って、データのテープ２３への書込みやテープ２３からの読出しを制御する。また、ヘッド位置制御システム１７やモータドライバ１８の制御も行う。
ヘッド位置制御システム１７は、ヘッド１４が所望の１つ又は複数のラップを追跡するよう制御するシステムである。ここで、ラップとは、テープ２３上の複数のトラックのグループである。ラップを切り換える必要が生じると、ヘッド１４を電気的に切り換える必要も生じるので、このような切り換えの制御を、このヘッド位置制御システム１７で行う。
モータドライバ１８は、モータ１５を駆動する。尚、上述したように、モータ１５を２個使用する場合であれば、モータドライバ１８も２個設けられる。
【００３９】
また、ホスト３０は、複数のファイルを列挙した列挙情報を生成する生成装置の一例であり、アプリケーションソフトウェア（以下、単に「アプリケーション」という）４０と、ＯＳ５０と、ファイルシステム６０とを含む。
ここで、アプリケーション４０は、特定の用途で利用されるソフトウェアであり、例えば、ストレージ上のファイルをＨＤＤにコピーするソフトウェアである。Ｗｉｎｄｏｗｓ７（登録商標）を例にとると、このようなソフトウェアとしては、Ｅｘｐｌｏｒｅｒ（登録商標）、ｘｃｏｐｙコマンドによって動作するソフトウェア等がある。
ＯＳ５０は、ホスト３０全体の動作を管理するソフトウェアである。本実施の形態では、特に、ファイルシステム６０からファイルを列挙した情報を受け取り、これをアプリケーション４０に提供する。尚、ＯＳは、その１つの機能としてファイルシステム６０を有することが一般的であるので、ここでは、ＯＳが持つ機能のうちファイルシステム６０以外の機能を含む部分をＯＳ５０と称することとする。
ファイルシステム６０は、ストレージ上のファイルを管理するソフトウェアである。ＯＳ５０からの問い合わせに対して、ファイルを列挙した情報を返す。
【００４０】
次に、ホスト３０のハードウェア構成について説明する。
図５は、ホスト３０のハードウェア構成例を示した図である。
図示するように、ホスト３０は、演算手段であるＣＰＵ（Central Processing Unit）３０ａと、Ｍ／Ｂ（マザーボード）チップセット３０ｂを介してＣＰＵ３０ａに接続されたメインメモリ３０ｃと、同じくＭ／Ｂチップセット３０ｂを介してＣＰＵ３０ａに接続された表示機構３０ｄとを備える。また、Ｍ／Ｂチップセット３０ｂには、ブリッジ回路３０ｅを介して、ネットワークインターフェイス３０ｆと、磁気ディスク装置３０ｇと、音声機構３０ｈと、キーボード／マウス３０ｉと、フレキシブルディスクドライブ３０ｊとが接続されている。
【００４１】
尚、図５において、各構成要素は、バスを介して接続される。例えば、ＣＰＵ３０ａとＭ／Ｂチップセット３０ｂの間や、Ｍ／Ｂチップセット３０ｂとメインメモリ３０ｃの間は、ＣＰＵバスを介して接続される。また、Ｍ／Ｂチップセット３０ｂと表示機構３０ｄとの間は、ＡＧＰ（Accelerated Graphics Port）を介して接続されてもよいが、表示機構３０ｄがＰＣＩ Ｅｘｐｒｅｓｓ対応のビデオカードを含む場合、Ｍ／Ｂチップセット３０ｂとこのビデオカードの間は、ＰＣＩ Ｅｘｐｒｅｓｓ（ＰＣＩｅ）バスを介して接続される。また、ブリッジ回路３０ｅと接続する場合、ネットワークインターフェイス３０ｆについては、例えば、ＰＣＩ Ｅｘｐｒｅｓｓを用いることができる。また、磁気ディスク装置３０ｇについては、例えば、シリアルＡＴＡ（AT Attachment）、パラレル転送のＡＴＡ、ＰＣＩ（Peripheral Components Interconnect）を用いることができる。更に、キーボード／マウス３０ｉ、及び、フレキシブルディスクドライブ３０ｊについては、ＵＳＢを用いることができる。
【００４２】
次いで、ホスト３０の機能構成について説明する。但し、本実施の形態は、ファイルシステム６０により実現されるので、ファイルシステム６０により実現される機能構成についてのみ説明する。
図６は、ホスト３０の機能構成例を示した図である。
図示するように、ホスト３０は、ファイルシステム６０により実現される機能構成として、コマンド処理部６１と、オプション記憶部６２と、インデックス受信部６３と、オプション判定部６４と、インデックス変更部６５と、インデックス記憶部６６とを備える。また、ＩＲＰ受信部６７と、ＩＲＰ設定部６８と、応答送信部６９とを備える。
【００４３】
コマンド処理部６１は、テープドライブ１０にテープ２３のマウントを指示するコマンドを処理する。即ち、まず、テープ２３のマウントを指示するコマンドで指定されたオプションを取り出す。このオプションは、第１の列挙方法から第７の列挙方法のうちの何れの列挙方法を使用するかを示し、オプションが第５の列挙方法又は第６の列挙方法を使用することを示している場合は、どのディレクトリに存在するファイルを列挙するかも示す。また、テープ２３のマウントを指示するコマンドをテープドライブ１０に送信することによりマウント処理を行う。本実施の形態では、選択された列挙方法を受け付ける受付部の一例として、コマンド処理部６１を設けている。
オプション記憶部６２は、コマンド処理部６１が取り出したオプションの情報を記憶する。
【００４４】
インデックス受信部６３は、テープドライブ１０にテープ２３のマウントを指示するコマンドに応答して送信されたインデックスを受信する。ここで、インデックスは、テープ２３に記録されているので、テープドライブ１０がテープ２３から読み出したものを受信する。また、インデックスは、テープ２３に記録された複数のファイルを管理するための情報であり、各ファイルのファイル名、各ファイルの記録位置、各ファイルが存在するディレクトリ等の情報を含んでいる。本実施の形態では、管理情報の一例として、インデックスを用いており、管理情報を取得する取得部、管理情報を受信する受信部の一例として、インデックス受信部６３を設けている。
【００４５】
オプション判定部６４は、オプション記憶部６２に記憶されたオプションの情報に基づいて、指定されたオプションがディレクトリ構造又はファイル名の変更を必要とするものであるかどうかを判定する。そして、指定されたオプションがディレクトリ構造又はファイル名の変更を必要としないものであると判定すると、インデックス受信部６３が受信したインデックスをそのままインデックス記憶部６６に記憶する。また、指定されたオプションがディレクトリ構造又はファイル名の変更を必要とするものであると判定すると、インデックス受信部６３が受信したインデックスをインデックス変更部６５に受け渡す。
【００４６】
インデックス変更部６５は、オプション判定部６４から受け渡されたインデックスで管理されるディレクトリ構造又はファイル名を、オプション記憶部６２に記憶されたオプションの情報に従って変更し、インデックス記憶部６６に記憶する。
インデックス記憶部６６は、インデックス受信部６３が受信したインデックスを、そのままの状態で、又は、インデックス変更部６５により変更された状態で記憶する。本実施の形態では、管理情報を記憶する記憶部の一例として、インデックス記憶部６６を設けている。
【００４７】
ＩＲＰ受信部６７は、ＯＳ５０からＩＲＰを受信する。
ＩＲＰ設定部６８は、ＩＲＰ受信部６７が受信したＩＲＰにより用意されたバッファに、指定されたディレクトリ内のファイル名を格納する。このとき、ファイル名を複数回に分けて格納するのであれば、まず、ＩＲＰが持つFlagというパラメータを参照して、最初のＩＲＰの受信であるか２回目以降のＩＲＰの受信であるかを判定する。そして、最初のＩＲＰの受信であれば、ファイルシステム６０が内部で持っているファイルＩＤが０であるファイルから順にファイル名を格納する。また、２回目以降のＩＲＰの受信であれば、前回のＩＲＰの受信時にファイル名を格納したファイルのファイルＩＤの次のファイルＩＤを持つファイルから順にファイル名を格納する。尚、この場合、ファイルＩＤがｘであるファイルは、テープ２３上のファイルの記録位置を考慮してｘ番目に列挙すべきとされたファイル（例えば、テープ２３の先頭からｘ番目に記録されたファイル）であるとする。本実施の形態では、複数のファイルが記録された位置に応じた順序で複数のファイルを列挙した列挙情報の一例として、ＩＲＰにより用意されたバッファに格納されるファイル名を用いており、列挙情報を生成する生成部の一例として、ＩＲＰ設定部６８を設けている。
応答送信部６９は、ＩＲＰ設定部６８がＩＲＰにより用意されたバッファにファイル名を格納した処理の結果のステータスをＯＳ５０に返す。
【００４８】
尚、これらの機能のうち、コマンド処理部６１、インデックス受信部６３、オプション判定部６４、インデックス変更部６５、ＩＲＰ受信部６７、ＩＲＰ設定部６８、及び、応答送信部６９は、ＣＰＵ３０ａが磁気ディスク装置３０ｇに記憶されたプログラムをメインメモリ３０ｃに読み込んで実行することにより実現される。また、オプション記憶部６２は、例えばメインメモリ３０ｃにより実現され、インデックス記憶部６６は、例えば磁気ディスク装置３０ｇにより実現される。
【００４９】
次に、ホスト３０の動作について説明する。
図７は、テープ２３をマウントする際のファイルシステム６０の動作例を示したフローチャートである。
図示するように、ファイルシステム６０では、まず、コマンド処理部６１が、テープ２３のマウントを指示するコマンドからオプションを取り出す（ステップ６０１）。尚、ここで取り出されたオプションの情報は、オプション記憶部６２に記憶される。
また、コマンド処理部６１は、テープ２３のマウントを指示するコマンドをテープドライブ１０に送信することにより、テープ２３のマウント処理を行う（ステップ６０２）。具体的には、テープドライブ１０にテープ２３を引き込み、テープ２３への読み書きが行える状態にする。
【００５０】
これにより、テープドライブ１０では、ヘッド１４がテープ２３からインデックスを読み出す。そして、インデックスはチャネル１３及びバッファ１２を経由してホストＩ／Ｆ１１に渡され、ホストＩ／Ｆ１１がインデックスをホスト３０に送信する。そこで、ファイルシステム６０では、インデックス受信部６３がインデックスを受信する（ステップ６０３）。
【００５１】
次に、オプション判定部６４は、オプション記憶部６２に記憶されたオプションの情報を参照し、指定されたオプションがディレクトリ構造又はファイル名を変更するものかどうかを判定する（ステップ６０４）。
【００５２】
その結果、オプション判定部６４は、指定されたオプションがディレクトリ構造又はファイル名を変更するものでないと判定すれば、ステップ６０３で受信したインデックスを、ディレクトリ名及びファイル名を変えることなくインデックス記憶部６６に記憶する（ステップ６０５）。
例えば、上述した第１の列挙方法ではディレクトリ構造もファイル名も変更されないので、第１の列挙方法が指定された場合、インデックスはそのままの状態でインデックス記憶部６６に記憶される。また、上述した第７の列挙方法において、特別なディレクトリの下に第１の列挙方法でディレクトリを配置することが指定された場合、インデックスは、そのままの内容に、第１の列挙方法でディレクトリが配置されたときの内容が追加された状態で、インデックス記憶部６６に記憶される。
【００５３】
一方、オプション判定部６４は、指定されたオプションがディレクトリ構造又はファイル名を変更するものであると判定すれば、インデックス変更部６５に制御を移し、インデックス変更部６５が、ステップ６０３で受信したインデックスの内容を変更してインデックス記憶部６６に記憶する（ステップ６０６）。
例えば、上述した第３の列挙方法から第６の列挙方法までの列挙方法では、ディレクトリ構造が変更されるので、第３の列挙方法から第６の列挙方法までの何れかが指定された場合、インデックスはディレクトリ構造が変更された状態でインデックス記憶部６６に記憶される。また、上述した第２の列挙方法、第４の列挙方法、第６の列挙方法では、ファイル名が変更されるので、第２の列挙方法、第４の列挙方法、第６の列挙方法の何れかが指定された場合、インデックスはファイル名が変更された状態でインデックス記憶部６６に記憶される。更に、上述した第７の列挙方法において、特別なディレクトリの下に第２の列挙方法から第６の列挙方法までの何れかの列挙方法でディレクトリを配置することが指定された場合、インデックスは、そのままの内容に、第１の列挙方法から第６の列挙方法の何れかの列挙方法でディレクトリが配置されたときの内容が追加された状態で、インデックス記憶部６６に記憶される。
【００５４】
図８は、図７のステップ６０５又はステップ６０６でインデックス記憶部６６に記憶されたインデックスの内容の例を示した図である。尚、ここでは、テープ２３に図２に示したようにファイルが配置されているものとし、「FileA」の左側の断片、「FileB」、「FileC」、「FileA」の右側の断片の記録位置を、それぞれ、「Pos1」、「Pos2」、「Pos3」、「Ｐos4」と表記することとする。また、これらのファイルに対して設定されたディレクトリ構造は、「dir1」というディレクトリの直下に「FileA」及び「FileC」が存在し、「dir2」というディレクトリの直下に「FileB」が存在する、というものであるとする。
【００５５】
（ａ）に、第１の列挙方法が指定されたときに記憶されるインデックスの内容の例を示す。
第１の列挙方法が指定された場合は、図７のステップ６０４で「Ｎｏ」と判定されるので、インデックスの内容は変更されない。即ち、インデックスにおいて、ディレクトリ構造及びファイル名はそのままである。そして、ファイルごとにその記録位置が規定される。但し、「FileA」に対しては、２つの断片に分断されているので、２つの記録位置「Pos1」、「Pos4」が規定されている。
【００５６】
（ｂ）に、第２の列挙方法が指定されたときに記憶されるインデックスの内容の例を示す。
第２の列挙方法が指定された場合は、図７のステップ６０４で「Ｙｅｓ」と判定されるので、インデックスの内容は変更される。即ち、インデックスにおいて、ディレクトリとそのディレクトリの下にあるファイルとの関係は維持したまま、ファイルの断片は分断前のファイルが分かるようなファイル名でファイルとして管理される。そして、ファイルごとにその記録位置が規定される。具体的には、「FileA」を分断して得られた２つの断片は「FileA~1」、「FileA~2」というファイル名で管理され、「FileA~1」に対しては、元の断片の記録位置「Pos1」が、「FileA~2」に対しては、元の断片の記録位置「Pos4」が規定されている。
【００５７】
（ｃ）に、第３の列挙方法が指定されたときに記憶されるインデックスの内容の例を示す。
第３の列挙方法が指定された場合も、図７のステップ６０４で「Ｙｅｓ」と判定されるので、インデックスの内容は変更される。即ち、インデックスにおいて、ディレクトリ構造は失われ、パスが分かるようなファイル名でファイルが管理される。そして、ファイルごとにその記録位置が規定される。具体的には、「dir1」の下の「FileA」は、「dir1~~FileA」というファイル名で管理される。但し、この「dir1~~FileA」に対しては、２つの断片に分断されているので、２つの記録位置「Pos1」、「Pos4」が規定されている。
【００５８】
（ｄ）に、第４の列挙方法が指定されたときに記憶されるインデックスの内容の例を示す。
第４の列挙方法が指定された場合も、図７のステップ６０４で「Ｙｅｓ」と判定されるので、インデックスの内容は変更される。即ち、インデックスにおいて、ディレクトリ構造は失われ、パスが分かるようなファイル名でファイルが管理され、しかも、ファイルの断片は分断前のファイルが分かるようなファイル名でファイルとして管理される。そして、ファイルごとにその記録位置が規定される。具体的には、「dir1」の下の「FileA」を分断して得られた２つの断片は「dir1~~FileA~1」、「dir1~~FileA~2」というファイル名で管理され、「dir1~~FileA~1」に対しては、元の断片の記録位置「Pos1」が、「dir1~~FileA~2」に対しては、元の断片の記録位置「Pos4」が規定されている。
【００５９】
尚、第５の列挙方法が指定された場合、及び、第６の列挙方法が指定された場合は、インデックス内の特定のディレクトリの下の情報のみを、それぞれ、（ｃ）及び（ｄ）のように変更すればよいので、これらの列挙方法が指定されたときに記憶されるインデックスの内容については図示を省略している。
また、第７の列挙方法が指定された場合は、インデックス内の情報を、元の情報を残したまま、（ａ）〜（ｄ）の何れかのように変更した情報、又は、特定のディレクトリの下の情報のみを（ｃ）又は（ｄ）のように変更した情報を追加したものに変更すればよいので、この列挙方法が指定されたときに記憶されるインデックスの内容についても図示を省略している。
【００６０】
図９は、ファイルを列挙する際のファイルシステム６０の動作例を示したフローチャートである。
まず、ユーザが、Ｅｘｐｌｏｒｅｒ（登録商標）でのドラッグアンドドロップ操作、又は、コマンドプロンプトからのｘｃｏｐｙコマンドの投入操作により、ファイルのコピーを指示すると、アプリケーション４０（Ｅｘｐｌｏｒｅｒ（登録商標）、ｘｃｏｐｙ等）は、FindFirstFile()、FindNextFile()等のＡＰＩを呼ぶことで、ＯＳ５０に問い合わせを行う。
すると、ＯＳ５０は、図示するように、IRP_MJ_DIRECTORY_CONTROL（Minor Function CodeはIRP_MN_QUERY_DIRECTORY）というＩＲＰを生成し（ステップ５２１）、このＩＲＰをファイルシステム６０に送信する（ステップ５２２）。即ち、ＩＲＰを用いてファイルシステム６０に問い合わせを行う。
【００６１】
これにより、ファイルシステム６０では、ＩＲＰ受信部６７が、ＩＲＰをＯＳ５０から受信する（ステップ６２１）。
すると、ＩＲＰ設定部６８は、ＩＲＰ受信部６７が受信したＩＲＰが持つパラメータであるFlagを参照し、受け渡されたＩＲＰが最初のＩＲＰであるか２回目以降のＩＲＰであるかを判定する（ステップ６２２）。
【００６２】
その結果、最初のＩＲＰであると判定されれば、ＩＲＰ設定部６８は、変数ｘを０に設定する（ステップ６２３）。そして、アプリケーション４０で指定されたディレクトリ内に、ファイルシステム６０の内部で使用するファイルＩＤがｘ（この場合は０）であるファイルが存在するかどうかを判定する（ステップ６２４）。
【００６３】
ここで、そのようなファイルが存在すると判定されれば、ＩＲＰ設定部６８は、ＩＲＰにより用意されたバッファにそのファイルのファイル名をコピーし（ステップ６２５）、バッファにまだ空きがあるかどうかを判定する（ステップ６２６）。バッファにまだ空きがあると判定されれば、ＩＲＰ設定部６８は、変数ｘに１を加算し（ステップ６２７）、ステップ６２４〜６２６の処理を繰り返す。バッファにもう空きがないと判定されれば、その旨が応答送信部６９に伝えられ、応答送信部６９が、「STATUS_SUSCESS」というステータスをＯＳ５０に返す（ステップ６２９）。
【００６４】
また、ステップ６２４でディレクトリ内にファイルＩＤがｘであるファイルが存在しないと判定されれば、その旨が応答送信部６９に伝えられ、応答送信部６９が、「STATUS_NO_MORE_FILES」というステータスをＯＳ５０に返す（ステップ６２８）。
【００６５】
一方、ステップ６２２で２回目以降のＩＲＰであると判定されれば、ＩＲＰ設定部６８は、前回のＩＲＰによる処理で用いた変数ｘの最後の値に１を加算し（ステップ６２７）、ステップ６２４〜６２９の処理を行う。
【００６６】
その後、ファイルシステム６０の応答送信部６９からステータスを返されたＯＳ５０は、ステータスが「STATUS_SUSCESS」であるかどうかを判定する（ステップ５２３）。
その結果、ステータスが「STATUS_SUSCESS」であると判定されれば、ステップ５２１で再びＩＲＰを生成し、ステップ５２２で再びＩＲＰをファイルシステム６０に送信する。
一方、ステータスが「STATUS_SUSCESS」でない、つまり、「STATUS_NO_MORE_FILES」であると判定されれば、処理を終了する。これにより、ＯＳ５０は、ＩＲＰにより用意されたバッファ内のファイル名を列挙した情報を参照することとなる。
【００６７】
尚、ここでは、例えばコマンドプロンプトからｘｃｏｐｙコマンドを投入することにより、FindFirstFile()、FindNextFile()等のＡＰＩが呼ばれた場合の動作例を説明した。しかしながら、コマンドプロンプトからｄｉｒコマンドを投入した場合等、ファイルを列挙する如何なる場面でFindFirstFile()、FindNextFile()等のＡＰＩが呼ばれた場合の動作も同様である。
【００６８】
ところで、上記動作例において、ファイルを列挙する際の既存の動作と特に違う点は、ステップ６２５で、ファイルＩＤがｘであるファイルを、テープ２３上のファイルの記録位置に応じて決定する点である。具体的には、テープ２３上のファイルの記録位置の順序をそのままファイルＩＤの順序とする方法、テープ２３上のファイルの記録位置からファイルの読出しを速くする順序を算出してこれをファイルＩＤの順序とする方法等が考えられる。
このうち前者の方法では、図７のステップ６０５又はステップ６０６でインデックス記憶部６６に記憶されたインデックスを参照して、テープ２３の先頭に近い記録位置に対応するファイルから順に列挙する。その際、１つのファイルに対して複数の記録位置が記憶されていれば、複数の記録位置のうち最もテープ２３の先頭に近いものを用いて、ファイルを列挙する順序を決定する。
例えば、図８（ａ）のようなインデックスが記憶されていれば、「dir1」の下のファイルは、「FileA」、「FileC」の順に列挙される。図８（ｂ）のようなインデックスが記憶されていれば、「dir1」の下のファイルは、「FileA~1」、「FileC」、「FileA~2」の順に列挙される。図８（ｃ）のようなインデックスが記憶されていれば、ファイルは、「dir1」の下にあるか「dir2」の下にあるかとは関係なく、「dir1~~FileA」、「dir2~~FileB」、「dir1~~FileC」の順に列挙される。また、図８（ｄ）のようなインデックスが記憶されていれば、ファイルは、「dir1」の下にあるか「dir2」の下にあるかとは関係なく、「dir1~~FileA~1」、「dir2~~FileB」、「dir1~~FileC」、「dir1~~FileA~2」の順に列挙される。
【００６９】
但し、これはあくまで、テープ２３のマウント時にディレクトリ名又はファイル名の変更のみを必要に応じて行った場合の例である。例えば、テープ２３のマウント時に、ディレクトリ名又はファイル名を必要に応じて変更するだけでなく、ファイル名を記録位置に応じた順に並べ替えるようにすれば、ファイルの列挙時には、ファイルを並べられた順に取り出すだけで済むようになる。
【００７０】
尚、本実施の形態のように、ファイルの断片に分断前のファイルが分かるようなファイル名を付けたり、ディレクトリ構造をなくしてファイルにパスが分かるようなファイル名を付けたりすると、既存のアプリケーションが正常に動作するかという懸念が生じるかもしれない。
しかしながら、ＬＴＦＳによるアクセスと、本実施の形態のファイルシステム６０によるアクセスとを併存させることとすれば、このような懸念は生じなくなる。例えば、Ｅｘｐｌｏｒｅｒ（登録商標）において、ＦドライブはＬＴＦＳによりアクセスすべきものとし、Ｇドライブは第１の列挙方法でファイルを列挙するファイルシステム６０によりアクセスすべきものとし、Ｈドライブは第２の列挙方法でファイルを列挙するファイルシステム６０によりアクセスすべきものとすればよい。
【００７１】
また、本実施の形態では、第２の列挙方法、第４の列挙方法、第６の列挙方法の何れかの列挙方法が指定された場合に、ファイルの断片に分断前のファイルが分かるようなファイル名を付けるようにしたが、この限りではない。ファイルの断片にこれらを互いに区別できるようなファイル名を付けるようにしてもよい。
更に、本実施の形態では、第３の列挙方法から第６の列挙方法までの何れかの列挙方法が指定された場合に、ファイルにそのファイルのパスが分かるようなファイル名を付けるようにしたが、この限りではない。ファイルにこれらを互いに区別できるようなファイル名を付けるようにしてもよい。
【００７２】
また、本実施の形態では、テープ２３を例にとったが、本発明は、シーケンシャルにアクセス可能な如何なるシーケンシャルメディアに対しても適用可能である。
更に、本実施の形態では、ファイルが更新されると、そのファイル全体又はそのファイルの部分が無効化され、更新後のファイル全体又は更新後の部分が最後のファイルの後ろに追記されるシーケンシャルメディアを用いたが、この限りではない。第１の位置に記録されたファイルが更新されると、そのファイル全体又はそのファイルの部分が無効化され、更新後のファイル全体又は更新後の部分が他のファイルが記録されていない第２の位置に記録されるシーケンシャルメディアを用いてもよい。
【００７３】
このように、本実施の形態では、ファイルシステム６０に対して、テープ２３上の記録位置に応じた順にファイルを列挙するように改変を行った。これにより、Ｅｘｐｌｏｒｅｒ（登録商標）でドラッグアンドドロップしたり、コマンドプロンプトからｘｃｏｐｙを投入したりする単純な操作でディレクトリをコピー可能としたまま、ディレクトリ内のファイルがテープ２３上の記録位置に関わらず高速にコピーされるようになった。
【００７４】
また、本実施の形態では、第２の列挙方法が指定された場合、ファイルの分断された断片を別々のファイルとして扱い、これらのファイルを含めてテープ２３上の記録位置に応じた順に列挙するようにした。これにより、ファイルが分断されている場合であっても、簡単なスクリプトにより、ディレクトリ内のファイルがテープ２３上の記録位置に関わらず高速にコピーされるようになった。また、ウィルススキャンのためにファイルを列挙するのであれば、特に、ファイルの一部分を読んでそのファイルがウィルスに感染していることを検出可能なウィルススキャンソフトで、この第２の列挙方法は有効である。
【００７５】
更に、本実施の形態では、第３の列挙方法又は第４の列挙方法が指定された場合、複数のディレクトリの下のファイルをフラットに並べ、これらのファイルをテープ２３上の記録位置に応じた順に列挙するようにした。これにより、複数のディレクトリをコピーする場合であっても、簡単なスクリプトにより、複数のディレクトリ内のファイルがテープ２３上の記録位置に関わらず高速にコピーされるようになった。また、ウィルススキャンのためにファイルを列挙するのであれば、ＬＴＦＳ上の全てのファイルのウィルススキャンを、あるディレクトリの下のファイルについて行った後、別のディレクトリの下のファイルについて行う、といった順序で行うウィルススキャンソフトで、この第３の列挙方法又は第４の列挙方法は有効である。
【００７６】
更にまた、本実施の形態では、第５の列挙方法又は第６の列挙方法が指定された場合、特定のディレクトリについてのみ、第３の列挙方法又は第４の列挙方法でファイルを列挙するようにした。これにより、所望のディレクトリ内のファイルに限り、テープ２３上の記録位置に関わらず高速にコピーされるようになった。特定のディレクトリの配下のファイルについてのみ、所望の方法で列挙したいときに、この第３の列挙方法又は第４の列挙方法は有効である。
【００７７】
ここで、本発明は、全てハードウェアで実現してもよいし、全てソフトウェアで実現してもよい。また、ハードウェア及びソフトウェアの両方により実現することも可能である。また、本発明は、コンピュータ、データ処理システム、コンピュータプログラムとして実現することができる。このコンピュータプログラムは、コンピュータにより読取り可能な媒体に記憶され、提供され得る。ここで、媒体としては、電子的、磁気的、光学的、電磁的、赤外線又は半導体システム（装置又は機器）、或いは、伝搬媒体が考えられる。また、コンピュータにより読取り可能な媒体としては、半導体、ソリッドステート記憶装置、磁気テープ、取り外し可能なコンピュータディスケット、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、リジッド磁気ディスク、及び光ディスクが例示される。現時点における光ディスクの例には、コンパクトディスク−リードオンリーメモリ（ＣＤ−ＲＯＭ）、コンパクトディスク−リード／ライト（ＣＤ−Ｒ／Ｗ）及びＤＶＤが含まれる。
【００７８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００７９】
１０…テープドライブ、３０…ホスト、４０…アプリケーション、５０…ＯＳ、６０…ファイルシステム、６１…コマンド処理部、６２…オプション記憶部、６３…インデックス受信部、６４…オプション判定部、６５…インデックス変更部、６６…インデックス記憶部、６７…ＩＲＰ受信部、６８…ＩＲＰ設定部、６９…応答送信部
【図１】
0005782364.tif 000002
【図２】
0005782364.tif 000003
【図３】
0005782364.tif 000004
【図４】
0005782364.tif 000005
【図５】
0005782364.tif 000006
【図６】
0005782364.tif 000007
【図７】
0005782364.tif 000008
【図８】
0005782364.tif 000009
【図９】
0005782364.tif 000010