(57)【要約】      （修正有）【課題】キャッシュを利用したテープ記録システムにおいて、テープカートリッジの排出を短時間にする方法を提供する。【解決手段】ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みキャッシュ、書込みキャッシュ、およびインデックスファイルを保管するインデックス・キャッシュを設ける。メディアをドライブから排出する際に、インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、書込みキャッシュに保管された対象データをメディアのデータ・パーティションにファイルシステムを介さず書込むことと、を含む。テープカートリッジのアンロードの時の全キャッシュのデータの読み書きを高速化できる。【選択図】図１
2015225554.tif 000002
【特許請求の範囲】
【請求項１】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きする方法であって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込む  ことと、を含むファイルの読み書き方法。
【請求項２】
読み込みアクセスの対象データを受け取る前記（ｃ）のステップは、  
前記対象データが、書き込みキャッシュおよび読み込みキャッシュに存在することを確認することと、
書込みキャッシュに前記対象データが存在する場合、前記対象データをアプリケーションに送出することと、
読込みキャッシュに対象データが存在する場合、前記対象データをアプリケーションに送出することと、
対象データが書込みキャッシュおよび読込みキャッシュに存在しない場合、メディアからファイルシステムを使用して対象データをアプリケーションに送出することと、
を含む請求項１に記載の方法。
【請求項３】
読み込みアクセスの対象データを受け取る前記（ｃ）のステップは、読込みキャッシュがフルになった場合にもっとも使われていないデータを前記キャッシュから破棄して、前記キャッシュの空いたスペースにメディアから対象データを読み込み前記対象データの排出をすること、を含む請求項１に記載の方法。
【請求項４】
書込みアクセスの対象データを受け取る前記（ｃ）のステップは、
書込みアクセスの対象データが既に書込みキャッシュに保管されている複数のデータを含む複数のファイルの内の特定のファイルに含まれるかどうかを確認し、対象データおよび前記既に書き込まれた複数のデータをファイルごとに並べ替えることと、
インデックス・キャッシュに保管されたインデックスファイルに、前記ファイルごとに並べ替えた対象データを含む複数のデータのメタ情報を反映するようにインデックス・キャッシュ上のインデックスファイルを更新することと、
【請求項５】
インデックス・キャッシュ上のインデックスファイルを更新する前記ステップは、
書込みキャッシュに保管された既存のデータと前記対象データとが連続であるか確認することと、
前記対象データが書込みキャッシュに済みデータの少なくもと１つと連続である場合には、連続するそれらデータを連結してインデックスファイルをフラグメント化しないように更新することと、
を含む請求項４に記載の方法。
【請求項６】
インデックス・キャッシュのインデックスファイルを更新する前記ステップは、
書込みキャッシュに書き込まれた順番で、書き込みデータをそれらのオフセットおよびサイズで関連付けて書込み順のデータの表を一時ファイルとして作成することと、  
前記書込み順のデータ表に含まれるオフセットおよびサイズに基づいて、同じファイルに含まれる連続するデータを連結する接続データの表を一時ファイルとして作成することと、
前記接続データ表に含まれるオフセットおよびサイズに基づいて、書込みキャッシュに残っている複数のデータのエクステントを計算し、前記エクステントを前記メディアから取得した最新のインデックスファイルに追加してインデックス・キャッシュ上のインデックスファイルを更新すること、
を含む請求項５に記載の方法。
【請求項７】
書込みキャッシュに保管されたデータを、インデックス・キャッシュ上のインデックスファイルに記録している順番でメディアに書き出すことと、
全てのデータが書き出されたら、インデックス・キャッシュ上のインデックスファイルを、メディアのデータ・パーティションおよびインデックス・パーティションに書き込むこと、を含む請求項５に記載の方法。
【請求項８】
前記キャッシュを、ホスト側の記憶装置に設ける請求項１に記載の方法。
【請求項９】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きするプログラムであって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込むことと、
をテープ記録システムに実行させるプログラム。
【請求項１０】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きするテープ記録システムであって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込むことと、を実行するテープ記録システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、テープ記録システム用のファイルシステムを介した読み書きする方法に関する。詳しくは、本発明は、キャッシュの利用したファイルのデータの高速な読み書きにより、テープカートリッジ（テープ、メディア）の排出（unload）を短時間にする方法に関する。
【背景技術】
【０００２】
テープドライブ用ファイルシステムのＬＴＦＳ（Linear Tape FileSystem）は、メディアに、ＯＳ（Linux,Windows,AIX）上のアプリケーションからファイル単位でデータを書込み・読み出しすることを可能にする。ＬＴＦＳは、テープドライブ用ファイルシステムとして、第５世代ＬＴＯ（Linear Tape Open）テープドライブ（ＬＴＯ５）及び第４世代ＩＢＭエンタープライズテープドライブＴＳ１１４０と共に利用することができる。ＬＴＦＳによって、ユーザ（アプリケーション）はテープカートリッジをリムーバブルメディアとしてドライブに搭載および排出の操作で、大容量外部記録メディアとして使用することができる。テープドライブによるメディアの読み書きアクセスはメディアの排出、搭載、およびメディア上のデータの頭出しの操作にかかる時間が秒単位であり、アクセスパフォーマンスを劣化させる。
【０００３】
一般に、低速のストレージによる待ち時間を軽減するために、例えば高速のストレージ（例えば、ＨＤＤ，Ｆｌａｓｈストレージ）をキャッシュとして利用する手法が知られている。ＬＴＦＳを用いてテープカートリッジ（ＬＴＦＳテープ）を読み書きする場合、この手法は有用であると考えられる。ＬＴＦＳをテープカートリッジのようなリムーバブルメディアに対して使用する場合、その対象メディアがドライブから排出される際には、キャッシュ上のデータを全てリムーバブルメディアに書き出す。その際、キャッシュ上のデータの全てを、一気にＬＴＦＳテープに書き戻すことになる。メディアの排出がリクエストされてからの動作開始となるので、この書き戻し作業は短時間であればあるほど望ましい。従来のようなキャッシュの利用において、テープドライブ用ファイルシステムのＬＴＦＳの高速化を考慮されていない。
【０００４】
特許文献１は、小さいファイルを、キャッシュ上でまとめて書くことで容量を効率よく使に、容量の節約できる技術を示す。
【０００５】
特許文献２は、テープ上のデータを識別する情報をデータの最後尾に書き込む技術である。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特許公開２００３−１５０４１３号公報
【特許文献２】特許公開２００２−１８２９５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
そこで、本発明では、ディスク上にＬＴＦＳの操作を強化するキャッシュを用意することを考える。本発明では、キャッシュにデータのみでなくインデックスファイルも一時保管し、以降の読み書き操作はキャッシュ上で行うこと考える。
【０００８】
従って、本発明の目的は、メディアの排出リクエストに対してキャッシュからの書き出し作業を短時間にする方法を提供することである。
【課題を解決するための手段】
【０００９】
かかる目的のもと、本発明は、ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載（ロード）されたメディア（テープ）に対してファイルシステムを介したファイルの読み書きする方法である。この方法は、
（ａ）ホストのアプリケーションから受け取った読み書きアクセス（ＬＴＦＳ−ＡＰＩ）のファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティション（ＩＰ）に保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと（第１特殊ＡＰＩ）、
（ｃ）前記読み書きアクセス（ＬＴＦＳ−ＡＰＩ）に対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報（エクステント）を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出（アンロード）する際に（ＬＴＦＳ−ＡＰＩ）、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティション（ＩＰ）に書込むことと（第２特殊ＡＰＩ）、および、書込みキャッシュに保管された対象データ（ファイルの一部又は全部）を前記メディアのデータ・パーティション（ＤＰ）にファイルシステムを介さず書込むことと（第３特殊ＡＰＩ）、を含む。
【００１０】
また、ファイルシステムを介したファイルの読み書きする前記方法において、読み込みアクセス（ＬＴＦＳ−ＡＰＩ）の対象データを受け取る前記（ｃ）のステップは、
前記対象データが、書き込みキャッシュおよび読み込みキャッシュに存在することを確認することと、
書込みキャッシュに前記対象データが存在する場合、前記対象データをアプリケーションに送出することと、
読込みキャッシュに対象データが存在する場合、前記対象データをアプリケーションに送出することと、
対象データが書込みキャッシュおよび読込みキャッシュに存在しない場合、メディアからファイルシステムを使用して対象データをアプリケーションに送出することと、  を含むことを特徴とする。
【００１１】
また、読み込みアクセスの対象データを受け取る前記（ｃ）のステップは、読込みキャッシュがフルになった場合にもっとも使われていないデータを前記キャッシュから破棄して、前記キャッシュの空いたスペースにメディアから対象データを読み込み前記対象データの排出をすることを特徴とする。
【００１２】
また、ファイルの読み書きする前記方法において、書込みアクセスの対象データを受け取る前記（ｃ）のステップは、
書込みアクセスの対象データを受け取る前記（ｃ）のステップは、
書込みアクセスの対象データが既に書込みキャッシュに保管されている複数のデータを含む複数のファイルの内の特定のファイルに含まれるかどうかを確認し、対象データおよび前記既に書き込まれた複数のデータをファイルごとに並べ替えることと、
インデックス・キャッシュに保管されたインデックスファイルに、前記ファイルごとに並べ替えた対象データを含む複数のデータのメタ情報を反映するようにインデックス・キャッシュ上のインデックスファイルを更新することと、を含むことを特徴とする。
【００１３】
また、ファイルの読み書きする方法において、インデックス・キャッシュ上のインデックスファイルを更新する前記ステップは、
書込みキャッシュに保管された既存のデータと前記対象データとが連続であるか確認することと、
前記対象データが書込みキャッシュに済みデータの少なくもと１つと連続である場合には、連続するそれらデータを連結してインデックスファイルをフラグメント化しないように更新することとを含むことを特徴とする。
【００１４】
また、ファイルの読み書きする方法において、インデックス・キャッシュ上のインデックスファイルを更新する前記ステップ（ｃ）は、
書込みアクセスの対象データが、既に書込みキャッシュに保管されている複数のデータを含む複数のファイルの内の特定のファイルに含まれるかどうかを確認すること、
前記対象データが同一ファイルに含まれる場合、書込みキャッシュに保管された既存のデータと前記対象データとが連続であるか確認することと、
前記対象データが書込みキャッシュに済みデータの少なくもと１つと連続である場合には、連続するそれらデータを連結してインデックスファイルをフラグメント化しないように更新することとを含むことを特徴とする。
【００１５】
また、ファイルの読み書きする方法において、
書込みキャッシュに保管されたデータを、インデックス・キャッシュ上のインデックスファイルに記録している順番でメディアに書き出すことと（第３特殊ＡＰＩ）、
全てのデータが書き出されたら、インデックス・キャッシュ上のインデックスファイルを、メディアのデータ・パーティション（ＤＰ）およびインデックス・パーティション（ＩＰ）に書き込むことと（第２特殊ＡＰＩ）、を含むこと特徴とする。
【００１６】
また、ファイルの読み書きする方法において、前記キャッシュをホスト側の記憶装置に設けることを特徴とする。
【００１７】
更に、かかる目的のもと、ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載（ロード）されたメディア（テープ）に対してファイルシステムを介したファイルの読み書きするためのプログラムである。このプログラムは、
（ａ）ホストのアプリケーションから受け取った読み書きアクセス（ＬＴＦＳ−ＡＰＩ）のファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティション（ＩＰ）から取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセス（ＬＴＦＳ−ＡＰＩ）に対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報（エクステント）を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出（アンロード）する際に（ＬＴＦＳ−ＡＰＩ）、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティション（ＩＰ）に書込むこと（第２特殊ＡＰＩ）、および、書込みキャッシュに保管された対象データ（ファイルの一部又は全部）を前記メディアのデータ・パーティション（ＤＰ）にファイルシステムを介さず書込むことと（第３特殊ＡＰＩ）、
をテープ記録システムに実行させるプログラム。
【００１８】
更に、かかる目的のもと、本発明は、ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載（ロード）されたメディア（テープ）に対してファイルシステムを介したファイルの読み書きするテープ記録システムである。このテープ記録システムは、
（ａ）ホストのアプリケーションから受け取った読み書きアクセス（ＬＴＦＳ−ＡＰＩ）のファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティション（ＩＰ）から取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセス（ＬＴＦＳ−ＡＰＩ）に対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報（エクステント）を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出（アンロード）する際に（ＬＴＦＳ−ＡＰＩ）、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティション（ＩＰ）に書込むこと（第２特殊ＡＰＩ）、および、書込みキャッシュに保管された対象データ（ファイルの一部又は全部）を前記メディアのデータ・パーティション（ＤＰ）にファイルシステムを介さず書込むことと（第３特殊ＡＰＩ）、
を実行する。
【発明の効果】
【００１９】
上述の本発明の適用により、テープカートリッジのアンロードの時の全キャッシュのデータの読み書きを速くできるためカートリッジの排出を高速化できる。また、テープドライブ用ファイルシステムのファイルの何度のもの変更書込みでも、データのフラグメント（fragment）化を抑制できる。
【図面の簡単な説明】
【００２０】
【図１】本発明のシステム構成を示す。
【図２】ＬＴＦＳの２つのパーティションにより区分けされたテープを示す。
【図３】本発明が適用される、ホストおよびテープドライブ（磁気テープ装置）を含むテープストレージシステム（テープ記録システム）のハードウェア構成例を示す。
【図４】ＬＴＦＳフォーマットでのメディアのインデックス・パーティションとデータ・パーティションの内容を示す。
【図５】１つのファイルを部分的な書き換えの場合のインデックスファイルに含まれる位置メタ情報（エクステント）の変更内容を示す。
【図６】読込みアクセス（Ｒｅａｄアクセス）を受け取った場合フローチャートを示す。
【図７】読込みキャッシュ（Ｒｅａｄキャッシュ）へのデータの読み込みのフローチャートを示す。
【図８】書込みアクセス（Ｗｒｉｔｅアクセス）を受け取った場合のフローチャートを示す。
【図９】書込みアクセス（Writeアクセス）を受け取った場合のインデックスの更新フローチャートおよびキャッシュテーブルを示す。
【図１０】テープカートリッジを排出する場合のフローチャートを示す。
【発明を実施するための形態】
【００２１】
ホストのアプリケーションからファイルシステムを介して読み書きされる場合、キャッシュを設けてテープ記録システム（テープストレージ・システム）への書込み、読込み、メディアの排出を行う場合の実施の形態（実施例）を説明する。
図１は、本発明のテープ記録システムの構成を示す。
テープ記録システムは、ホストのアプリケーションに接続されたテープ装置およびテープライブラリである。実施例では、テープＡとテープＢというカートリッジが現在使用中である場合を例示する。読込み／書込みのキャッシュに対象データが保管されると共に、それらの別々のインデックスファイルが共にインデックス・キャッシュ上に置かれている。
【００２２】
テープストレージ用ファイルシステムのためのキャッシュを用意する際に、データのみでなくインデックスファイルもキャッシュし、以降の操作はキャッシュ上で行う。ＬＴＦＳテープの排出の際に、キャッシュ、例えばディスク上からＬＴＦＳテープにデータを書き戻す時に、ＬＴＦＳのＡＰＩ（ＬＴＦＳ−ＡＰＩ）を介さないで直接ＬＴＦＳテープにデータを書き込む。ファイルシステムのオーバーヘッドを排除して、テープドライブのネイティブのスピードでデータを書き出すことを可能とする。
【００２３】
本発明を適用する例として、ＩＢＭ ＬＴＦＳ  ＬＥ(Library Edition) のような、ＬＴＦＳによるアクセスを提供するソフトウェアを使用する、アプリケーションを想定する。
アプリケーションはユーザにファイルシステムを提供し、ディスク上のキャッシュをコントロールし、ＬＴＦＳソフトウェアが使用するテープドライブを独占的に使用している。ディスク上のキャッシュには、読込みキャッシュ（Readキャッシュ）と書込みキャッシュ（Writeキャッシュ）の２種類のキャッシュとインデックスファイルを保管するインデックス・キャッシュを用意する。複数のテープカートリッジを同時に扱う場合には、使用中のテープカートリッジごとにこれらのキャッシュを用意する。本発明ではキャッシュ・マネージャ（Ｃａｃｈ  Ｍａｎａｇｅｒ）が、ホストのアプリケーションからのＬＴＦＳを介した読み書きアクセス（ＬＴＦＳ- ＡＰＩによるアクセス）の他に３つの特殊ＡＰＩを用意する。
（第１特殊ＡＰＩ）テープ上のインデックスファイルを読み出すＡＰＩ。
（第２特殊ＡＰＩ）外部で用意したインデックスファイルを書き込むＡＰＩ。
（第３特殊ＡＰＩ）提供されるデータをデータ・パーティションの最後尾から連続して書き込むＡＰＩ。
これらは一例であり、キャッシュの部分およびキャッシュ・マネージャは、ファイルシステム（ＬＴＦＳソフトウェア）に設けてもよい。また、キャッシュ・マネージャ等は、ホスト側ばかりでなくテープドライブ側に組み込んでもよい。
【００２４】
本発明の実施例の基本動作を説明する。
本発明のキャッシュ・マネージャは、従来通りアプリケーション（ユーザ）にファイルシステムのインターフェース（ＬＴＦＳ−ＡＰＩ）を提供する。アプリケーションがＬＴＦＳ上のファイルにアクセスを要求したときに、キャッシュ・マネージャはインデックスファイルをテープから読み取り、キャッシュする。ＬＴＦＳテープがドライブから排出されるまで、対象テープ上のファイルへのアクセスは、テープ上のインデックスファイルではなく、キャッシュ上のインデックスファイルを使用して行われる。
【００２５】
ファイルへの書込みアクセス（Writeアクセス）が発生した場合、書込みキャッシュ→読込みキャッシュの順に対象データが存在しないか確認する。対象データが存在する場合はこれらキャッシュのデータ内容を提供する。対象データが存在しなかった場合にはテープ上から該当データを読み出す。読み出された部分は読込みキャッシュに保管される。
【００２６】
ファイルへのWriteアクセスが発生した場合、対象ファイルへの変更部分は書込みキャッシュに保存され、インデックス・キャッシュに保管されたインデックスファイルが更新される。この時、キャッシュに保管されているインデックスファイルは、キャッシュ上のデータがテープ上へ書き出された後の状態を表している。
【００２７】
読込みキャッシュがフルとなった場合、もっとも使われていない(ＬＲＵ：Least Recently Used)データからキャッシュ・データを破棄する。書込みキャッシュがフルとなった場合、もっとも使われていない(ＬＲＵ)データをテープ上に、ＬＴＦＳのファイルシステムＡＰＩを使用して書き出す。書き出し完了後、キャッシュ上のインデックスファイルを更新する。この時、書き出し完了後のテープから再度インデックスファイルを読み取り、その後に、キャッシュ上に残っているデータが書かれていくことを考慮して、インデックスファイルを更新する。
【００２８】
本発明を具体的な例で説明する。書込みキャッシュ内のデータＡ，Ｂ，Ｃが、この順にインデックス上にリストされているとき、データＢがＬＲＵデータとして書き出された場合、インデックスファル上のデータの並びを、データＡ、Ｂ，Ｃから、データＢ，Ａ，Ｃと並べ替える必要がある。ここで、データBまでを含んだインデックスファイルをテープから読み取ることができるので、その後ろに、データＡ，Ｃを追記する形で、キャッシュ上のインデックスファイルを更新する。ここでは便宜上「Fullとなった場合」と表現しているが、実装上はいくらかのマージンを確保して、記述した動作を行うことになる。
【００２９】
図２は、ＬＴＦＳの２つのパーティションにより区分けされたテープを示す。
ＬＴＯ５テープドライブは、テープの長手方向に沿った書き込み領域のラップ（wrap）を往復しながらデータを書く。ＬＴＦＳではこのラップ２本分（１往復分）をインデックス・パーティションとして利用している。テープの先端部（ＢＯＴ：Beginning of Tape）から終端部（ＥＯＴ：End of tape）に渡ってＩＰとＤＰとの２つに区分される。ヘッドが同時に読み書きするトラック群であり、トラック１６本がラップ１本に相当する。ＬＴＯ５のテープカートリッジでは、テープ長手方向は約８００ｍ、横手方向はラップ数８０本の幅である。ＩＰとＤＰとは２本のラップの保護領域（guard band）で区分される。テープはラップの長手方向に前後に進行し、ＢＯＴおよびＥＯＴにおいて進行する向きを反転することをラップターン（wrap turn）と呼ぶ。テープドライブのヘッドに対してテープの長手方向のＢＯＴからＥＯＴの移動時間は６０〜９０秒である。長手方向の半分のテープ移動時間は３０〜４５秒程度である。ＬＴＯ５のテープカートリッジの記憶容量は、約１TBである。例えば、メディア情報を含むＩＰの容量はユーザが変更できるが、典型的には全体容量の５％（５０GB）を占める。
【００３０】
テープドライブ用のファイルシステム、例えばＬＴＦＳでは、メディア上に書かれたデータをファイルとして見せることができる。ユーザがＬＴＦＳを利用してテープメディアに書き込むと、テープメディアではファイル本体の他、インデックスファイル（単にインデックスとも言う）と呼ばれるメタ情報をテープメディアに書き込む。インデックスは、メタ情報としてファイル名やファイル作成日、及び、メディア上の位置、サイズ、ファイル内のオフセットなどを含む位置メタ情報（図５で説明されるエクステント）を含む。ＩＰには、主に最新のインデックスが書き込まれる。ＤＰには、ファイルの本体、及び、インデックスの履歴が書き込まれる。
【００３１】
ＬＴＦＳ を用いてテープメディア上のファイルを読み書きする場合、レコードと呼ばれる単位でデータの読み書きを行う。レコードは、ＬＴＦＳではブロックと読んでＬＴＦＳフォーマットを与える。ブロックは、ファイルのデータが記録されるパーティション毎にパーティションの先頭から何番目のブロックであるという番号で管理される。各ファイルのインデックスファイル、ファイルのデータに対するブロックの番号で指示される位置メタ情報で構成される。
【００３２】
図３は、本発明が適用される、ホストおよびテープドライブ（磁気テープ装置）を含むテープストレージシステム（テープ記録システム）のハードウェア構成例を示す。
テープドライブ６０は、ホスト３００のアプリケーションからファイルシステム（ＬＴＦＳ）を介してファイルの読み書き要求を受け取る。テープドライブは、通信Ｉ／Ｆ（インターファース）１１０と、バッファ１２０と、記録チャネル１３０と、読書きヘッド１４０と、制御部１５０と、位置決め部１６０と、モータドライバ１７０と、モータ１８０とを含む。
【００３３】
インターフェース１１０は、ネットワークを介してホスト３００との通信を行う。例えばインターフェース１１０は、ホスト３００から、テープカートリッジ（メディア、テープ、メディア）４０へのデータの書込みを指示する書込みコマンドを受信する。またインターフェース１１０は、ホスト３００から、メディア４０からのデータ読出しを指示する読出しコマンドを受信する。インターファース１１０は、書込みデータの圧縮を読み出しデータの非圧縮を行う機能を有し、実際のデータに対してメディアへの記憶容量を約２倍近く高めている。
【００３４】
テ−プドライブ６０は、ホスト３００のアプリケーションから送られた複数のレコードで構築されるデータセット（ＤａｔａＳｅｔ：ＤＳと言う）単位でメディア４０への読み書きを行う。ＤＳの典型的な大きさは４ＭＢである。ホスト３００のアプリケーションは、ファイルシステム（例えばＬＴＦＳ−ＡＰＩ）によりファイルを指定して読み書きアクセスをテープドライブ６０に発行する。ファイルシステムは、ＳＣＳＩコマンドのレベルでレコードをテープドライブに書込み／読み出し要求（Ｗｒｉｔｅ／Ｒｅａｄ）を送る。ＤＳは複数のレコードで構成される。
【００３５】
各ＤＳは、データセットに関する管理情報を含む。ユーザデータはレコード単位で管理される。管理情報はデータセット情報テーブル（ＤＳＩＴ：Data Set Information Table）に含まれる。ＤＳＩＴは、そのＤＳに含まれるレコード又はブロック数およびＦＭ（Filemark）数、更にはメディアの先頭から書かれた累積レコード数および累積ＦＭ数、を含む。
【００３６】
バッファ１２０は、メディア４０に書込むべきデータ、また、メディアから読み出したデータを一時的に蓄積するメモリである。例えばバッファ１２０は、ＤＲＡＭ(Dynamic Random Access Memory）によって構成される。記録チャネル１３０は、バッファ１２０に蓄積されたデータをメディア４０に書き出すため、またはメディア４０から読み出されたデータをバッファ１２０に一時的に蓄積するために用いられる通信経路である。
【００３７】
読書きヘッド１４０は、データ読書き素子を有し、メディア４０へのデータの書込み及びメディアからのデータの読出しを行う。本実施形態に係る読書きヘッド１４０はまたサーボ読取り素子を有し、メディア４０に設けられたサーボトラックから信号を読み取る。位置決め部１６０は、カートリッジ４０の短手方向（幅方向）に読書きヘッド１４０の移動を指示する。モータドライバ１７０は、モータ１８０を駆動する。
【００３８】
テ−プドライブ６０は、ホスト３００から受取ったコマンドに従って、データのテ−プへの書込みやテ−プからの読出しをする。テ−プドライブ６０は、バッファ、読み書きチャネル、ヘッド、モ−タ、テ−プを巻きつけるリ−ルと、読み書き制御と、ヘッド位置制御システムと、モ−タドライバとを含む。テ−プドライブは、テープカートリッジを着脱可能に搭載する。テ−プは、リ−ルの回転に伴い、長手方向に移動する。ヘッドは、テテープの長手方向に移動してデータを書き込んだり、テ−プからデータを読出したりする。また、テープカートリッジ４０はカートリッジメモリ（ＣＭ：Cartridge Memory）と呼ばれる非接触不揮発性メモリを備える。テープカートリッジ４０に搭載されたＣＭは、テープドライブ６０により非接触的に読み書きされる。ＣＭはカートリッジ属性を保管する。テープドライブは、読出し及び書込み時に、ＣＭからカートリッジ属性を取り出して最適な読み書きができるようにする。
【００３９】
制御部１５０は、テープドライブ６０の全体の制御を行う。すなわち、制御部１５０は、インターフェースで受信したコマンドに従って、データのメディア４０への書込み及びメディア４０からのデータの読出しを制御する。また、制御部１５０は、読取られたサーボドラックの信号に従って位置決め部１６０を制御する。更に制御部１５０は、位置決め部１６０及びモータドライバ１７０を介してモータの動作を制御する。なお、モータドライバ１７０は制御部１５０に直接接続されてもよい。
【００４０】
テープドライブ６０は、更新対象のファイルが保管されたメディア４０をロードしている。メディアからインデックスを読み出し、インデックスをキャッシュ８０にコピーする。キャッシュ８０はＨＤＤ、Ｆｌａｓｈストレージ（例えばＳＤＤ）、およびＤＲＡＭなどの外部記憶装置であり、テープドライブ６０の側に含まれても良い。キャッシュはテープドライブ内のメモリ（ＤＲＡＭ）などであってもよい。ＬＴＦＳは、テープドライブがメディアをロードすると同時に、メディアのＩＰに保管されたインデックスをキャッシュにコピーする。ＬＴＦＳは、事前にキャッシュ８０にコピーされているインデックスを参照して、ファイルのフラグメント化するかを確認できる。
【００４１】
図４は、ＬＴＦＳフォーマットでのメディアのインデックス・パーティションとデータ・パーティションの内容を示す。
（Ａ）は、ＬＴＦＳフォーマットで初期化した直後のテープメディアに書き込まれるメタ情報を示す。
テープメディアを ＬＴＦＳ フォーマットで初期化した直後には、テープメディアにはＡ）に示す情報が書き込まれる。
・ＦＩＤ(Format Identification Data set)は、テープドライブがテープメディアを初期化する際、テープメディアの先頭に書き込まれる特殊なデータであり、テープメディア上のパーティションの数や各パーティションの容量などの情報を持つ。
・ＶＯＬ１ Ｌａｂｅｌは、ANSI Label とも呼ばれるもので、文字通りＡＮＳＩで規定された一般的なフォーマットのラベルである。
・ＬＴＦＳ Ｌａｂｅｌは、ＬＴＦＳ フォーマットで規定されたラベルで、このテープメディアがＬＴＦＳフォーマットのどのバージョンに準拠してフォーマットされたかといった情報を保持するラベルである。ここでメディアに記録されるレコードのサイズを指示する。レコードサイズはブロック・サイズ（block size）とも言う。ファイルの終端がレコード・サイズ（例えば、５１２ＫＢ）に満たない場合でもレコードサイズを確保する。
・ＦＭ(Filemark)とは、テープメディアで一般的に利用される、いわば本のしおりのようなものであり、データの位置合わせ(seek)を行う際に利用される。
・Index#0とは、フォーマット時に書き込まれるインデックスであり、この段階ではファイル自体は一つも存在しないためファイル固有の情報は持たないもののテープメディアのボリューム名などの情報を保持するため書き込まれる。
【００４２】
（Ｂ）は、ＬＴＦＳフォーマットで初期化した後にファイルを書き込んだ場合にテープメディアに書き込まれる情報を示す。
ＬＴＦＳフォーマットで初期化後、ファイル（Ｆｉｌｅ１）を書き込むと、テープメディア上に書き込まれたデータは（Ｂ）のようになる。太線で囲まれた部分が追加/更新されたデータである。Index#1はＦｉｌｅ１のメタ情報（インデックス）を持つ。ＩＰは最新のインデックスのみ保持する一方、ＤＰはインデックスの履歴を保持する。インデックスを更新するタイミングはファイルシステムの実装にまかされており、例えば一定時間毎に更新したり、テープドライブからテープメディアを取り出す時のみ更新したりしている。更に使い続ける場合も、ＩＰに置かれるインデックスは常に最新のインデックスのみが置かれ、ＤＰは既存のインデックスを上書きすることなく、ファイルおよびインデックスを追記していく。
【００４３】
図４の（Ｃ）は、（Ｂ）の状態の後、更にファイル（Ｆｉｌｅ２）を書き込んだ場合のテープメディアに書き込まれる情報を示す。
最初のファイル（Ｆｉｌｅ１）をテープメディア上に書き込んだ後、次のファイル（Ｆｉｌｅ２）を追加すると、格納されるＦｉｌｅ１にＦｉｌｅ２が連続してテープメディアに保管される。Index#2はＦｉｌｅ１およびＦｉｌｅ２のメタ情報（インデックス）を持つ。
【００４４】
図４の（Ｄ）は、（Ｂ）の状態の後、Ｆｉｌｅ１の末尾に文字情報（Ｆｉｌｅ1-2）を追加してＦｉｌｅ1を更新した後、メディア上に書き込まれるメタ情報を示す。
アプリケーションによるが、文書作成アプリケーション（例、マイクロソフト社のワード）は、メディア上に書き込まれたファイルを更新した後、１つのファイル（Ｆｉｌｅ1）がＦｉｌｅ1-1及びＦｉｌｅ1-2のようにフラグメント化（分散）して記録する。このようなファイルの書き換えでは、更新時のテープメディアの空き容量の減少分が更新した情報量に依存する。つまりメディアの容量は、ファイルサイズは大きくても更新量が少なければ空き容量はほとんど減らないため、デメリットはない。しかしながら、ファイルを読み出す際に位置合わせを実施する必要があるため、読み出しに時間がかかる。この位置合わせに時間がかかるという問題は、テープドライブはハードディスクと比較し位置合わせ所要時間が桁外れに長くかかるため、ＬＴＦＳ特有の課題であると言える。本発明では、フラグメント化したファイルの読み出し時間を向上する方法を提供することが課題である。
【００４５】
図５は、１つのファイルを部分的な書き換えの場合のインデックスファイルに含まれる位置メタ情報（エクステント）の変更内容を示す。
インデックス(index)はファイルの位置情報（ポインター）をエクステント（extent）と呼ぶ形式で保管する。エクステントの要素（element）は、ファイルの部分（データ部分）の先頭のブロックの番号（StartBlock）,その番号のブロック内での開始オフセット（ByteOffset）,データのサイズ（ByteCount）,データ部分のファイルでの位置（FileOffset）を含む。ユーザデータはブロックサイズで指定されたサイズ（例えば５１２KB）単位のレコード単位でメディアに記録される。
StartBlockは、テープメディアの先頭から固定サイズのブロックの順番を指す。ByteOffsetは、特定番号のブロック内で書き始めるオフセットを示す。
ByteCountは、エクステントで指示されるデータ部分のデータサイズを指す。
FileOffsetは、エクステントで指示されるデータ部分のファイル位置を指す。
ブロックは、レコードまたはＦＭ（FileMaker：レコードの区切り）を含み、LTFS Labelにおいてサイズが指定される。ユーザデータはブロックサイズで指定されたサイズ（例えば５１２KB）単位のレコード単位でメディアに記録される。
【００４６】
Ｆｉｌｅ１のサイズがＬをメディアに記録されている最初の場合（Ａ）、インデックスはエクステント（ｘ）であることを示す。Ｆｉｌｅ１は、テープメディアの長手方向にレコード単位で連続して書き込まれている斜線部分である。レコードはエクステントではブロックに相当する。データ部分の書換えの場合（Ｂ）は、（Ａ）でＦｉｌｅ１を書き込んだ後、そのＦｉｌｅ１のＭバイトから６００ＫＢを２５０ＫＢのレコードで書換えた場合エクステント（ｘ）（ｙ）（ｚ）の情報を示す。エクステント（ｙ）は、Ｆｉｌｅ１のデータ部分６００ＫＢバイトを変更して書き込まれる２５０KBのデータ（レコード）を指示する。データ部分の連続ではなく、後続するBlock番号（StartBlock:N+4）のレコードとして追記書込む。
エクステント(y)は、StartBlock=N+4のオフセットByteOffset=0から２５０KBを追記（append write）する。
エクステント（ｘ）は、StartBlock=NのByteCount=Mまでのデータ（レコード）を指示す。ブロックNのオフセットMから600KBのデータは変更される。
エクステント（ｚ）は、StartBlock=N+2のByteOffset=(M+600K)mod DからByteCount=L-(M+600)のデータ部分を示す。Dはブロックサイズ（例えば５１２KB）である。ByteOffsetはM+600KBをＤで割った余りであり、ブロック番号N+2でのオフセットを与える。
Ｆｉｌｅ１のインデックスは、データ部分な書換えにより、複数のエクステント（ｘ）→（ｙ）→（ｚ）にようにフラグメント（分散）化した配置情報を含む。ＬＴＦＳによるＦｉｌｅ１が編集されるとこのようにエクステントが分散し、変更されたＦｉｌｅ１へのシーケンシャルなアクセスができない。エクステント（ｘ）→（ｙ）→（ｚ）の位置合わせはテープの巻き戻し操作が発生させ、読み出しパフォーマンスを悪化させる課題を生じさせる。
【００４７】
テープ記録システムの構成（図１、図３）において、ホスト・アプリケーションからのファイルシステムを介した読込み書込み実施例の詳細説明を与える。本発明を実装したソフトウェア、即ちキャッシュ・マネージャは次の機能を実行する。
テープへの初回アクセスの段階で次のようにキャッシュを準備する。
該当テープ用の読込みキャッシュおよび書込みキャッシュを作成する。
該当テープのインデックスファイルを読み出して、そのインデックスファイル用の保管のためのキャッシュを作成する。
【００４８】
図６は、読込みアクセス（Ｒｅａｄアクセス）を受け取った場合フローチャートを示す。
(６１０)  対象データ（ファイルの全体あるいは部分）が書込みキャッシュにあるかどうかを確認する。
対象データが有る場合は何もせずステップ６４０を行う。
(６２０)  対象データが無い場合は対象データが読込みキャッシュにあるかどうか確認する。対象データが有る場合は何もせずステップ６４０を行う。
(６３０)  無い場合は対象データをテープからＬＴＦＳの提供するＡＰＩを使用して読み込む。 
(６４０)  書込みキャッシュあるいは読込みキャッシュから対象データを読み取り、ホスト・アプリケーションに送出する。
キャッシュとホスト又はテープ装置との間のデータ・トランザクションを管理するキャッシュ・マネージャが、読込みアクセスではこれらステップを繰り返す。
【００４９】
図７は、読込みキャッシュ（Ｒｅａｄキャッシュ）へのデータの読み込みのフローチャートを示す。
（７１０)  読込みキャッシュがデータでフルであるか確認する。
（７２０）キャッシュに空きがある場合、ファイルシステム（ＬＴＦＳ）を経由して、対象データをテープから読み取る。
（７３０）キャッシュがフルの場合、もっとも使われていない(ＬＲＵ)データをキャッシュから削除して開いたスペースにデータを読み取る。
キャッシュ・マネージャが読み込みアクセスに対して上記ステップを繰り返す。
【００５０】
図８は、書込みアクセス（Ｗｒｉｔｅアクセス）を受け取った場合のフローチャートを示す。
キャッシュ・マネージャは、ホストのアプリケーションから書込みアクセスを受け取ると次のステップを行う。
(８００)ＬＴＦＳ−ＡＰＩを介した書込みアクセスのデータを書込みキャッシュに保管する。
(８１０)  書込みキャッシュがフルになる場合には、もっとも使われていない(ＬＲＵ)データを、テープへＬＴＦＳのファイルシステムを経由して書き出す。具体的な書込みアクセス後、同期要求（Ｓｙｎｃコマンド）により完全にテープにデータを確実に保存する。
(８２０)  書き出しの完了後テープから新しいインデックスファイルを取得してインデックス・キャッシュに保管する（第１特殊ＡＰＩ）。このステップは、第１特殊ＡＰＩにより再度テープ上のインデックスファイルを取得してキャッシュ上でもインデックスファイルが新しいことを保証する。
(８３０) テープから取得した新しいインデックスファイルにキャッシュに残っているデータに対応する情報を反映させ最新のインデックスファイルに更新する。ステップ８２０においてテープに書き出したデータ以外に、未だテープにキャッシュアウトされるべきデータが残っている。これら残余のデータを反映した最新のインデックスファイルを構築する必要がある。なお、インデックスファイルの再構築の際に書込みキャッシュ内でデータのインデックスファイルのフラグメント化をできるだけ抑えることを考慮する。図９の更新のフローチャートで後述するが、書込みキャッシュ上の同一ファイルに含まれる連続した複数のデータを連結してテープに書き込む手法を採用する。
【００５１】
図９は、書込みアクセス（Writeアクセス）を受け取った場合のインデックスの更新フローチャートおよびキャッシュテーブルを示す。キャッシュ・マネージャが、書込みデータを管理するキャッシュテーブルを参照してキャッシュ内で最新のインデックスファイルを更新する処理を与える。
（ｂ）は、キャッシュ内でデータを反映した最新のインデックスファイルを更新する際に、キャッシュ・マネージャが参照する書込みデータのリストとその位置・サイズを含むメタ情報を表したキャッシュテーブルを示す。
キャッシュテーブルは、キャッシュ内のデータ内容を記録・検索するために、書き込みキャッシュに書き込まれたデータ順番の書込み順データ表（上表）と、同じファイルに含まれるデータを連続させて１つのファイルを連続するデータを連結した連続データ表（下表）とを与える。書込み順データ表（上表）は、書込み時系列順でリストした一時ファイルである。この表は、各データにそのデータが含まれるファイル内でのオフセット（offset）およびサイズ（length）を示している。連続データ表は、書込みデータ順表のオフセットおよびサイズに基づいて、同じファイルに含まれる連続するデータを連結させた一時ファイルとする。
【００５２】
（ａ）は、テープに保管されていないキャッシュ内の対象データを反映したインデックスファイルの更新を表すフローチャートを示す。キャッシュ・マネージャが書込みアクセスを受取り、次のステップを実行する。
（９００）キャッシュ・マネージャはホスト・アプリケーションからＬＴＦＳ−ＡＰＩによる新しいデータ（対象データ）の書込みアクセスを受け取る。新しいデータ、即ち対象データ（ファイルの全体あるいは部分）を書込みキャッシュに保管する。
（９１０）新しいデータのTape上のパス名（ファイル名）と一致するデータをキャッシュテーブル（上表）から検索する。キャッシュ・マネージャは、新たに書き込まれたデータを含むファイルと同じデータが、ホスト・アプリケーションからＬＴＦＳ−ＡＰＩを介して順次書き込まれた、データ（例えば、001.dat、002.dat、003.dat）が同じファイル名のファイルがあるかを検索する。アプリケーションは、ファイルシステムのＬＴＦＳ−ＡＰＩを用いて、パス名、オフセット、サイズを指定して対象データを書込む。キャッシュ・マネージャはＬＴＦＳ−ＡＰＩから、各データおよびそのメタ情報を獲得して、書込み順データ表（上表）を一時ファイルとして作成できる。
（９２０）キャッシュ・テーブル（上表）に、新たなデータを含むファイル名と同じものに含まれるデータがあるか確認する。キャッシュテーブルに同じファイルのリストが新しいデータのファイルが存在しない場合はステップ９７０を行う。
（９３０）新しいデータのファイルと同じファイル名に含まれる複数のデータは、ファイルごとにまとめて並べ替える。複数のデータは、アプリケーションからの書込み順からファイル単位でまとめて整理する。1つのファイル内の複数のデータの順番は、ファイル内の位置オフセット（offset）の順番で並べる。キャッシュテーブルにある同じファイルのデータが新しいデータと連続していない場合であってもファイルごとに集約してテープ上に配置することを意図している。特に、同じファイル名、例えばfileA.txtに含まれる２つのデータ001.datおよび003.datが連続している場合は連結するステップ処理９５０を実行する。同じファイルの新しいデータの連続性は、書込み順データ表（上表）を参照して各データのオフセットとサイズから判断できる。
（９４０）キャッシュテーブルから見つかった同一ファイルのデータに対応するインデックスファイル内の表記（エクステント）を削除する。キャッシュテーブルに新しいデータを含む同じファイルのデータが既に有る場合、インデックス・キャッシュに登録されている直近のインデックスファイルは、新しいデータの表記、即ち位置メタ情報（エクステント）を反映していない。直近のインデックスファイルから同じファイルの既存データのエクステントを削除して（９４０）、ステップ９５０で生成された接続データのエクステント（９７０）で置き換えて、最新のインデックスファイルを再構築（９８０）する必要がある。
（９５０）キャッシュテーブルから見つかった同じファイルの内のデータと、追加の新しいデータとを接続し、接続データとして当該テーブルに記録管理する。ステップ９３０において同じファイルに含まれる複数のデータを纏めて、ファイル内のオフセット順に並べ替えられている。特にオフセットとサイズから２つデータが連続する場合、２つのデータを連結した１つの連続データとしたオフセットおよびサイズを書き換えている。例えば、接続データとは、下表に含まれる同じパス名fileA.txtに含まれる001.dat＋003.datを意味する。なお、この明細書では、同じファイルに含まれる２以上のデータであって完全に連続していないデータであっても、同じファイルに含まれる２以上のデータを便宜的に「連続データ」と呼ぶ。具体的には書込み順データ表（上表）を参照すると、同じファイルfileA.txtに含まれる２つのデータ001.datおよび003.datの間に、別のファイルfileB.txtのデータ002.daを介在させてテープ配置で、読み出しパフォーマンスに影響を与える。しかし、ホスト・アプリケーションから書き込まれた順番にかかわらず、同じファイル内に存在するデータとして書込みテープ位置の分散（フラグメント化）を小さくできる点で意義がある。
（９６０）接続データを新しいデータとして、更に同じファイル名で連続する３番目のデータが存在するかを確認ステップ９２０で実行する。この例のキャッシュテーブル（下表）には連続データ001.datおよび003.dat以外は存在しないので、ステップ９２０はＮＯとなる。ステップ（９７０、９８０）において、接続データ001.dat＋003.datを新しいデータとして、インデックスファイルに反映させる処理を行う。
（９７０）新しいデータのサイズからブロック数を算出し、エクステントを計算する。
（９８０）新しいデータに対応するインデックスファイル内の表記、即ち位置メタ情報（エクステント）を更新する。ステップ９７０で計算されたエクステントが新しいデータに対応するインデックスファイル内の表記、即ち位置メタ情報を与える。新たなデータは特定のファイルの１つのデータとして最新のインデックスファイルを確保するために、直近のインデックスファイルに新たなデータの表記（エクステント）を追加する。
（９９０）ホスト・アプリケーションから新しいデータの書込みアクセスを受け取り、ステップ９１０〜９８０を繰り返す。
【００５３】
接続データの生成について詳述する。接続データは特定のファイルfileA.txtに含まれる１つの連続するデータとして記録し、第３特殊ＡＰＩでテープに書き出す際にファイルのフラグメント化を避けることができる。書込み順データ表（上表）は、書込みキャッシュに、同じファイル名fileA.txtの２つのデータ001.datおよび003.dat間に別のファイル名fileB.txtのデータ002.datがアプリケーションから書き込まれていることを表す。キャッシュ・マネージャは、同じファイル名fileA.txtに含まれる２つのデータを検索できる。また、２つのデータの位置が、メタ情報（オフセット、サイズ）から連続していることを判定できる。キャッシュ・マネージャは、同じファイル名（dirA/fileA.txt）に含まれる２つのデータ001.dat（オフセット=0,サイズ=1024000）および003.dat（オフセット=1024000, サイズ=512000）を連結して、１つの位置メタ情報（オフセット=0、サイズ=1536000）を与えて３つのデータを並べ替えて接続データ表（下表）を生成する。キャッシュ・マネージャは、ファイル名fileA.txtに含まれる連結した２つのデータ001.datおよび003.datのエクステント（図５参照）を、接続データ表を参照して位置メタ情報（オフセット=0、イズ=1536000））から生成できる。
【００５４】
図１０は、テープカートリッジを排出する場合のフローチャートを示す。
（１０００）メディアの排出にともない、Writeキャッシュの全データをテープに吐き出す（Flush）処理を実行することを示す。
(１１００)  書込みキャッシュのデータを、キャッシュ上のインデックスファイルに記録している順番でテープに書き出す。ここでは第３特殊ＡＰＩを用い、ファイルシステム、例えばＬＴＦＳ−ＡＰＩは使用しない。テープドライブの固有の書込みパフォーマンスを発揮させるため、高速なデータのＬＴＦＳテープへの退避できる。
(１２００)  全てのデータが書き出されたら、インデックスファイル・キャッシュ上の最新のインデックスファイルを、データ・パーティションおよびインデックス・パーティションに第２特殊ＡＰＩを使用して書き込む。テープドライブの固有の書込みパフォーマンスを発揮させるため、高速なインデックスファイルのＬＴＦＳテープへの退避できる。
(１３００）上記ステップのＬＴＦＳテープへのキャッシュ内の書込みデータおよび最新のインデックスファイルを吐き出しが完了した後、そのＬＴＦＳテープのテープドライブからの排出が実行される。
キャッシュ・マネージャは、メディアの排出の際に、第２特殊ＡＰＩおよび第３特殊ＡＰＩを使用して、最新書込みデータを反映した最新インデックスファイルをＬＴＦＳテープに書込み、ＬＴＦＳフォーマットを保証している。
【００５５】
以上より、上述の実施例の方法では、テープカートリッジのアンロードの時の全キャッシュのデータの書き出しが速いできるため、カートリッジの排出を高速化できる。また、本発明は、キャッシュ上のファイルに何度も修正を加えるようなオペレーションをする場合にインデックスのフラグメント化最小化、即ちデータの分散化を抑えることが出来る。なお、本発明を実施の形態（実施例）を用いて説明したが、本発明の範囲は上記実施例には限定されない。本発明の精神及び範囲から逸脱することなく様々に変更したり代替態様を採用したりすることが可能なことは、当業者に明らかである。
【符号の説明】
【００５６】
４０…テープカートリッジ（メディア、テープ）、
６０…テープドライブ（テープ記録ドライブ）、
８０…外部記憶装置（例、ＨＤＤ）、キャッシュ、
１１０…通信Ｉ／Ｆ（インターフェース）、
１２０…バッファ（ドライブバッファ）、
１３０…記録チャネル、
１４０…読み書きヘッド、
１５０…制御部（コントローラ、読み書き制御を含む）、
１６０…位置決め部
１７０…モータドライバ、
１８０…モータ、
３００…ホスト（サーバ）、
【図１】
2015225554.tif 000003
【図２】
2015225554.tif 000004
【図３】
2015225554.tif 000005
【図４】
2015225554.tif 000006
【図５】
2015225554.tif 000007
【図６】
2015225554.tif 000008
【図７】
2015225554.tif 000009
【図８】
2015225554.tif 000010
【図９】
2015225554.tif 000011
【図１０】
2015225554.tif 000012
【手続補正書】
【提出日】平成26年5月30日(2014.5.30)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きする方法であって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込むことと、
を含むファイルの読み書き方法。
【請求項２】
読み込みアクセスの対象データを受け取る前記（ｃ）のステップは、  
前記対象データが、書き込みキャッシュおよび読み込みキャッシュに存在することを確認することと、
書込みキャッシュに前記対象データが存在する場合、前記対象データをアプリケーションに送出することと、
読込みキャッシュに対象データが存在する場合、前記対象データをアプリケーションに送出することと、
対象データが書込みキャッシュおよび読込みキャッシュに存在しない場合、メディアからファイルシステムを使用して対象データをアプリケーションに送出することと、
を含む請求項１に記載の方法。
【請求項３】
読み込みアクセスの対象データを受け取る前記（ｃ）のステップは、読込みキャッシュがフルになった場合にもっとも使われていないデータを前記キャッシュから破棄して、前記キャッシュの空いたスペースにメディアから対象データを読み込み前記対象データの排出をすること、を含む請求項１に記載の方法。
【請求項４】
書込みアクセスの対象データを受け取る前記（ｃ）のステップは、
書込みアクセスの対象データが既に書込みキャッシュに保管されている複数のデータを含む複数のファイルの内の特定のファイルに含まれるかどうかを確認し、対象データおよび前記既に書き込まれた複数のデータをファイルごとに並べ替えることと、
インデックス・キャッシュに保管されたインデックスファイルに、前記ファイルごとに並べ替えた対象データを含む複数のデータのメタ情報を反映するようにインデックス・キャッシュ上のインデックスファイルを更新することと、
を含む請求項１に記載の方法。
【請求項５】
インデックス・キャッシュ上のインデックスファイルを更新する前記ステップは、
書込みキャッシュに保管された既存のデータと前記対象データとが連続であるか確認することと、
前記対象データが書込みキャッシュに済みデータの少なくもと１つと連続である場合には、連続するそれらデータを連結してインデックスファイルをフラグメント化しないように更新することと、
を含む請求項４に記載の方法。
【請求項６】
インデックス・キャッシュのインデックスファイルを更新する前記ステップは、
書込みキャッシュに書き込まれた順番で、書き込みデータをそれらのオフセットおよびサイズで関連付けて書込み順のデータの表を一時ファイルとして作成することと、  
前記書込み順のデータ表に含まれるオフセットおよびサイズに基づいて、同じファイルに含まれる連続するデータを連結する接続データの表を一時ファイルとして作成することと、
前記接続データ表に含まれるオフセットおよびサイズに基づいて、書込みキャッシュに残っている複数のデータのエクステントを計算し、前記エクステントを前記メディアから取得した最新のインデックスファイルに追加してインデックス・キャッシュ上のインデックスファイルを更新すること、
を含む請求項５に記載の方法。
【請求項７】
書込みキャッシュに保管されたデータを、インデックス・キャッシュ上のインデックスファイルに記録している順番でメディアに書き出すことと、
全てのデータが書き出されたら、インデックス・キャッシュ上のインデックスファイルを、メディアのデータ・パーティションおよびインデックス・パーティションに書き込むこと、
を含む請求項５に記載の方法。
【請求項８】
前記キャッシュを、ホスト側の記憶装置に設ける請求項１に記載の方法。
【請求項９】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きするプログラムであって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込むことと、
をテープ記録システムに実行させるプログラム。
【請求項１０】
ホストに接続されテープ装置を含むテープ記録システムにおいて、前記テープ装置に搭載されたメディアに対してファイルシステムを介したファイルの読み書きするテープ記録システムであって、
（ａ）ホストのアプリケーションから受け取った読み書きアクセスのファイルに含まれる対象データを保管するためのキャッシュであって、読込みアクセスによりメディアからの対象データを保管する読込みキャッシュ、書込みアクセスによるアプリケーションからの対象データを保管する書込みキャッシュ、および前記メディアのインデックス・パーティションから取得したインデックスファイルを保管するインデックス・キャッシュに区分けされ前記キャッシュを設けることと、
（ｂ）前記読み書きアクセスにより前記メディアをドライブに搭載して、メディアのインデックス・パーティションに保管された複数のファイルのメタ情報を含むインデックスファイルをインデックス・キャッシュに読み込むことと、
（ｃ）前記読み書きアクセスに対して、
対象データを書込みキャッシュ及び読み込みキャッシュに保管すること、および、
前記書込みキャッシュに保管された対象データについて、前記対象データの位置メタ情報を反映するように前記インデックスファイルを更新して最新のインデックスファイルをインデックス・キャッシュに保管することと、
（ｄ）前記メディアをドライブから排出する際に、
インデックス・キャッシュに保管された更新されたインデックスファイルをメディアのインデックス・パーティションに書込むことと、および、書込みキャッシュに保管された対象データを前記メディアのデータ・パーティションにファイルシステムを介さず書込むことと、
を実行するテープ記録システム。