(57)【特許請求の範囲】
【請求項１】
ホストを含む一以上の上位装置に接続されたストレージシステムにおいて、
データを記憶する複数のテープ装置グループと、
アクセス先がランダムに異なるアクセスであるランダムアクセスをテープ装置よりも高速に行うことのできる一以上の記憶装置と、
前記一以上の記憶装置をエミュレーションした複数の仮想記憶装置と、
前記ホストからのデータアクセスコマンドを制御するコントローラと
を備え、
各テープ装置グループは、複数のテープ装置を有し、
各テープ装置グループについて、連続した二以上のテープＬＵがあり、
各テープＬＵは、テープ装置グループ内の一以上のテープ装置に基づく論理的な記憶ユニットであり、
前記複数の仮想記憶装置に、複数のテープＬＵがそれぞれマッピングされており、
前記コントローラは、
（Ａ）前記複数の仮想記憶装置のうちの或る仮想記憶装置である対象仮想記憶装置を指定したデータアクセスコマンドを前記ホストから受ける前に、前記対象仮想記憶装置を指定した所定の準備コマンドを受信し、その準備コマンドに応答して、下記の処理（ａ１）及び（ａ２）を行い、
（ａ１）前記対象仮想記憶装置について、前記一以上の記憶装置上に記憶領域を確保する、
（ａ２）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループからシーケンシャルに全データを前記確保した記憶領域に読出す、
（Ｂ）前記ホストから前記対象仮想記憶装置を指定したデータアクセスコマンドを受信した場合、前記対象テープＬＵに対してではなく、前記確保した記憶領域に対してデータアクセスを行い、
（Ｃ）前記対象仮想記憶装置を指定した所定の準備終了コマンドを受信し、その準備終了コマンドに応答して、前記確保した記憶領域上の全データを、前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループにシーケンシャルに書き込む、
ストレージシステム。
【請求項２】
前記（ａ２）において、前記コントローラは、
（ａ２１）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置が他のテープＬＵの基にもなっているか否かを判断し、
（ａ２２）前記（ａ２１）の判断の結果が肯定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループ内の全データを前記確保した記憶領域に読出し、
（ａ２３）前記（ａ２１）の判断の結果が否定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループのうちの、対象テープＬＵの基になっているテープ装置のみから、前記確保した記憶領域にデータを読み出す、
請求項１記載のストレージシステム。
【請求項３】
前記対象仮想記憶装置について前記確保した記憶領域に対する前記データアクセスが終了する都度に、前記（Ｃ）で前記所定の準備終了コマンドを受信する、
請求項１又は２記載のストレージシステム。
【請求項４】
前記コントローラは、複数種類のアクセスモードのうちの選択されたアクセスモードに応じて、前記テープ装置に対して直接アクセスを行うか否かを制御する、
請求項１乃至３のうちのいずれか１項に記載のストレージシステム。
【請求項５】
前記複数種類のアクセスモードには、シーケンシャルリードモードが含まれており、
前記コントローラは、前記シーケンシャルリードモードが選択された場合には、前記対象データＬＵからデータを読み出して前記一以上の記憶装置を介さずに前記ホストに送信する、
請求項４記載のストレージシステム。
【請求項６】
前記シーケンシャルリードモードは、前記対象仮想記憶装置全体のリストアの場合に選択される、
請求項５記載のストレージシステム。
【請求項７】
前記複数種類のアクセスモードには、シーケンシャルライトモードが含まれており、
前記コントローラは、前記シーケンシャルライトモードが選択された場合には、前記ホストからデータを受信し、該受信したデータを、前記一以上の記憶装置を介さずに前記対象テープＬＵに書込む、
請求項５又は６記載のストレージシステム。
【請求項８】
前記シーケンシャルライトモードは、前記指定仮想記憶装置全体に対するバックアップの場合に選択される、
請求項７記載のストレージシステム。
【請求項９】
一以上の上位装置と該一以上の上位装置に接続されたストレージシステムとを備えた計算機システムで実現される方法において、
前記一以上の上位装置には、少なくともホストが含まれ、
前記ストレージシステムが、
データを記憶する複数のテープ装置グループと、
一以上の記憶装置と、
記憶装置をエミュレーションした複数の仮想記憶装置と、
前記ホストからのデータアクセスコマンドを制御するコントローラと
を備え、
各テープ装置グループは、複数のテープ装置を有し、
各テープ装置グループについて、連続した二以上のテープＬＵがあり、
各テープＬＵは、テープ装置グループ内の一以上のテープ装置に基づく論理的な記憶ユニットであり、
前記複数の仮想記憶装置に、複数のテープＬＵがそれぞれマッピングされており、
（Ａ）前記一以上の上位装置のいずれかかが、前記複数の仮想記憶装置のうちの或る仮想記憶装置である対象仮想記憶装置を指定したデータアクセスコマンドの発行前に、前記対象仮想記憶装置を指定した所定の準備コマンドを前記ストレージシステムに送信し、
（Ｂ）前記コントローラが、前記所定の準備コマンドを受信し、該準備コマンドに応答して、下記の処理を行い、
（ｂ１）前記対象仮想記憶装置について、前記一以上の記憶装置上に記憶領域を確保する、（ｂ２）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループからシーケンシャルに全データを前記確保した記憶領域に読出す、
（Ｃ）前記ホストが、前記対象仮想記憶装置を指定したデータアクセスコマンドを送信し、
（Ｄ）前記コントローラが、前記データアクセスコマンドを受信した場合、前記対象テープＬＵに対してではなく、前記確保した記憶領域に対してデータアクセスを行い、
（Ｅ）前記一以上の上位装置のいずれかかが、前記対象仮想記憶装置を指定した所定の準備終了コマンドを送信し、
（Ｆ）前記コントローラが、前記所定の準備終了コマンドを受信し、その準備終了コマンドに応答して、前記確保した記憶領域上の全データを、前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループにシーケンシャルに書き込む、
記憶制御方法。
【請求項１０】
前記（ｂ２）において、前記コントローラは、
（ｂ２１）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置が他のテープＬＵの基にもなっているか否かを判断し、
（ｂ２２）前記（ｂ２１）の判断の結果が肯定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループ内の全データを前記確保した記憶領域に読出し、
（ｂ２３）前記（ｂ２１）の判断の結果が否定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループのうちの、対象テープＬＵの基になっているテープ装置のみから、前記確保した記憶領域にデータを読み出す、
請求項９記載の記憶制御方法。
【請求項１１】
前記対象仮想記憶装置について前記確保した記憶領域に対する前記データアクセスが終了する都度に、前記一以上の上位装置のいずれかかが、前記所定の準備終了コマンドを送信する、
請求項９又は１０記載の記憶制御方法。
【請求項１２】
一以上の上位装置と
該一以上の上位装置に接続されたストレージシステムと
を備え、
前記一以上の上位装置には、少なくともホストが含まれ、
前記ストレージシステムが、
データを記憶する複数のテープ装置グループと、
一以上の記憶装置と、
記憶装置をエミュレーションした複数の仮想記憶装置と、
前記ホストからのデータアクセスコマンドを制御するコントローラと
を備え、
各テープ装置グループは、複数のテープ装置を有し、
各テープ装置グループについて、連続した二以上のテープＬＵがあり、
各テープＬＵは、テープ装置グループ内の一以上のテープ装置に基づく論理的な記憶ユニットであり、
前記複数の仮想記憶装置に、複数のテープＬＵがそれぞれマッピングされており、
（Ａ）前記一以上の上位装置のいずれかかが、前記複数の仮想記憶装置のうちの或る仮想記憶装置である対象仮想記憶装置を指定したデータアクセスコマンドの発行前に、前記対象仮想記憶装置を指定した所定の準備コマンドを前記ストレージシステムに送信し、
（Ｂ）前記コントローラが、前記所定の準備コマンドを受信し、該準備コマンドに応答して、下記の処理を行い、
（ｂ１）前記対象仮想記憶装置について、前記一以上の記憶装置上に記憶領域を確保する、（ｂ２）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループからシーケンシャルに全データを前記確保した記憶領域に読出す、
（Ｃ）前記ホストが、前記対象仮想記憶装置を指定したデータアクセスコマンドを送信し、
（Ｄ）前記コントローラが、前記データアクセスコマンドを受信した場合、前記対象テープＬＵに対してではなく、前記確保した記憶領域に対してデータアクセスを行い、
（Ｅ）前記一以上の上位装置のいずれかかが、前記対象仮想記憶装置を指定した所定の準備終了コマンドを送信し、
（Ｆ）前記コントローラが、前記所定の準備終了コマンドを受信し、その準備終了コマンドに応答して、前記確保した記憶領域上の全データを、前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置を含んだテープ装置グループにシーケンシャルに書き込む、
計算機システム。
【請求項１３】
前記（ｂ２）において、前記コントローラは、
（ｂ２１）前記対象仮想記憶装置に対応する対象テープＬＵの基になっているテープ装置が他のテープＬＵの基にもなっているか否かを判断し、
（ｂ２２）前記（ｂ２１）の判断の結果が肯定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループ内の全データを前記確保した記憶領域に読出し、
（ｂ２３）前記（ｂ２１）の判断の結果が否定的の場合に、対象テープＬＵの基になっているテープ装置を含んだテープ装置グループのうちの、対象テープＬＵの基になっているテープ装置のみから、前記確保した記憶領域にデータを読み出す、
請求項１２記載の計算機システム。
【請求項１４】
前記対象仮想記憶装置について前記確保した記憶領域に対する前記データアクセスが終了する都度に、前記一以上の上位装置のいずれかかが、前記所定の準備終了コマンドを送信する、
請求項１２又は１３記載の計算機システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のテープ装置を備えるストレージシステムの記憶制御に関する。
【背景技術】
【０００２】
例えば、特開２００４−２２７４４８号公報に、ディスク装置で磁気テープ装置を仮想的にエミュレートした技術が開示されている。その技術では、ディスク装置上の仮想テープ記憶領域から仮想テープのファイルが作成され、作成された仮想テープのファイルが、他のシステムの仮想テープのファイルにディスク装置間のファイルのコピー機能によって転送する。
【０００３】
【特許文献１】特開２００４−２２７４４８号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、法規制などにより、長期間保管しなければならない電子データが増加している。大容量のデータを長期間保管するには、例えば、コストの面で、ディスク装置よりも磁気テープ装置（以下、単に「テープ」と言う）が有効であると考えられる。一般的に、ビットコスト（１ビット当たりのコスト）がディスク装置に比べて低いためである。
【０００５】
そこで、ストレージシステムに複数のテープを搭載し、ストレージシステムのホスト装置に、それら複数のテープを仮想的に複数のディスク装置として提供する技術が考えられる。これにより、仮想ディスク装置に対するアクセスでテープに対してデータを読み書きすることができる。
【０００６】
しかし、この技術では、ディスク装置は仮想であり、実際の記憶デバイスはテープのため、いわゆるランダムアクセスが発生する可能性があり、それ故、読み出しに時間がかかり、ホスト装置でタイムアウトが発生してしまう可能性が出る。特に、テープライブラリが利用される場合には、テープをテープドライブに装填し目的のアドレスに位置付け（頭出し）してからテープからの読出しを行なう必要があるため、その可能性が高まる。
【０００７】
従って、本発明の目的は、複数のテープを備えるストレージシステムの読出しを高速化することにある。
【０００８】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【０００９】
本発明に従うストレージシステムは、ホストを含む一以上の上位装置に接続され、データを記憶する複数のテープ装置と、アクセス先がランダムに異なるアクセスであるランダムアクセスをテープ装置よりも高速に行うことのできる記憶装置と、記憶装置をエミュレーションした複数の仮想記憶装置と、前記ホストからのデータアクセスコマンドを制御するコントローラとを備える。前記コントローラは、前記複数の仮想記憶装置のうちの指定された仮想記憶装置である指定仮想記憶装置について、前記一以上の記憶装置上に記憶領域を確保し、前記複数のテープ装置のうちの前記指定仮想記憶装置に対応したテープ装置である対象テープ装置から、前記記憶領域にデータを読出し、前記ホストから前記指定仮想記憶装置に対するデータアクセスコマンドを受信した場合、前記対象テープ装置に対してではなく、前記記憶領域に対してデータアクセスを行う。
【００１０】
第一の実施態様では、前記複数の仮想記憶装置の各々に、論理的な記憶ユニットであるテープＬＵがマッピングされてもよい。前記コントローラは、前記指定仮想記憶装置にマッピングされている対象テープＬＵの後端のあるテープ装置にそれとは別のテープＬＵが存在する場合には、該対象テープＬＵ及び該別のテープＬＵを含んだ二以上のテープＬＵから前記記憶領域にデータを読み出すことができる。前記二以上のテープＬＵの終端のあるテープ装置には、その終端以降に、他のテープＬＵのデータが存在しない。
【００１１】
第二の実施態様では、前記コントローラは、前記指定仮想記憶装置に対するデータアクセスが発生する前に、予め、前記対象テープ装置内のデータを前記記憶領域に読み出すことができる。
【００１２】
第三の実施態様では、前記第二の実施態様において、前記コントローラは、前記一以上の上位装置のいずれかから、前記指定仮想記憶装置に対する所定の準備コマンドを受け付け、該準備コマンドを受信した場合に、前記指定仮想記憶装置について前記記憶領域を確保することができる。
【００１３】
第四の実施態様では、前記第三の実施態様において、前記コントローラは、前記指定仮想記憶装置のステータスを管理し、前記ホストからの問合せに応答して、該ステータスを返答し、前記対象テープ装置から前記記憶領域にデータを読み出している間、前記指定仮想記憶装置のステータスを第一のステータスとし、前記対象テープ装置から前記記憶領域にデータを読み出し終えた場合に、前記指定仮想記憶装置のステータスを第二のステータスとすることができる。
【００１４】
第五の実施態様では、前記コントローラは、解放されている記憶領域を確保し、所定のイベントが発生した場合に、前記確保した記憶領域を解放することができる。
【００１５】
第六の実施態様では、前記コントローラは、前記確保した記憶領域に、前記対象テープ装置からの読出し対象のデータが既に存在する場合には、前記対象テープ装置から前記記憶領域へのデータの読出しを行わないようにすることができる。
【００１６】
第七の実施態様では、前記コントローラは、前記指定仮想記憶装置に対するデータアクセスが初めての場合には、前記対象テープ装置から前記記憶領域へのデータの読出しを行なわないようにすることができる。
【００１７】
第八の実施態様では、前記コントローラは、所定のイベントが発生した場合に、前記確保した記憶領域上のデータを、前記対象テープ装置に書込むことができる。
【００１８】
第九の実施態様では、前記第八の実施態様において、前記コントローラは、前記一以上の上位装置のいずれかから、前記指定仮想記憶装置に対する所定の準備終了マンドを受け付け、該準備終了コマンドを受信した場合に、前記指定仮想記憶装置についての前記記憶領域上のデータを前記対象テープ装置に書込むことができる。
【００１９】
第十の実施態様では、前記第九の実施態様において、前記コントローラは、前記指定仮想記憶装置のステータスを管理し、前記ホストからの問合せに応答して、該ステータスを返答し、前記記憶領域上のデータを前記対象テープ装置に書き込んでいる間、前記指定仮想記憶装置のステータスを第三のステータスとし、前記記憶領域上のデータを前記対象テープ装置に書込み終えた場合に、前記指定仮想記憶装置のステータスを第四のステータスとすることができる。
【００２０】
第十一の実施態様では、前記第八の実施態様において、前記コントローラは、前記確保した記憶領域にデータの書込みが発生しなかった場合には、前記所定のイベントが発生しても、前記確保した記憶領域上のデータを前記対象テープ装置に書込むことを行わないことができる。
【００２１】
第十二の実施態様では、前記コントローラは、複数種類のアクセスモードのうちの選択されたアクセスモードに応じて、前記テープ装置に対して直接アクセスを行うか否かを制御することができる。
【００２２】
第十三の実施態様では、前記第十二の実施態様において、前記複数種類のアクセスモードには、シーケンシャルリードモードが含まれており、前記コントローラは、前記シーケンシャルリードモードが選択された場合には、前記対象データ装置からデータを読み出して前記一以上の記憶装置を介さずに前記ホストに送信することができる。なお、その際、前記記憶領域の確保は行われなくてもよい。
【００２３】
第十四の実施態様では、前記第十三の実施態様において、前記シーケンシャルリードモードは、前記指定仮想記憶装置全体のリストアの場合に選択されてもよい。
【００２４】
第十五の実施態様では、前記十二の実施態様において、前記複数種類のアクセスモードには、シーケンシャルライトモードが含まれており、前記コントローラは、前記シーケンシャルライトモードが選択された場合には、前記ホストからデータを受信し、該受信したデータを、前記一以上の記憶装置を介さずに前記対象テープ装置に書込むことができる。なお、その際、前記記憶領域の確保は行われなくてもよい。
【００２５】
第十六の実施態様では、前記十五の実施態様において、前記シーケンシャルライトモードは、前記指定仮想記憶装置全体に対するバックアップの場合に選択されてもよい。
【００２６】
第十七の実施態様では、前記複数のテープ装置には、論理的な記憶ユニットであるテープＬＵが二つ以上用意されてもよい。前記複数の仮想記憶装置の各々に、前記二以上のテープＬＵの各々がマッピングされてもよい。前記一以上の記憶装置には、論理的な記憶ユニットである記憶装置ＬＵが二つ以上されてもよい。前記コントローラは、前記一以上の上位装置のいずれかから、前記指定仮想記憶装置に対する所定の準備コマンドを受け付け、該準備コマンドを受信した場合に、前記指定仮想記憶装置にマッピングされている対象テープＬＵ以上の記憶容量分の、解放されている一以上の記憶装置ＬＵを確保し、前記確保した一以上の記憶装置ＬＵに前記対象テープＬＵからデータを読出し、前記一以上の上位装置のいずれかから、前記指定仮想記憶装置に対する所定の準備終了マンドを受け付け、該準備終了コマンドを受信した場合に、前記一以上の記憶装置ＬＵ上のデータを前記対象テープＬＵに書込み、前記一以上の記憶装置ＬＵを解放することができる。
【００２７】
前記記憶装置は、ディスクタイプの記憶装置であっても良いし、メモリタイプの記憶装置であっても良い。ディスクタイプの記憶装置としては、例えば、ハードディスク、光ディスク、光磁気ディスクなどの種々のディスクを採用することができる。メモリタイプの記憶装置としては、例えば、半導体メモリ、フラッシュメモリなどの種々のメモリを採用することができる。
【００２８】
上記コントローラの各処理は、各部により実行することができる。各部は、各手段と言い換えることができる。上記各部は、ハードウェア（例えば回路）、コンピュータプログラム、或いはそれらの組み合わせ（例えば、コンピュータプログラムを読み込んで実行する一又は複数のＣＰＵ）によって実現することもできる。各コンピュータプログラムは、コンピュータマシンに備えられる記憶資源（例えばメモリ）から読み込むことができる。その記憶資源には、ＣＤ−ＲＯＭやＤＶＤ（Digital Versatile Disk）等の記録媒体を介してインストールすることもできるし、インターネットやＬＡＮ等の通信ネットワークを介してダウンロードすることもできる。
【発明の効果】
【００２９】
本発明によれば、複数のテープを備えるストレージシステムの読出しを高速化することができる。
【発明を実施するための最良の形態】
【００３０】
以下、図面を参照して、本発明の一実施形態について説明する。なお、以下の説明では、同種の構成要素を区別して説明する場合に、親番号と子符号とのセットを用いて説明する。
【００３１】
図１は、本発明の一実施形態に係る計算機システムの構成例を示す。
【００３２】
仮想ディスクライブラリ装置１に、ホスト装置（以下、単に「ホスト」と言う）２と、管理端末３とが接続される。また、ホスト装置２と管理端末３が互いに接続される。それぞれの接続は、専用線を介してされても良いし、通信ネットワークを介してされても良い。
【００３３】
ホスト２も管理端末３も、一種の計算機であり、ＣＰＵ（図示せず）や記憶資源（図示せず）を備える。ホスト２の記憶資源には、例えば、指示プログラム２が格納され、ホスト２のＣＰＵによって指示プログラム２が実行されることにより、仮想ディスクライブラリ装置１への指示が行なわれる。一方、管理端末３の記憶資源には、例えば、管理プログラム３１が格納され、管理端末３のＣＰＵによって管理プログラム３１が実行されることにより、仮想ディスクライブラリ装置１の管理が行なわれる。ホスト２は、複数台であっても良い。管理端末３は、必ずしも備えられなくても良い。ホスト２は管理端末３を兼ねることができ、ホスト２上で管理プログラム３１が実行されてもよい。また、指示プログラム２１は、管理端末３に配置してもよく、仮想ディスクライブラリ装置１へのOut-of-bandによる指示（具体的には、ライトコマンド或いはリードコマンドを発行するホスト２とは別の端末である管理端末３からの指示）も可能である。以下、プログラムが主語になる場合は、実際にはそのプログラムを実行するＣＰＵによって処理が行われるものとする。
【００３４】
仮想ディスクライブラリ装置１は、コントローラ１１と、一又は複数のディスク装置１２と、テープライブラリ装置１３とを備える。テープライブラリ装置１３には、複数のテープ１３２と、一又は複数のテープドライブ１３１とを備える。各テープドライブ１３１は、装填されたテープ１３２に対してデータを書込むことや、装填されたテープ１３２からデータを読み出すことができる。
【００３５】
コントローラ１１は、ホスト２からのアクセスを制御する。コントローラ１１は、ディスク装置をエミュレーションした仮想ディスク１４をホスト２に提供する。コントローラ１１は、ディスク装置１２を、ディスクキャッシュとして用い、テープ１３２内のデータをディスクキャッシュに読み出したり（ステージング）、ディスクキャッシュ内のデータをテープ１３２に書き出したりする（デステージング）ことができる。
【００３６】
図２は、コントローラ１１の構成の一例を示す図である。
【００３７】
コントローラ１１は、メモリ１１１、CPU１１２、上位IF１１３、下位IF１１４、IF１１５及びブリッジ１１６を備える。
【００３８】
メモリ１１１には、仮想ディスクライブラリ装置１の制御に必要な各種情報が格納される。各種情報としては、例えば、仮想ディスクライブラリ装置１の制御を行なうための制御プログラム１１１０や、仮想ディスクライブラリ装置１に関する制御情報などを挙げることができる。また、メモリ１１１は、ホスト２から受信したデータやディスク装置１２或いはテープ１３２から読まれたデータを一時的に格納するキャッシュメモリとしても使用される。制御プログラム１１１０は、LUを管理するためのLU管理テーブル１１１１や、仮想ディスク１４のステータスを記述するステータス管理テーブル１１１２や、ステータス毎のIO可否を記述するIO管理テーブル１１１３や、ディスク装置１２に対するアクセス（以下、ディスクアクセス）を制御するディスク制御モジュール１１１４や、テープ１３２に対するアクセス（以下、テープアクセス）を制御するテープ制御モジュール１１１５を備える。
【００３９】
CPU１１２は、制御プログラム１１１０を実行することにより、仮想ディスクライブラリ装置１の制御を行なう。
【００４０】
上位IF１１３はホスト２とコントローラ１１との間の入出力制御を行ない、下位IF１１４は、コントローラ１１とディスク装置１２との間の入出力制御を行なう。テープライブラリ装置１３は、上位IF１１３または下位IF１１４に接続される。上位IF１１３と接続される場合は、上位IF１１３が、コントローラ１１とテープライブラリ装置１３との間の入出力制御を行なう。下位IF１１４と接続される場合は、下位IF１１４が、コントローラ１１とテープライブラリ装置１３との間の入出力制御を行なう。ホスト２やディスク装置１２との接続には、ファイバチャネル(Fibre Channel)やSCSI(Small Computer System Interface)、iSCSI(Internet Small Computer System Interface)、Infiniband、SATA(Serial ATA)、SAS(Serial Attached SCSI)等の様々なIFを適用することができる。ホスト２側をフロントエンド、ディスク装置１２側をバックエンドと呼ぶこともある。本実施形態では、説明を分かり易くするために、上位IF１１３及び下位IF１１４はそれぞれ１つとしているが、それら少なくとも一方を複数個備えてもよい。
【００４１】
IF１１５は、ホスト２からのデータの入出力とは別に設けられたIFであり、仮想ディスクライブラリ装置１の管理用ポートとして用いられる。IF１１５においても様々なIFを適用することが可能であり、例えば、LAN（Local Area Network）接続を採用することができる。
【００４２】
ブリッジ１１６は、CPU１１２とメモリ１１１との間のデータ転送や、上位IF１１３とメモリ１１１との間のデータ転送などの、各種データ転送を制御する。
【００４３】
以上が、コントローラ１１についての説明である。なお、コントローラ１１は、例えば、負荷分散やフェイルオーバのために、仮想ディスクライブラリ装置１内に複数台備えられても良い。また、コントローラ１１は、上記の構成に限らず、他の構成が採用されても良い。例えば、ホスト２との通信を制御する複数の第一の制御部（例えば制御回路基板）と、ディスク装置１２或いはテープ１３２との通信を制御する複数の第二の制御部（例えば制御回路基板）と、ホスト２から送信されてディスク装置１２或いはテープ１３２に書かれるデータやディスク装置１２或いはテープ１３２から読み出されてホスト２に送信されるデータを記憶することができるキャッシュメモリと、仮想ディスクライブラリ装置１３を制御するためのデータを記憶することができる制御メモリと、各第一の制御部、各第二の制御部、キャッシュメモリ及び制御メモリを接続する接続部（例えば、クロスバスイッチなどのスイッチ）とを備えることができる。この場合、第一の制御部と第二の制御部の一方が、又は双方が協働して、コントローラ１１としての処理を行うことができる。制御メモリは無くても良く、その場合、キャッシュメモリに、制御メモリが記憶する情報を記憶する領域が設けられても良い。
【００４４】
さて、次に、論理ボリュームに関して説明する。
【００４５】
図３は、論理ボリュームの割り当てを模式的に示した図である。
【００４６】
通常、ディスク領域は、論理ボリューム（LU：Logical Unit）という単位でホスト２から認識される。仮想ディスクライブラリ装置１は、ホスト２から使用される論理ボリュームを仮想的に定義し、構築することができる。本実施形態では、これを、「仮想ディスク」と呼んでいる。仮想ディスクライブラリ装置１では、その装置１内で論理ボリュームを一意に識別するため、0から始まる整数で仮想ディスク１４をシリアル番号付けすることができる。この番号を、「仮想ディスクLUN」と呼ぶ。
【００４７】
これに対し、装置１内の物理的な格納先を表す論理ボリュームを「内部LU」と呼ぶ。具体的には、ディスク装置１２に作成される内部LUを「ディスクLU」と呼び、テープ１３２に作成される内部LUを「テープLU」と呼ぶことにする。例えば、複数台のディスク装置１２からRAIDグループ（パリティグループ或いはアレイグループと呼ばれることもある）を形成し、１つのRAIDグループに複数のディスクLU１４１を定義することができる。同様に、複数本のテープ１３２からテープグループを形成し、１つのテープグループから複数のテープLU１４２を定義することができる。ディスクLU１４１とテープLU１４２には、仮想ディスクライブラリ装置１内で管理するための固有IDであるディスクLUNとテープLUNがそれぞれ割り当てられる。
【００４８】
仮想ディスク１４は、実際にデータを格納するための領域が必要な場合には、装置１内の物理的な格納先を表す内部LUNとマッピングされる。複数の内部LUを統合し、１つの仮想ディスク１４とマッピングすることもできる。具体的には、例えば、仮想ディスク１４には、一又は複数のテープＬＵ１４２を固定的にマッピングし、ディスクＬＵ１４１を動的にマッピングすることができる。仮想ディスク１４の容量と、それにマッピングされたテープＬＵ１４２の記憶容量（複数のテープＬＵ１４２がマッピングされた場合には、それらのテープＬＵ１４２の総記憶容量）とを、同じにすることができる。また、仮想ディスク１４に動的にマッピングされたディスクＬＵ１４１を、本実施形態で言うディスクキャッシュとして利用することができる。固定的ではなく動的にマッピングするようにすることで、複数の仮想ディスクＬＵ１４の総記憶容量よりも少ない総記憶容量のディスクＬＵで済み、以って、搭載するディスク装置１２の総記憶容量（例えばディスク装置１２の数）を抑えることができる。
【００４９】
また、データのマイグレーションなどにより、仮想ディスク１４ａにマッピングされている内部LU１４２ａから内部LU１４２ｂにデータの格納先が変更された場合は、仮想ディスク１４ａにマッピングする内部LUを内部ＬＵ１４２ａから内部ＬＵ１４２ｂに切替えることができる。それにより、仮想ディスク１４ａに対してアクセス（リード或いはライト）が発生した場合には、マイグレーション先の内部ＬＵ１４２ｂへのアクセスが可能となる。
【００５０】
以下、図３を例に採り、本実施形態の概要を説明する。なお、以下の説明では、仮想ディスク１４ａ（仮想ディスクＬＵＮ０）に、テープＬＵ１４２ａ（テープＬＵＮ０）がマッピングされているとする。
【００５１】
仮想ディスクライブラリ装置１では、リードコマンドやライトコマンドといったデータアクセス系のコマンドの他に、複数種類の制御コマンドがサポートされている。制御コマンドとしては、例えば、ディスクキャッシュにテープＬＵ内の全データを準備させるためのアクティベイト指示と、ディスクキャッシュ内の全データをテープＬＵに反映させるためのインアクティベイト指示とがある。
【００５２】
本実施形態では、以下の（Ａ）乃至（Ｃ）の処理が行われる。
【００５３】
（Ａ）制御プログラム１１１０は、仮想ディスク１４ａに対するアクセスが発生する前に、換言すれば、仮想ディスク１４ａに対応したテープＬＵ１４２ａに対するアクセスが発生する前に、テープＬＵ１４２ａ内の全データをディスクキャッシュに準備する。具体的には、例えば、ホスト２（或いは管理端末３）の指示プログラム２１が、仮想ディスク１４ａに対するアクセスコマンドがホスト２から発行される前に（つまり仮想ディスク１４ａの使用前に）、仮想ディスク１４ａを指定したアクティベイト指示を送信し、制御プログラム１１１０が、そのアクティベイト指示を受信する。制御プログラム１１１０は、そのアクティベイト指示に応答して、未使用の（例えば、どの仮想ディスク１４にも割り当てられていない）一以上のディスクＬＵを仮想ディスク１４ａに割り当てる。割り当てられる一以上のディスクＬＵの記憶容量（複数のディスクＬＵであれば総記憶容量）は、仮想ディスク１４ａの記憶容量以上であり、それら一以上のディスクＬＵ（以下、１４１ａ、１４１ｂとする）が、本実施形態で言うディスクキャッシュである。制御プログラム１１１０は、テープＬＵ１４２ａ内の全データを読み出し、読み出された全データを、そのディスクキャッシュに書く。これにより、テープＬＵ１４２ａ内の全データがディスクキャッシュ１４１ａ、１４１ｂに準備される。
【００５４】
（Ｂ）制御プログラム１１１０は、仮想ディスク１４ａに対するアクセスコマンドをホスト２から受けた場合、そのアクセスコマンドに従って、ディスクキャッシュ１４１ａ、１４１ｂに対してアクセスを行い、仮想ディスク１４ａに対応するテープＬＵ１４２ａに対しては、アクセスを行わない。
【００５５】
（Ｃ）制御プログラム１１１０は、所定のイベントが発生した場合に、ディスクキャッシュ１４１ａ、１４１ｂ内の全データを、テープＬＵ１４２ａにシーケンシャルに書き、そのディスクキャッシュ１４１ａ、１４１ｂを構成していたディスクＬＵ１４１ａ、１４１ｂを解放する（換言すれば、割当てを解除する）。それにより、ディスクＬＵ１４１ａ、１４１ｂは、ディスクキャッシュが確保されていない仮想ディスク１４に対するアクティベイト指示が受信された場合には、その仮想ディスク１４に対して割り当てることができる。なお、この（Ｃ）の処理において、所定のイベントが発生した場合とは、例えば、ホスト２からインアクティベイト指示を受信した場合である。それに代えて又は加えて、ディスク１４１ａ、１４１ｂが最後に更新されてから一定時間が経過した場合などであっても良い。
【００５６】
以上の（Ａ）乃至（Ｃ）の処理によれば、仮想ディスクライブラリ装置１では、テープＬＵ１４２に対するアクセスが生じる前に、そのテープＬＵ１４２内の全データがディスク装置１２上に準備され、そのテープＬＵ１４２に対するアクセスは、テープ１３２ではなくディスク装置１２に対して行われる。これにより、テープＬＵ１３２に対するアクセスを、実際にテープ１３２にアクセスする場合よりも高速に行うことができる。これは、特に、テープＬＵに対してランダムアクセスが発生した場合に有効である。
【００５７】
なお、（Ａ）において、例えば、制御プログラム１１１０が、仮想ディスク１４ａに対するアクセスコマンドをホスト２から受信した場合、テープＬＵ１４２ａ内の全データがディスクキャッシュに準備されていなければ、所定のエラーをホスト２に返すことにより、ホスト２のユーザに、アクティベイト指示を送信することを促すか、或いは、エラーをホスト２に報告することなく、テープＬＵ１４２ａ内のデータをディスクキャッシュにロードしても良い。
【００５８】
また、図３の例では、３つのテープＬＵ１４２ａ〜１４２ｃにより一つのテープグループが構成され、そのテープグループにおいて、３つのテープＬＵ１４２ａ〜１４２ｃが連続している。一つのテープグループにおいて、同一テープ１３２上に、複数のテープＬＵが混在する可能性がある。具体的には、例えば、テープＬＵ１４２ｂの終端アドレスと、テープＬＵ１４２ｃの先端アドレスが、テープ１３２ｂの途中に位置し、以って、同一テープ１３２ｂ上に、テープＬＵ１４２ｂとテープＬＵ１４２ｃが存在する。つまり、本実施形態において、「テープグループ」とは、一以上のテープ１３２で構成され、一以上のテープＬＵ１４２を有し、複数のテープＬＵを連続して格納している。上記（Ａ）において、制御プログラム１１１０は、テープＬＵ１４２ａを有するテープグループ内の全データをディスクキャッシュに読み出し、上記（Ｃ）では、ディスクキャッシュ内のデータをそのテープグループにシーケンシャルに書き込むことができる。そのため、制御プログラム１１１０は、ディスクキャッシュを構成するディスクＬＵの総記憶容量が、そのテープグループの記憶容量（テープＬＵ１４２ａ〜１４２ｃの総記憶容量）以上になるようにする。もし、テープＬＵ１４２ａ以外のテープＬＵのデータが存在しない状態であれば、制御プログラム１１１０は、そのテープＬＵ１４２ａのみデータの読み出しを行えばよい。また、一つのテープグループに存在する複数のテープＬＵのうち、指定された仮想ディスクに対応するテープＬＵ（対象テープＬＵ）を含んだ二以上のテープＬＵとしても良い。その際、例えば、これら二以上のテープＬＵの後端を有するテープには、その後端以降に、同一のテープグループに存在する他のテープＬＵのデータが存在しない。そして、それら二以上のテープＬＵの先頭のテープＬＵは、対象テープＬＵとすることができる。
【００５９】
以下、本実施形態について詳細に説明する。
【００６０】
LU管理テーブル１１０には、例えば、ＬＵ関係テーブル、仮想ディスク管理テーブル、ＲＡＩＤグループ管理テーブル、ディスクＬＵ管理テーブル、テープグループ管理テーブル及びテープＬＵ管理グループが含まれている。以下、各種テーブルについて説明する。
【００６１】
図４は、ＬＵ関係テーブルの一例を示す。
【００６２】
ＬＵ関係テーブル1111は、論理ボリュームの対応関係が記述される。具体的には、例えば、ＬＵ関係テーブル１１１１には、仮想ディスクLUNが書かれるフィールド1111aと、各ホストがアクセスに使用するWWNや各ホストから認識されるホストLUNを示すホスト情報が記述されるフィールド1111bと、ディスクLUNが書かれるフィールド1111cと、テープLUNがかかれるフィールド1111dとがある。一つの仮想ディスク１４に対して、仮想ディスクＬＵＮ、ホスト情報、ディスクＬＵＮ及びテープＬＵＮが対応付けられる。図４において、ディスクＬＵＮが記述されているということは、ディスクキャッシュが確保されていることを意味し、ディスクＬＵＮが記述されていないということは、ディスクキャッシュが確保されていないことを意味する。
【００６３】
なお、ホスト２は、OSブート時に、接続するストレージシステムをサーチしてLUを検出し、その際、LUNが連続番号で存在することを仮定し0から順にサーチすることができる。そのため、或る番号が存在しない場合は以降のサーチは行なわない場合がある。これは、サーチ時間を短縮するための工夫である。このような場合、仮想ディスクLUNをそのままホストに割り当てると、仮想ディスクLUN=0以外のLUを割り当てられたホスト２は、このLUを検出できないことになってしまう。そこで、すべてのホスト２に対し、0から始まり、かつ連続番号でLUNを割り当てるように再定義することが必要である。これをホストLUNと呼ぶ。このように、各ホスト２から認識されるホストLUN、仮想ディスクLUN及び内部LUN（ディスクＬＵＮ及びテープＬＵＮ）はそれぞれ区別される。制御プログラム1110は、ＬＵ関係テーブル1111を参照することによって、どのホスト２にどの論理ボリュームが割り当てられているかを知ることができる。
【００６４】
図５は、仮想ディスク管理テーブルの一例を示す。
【００６５】
仮想ディスク管理テーブル１５０は、仮想ディスクを管理するためのテーブルである。具体的には、例えば、仮想ディスク管理テーブル１５０には、仮想ディスクＬＵＮが書かれるフィールド１５０ａと、仮想グループのＩＤが書かれるフィールド１５０ｂと、仮想ディスクのサイズ（記憶容量）が書かれるフィールド１５０ｃと、初回書込みフラグがセットされるフィールド１５０ｄとがある。一つの仮想ディスク１４に対して、仮想ディスクＬＵＮ、仮想グループＩＤ、サイズ及び初回書込みフラグが対応付けられる。なお、「仮想グループ」とは、複数の仮想ディスクから構成されるグループである。また、「初回書込みフラグ」とは、仮想ディスクに対する書込みが初めてか否かを表すフラグであり、初めての場合には"１"であり、初めてでは無い場合には"０"である。つまり、仮想ディスクが設定された場合、初回書込みフラグは全て"１"とされ、仮想ディスクに書込みが生じた場合には、その仮想ディスクに対応する初回書込みフラグは"０"にされる。
【００６６】
図６は、ＲＡＩＤグループ管理テーブルの一例を示す。
【００６７】
ＲＡＩＤグループ管理テーブル１５１は、ＲＡＩＤグループを管理するためのテーブルである。具体的には、例えば、ＲＡＩＤグループ管理テーブル１５１には、ＲＡＩＤグループＩＤが書かれるフィールド１５１ａと、ディスクＬＵが書かれるフィールド１５１ｂと、ディスク装置のＩＤ（ディスクＩＤ）が書かれるフィールド１５１ｃとがある。一つのＲＡＩＤグループに対して、ＲＡＩＤグループＩＤと、そのＲＡＩＤグループ上にあるディスクＬＵのディスクＬＵＮと、そのＲＡＩＤグループを構成するディスク装置のディスクＩＤとが対応付けられる。
【００６８】
図７は、ディスクＬＵ管理テーブルの一例を示す。
【００６９】
ディスクＬＵ管理テーブル１５４は、ディスクＬＵを管理するためのテーブルである。具体的には、例えば、ディスクＬＵ管理テーブル１５４には、ディスクＬＵＮが書かれるフィールド１５４ａと、ディスクＬＵのサイズ（記憶容量）が書かれるフィールド１５４ｂと、ディスクアドレスが書かれるフィールド１５４ｃと、ディスクＬＵステータスが書かれるフィールド１５４ｄと、直前使用テープＬＵＮアドレスが書かれるフィールド１５４ｅとがある。一つのディスクＬＵ１４１に対して、ディスクＬＵＮ、サイズ、ディスクアドレス、ディスクＬＵステータス及び直前使用テープＬＵＮアドレスが対応付けられる。なお、「ディスクアドレス」とは、ディスク装置１２上でのディスクＬＵの場所を示す値であり、例えば、ディスクＩＤ（例えば０）と、ディスク装置１２上でのアドレス（例えば１０００）とのセットを用いて表すことができる。「ディスクＬＵステータス」とは、ディスクＬＵ１４１のステータスであり、例えば、使用中（ディスクキャッシュとして割当て中）と、未使用（どのディスクキャッシュにも割り当てられておらず、割当て可能な状態）とがある。「直前使用テープＬＵＮアドレス」とは、ディスクＬＵが直前にはどのテープＬＵＮのどのアドレスとして使用されたかを表す。制御プログラム１１１０は、ディスクキャッシュを確保する場合には、ディスクＬＵステータスが"未使用"のディスクＬＵを探し、探し出されたディスクＬＵを、確保するディスクキャッシュの構成要素とする。また、制御プログラム１１１０は、ディスクキャッシュにディスクＬＵを割り当てた場合、そのディスクキャッシュを使用するテープＬＵのＬＵＮとアドレスを、そのディスクＬＵに対応する「直前使用テープＬＵＮアドレス」の欄に記載する。図４にて、テープＬＵと仮想ディスクＬＵのアドレスの対応関係がわかるため、直前使用テープＬＵＮアドレスは、仮想ディスクＬＵのアドレス（ＬＵＮとアドレス）を書込むようにしても良い。
【００７０】
図８は、テープグループ管理テーブルの一例を示す。
【００７１】
テープグループ管理テーブル１５２は、テープグループを管理するためのテーブルである。具体的には、例えば、テープグループ管理テーブル１５２には、テープグループのＩＤが書かれるフィールド１５２ａと、そのテープグループ上にあるテープＬＵのＬＵＮが書かれるフィールド１５２ｂと、そのテープグループを構成するテープ１３２のＩＤが書かれるフィールド１５２ｃとがある。一つのテープグループに対して、テープグループＩＤ、テープＬＵＮ及びテープＩＤが対応付けられる。
【００７２】
図９は、テープＬＵ管理テーブルの一例を示す。
【００７３】
テープＬＵ管理テーブル１５３は、テープＬＵ１４２を管理するためのテーブルである。具体的には、例えば、テープＬＵ管理テーブル１５３には、テープＬＵＮが書かれるフィールド１５３ａと、テープＬＵのサイズ（記憶容量）が書かれるフィールド１５３ｂと、テープアドレスが書かれるフィールド１５３ｃとがある。一つのテープＬＵ１３２に対して、テープＬＵＮ、サイズ及びテープアドレスが対応付けられる。なお、「テープアドレス」とは、テープ１３２上でのテープＬＵ１４２の場所を示す値であり、例えば、テープＩＤ（例えば０）と、テープ１３２上でのアドレス（例えば１００）とのセットを用いて表すことができる。
【００７４】
図１０は、ステータス管理テーブル1112の一例を示した図である。
【００７５】
ステータス管理テーブル1112には、仮想ディスクのLUNが書かれるフィールド1111aと、その仮想ディスクのステータス（以下、仮想ディスクステータス）が書かれるフィールド1112bとがある。仮想ディスクステータスは、指示プログラム21や管理プログラム31から参照することができる。仮想ディスクステータスとしては、データアクセス可能な状態を意味する"Active"や、データアクセス不可の状態を意味する"Inactive"などがある。指示プログラム21や管理プログラム31は、各仮想ディスクの仮想ディスクステータスによって、対象仮想ディスクのアクセス可否や現在の処理状態を知ることができる。各仮想ディスクステータスにおける処理内容は、後述するIO管理テーブルによって管理される。
【００７６】
図１１は、IO管理テーブル1113の一例を示した図である。
【００７７】
IO管理テーブル1113には、仮想ディスクステータスが書かれるフィールド１１１３ａと、その仮想ディスクステータスにおける処理内容が書かれるフィールドとがある。処理内容が書かれるフィールドとして、リード／ライトコマンドの処理が可能か否かが書かれるフィールド１１１３ｂと、制御コマンドの処理が可能か否かが書かれるフィールド１１１３ｃとがある。フィールド１１１３ａには、仮想ディスクのとりうる全仮想ディスクステータスが書かれる。
【００７８】
図１１に示すように、Active状態ではRead/Writeが可能であるが、他の状態ではRead/Writeが不可である。制御コマンドは、全ての状態で応答可となっている。Active状態とは、仮想ディスクへのアクセス準備が完了し、ホストからのデータアクセスを受け付けることができる状態である。Inactive状態とは、テープにデータが格納されており、データアクセスを禁止している状態である。Activate状態とは、Inactive状態からActive状態への過渡状態である。Inactivate状態とは、Active状態からInactive状態への過渡状態である。Error状態は、障害などによりアクセスができなくなった状態である。このように、各状態でのIO可否を決めておくことができる。ホスト２は、対象仮想ディスクをActive状態にしてからデータアクセスを行なう。制御コマンドは、どの状態でもアクセス可能である。
【００７９】
次に、仮想ディスクの使用準備を行なう処理に関して説明する。
【００８０】
指示プログラム２１或いは管理プログラム３１は、対象となる仮想ディスク１４に対してホスト２からのデータアクセスが開始される前に（リードコマンド或いはライトコマンドが発行される前に）、仮想ディスクライブラリ装置１に対して準備指示を行なう必要がある。この指示を「Activate指示」と呼ぶ。仮想ディスク１４へのデータアクセスが必要となる契機として、例えば、仮想ディスクライブラリ装置１に、データのバックアップを行う場合、アーカイブデータを格納する場合、仮想ディスクライブラリ装置１にバックアップしたデータをリストアする場合、或いは、監査などにより仮想ディスクライブラリ装置１にアーカイブしておいたデータを読み出する場合などがある。このような場合に、指示プログラム21または管理プログラム31が、仮想ディスクライブラリ装置１にActivate指示を送る。バックアップ対象のデータを格納する時など、予め、仮想ディスクの使用スケジュールがわかっている場合には、ホスト２或いは管理端末３上のスケジューラなどにより、Activate指示の発行を自動化することも可能である。
【００８１】
図１２は、制御コマンドの形式の一例を示した図である。制御コマンドには、コマンド名、仮想グループID、または仮想ディスクLUNが指定される。仮想グループIDは、仮想ディスクをまとめて指定する場合に用いられる。一つの仮想ディスクに対して制御コマンドを発行する場合には、仮想グループＩＤの記述は不要である。また、仮想ディスクの一部の領域のみを使用する場合は、そのアドレスを制御コマンドに含めて指定してもよい。
【００８２】
なお、あらかじめ指示受領専用の仮想ディスク（以下、専用仮想ディスク）を仮想ディスクライブラリ装置１に用意しておき、指示プログラム21或いは管理プログラム３１は、常に、専用仮想ディスクに対して制御コマンドを発行しても良い。専用仮想ディスクは、実際にデータを格納する必要がないため、内部LUNとマッピングされていなくてもよい。専用仮想ディスクに対して発行される制御コマンドには、実際のターゲットの仮想ディスクのＬＵＮ或いは仮想グループＩＤが書かれ、制御プログラム１１１０は、その制御コマンドを受けた場合には、その実際のターゲットの仮想ディスクのＬＵＮ或いは仮想グループＩＤに従って処理を行うことができる。
【００８３】
図１３は、制御プログラム１１１０がActivate指示を受領した場合に行われる処理の流れの一例を示す。なお、以下の説明では、Activate指示で指定されている仮想ディスクＬＵＮ或いは仮想グループＩＤに対応した仮想ディスクを、「指定仮想ディスク」と言う。
【００８４】
制御プログラム１１１０は、指示プログラム21又は管理プログラム31からActivate指示を受領した場合（ステップ800）、そのActivate指示で指定された仮想ディスク（指定仮想ディスク）に必要な容量のディスク領域（ディスクキャッシュ）を確保する（ステップ801）。Activate指示において、仮想グループＩＤが指定されている場合、制御プログラム１１１０は、その仮想グループＩＤに対応する仮想ディスクＬＵＮを仮想ディスク管理テーブル１５０（図５参照）から取得することができる。制御プログラム１１１０は、指定仮想ディスクの記憶容量以上の記憶容量のディスクキャッシュを確保し、そのディスクキャッシュを構成するディスクＬＵのＬＵＮを、ＬＵ関係テーブル１１１１（図４参照）に登録し、且つ、ディスクＬＵ管理テーブル１５４において、そのディスクＬＵのステータスを、"使用中"に変える。ディスクＬＵを確保する際には、ディスクＬＵ管理テーブル１５４の直前使用テープＬＵＮアドレスを参照し、指定仮想ディスクに対応するテープＬＵＮアドレスが存在すれば、そのディスクＬＵＮを割り当てる。また、ＬＵ関係テーブル１１１において、対象仮想ディスクに、既にディスクＬＵＮが割り当てられている場合は、そのままそのディスクＬＵＮを使用することができる。なお、制御プログラム１１１０は、ディスクキャッシュとして使用可能な（つまり、ディスクＬＵステータスが"未使用"の）一以上のディスクＬＵの総記憶容量が、指定仮想ディスクの記憶容量よりも小さい場合は、ディスクキャッシュの確保ができない旨を、Activate指示の発行元に通知する。複数のディスク装置１２の総記憶容量と、未使用の一以上のディスクＬＵの総記憶容量は、指示プログラム21または管理プログラム31から任意のタイミングで参照可能である。
【００８５】
次に、制御プログラム１１１０は、テープからディスクへのコピー要否を判定する（ステップ８０２）。
【００８６】
例えば、制御プログラム１１１０は、指定仮想ディスクへの書き込みが初めての場合には（例えば、指定仮想ディスクへの書込みが初めてであることが、仮想ディスク管理テーブル１５０から特定できた場合には）、コピー不要と判定する。指定仮想ディスクに対応したテープＬＵには、読み出すべきデータが存在しないためである。
【００８７】
また、例えば、制御プログラム１１１０は、確保したディスクキャッシュ上に既に有効データが存在する場合は、コピー不要と判定する。「有効データ」とは、指定仮想ディスクに対応したテープＬＵ内のデータと同じデータのことである。つまり、「有効データが存在する」とは、ディスクキャッシュ上に、指定仮想ディスクに対応するテープＬＵのデータが存在することを意味する。これは、ディスクキャッシュを構成する各ディスクＬＵのディスクＬＵＮに対応した直前使用テープＬＵＮアドレス（図７参照）を参照することにより、特定することができる。具体的には、指定仮想ディスクに対応するテープＬＵＮのデータと、ディスクキャッシュを構成する各ディスクＬＵのディスクＬＵＮに対応した直前使用テープＬＵＮアドレスとが全て一致した場合には、「有効データが存在する場合」となる。なお、有効データが存在する場合にコピー不要と判定されるのは、既にディスクキャッシュ上に、指定仮想ディスクに対応するテープＬＵ内の全データが存在するためである。
【００８８】
コピー不要と判定した場合、制御プログラム１１１０は、指定仮想ディスクの仮想ディスクステータスを、"Active"に変更し処理を終了し、一方、コピー必要と判定した場合、指定仮想ディスクの仮想ディスクステータスを"Activate"に変更し、次のステップ８０３へ進む。
【００８９】
テープからディスク装置へのコピーが必要と判定されると、テープ制御モジュール1115は、対象テープ１３２をテープドライブ１３１に準備する（ステップ803）。ここでは、「対象テープ」とは、指定仮想ディスクに対応する（つまり読み出し対象の）テープＬＵＮを有するテープである。
【００９０】
対象テープ１３２がテープドライブ１３１に準備されると、テープ制御モジュール1115は、対象テープ１３２からコントローラ１１のメモリ１１１上にデータを読み出す（ステップ804）。
【００９１】
読み出されたデータは、ディスク制御モジュール1114によって、確保済みのディスクキャッシュに書き込まれる（ステップ805）。
【００９２】
テープ制御モジュール１１１５は、読み出すべきデータが対象テープ１３２に残っている場合は（ステップ８０６でＮＯ）、対象テープ１３２の読み出しを継続し、ステップ804からステップ805を繰り返す。テープ制御モジュール１１１５は、読み出すべきデータが残っていない場合には、対象テープ１３２の読み出しを終了する（ステップ806）。
【００９３】
対象テープ１３２の読み出しが終了すると、テープ制御モジュール1115は、対象テープ１３２の巻き戻しやアンロードなどのテープ使用終了処理を実施する（ステップ807）。
【００９４】
指定仮想ディスクのデータが全てディスクキャッシュ上に準備できていれば、制御プログラム１１１０は、指定仮想ディスクの仮想ディスクステータスを"Active"に変更し、処理を終了する。複数の対象テープ１３２に跨ってデータが格納されている場合は（ステップ808でＮＯ）、ステップ803に戻り、必要に応じて、対象テープ１３２を切替えて、コピーを継続する。なお、複数のテープドライブ１３１を使用できる場合には、制御プログラム１１１０は、複数本の対象テープ１３２をそれぞれのテープドライブ１３１から同時並列的に読み出してもよい。指示プログラム２１或いは管理プログラム３１は、指定仮想ディスク１４の仮想ディスクステータスを定期的に監視し、"Active"を検知することで、指定仮想ディスク１４の準備完了を知ることができる。換言すれば、指示プログラム２１或いは管理プログラム３１は、指定仮想ディスク１４の仮想ディスクステータスが"Active"になっていない場合には、ホスト２からリードコマンド及びライトコマンドが発行されないように制御しても良い。
【００９５】
以上が、Activate指示が受領された場合に行われる処理である。なお、図１３において、ステップ８０２でＹＥＳからステップ８０３にかけて、以下の対象テープ判定処理が行われる。
【００９６】
図１４は、対象テープ判定処理の一例を示す。
【００９７】
制御プログラム１１１０は、指定仮想ディスク１４に対応するテープＬＵ（以下、該当テープＬＵ）１４２を構成するテープ１３２に他のテープＬＵが存在しないことをテープグループ管理テーブル１５２及びテープＬＵ管理テーブル１５３（図９参照）から特定できた場合（ステップ７０１でＮＯ）、該当テープＬＵ１４２を有するテープ１３２を、ステップ８０６で言う対象テープ１３２とする（ステップ７０２）。
【００９８】
一方、制御プログラム１１１０は、該当テープＬＵ１４２を構成するテープ１３２に他のテープＬＵが存在することをテープグループ管理テーブル１５２及びテープＬＵ管理テーブル１５３から特定できた場合（ステップ７０１でＹＥＳ）、該当テープＬＵ１４２を有するテープグループを構成する全テープ１３２を、それぞれ対象テープ１３２とする（ステップ７０３）。
【００９９】
つまり、制御プログラム１１１０は、テープ１３２に記録された全データを読み出すようにする。換言すれば、制御プログラム１１１０は、後述のInactivate指示に従う処理において、テープ１３２の一部分だけで書込み終了とならないようにする。これにより、テープ１３２からディスクキャッシュへのデータの読出しや、ディスクキャッシュからテープ１３２へのデータの書込みを、シーケンシャルに行うことができる。なお、一つのディスクキャッシュ上に、複数のテープLUのデータが読み出された場合には、ディスクキャッシュ上でのアドレスと、テープLUとの対応を図示しないテーブルで管理することができ、以って、ディスクキャッシュ上のどこのデータをどのテープLUに書いたら良いかを特定することができる。
【０１００】
ステップ７０２又は７０３の後、制御プログラム１１１０は、確保したディスクキャッシュを構成する各ディスクＬＵ１４１に対して、対象テープ１３２上のテープLUN（例えば、ステップ７０２でのテープLUN、或いは、ステップ７０３でのテープグループ上の全テープＬＵＮ）を直前使用テープＬＵＮアドレス（図７参照）として対応付けて、図１３のステップ８０３へ移行する（ステップ７０４）。
【０１０１】
図１５は、制御プログラム１１１０が行うデータアクセス制御処理の一例を示す。
【０１０２】
制御プログラム１１１０は、データアクセスコマンド（リードコマンド或いはライトコマンド）をホスト２から受領した場合、ステータス管理テーブル１１１２を参照し、そのデータアクセスコマンドで指定されている仮想ディスク（具体的には、例えば、データアクセスコマンドで指定されているホスト情報にマッピングされている仮想ディスク）１４の仮想ディスクステータスが"Active"か否かを判定する。"Active"ではない場合には（ステップ７５１でＮＯ）、制御プログラム１１１０は、エラーをホスト２に返答し（ステップ７５２）、それにより、Activate指示の発行をうながすことができる。一方、制御プログラム１１１０は、指定されている仮想ディスク１４の仮想ディスクステータスが"Active"の場合には（ステップ７５１でＹＥＳ）、その仮想ディスク１４のために確保されたディスクキャッシュに対してデータアクセス（データの読出し或いは書込み）を行う（ステップ７５３）。
【０１０３】
次に、仮想ディスクの使用終了を行なう処理に関して説明する。指示プログラム２１又は管理プログラム３１は、指定仮想ディスク１４へのデータアクセスが終了した場合、仮想ディスクライブラリ装置１に対して終了指示を行なう。この指示をInactivate指示と呼ぶ。ディスク装置１２の総記憶容量は、仮想ディスク１４の総記憶容量に比べて小さいため、データアクセスが行なわれない仮想ディスク１４からは、確保されたディスクキャッシュ（つまりディスク領域）を解放する必要がある。指示プログラム２１又は管理プログラム３１は、ユーザ或いは管理者による手動で、或いは、バックアップ或いはアーカイブ完了などを検出したときに自動で、Active状態の仮想ディスク（例えば、Activate指示が発行された上記指定仮想ディスク）に対して、Inactivate指示を発行する。
【０１０４】
図１６は、制御プログラム１１１０がInactivate指示を受領した場合に行われる処理の流れの一例を示す。なお、以下の説明では、Inactivate指示で指定されている仮想ディスクＬＵＮ或いは仮想グループＩＤに対応した仮想ディスクを、「指定仮想ディスク」と言う。
【０１０５】
制御プログラム１１１０は、指示プログラム21又は管理プログラム31からInactivate指示を受領した場合（ステップ900）、ディスクキャッシュからテープ１３２へのコピー要否を判定する（ステップ９０１）。例えば、制御プログラム１１１０は、Active中にそのディスクキャッシュに更新が無かった場合には、コピー不要と判定する。指定仮想ディスク１４に対応するディスクキャッシュ上の全データと、指定仮想ディスク１４に対応するテープLU（又は、指定仮想ディスクに対応するテープグループ上の全テープLU）１４２内の全データとに差分が無いためである。コピー不要と判定した場合、制御プログラム１１１０は、指定仮想ディスク１４の仮想ディスクステータス（図１０参照）を"Inactive"に変更し処理を終了する。コピー必要と判定した場合、制御プログラム１１１０は、指定仮想ディスク１４の仮想ディスクステータスを"Inactivate"に変更し、次のステップ902へ進む。
【０１０６】
ディスクキャッシュからテープ１３２へのコピーが必要と判定されると、テープ制御モジュール1115は、対象テープ１３２をテープドライブ１３１に準備する（ステップ902）。ここでの「対象テープ」とは、ディスクキャッシュに対応するテープLU１４２を有するテープ１３２である。このため、例えば、図１４において、ステップ７０２が実行された場合には、指定仮想ディスクに対応するテープLUを有したテープ１３２であり、ステップ７０３が実行された場合には、指定仮想ディスクに対応するテープグループを構成する各テープ１３２である。
【０１０７】
対象テープ１３２がテープドライブ１３１に準備されると、ディスク制御モジュール1114は、ディスクキャッシュ（ディスクLU）からコントローラ１１のメモリ１１１上にデータを読み出す（ステップ903）。読み出されたデータは、テープ制御モジュール1115によって、対象テープ１３２に書き込まれる（ステップ904）
ディスク制御モジュール１１１５は、読み出すべきデータがディスクキャッシュに残っている場合は（ステップ９０５でNO）、ディスクキャッシュからの読み出しを継続し、ステップ903からステップ904を繰り返す。ディスク制御モジュール１１１５は、読み出すべきデータが残っていない場合には（ステップ905でYES）、読み出しを終了する。
【０１０８】
対象テープ１３２への書き込みが終了した場合、テープ制御モジュール1115は、対象テープ１３２の巻き戻しやアンロードなどのテープ使用終了処理を実施する（ステップ906）。
【０１０９】
ディスクキャッシュ上のデータが全て対象テープ１３２に格納できていれば（ステップ９０７でYES）、制御プログラム１１１０は、指定仮想ディスク１４の仮想ディスクステータスを、"Inactive"に変更し、ディスクＬＵＮ１１１ｃ（図４参照）、ディスクスＬＵテータス１５４ｄ（図７参照）を更新し、処理を終了する。一方、複数の対象テープ１３２に跨ってデータを格納する場合には、制御プログラム１１１０は、ステップ902に戻り、必要に応じて、対象テープ１３２を切替えてコピーを継続する（ステップ907）。なお、複数のテープドライブ１３１を使用できる場合には、制御プログラム１１１０は、複数の対象テープ１３２をそれぞれのテープドライブ１３１から同時並列的に書き込んでもよい。また、ディスクキャッシュから対象テープ１３２には、データをコピーしているので、コピー元のディスクキャッシュには、対象テープ１３２に書かれるデータが残る。このため、例えば、指定仮想ディスクのディスクキャッシュを構成するディスクLUが、一旦解放されて、そのディスクLU内のデータが更新されること無く再びその指定仮想ディスクにディスクキャッシュとして割り当てられた場合には、その指定仮想ディスクに対応するテープLU内の全データが、そのディスクLUに残っていることになる。
【０１１０】
指示プログラム２１或いは管理プログラム３１は、指定仮想ディスク１４の仮想ディスクステータスを定期的に監視し、Inactive状態を検知することで、指定仮想ディスクの終了処理完了を知ることができる。終了処理が完了した場合、テープへのデータ格納が保証されるためバックアップ元データは削除されてもよい。
【０１１１】
以上、上述した実施形態によれば、仮想ディスクライブラリ装置１では、テープＬＵ１４２に対するアクセスが生じる前に、そのテープＬＵ１４２内の全データがディスク装置１２上に準備され、そのテープＬＵ１４２に対するアクセスは、テープ１３２ではなくディスク装置１２に対して行われる。これにより、テープＬＵ１３２に対するアクセスを、実際にテープ１３２にアクセスする場合よりも高速に行う（つまり、ディスク装置１２に対するアクセスと同等の速度で行う）ことができる。
【０１１２】
さて、以下、本発明の別の実施形態について説明する。以下の説明では、上記実施形態との相違点を主に説明し、上記実施形態との共通点については、説明を省略或いは簡略する。
【０１１３】
この別の実施形態では、ディスクキャッシュに対するリード及びライト、つまり通常のアクセスモードに加えて、テープ１３２からディスクキャッシュを介さないでホスト２にデータを読み出す「シーケンシャルリード」と、ホスト２からディスクキャッシュを介さないでテープ１３２にデータを書き込む「シーケンシャルライト」との２種類の別種のアクセスモードが用意される。シーケンシャルリードは、例えば、仮想ディスク全体のリストアに使用することができる。シーケンシャルライトは、例えば、仮想ディスク全体へのバックアップのために使用することができる。
【０１１４】
図１７は、本発明の別の実施形態に係るIO管理テーブル1113の一例を示した図である。
【０１１５】
仮想ディスクステータスとして、更に、"SeqRead"、"SR-prepare"、"SeqWrite"、"SW-prepare"の４種類が追加されている。"SeqRead"は、Readのみ可でありWriteは不可である。"SR-prepare"は、"SeqRead"への過渡状態である。"SeqWrite"は、Readは不可でありWriteのみ可である。"SW-prepare"は、"SeqWrite"への過渡状態である。
【０１１６】
指示プログラム21又は管理プログラム31は、シーケンシャルリードを指示するためのSeqReadコマンドや、シーケンシャルライトを指示するためのSeqWriteコマンドを発行することができる。
【０１１７】
図１８は、制御プログラム１１１０がSeqReadコマンドを受領した場合に行われる処理の流れの一例を示すフローチャートである。
【０１１８】
制御プログラム１１１０は、SeqReadコマンドを受領した場合（ステップ1100）、そのSeqReadコマンドで指定されている仮想ディスク（以下、指定仮想ディスク）１４の仮想ディスクステータスを"SR-prepare"に変更し、テープ制御モジュール1115が、指定仮想ディスク１４に対応するテープ（以下、対象テープ）１３２をテープドライブ１３１に準備する（ステップ1101）。
【０１１９】
対象テープ１３２がテープドライブ１３１に準備されたならば、制御プログラム１１１０は、指定仮想ディスク１４の仮想ディスクステータスを"SeqRead"に変更し、テープ制御モジュール1115が、準備された対象テープ１３２からコントローラ１１のメモリ１１１上にデータを読み出す（ステップ1102）。
【０１２０】
ホスト２は、SeqReadコマンドが発行された後、定期的に、指定仮想ディスク１４の仮想ディスクステータスを監視し、その仮想ディスクステータスが"SeqRead"になったことを検出した場合、指定仮想ディスクに対するリードコマンドを発行する。制御プログラム１１１０は、ホスト２からのリードコマンドに従って、メモリ１１１上に読み出されたデータを、ホスト２へ転送する（ステップ1103）。
【０１２１】
テープ制御モジュール１１１５は、読み出すべきデータが対象テープ１３２に残っている場合は（ステップ１１０４でNO）、対象テープ１３２からの読み出しを継続し、読み出すべきデータが残っていない場合には（ステップ１１０４でYES）、対象テープ１３２の読み出しを終了する。
【０１２２】
対象テープ１３２からの読み出しが終了した場合、テープ制御モジュール1115は、テープの巻き戻しやアンロードなどのテープ使用終了処理を実施する（ステップ1105）。
【０１２３】
指定仮想ディスク１４からのデータを全て読み出された場合に（ステップ１１０６でYES）、処理が終了となる。複数の対象テープ１３２に跨ってデータが格納されている場合は、ステップ1101に戻り、必要に応じて、対象テープ１３２を切替えて読み出しを継続することができる。読み出したデータがメモリ１１１からあふれないように、制御プログラム１１１０は、ホスト２からのリードコマンドに応じて、対象テープ１３２からの読み出し速度を変更することもできる。また、ディスクＬＵが割り当てられている場合には、ホストへの読出しと並行してディスクへの書き込みを行っても良い。また、制御プログラム１１１０は、ホスト２へのデータ転送速度が対象テープ１３２からの読み出し速度よりも早いためにメモリ１１１にデータが準備できていない場合は、ホスト２に、データの準備中である旨を通知することができる。データ準備中の通知を受領したホスト２は、一定時間経過後に、リードコマンドをリトライすることができる。
【０１２４】
図１９は、制御プログラム１１１０がSeqWriteコマンドを受領した場合に行われる処理の流れの一例を示すフローチャートである。
【０１２５】
制御プログラム１１１０は、SeqWriteコマンドを受領した場合（ステップ1200）、そのSeqWriteコマンドで指定されている仮想ディスク（以下、指定仮想ディスク）１４の仮想ディスクステータスを"SW-prepare"に変更し、テープ制御モジュール1115が、指定仮想ディスク１４に対応するテープ（以下、対象テープ）１３２をテープドライブ１３１に準備する（ステップ1101）。
【０１２６】
対象テープ１３２がテープドライブ１３１に準備されたならば、制御プログラム１１１０は、指定仮想ディスク１４の仮想ディスクステータスを"SeqWrite"に変更する。ホスト２は、SeqWriteコマンドが発行された後、定期的に、指定仮想ディスク１４の仮想ディスクステータスを監視し、その仮想ディスクステータスが"SeqWrite"になったことを検出した場合、指定仮想ディスクに対するライトコマンド及びデータを発行する。制御プログラム１１１０は、ホスト２からのライトコマンドに従って、ホスト２からのデータをメモリ１１１に書く（ステップ1202）。テープ制御モジュール1115は、メモリ１１１に書かれたデータを、準備された対象テープ１３２に書込む（ステップ1203）。
【０１２７】
テープ制御モジュール１１１５は、書込むデータがメモリ１１１に残っている場合は（ステップ1204でNO）、対象テープ１３２への書き込みを継続し、書込むべきデータが残っていない場合には（ステップ1204でYES）、対象テープ１３２への書き込みを終了する。
【０１２８】
対象テープ１３２への書き込みが終了した場合、テープ制御モジュール1115は、テープの巻き戻しやアンロードなどのテープ使用終了処理を実施する（ステップ1205）。
【０１２９】
指定仮想ディスク１４に対してデータの書き込みが完了した場合に（ステップ１２０６でYES）、処理が終了となる。複数の対象テープ１３２に跨ってデータを書込む場合は、ステップ1201に戻り、必要に応じて、対象テープ１３２を切替えて書き込みを継続することができる。SeqRead時と同様に、ディスクＬＵが割り当てられている場合には、テープへの書込みと並行してディスクへの書き込みを行っても良い。
【０１３０】
以上、上述した別の実施形態によれば、ディスクキャッシュを利用する通常のアクセスモードの他に、ホスト２からディスクキャッシュを介さずにテープLUからデータを読み出すシーケンシャルリードや、ホスト２からディスクキャッシュを介さずにテープLUにデータを書込むシーケンシャルライトが用意される。これらの複数のアクセスモードを、用途（例えば、バックアップ或いはリストア）に応じて使い分けることにより、仮想ディスク全体の読み出しや書き込みの高速化が期待できる。具体的には、例えば、仮想ディスク全体のリストアの場合には、その仮想ディスクに対してSeqReadコマンドを発行することにより、ホスト２への仮想ディスク全体のコピーを高速化することが期待できる。
【０１３１】
以上、本発明の好適な幾つかの実施形態を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施形態にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１３２】
例えば、仮想ディスク１４は、テープＬＵ１４２にマッピングされず、ディスクＬＵ１２に固定的にマッピングされても良い。換言すれば、複数のディスクＬＵ１４１には、仮想ディスク１４に固定的にマッピングされているディスクＬＵ１４１と、仮想ディスク１４に動的にマッピングされるディスクＬＵ１４１とが含まれても良い。これにより、一つの仮想ディスクライブラリ装置１で、ディスクキャッシュを利用したテープアクセスと、テープアクセスの発生しないディスクアクセスとの両方を行うことができる。
【０１３３】
また、例えば、テープグループ単位での読出し或いは書き込みは、シーケンシャルリードの場合にも行われても良い。具体的には、例えば、SeqReadコマンドで指定された仮想ディスク１４にマッピングされたテープＬＵについて、該当テープＬＵを構成するテープ上に複数のテープＬＵが存在する場合は、その該当テープＬＵを有するテープグループを構成する全テープ１３２からデータが読み出されても良い。
【図面の簡単な説明】
【０１３４】
【図１】図１は、本発明の一実施形態に係る計算機システムの構成例を示す。
【図２】図２は、コントローラ１１の構成の一例を示す図である。
【図３】図３は、論理ボリュームの割り当てを模式的に示した図である。
【図４】図４は、ＬＵ関係テーブルの一例を示す。
【図５】図５は、仮想ディスク管理テーブルの一例を示す。
【図６】図６は、ＲＡＩＤグループ管理テーブルの一例を示す。
【図７】図７は、ディスクＬＵ管理テーブルの一例を示す。
【図８】図８は、テープグループ管理テーブルの一例を示す。
【図９】図９は、テープＬＵ管理テーブルの一例を示す。
【図１０】図１０は、ステータス管理テーブル1112の一例を示した図である。
【図１１】図１１は、IO管理テーブル1113の一例を示した図である。
【図１２】図１２は、制御コマンドの形式の一例を示した図である。
【図１３】図１３は、制御プログラム１１１０がActivate指示を受領した場合に行われる処理の流れの一例を示す。
【図１４】図１４は、対象テープ判定処理の一例を示す。
【図１５】図１５は、制御プログラム１１１０が行うデータアクセス制御処理の一例を示す。
【図１６】図１６は、制御プログラム１１１０がInactivate指示を受領した場合に行われる処理の流れの一例を示す。
【図１７】図１７は、本発明の別の実施形態に係るIO管理テーブル1113の一例を示した図である。
【図１８】図１８は、制御プログラム１１１０がSeqReadコマンドを受領した場合に行われる処理の流れの一例を示すフローチャートである。
【図１９】図１９は、制御プログラム１１１０がSeqWriteコマンドを受領した場合に行われる処理の流れの一例を示すフローチャートである。
【符号の説明】
【０１３５】
１…仮想ディスクライブラリ装置  ２…ホスト  ３…管理端末  １１…コントローラ  １２…ディスク装置  １３…テープライブラリ装置  １４…仮想ディスク  １３１…テープドライブ  １３２…テープ  １４１…ディスクＬＵ  １４２…テープＬＵ
【図１】
0004756545.tif 000002
【図２】
0004756545.tif 000003
【図３】
0004756545.tif 000004
【図４】
0004756545.tif 000005
【図５】
0004756545.tif 000006
【図６】
0004756545.tif 000007
【図７】
0004756545.tif 000008
【図８】
0004756545.tif 000009
【図９】
0004756545.tif 000010
【図１０】
0004756545.tif 000011
【図１１】
0004756545.tif 000012
【図１２】
0004756545.tif 000013
【図１３】
0004756545.tif 000014
【図１４】
0004756545.tif 000015
【図１５】
0004756545.tif 000016
【図１６】
0004756545.tif 000017
【図１７】
0004756545.tif 000018
【図１８】
0004756545.tif 000019
【図１９】
0004756545.tif 000020