(57)【特許請求の範囲】
【請求項１】
情報処理装置からの、一組のデータの記憶部へのマウントの要求を示している第１要求に応じて、前記一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体から、前記複数の分割データのうちの前記一組のデータにおける特定の順番に位置する分割データを、残余の分割データよりも先に読み出して前記記憶部に先に格納し、前記特定の順番に位置する分割データが前記記憶部に格納された時点で前記第１要求に応じた処理の完了を示す完了通知を送信する格納制御部と、
前記完了通知を受信した前記情報処理装置からの、前記一組のデータに対するデータ操作の要求を示している第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行うアクセス制御部と、
を備えることを特徴とする媒体制御装置。
【請求項２】
媒体制御装置は、さらに、
前記一組のデータと前記複数の分割データとを対応付けた情報を登録する管理情報を記憶する管理情報格納部
を備え、
前記格納制御部は、前記管理情報に基づいて、前記複数の分割データの前記複数の記録媒体からの読み出し及び前記記憶部への格納を行い、
前記格納制御部は、前記情報処理装置から書込み要求を受信した場合、前記情報処理装置から受信した書込み対象データを分割して複数の分割データを生成し、前記書込み対象データと、前記複数の分割データとを対応づけた情報を前記管理情報に登録し、前記複数の分割データの各々を、前記複数の記録媒体に並列に格納する
ことを特徴とする請求項１に記載の媒体制御装置。
【請求項３】
前記第２要求は、前記一組のデータの先頭からの上書き要求であり、
前記格納制御部は、前記第１要求に応じて、前記複数の記録媒体から、前記一組のデータにおける先頭に位置する分割データを、前記特定の順番に位置する分割データとして先に読み出して前記記憶部に先に格納し、
前記アクセス制御部は、前記第２要求に応じて、前記記憶部において前記先頭に位置する分割データが格納された領域から、上書き処理を開始する
ことを特徴とする請求項１または２に記載の媒体制御装置。
【請求項４】
前記第２要求は、前記一組のデータの先頭からの読み出し要求であり、
前記格納制御部は、前記第１要求に応じて、前記複数の記録媒体から、前記一組のデータにおける先頭に位置する分割データを、前記特定の順番に位置する分割データとして先に読み出して前記記憶部に先に格納し、
前記アクセス制御部は、前記読み出し要求に応じて、前記記憶部に格納された前記先頭に位置する分割データからデータの読み出しを開始して、前記情報処理装置へ送信する
ことを特徴とする請求項１〜３のうちいずれか１項に記載の媒体制御装置。
【請求項５】
前記格納制御部は、
前記情報処理装置からの前記第１要求に応じて、前記特定の順番に位置する分割データが前記記憶部に記憶されているか否かの判定を行い、
前記判定において前記特定の順番に位置する分割データが前記記憶部に記憶されていないと判定した場合に、前記特定の順番に位置する分割データについての前記読み出し及び前記格納並びに前記完了通知の送信を行い、
前記判定において前記特定の順番に位置する分割データが前記記憶部に記憶されていると判定した場合には、前記特定の順番に位置する分割データについての前記読み出し及び前記格納を行うことなく前記完了通知の送信を行う、
ことを特徴とする請求項１〜４のうちいずれか１項に記載の媒体制御装置。
【請求項６】
情報処理装置からの、一組のデータの記憶部へのマウントの要求を示している第１要求に応じて、前記一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体から、前記複数の分割データのうちの前記一組のデータにおける特定の順番に位置する分割データを、残余の分割データよりも先に読み出して前記記憶部に先に格納し、
前記特定の順番に位置する分割データが前記記憶部に格納された時点で前記第１要求に応じた処理の完了を示す完了通知を送信し、
前記完了通知を受信した前記情報処理装置からの、前記一組のデータに対するデータ操作の要求を示している第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
ことを特徴とする制御方法。
【請求項７】
コンピュータに、
情報処理装置からの、一組のデータの記憶部へのマウントの要求を示している第１要求に応じて、前記一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体から、前記複数の分割データのうちの前記一組のデータにおける特定の順番に位置する分割データを、残余の分割データよりも先に読み出して前記記憶部に先に格納し、
前記特定の順番に位置する分割データが前記記憶部に格納された時点で前記第１要求に応じた処理の完了を示す完了通知を送信し、
前記完了通知を受信した前記情報処理装置からの、前記一組のデータに対するデータ操作の要求を示している第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
処理を実行させることを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、媒体に対するアクセス制御に関する。
【背景技術】
【０００２】
仮想テープシステムはホスト装置に接続し、ホスト装置に対して自システムをテープライブラリとして仮想的に見せかけることができる。このような仮想テープシステムに接続するホスト装置は、仮想テープシステムをテープライブラリ装置として認識し、認識した装置に対してデータの書き込み（ＷＲＩＴＥ）命令や読み出し（ＲＥＡＤ）命令を送信し、その結果を受信する。
【０００３】
図１は、仮想テープシステムの構成の一例を示す。仮想テープシステムは、仮想テープ装置とテープライブラリ装置を含む。仮想テープ装置は、仮想テープ装置の種々の制御を行う制御サーバと、データを格納するディスクアレイ装置を含む。テープライブラリ装置は、１以上のテープドライブと複数のテープカートリッジを格納するスロットとを有し、テープドライブにテープカートリッジをセットしてデータの読み書きを行ったり、セットされたテープカートリッジを入れ替えたりする機能を有する。テープカートリッジは、例えばＬＴＯ(Linear Tape-Open)等の磁気テープなどである。
【０００４】
仮想テープ装置はフロントエンドでホスト装置と接続し、バックエンドでテープライブラリ装置と接続する。仮想テープ装置とホスト装置、仮想テープ装置とテープライブラリ装置は、例えば通信ネットワークなどを介して接続される。制御サーバはホスト装置から書き込みデータを受信すると、一旦仮想テープ装置内のディスクアレイ装置に格納し、その後ディスクアレイ装置のデータをテープライブラリ装置のテープへ退避（格納）する。このように、仮想テープ装置内の所定の記憶領域（ディスクアレイ）に一旦格納されたデータをテープライブラリ装置のテープへ退避する動作を「マイグレーション」と呼ぶ。マイグレーションによりデータ保全性が確保される。
【０００５】
ホスト装置から書き込みデータを受信した際に、ディスクアレイ装置に書き込みデータを格納するための空き領域がない場合には、制御サーバは以下の制御を行う。すなわち制御サーバは、ホスト装置から更なる書き込み命令を受信すると、ディスクアレイ装置内で最もアクセスされていないデータをディスクアレイから追い出して（削除して）ディスクスペースを開け、そのスペースに新たな書き込みを行う。このように仮想テープ装置内の所定の記憶部（ディスクアレイ）からデータを追い出す動作を「オフキャッシュ」と呼ぶ。
【０００６】
ホスト装置から読み出し命令を受信した場合、制御サーバは、ディスクアレイ装置に読み出し対象データが格納されているか否かを確認し、格納されていればそのデータをホスト装置へ送信する。一方、読み出し対象データがディスクアレイ装置に格納されていない場合、制御サーバは、テープライブラリ装置のテープから読み出し対象データを読み出してディスクアレイ装置に展開（格納）し、展開したデータをホスト装置へ送信する。このテープライブラリ装置のテープから仮想テープ装置の所定の記憶領域（ディスクアレイ）にデータをロードする動作を「リコール」と呼ぶ。
【０００７】
このようなリコール処理は、ホスト装置からの読み出し命令を受信した場合だけではなく、書き込み命令を受信した場合にも行われる。すなわち、読み出し命令と同様に、制御サーバは、ディスクアレイに書き込み対象データが格納されているか否かを確認し、書き込み対象データがディスクアレイに格納されていない場合は、制御サーバはリコールを行う。このように書き込み処理においても展開処理が行われる理由は、ホスト装置と仮想テープ装置との間でデータ転送が始まるまでは、ホスト装置から指定された対象データが、書き込み処理の対象か読み出し処理の対象かの判断がつかないためである。
【０００８】
ホスト装置からの書き込み又は読み出し命令を受信する場合の動作として、具体的には、制御サーバは先ず、仮想層の仮想テープドライブに、書き込み又は読み出し対象のデータが格納されている仮想ボリューム(LV（Logical Volume）)をマウントする。このとき、ディスクアレイ上に書き込み又は読み出し対象のデータが存在する場合には、制御サーバは、ディスクアレイ内の対象データ区画を仮想ドライブにマウントし、マウントが完了次第、ホスト装置からの命令を実行する。一方、ディスクアレイ上に対象データが存在しない場合には、制御サーバは、一度ディスクアレイ上の指定された区画を仮想ドライブにマウントした後、テープライブラリからデータを展開し、その後にホスト装置からの命令を実行する。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開平１０−２３２８００号公報
【特許文献２】特表２００３−５１３３５２号公報
【特許文献３】特表２００５−５３７５５５号公報
【特許文献４】特開２０１３−１６１２５６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ホスト装置からの書き込みまたは読み出し命令の実行前に、仮想テープ装置は、仮想ドライブに仮想ボリュームをマウントし、ディスクアレイ上に仮想ボリュームのデータを展開している。そのため、書き込みまたは読み出し対象のデータがオフキャッシュされたデータである場合には、仮想テープ装置はリコール処理により仮想ボリュームのデータをテープカートリッジから読み出して、ディスクアレイ上に展開する。
【００１１】
近年は、扱われるデータ量が増大化する傾向にあり、仮想層で扱う仮想ボリュームの容量も増大化している。リコール処理においては、データ量が増大するに従い、テープライブラリからディスクアレイまでの読み出し処理に多大な時間がかかる。リコール処理が実行されている間は、ホスト装置は待ち状態に陥ってしまい、データが大容量になると最悪の場合には、ホスト装置で設定したタイムアウト時間に達してしまう虞もある。
【００１２】
そこで、１つの側面では、本発明は、仮想テープシステムのデータへのアクセス処理にかかる時間を削減することを目的とする。
【課題を解決するための手段】
【００１３】
一態様による媒体制御装置は、格納制御部とアクセス制御部を含む。格納制御部は、情報処理装置からの、一組のデータの記憶部へのマウントの要求を示している第１要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体から、複数の分割データのうちの一組のデータにおける特定の順番に位置する分割データを、残余の分割データよりも先に読み出して記憶部に先に格納し、特定の順番に位置する分割データが記憶部に格納された時点で第１要求に応じた処理の完了を示す完了通知を送信する。アクセス制御部は、完了通知を受信した情報処理装置からの、一組のデータに対するデータ操作の要求を示している第２要求に応じて、記憶部に格納された分割データにアクセスを行う。
【発明の効果】
【００１４】
一態様によれば、仮想テープシステムのデータへのアクセス処理にかかる時間を削減することができる。
【図面の簡単な説明】
【００１５】
【図１】仮想テープシステムの構成の一例を示す。
【図２】比較例としての仮想テープシステムの処理の流れを図解したフローチャートの一例である。
【図３】実施形態に係る仮想テープシステムの構成の一例を示す。
【図４】実施形態に係る仮想テープシステムの書き込み処理を説明する図である。
【図５】実施形態に係る仮想テープシステムにおける、対象ボリュームの先頭からの読み出し処理を説明する図である。
【図６】実施形態に係る仮想テープシステムの移動系コマンドの処理を説明する図である。
【図７】実施形態に係る媒体制御装置の一例を示す。
【図８】実施形態に係る制御部の構成の一例を示す。
【図９】管理情報の構成の一例を示す。
【図１０】ＬＶ一覧情報の構成の一例を示す。
【図１１】マウント処理部による対象ボリュームの一部の特定のデータが記憶部に存在するか否かの判定において、対象ボリュームの一部の特定のデータについて説明する図である。
【図１２】実施形態に係る仮想テープシステムの移動系コマンドの処理にかかる時間の削減について説明する図である。
【図１３】実施形態に係る仮想テープシステムの先頭からの書き込み処理にかかる時間の削減について説明する図である。
【図１４】実施形態に係る仮想テープシステムの途中からの追加書き込み処理にかかる時間の削減について説明する図である。
【図１５】実施形態に係る仮想テープシステムの先頭からの読み出し処理にかかる時間の削減について説明する図である。
【図１６】実施形態に係る仮想テープシステムの途中からの読み出し処理にかかる時間の削減について説明する図である。
【図１７】複数の仮想ボリュームの複数の分割ボリュームをオフキャッシュする場合の動作を説明する図である。
【図１８】実施形態に係るマウント処理部のマウント処理の詳細を図解したフローチャートの一例である。
【図１９】実施形態に係る書き込み処理部の書き込み処理の詳細を図解したフローチャートの一例である。
【図２０】実施形態に係るマイグレーション処理部のマイグレーション処理の詳細を図解したフローチャートの一例である。
【図２１】実施形態に係るオフキャッシュ処理部のオフキャッシュ処理の詳細を図解したフローチャート（前半）の一例である。
【図２２】実施形態に係るオフキャッシュ処理部のオフキャッシュ処理の詳細を図解したフローチャート（後半）の一例である。
【図２３】実施形態に係る読み出し処理部の読み出し処理の詳細を図解したフローチャートの一例である。
【図２４】実施形態に係るマウント処理部によるリコール処理１の詳細を図解したフローチャートである。
【図２５】実施形態に係る移動処理部による移動処理の詳細を図解したフローチャートである。
【図２６】実施形態に係るリコール処理２の詳細を図解したフローチャートである。
【図２７】実施形態に係る制御部のハードウェア構成の一例を示す。
【発明を実施するための形態】
【００１６】
先ず、比較例としての仮想テープシステムの処理の流れの一例を説明する。図２は、比較例としての仮想テープシステムの処理の流れを図解したフローチャートの一例である。
【００１７】
図２において、仮想テープシステムの制御サーバは、先ず、仮想テープシステムに接続されたホスト装置からマウント命令を受信する（Ｓ１）。次に制御サーバは、Ｓ１で受信したマウント命令において、マウント命令の対象として指定された対象ボリュームを、仮想ドライブにマウントする（Ｓ２）。
【００１８】
次に制御サーバは、Ｓ２でマウントした対象ボリュームに、既に旧データが格納されているか否かを判定する（Ｓ３）。対象ボリュームに旧データが格納されていないと判定した場合（Ｓ３でＮｏ）、制御サーバは処理をＳ６に遷移させる。
【００１９】
一方、対象ボリュームに旧データが格納されていると判定した場合（Ｓ３でＹｅｓ）、制御サーバは、ディスクアレイ上に、対象ボリュームのデータが存在するか否かを判定する（Ｓ４）。ディスクアレイ上に対象ボリュームのデータが存在すると判定した場合（Ｓ４でＹｅｓ）、制御サーバは処理をＳ６に遷移させる。
【００２０】
一方、ディスクアレイ上に、対象ボリュームのデータが存在しないと判定した場合（Ｓ４でＮｏ）、制御サーバは、物理テープから対象ボリュームのデータを読み出して、ディスクアレイに展開（リコール）する（Ｓ５）。そして制御サーバは処理をＳ６に遷移させる。
【００２１】
Ｓ６において、制御サーバは、マウントが完了した旨をホスト装置に通知する（Ｓ６）。次に制御サーバは、ホスト装置から各種コマンドを受信する（Ｓ７）。次に制御サーバは、Ｓ７で受信したコマンドがＵＮＬＯＡＤコマンドか否かを判定する（Ｓ８）。
【００２２】
Ｓ７で受信したコマンドがＵＮＬＯＡＤコマンドではないと判定した場合（Ｓ８でＮｏ）、制御サーバは、Ｓ７で受信したコマンドがＷＲＩＴＥコマンドか否かを判定する（Ｓ９）。Ｓ７で受信したコマンドがＷＲＩＴＥコマンドであると判定した場合（Ｓ９でＹｅｓ）、制御サーバは、現在のブロックから書き込みを開始する（Ｓ１０）。そして制御サーバは、処理をＳ７に戻す。
【００２３】
一方、Ｓ７で受信したコマンドがＷＲＩＴＥコマンドではないと判定した場合（Ｓ９でＮｏ）、制御サーバは、Ｓ７で受信したコマンドがＲＥＡＤコマンドか否かを判定する（Ｓ１１）。Ｓ７で受信したコマンドがＲＥＡＤコマンドであると判定した場合（Ｓ１１でＹｅｓ）、制御サーバは、現在のブロックから読み出しを開始し、読み出したデータをホスト装置へ送信する（Ｓ１２）。ここでＳ１０、Ｓ１２における現在のブロックとは、例えば、対象ボリュームのデータが格納された仮想媒体上における、仮想ドライブのヘッドが位置するブロックである。そして制御サーバは、処理をＳ７に戻す。
【００２４】
一方、Ｓ７で受信したコマンドがＲＥＡＤコマンドではないと判定した場合（Ｓ１１でＮｏ）、制御サーバは、Ｓ７で受信したコマンドが移動系コマンドか否かを判定する（Ｓ１３）。具体的には移動系コマンドには、例えば、ＳＰＡＣＥコマンドや、ＬＯＣＡＴＥコマンド等がある。このような移動系コマンドは、例えば、仮想ドライブのヘッドの位置を、対象ボリュームのデータが格納された仮想媒体上の所定の位置へ仮想的に移動させるコマンドである。Ｓ７で受信したコマンドが移動系コマンドであると判定した場合（Ｓ１３でＹｅｓ）、制御サーバは、指定のブロックに移動する処理を行う（Ｓ１４）。そして制御サーバは、処理をＳ７に戻す。
【００２５】
Ｓ８において、Ｓ７で受信したコマンドがＵＮＬＯＡＤコマンドであると判定した場合（Ｓ８でＹｅｓ）、制御サーバは、仮想ボリュームをＵＮＬＯＡＤ後、書き込んだデータを物理テープへコピー（マイグレーション）する（Ｓ１５）。そして処理は終了する。
【００２６】
比較例の仮想テープシステムにおいては、マウント対象の論理ボリュームのサイズが大きい場合、図２のＳ５におけるリコール処理に多大な時間がかかる。また、Ｓ５でリコールしたにもかかわらず、Ｓ７で受信したコマンドがＷＲＩＴＥコマンドである場合には、リコールした論理ボリュームのデータが格納されたディスクアレイ上の領域に対して、Ｓ１０において新たにデータが書き込まれることとなる。よってこの場合リコール処理自体が無駄になる。
【００２７】
図３は、実施形態に係る仮想テープシステムの構成の一例を示す。仮想テープシステムは、ホスト装置２１、及び仮想テープシステム２２を含む。
【００２８】
ホスト装置２１は、テープライブラリシステムに対して、マウント命令、書き込み命令、読み出し命令、移動系の命令を送信する情報処理装置である。マウント命令には、マウント対象の仮想ボリュームを識別する情報が含まれる。書き込み命令には、書き込み対象のデータと書き込み対象の仮想ボリュームを識別する情報が含まれる。読み出し命令には、読み出し対象の仮想ボリュームを識別する情報が含まれる。移動系の命令には、移動対象の仮想ボリュームを識別する情報と、移動先のブロックを識別する情報またはテープマーク数を示す情報と、が含まれる。
【００２９】
仮想テープシステム２２は、ホスト装置２１からの種々の命令を受信すると、その命令に応じた処理を行って、結果をホスト装置２１へ返す。仮想テープシステム２２は、仮想テープ装置２３とテープライブラリ装置２４を含む。仮想テープ装置２３は、仮想テープ装置２３の種々の制御を行う制御部２５と、データを格納する記憶部２６を含む。制御部２５は、例えば情報処理装置である。記憶部２６は、例えばハードディスク（磁気ディスク装置）を複数搭載し、大容量ディスクとして扱うディスクアレイ装置である。テープライブラリ装置２４は、１以上のテープドライブと複数のテープカートリッジを格納するスロットとを有し、テープドライブにテープカートリッジをセットしてデータの読み書きを行ったり、セットされたテープカートリッジを入れ替えたりする機能を有する。
【００３０】
仮想テープ装置２３はフロントエンドでホスト装置２１と接続し、バックエンドでテープライブラリ装置２４と接続する。仮想テープ装置２３とホスト装置２１、仮想テープ装置２３とテープライブラリ装置２４は、例えば通信ネットワーク等を介して接続される。また、制御部２５と記憶部２６は、例えば通信ネットワークまたはバス等を介して接続される。
【００３１】
次に、実施形態に係る仮想テープシステム２２の書き込み処理について説明する。図４は、実施形態に係る仮想テープシステム２２の書き込み処理を説明する図である。
【００３２】
図４において、ホスト装置２１は、仮想ボリューム３２に対する大容量の書込みデータの書込み命令を、仮想テープシステム２２へ送信する。ホスト装置２１は、仮想テープシステム２２の仮想ドライブ３１（３１ａ〜３１ｃ）と仮想ボリューム３２を認識している。ホスト装置２１から書込み命令を受信すると、仮想テープシステム２２の仮想テープ装置２３は、受信した大容量データの仮想ボリューム３２を複数の分割ボリューム３３（３３ａ〜３３ｃ）に分割する。ここで、分割ボリュームは、仮想ボリューム３２を分割した内部仮想ボリュームである。尚、この分割処理に関しては、ホスト装置２１に分割処理を認識させない。そして仮想テープ装置２３は、複数の分割ボリューム３３を、テープライブラリ装置２４の物理ドライブ３４（３４ａ〜３４ｃ）を用いて、並行して各物理ボリューム３５（３５ａ〜３５ｃ）に格納する。すなわち仮想テープ装置２３は、大容量の仮想ボリューム３２のデータを分割して、複数の分割したデータに対して並行してマイグレーションを行う。
【００３３】
このように、複数の分割ボリュームを並行して複数の物理ボリューム３５に格納するため、一つの大容量の仮想ボリューム３２のデータを一つの物理ボリューム３５に格納する場合に比べて、マイグレーションにかかる時間を削減することができる。また、物理ボリューム３５からデータを読み出す場合にも、複数の物理ボリューム３５から並行して分割ボリュームを読み出すことができるので、リコールにかかる時間を削減することができる。
【００３４】
次に、実施形態に係る仮想テープシステム２２のマウント処理について説明する。
マウント処理は、ホスト装置２１から所定の仮想ボリューム３２のマウント命令を受信した場合に、所定の仮想ボリューム３２のデータを記憶部２６に展開する処理である。この処理は、マウント命令を受信した時点で既に記憶部２６に対象ボリュームのデータが格納されている場合と、記憶部２６に対象ボリュームのデータが格納されていない場合とで処理内容が異なる。よってホスト装置２１からマウント命令を受信すると制御部２５は先ず、対象ボリュームが記憶部２６に存在するか否かの判定を行う。この判定において、実施形態では、対象ボリュームの全てのデータが記憶部２６に存在するか否かの判定を行うのではなく、少なくとも、対象ボリュームの一部の特定のデータ、すなわち一部の特定の分割ボリュームが、記憶部２６に存在するか否かの判定を行う。一部の特定の分割ボリュームとは、具体的には、対象ボリュームの複数の分割ボリュームのうち、最初の所定の数の分割ボリュームと、最後の分割ボリュームである。
【００３５】
一部の特定の分割ボリュームが記憶部２６に存在すると判定した場合、制御部２５はマウント処理が完了したと判定し、ホスト装置２１へマウントが完了したことを示す通知を送信する。一方、一部の特定の分割ボリュームが記憶部２６に存在しないと判定した場合、制御部２５は、一部の特定の分割ボリュームをリコールする。そして、制御部２５は、リコールが完了すると、マウント処理が完了したと判定し、ホスト装置２１へマウントが完了したことを示す通知を送信する。
【００３６】
以上のように制御部２５は、対象ボリュームのうち、少なくとも一部の特定の分割ボリュームが記憶部２６に存在する場合にマウントが完了したと判定する。すなわち、制御部２５はマウント処理において、対象ボリュームのデータがオンキャッシュでない場合に、対象ボリュームのすべてのデータのリコールは行わずに、一部の特定のデータのみリコールを行って、マウントが完了したと判定する。このようにすることで制御部２５がマウント命令を受信してから、次のコマンドの処理を開始するまでの時間を削減することができる。このようにマウント処理において対象ボリュームの一部のみをリコールする実施形態では、マウント完了後に書き込み命令を受信した場合には、無駄に行われるリコールにかかる時間を削減することができる。すなわち実施形態の仮想テープシステム２２では、マウント命令と書き込み命令に対応する処理にかかる時間を足し合わせた時間を削減することができる。
【００３７】
次に、実施形態に係る仮想テープシステム２２における、対象ボリュームの先頭からの読み出し処理について説明する。図５は、実施形態に係る仮想テープシステム２２における、対象ボリュームの先頭からの読み出し処理を説明する図である。
【００３８】
図５の実施形態の仮想テープシステム２２において、対象ボリュームの先頭からの読み出し処理は、マウント処理が終了した後に開始される。すなわち、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリューム３３（３３ａ〜３３ｄ、３３ｎ）が記憶部２６に存在する状態から読み出し処理が開始される。
【００３９】
ホスト装置２１は、仮想ボリューム３２のデータの先頭からの読み出し命令を、仮想テープシステム２２へ送信する。ホスト装置２１からこの読み出し命令を受信すると、仮想テープシステム２２の制御部２５は、記憶部２６から仮想ボリューム３２のデータを読み出して、ホスト装置２１へ送信する。実施形態においては、読み出し処理の開始時点において、少なくとも最初と最後の所定の分割ボリューム（３３ａ〜３３ｄ、３３ｎ）は記憶部２６に存在している。よって制御部２５は、先ず、記憶部２６に既に格納されている最初の分割ボリューム３３ａからデータの読み出しを開始して、ホスト装置２１へ送信する。記憶部２６からのデータの読み出しとホスト装置２１への送信を開始するとともに、制御部２５は、物理ドライブ３４ａ〜３４ｄを用いて、物理ボリューム３５ａ〜３５ｄの各々から未展開の複数の分割ボリューム３３ｅ、３３ｆ、・・・を並行してリコールする。制御部２５は、リコールを行いつつ、リコールにより展開した分割ボリューム３３（３３ｅ、３３ｆ、・・・）のデータを、順次記憶部２６から読み出してホスト装置２１へ送信する。このように、記憶部２６からのデータの読み出し及び送信処理と、リコール処理と、を並行して行うことで、マウント命令と読み出し命令に対する処理にかかる時間を足し合わせた時間を削減することができる。尚、読み出し処理においても、ホスト装置２１からは、仮想ドライブ３１ａを用いて、仮想ボリューム３２からデータを読み出しているものとして認識される。
【００４０】
以下の説明では、物理ボリューム３５からのデータの読み出しと、記憶部２６からのデータの読み出しを区別するために、物理ボリューム３５からのデータの読み出しは（記憶部２６への格納も含めて）「リコール」と記す。そして、記憶部２６からのデータの読み出しを「読み出し」と記す。
【００４１】
次に、実施形態に係る仮想テープシステム２２の移動系コマンドの処理について説明する。移動系コマンドは、ホスト装置２１が認識する仮想ドライブ３１のヘッドを、仮想ボリューム３２が格納される仮想の媒体上の所定の位置へ仮想的に移動させる命令である。移動系コマンドには、移動先を指定する情報として、ブロックの識別情報を含むコマンドや、テープマーク数を含むコマンドがある。
【００４２】
図６は、実施形態に係る仮想テープシステム２２の移動系コマンドの処理を説明する図である。図６の実施形態の仮想テープシステム２２において移動系コマンドの処理は、マウント処理が終了した後に開始される。すなわち、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリューム３３（３３ａ〜３３ｄ、３３ｎ）が記憶部２６に存在する状態から移動系コマンドの処理が開始される。
【００４３】
ホスト装置２１は、移動系コマンドを仮想テープシステム２２へ送信する。図６の例では、移動系コマンドの移動先のブロックは、分割ボリューム３３ｇに含まれている。ホスト装置２１から移動系コマンドを受信すると、仮想テープシステム２２の制御部２５は、移動系コマンドによって指定される移動先のブロックのデータが記憶部２６に存在するか否かを判定する。そして制御部２５は、移動先のブロックが記憶部２６に存在しない場合、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームをリコールする。図６の例の場合、移動先のブロックが含まれる分割ボリューム３３ｇと、分割ボリューム３３ｇの次の分割ボリュームである３３ｈがリコールされている。そして制御部２５は、移動系コマンドの処理が完了した旨を示す通知をホスト装置２１へ送信する。この移動系コマンドの処理では、マウント時にリコールされていた分割ボリューム３３ｄの次の分割ボリュームから、移動先のブロックを含む分割ボリューム３３ｇの前の分割ボリュームのリコールは行われていない。
【００４４】
このように、実施形態に係る仮想テープシステム２２では、移動先のブロックを含む分割ボリュームと、それ以降の所定の数の分割ボリュームをリコールし、移動先のブロックを含む分割ボリュームより前の分割ボリュームのリコールは行われない。これにより、マウント命令と移動系コマンドに対する処理にかかる時間を足し合わせた時間を削減することができる。
【００４５】
次に、実施形態に係る仮想テープシステム２２における、移動系コマンド実行後の読み出し処理について説明する。
【００４６】
実施形態の仮想テープシステム２２において、移動系コマンド実行後の読み出し処理は、移動系コマンドに対する処理が完了した後に開始される。すなわち、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部２６に存在する状態から読み出し処理が開始される。
【００４７】
ホスト装置２１から、移動系コマンド後の読み出し命令を受信すると、仮想テープシステム２２の制御部２５は、記憶部２６から仮想ボリューム３２のデータを読み出して、ホスト装置２１へ送信する。実施形態においては、読み出し処理の開始時点において、少なくとも移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部２６に存在している。よって制御部２５は、先ず、記憶部２６に既に格納されている移動先のブロックからデータの読み出しを開始して、ホスト装置２１へ送信する。記憶部２６からのデータの読み出しとホスト装置２１への送信を開始するとともに、制御部２５は、物理ボリューム３５から未展開の複数の分割ボリュームを並行してリコールする。制御部２５は、リコールを行いつつ、リコールにより展開した分割ボリュームのデータを、順次記憶部２６から読み出してホスト装置２１へ送信する。このように、記憶部２６からのデータの読み出し及び送信処理と、リコール処理と、を並行して行うことで、マウント命令と読み出し命令に対する処理にかかる時間を足し合わせた時間を削減することができる。
【００４８】
次に、実施形態に係る仮想テープシステム２２のオフキャッシュ処理について説明する。
【００４９】
オフキャッシュ処理は、ホスト装置２１からの書き込みデータにより記憶部２６の領域が一杯になった場合に、記憶部２６の所定のデータを削除して、データの書き込みが可能な領域を確保する処理である。実施形態においてオフキャッシュ処理で削除するデータは、マイグレーション済みで、且つ、最後にアクセスされた時刻が最も古いデータである。
【００５０】
オフキャッシュ処理は、例えば、リコール前に、テープから読み出すデータを格納するための空き領域が記憶部２６に存在しないと判定された場合に行われる。すなわち制御部２５は、リコールを行う前に、リコール対象のデータのサイズ以上の空き領域が記憶部２６に存在するか否かを判定し、存在しない場合には、リコール対象のデータのサイズ以上の空き領域が確保できるまで、記憶部２６に格納されたデータを削除する。
【００５１】
比較例の仮想テープシステム２２においては、仮想ボリューム３２単位で削除が行われる。例えば、オフキャッシュ対象として大容量の仮想ボリューム３２が選択された場合、その大容量の仮想ボリューム３２の全てのデータが記憶部２６から一度に削除される。それに対して、実施形態の仮想テープシステム２２は、分割ボリューム単位で削除が行われる。例えば、複数の分割ボリュームのうちのいくつかを記憶部２６から削除することにより、リコールで読み出すデータのサイズ以上の空き容量が確保できた場合には、それ以上の分割ボリュームのオフキャッシュは行わない。このようにすることで、仮想ボリューム３２の一部を可能な限りオンキャッシュにしておくことができ、その結果、リコールにかかる時間を短縮することができる。
【００５２】
また実施形態の仮想テープシステム２２においては、複数の分割ボリュームのうち、分割ボリュームの仮想ボリューム３２における位置に応じて、分割ボリュームを削除する順番を制御する。具体的には、制御部２５は、複数の分割ボリュームのうち、最初の所定の数の分割ボリュームと、最後の分割ボリュームを、可能な限りオンキャッシュとするように、分割ボリュームを削除する順番を制御する。すなわち、制御部２５は最初の所定の数の分割ボリュームと最後の分割ボリュームとに挟まれた所定の数の分割ボリュームを先にオフキャッシュするように制御する。これにより、可能な限り多くの仮想ボリューム３２の最初の所定の数の分割ボリュームと最後の分割ボリュームをオンキャッシュとしておくことができる。よって、マウント命令を受信したときに既に、記憶部２６にこれらの一部の特定の分割ボリュームが格納されている確率を大きくすることができる。ここで、仮想ボリューム３２の最初の所定の数の分割ボリュームと最後の分割ボリュームは、実施形態におけるマウント処理において、マウントの完了の判定対象となるボリュームである。すなわち、マウント処理において制御部２５は、少なくとも、仮想ボリューム３２の最初の所定の数の分割ボリュームと最後の分割ボリュームが記憶部２６に存在するか否かを判定してマウントが完了したと判定する。従って、可能な限り多くの仮想ボリューム３２の最初の所定の数の分割ボリュームと最後の分割ボリュームをオンキャッシュとしておくことは、マウント処理におけるリコールの発生確率を低減することにつながる。これにより、複数のマウント要求に対するマウント処理にかかる時間の合計を、システム全体として削減することができる。
【００５３】
尚、最初の分割ボリュームは、仮想ボリュームの先頭からの読み出し又は書き込みの際に、最初にアクセスされるデータが含まれている。また、最後の分割ボリュームは、既存の仮想ボリュームの最後から追加で書き込みを行う際に、移動系コマンドにより移動先として指定されるデータが含まれている。よって、これらの最初と最後の所定の数の分割ボリュームを可能な限りオンキャッシュとすることで、書き込み処理、読み出し処理、または移動処理の開始を早めることができる。尚、データをオンキャッシュにするとは、記憶部２６にデータを格納した状態にすることを指す。
【００５４】
図７は、実施形態に係る媒体制御装置４０の一例を示す。媒体制御装置４０は、格納制御部４１、アクセス制御部４２、及び管理情報格納部４３を含む。また、媒体制御装置４０は、記憶部４４、情報処理装置４５、及び記録媒体４６に通信ネットワークまたはバスを介して接続される。制御部２５は、媒体制御装置４０の一例である。記憶部２６は、記憶部４４の一例である。テープライブラリ装置３４の物理ボリュームが格納されるテープカートリッジは、記録媒体４６の一例である。
【００５５】
格納制御部４１は、情報処理装置４５からの第１要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体４６のうち目的の記憶媒体から複数の分割データのうちいずれかの分割データを読み出して記憶部４４に格納する。
【００５６】
アクセス制御部４２は、情報処理装置４５からの第２要求に応じて、記憶部４４に格納された分割データにアクセスを行う。
【００５７】
管理情報格納部４３は、一組のデータと複数の分割データとを検索可能に対応付けた情報を含む管理情報を記憶する。
【００５８】
また、格納制御部４１は、管理情報に基づいて、複数の記録媒体４６から複数の分割データのうちのいずれかの分割データを読み出して記憶部４４に格納する。
【００５９】
また、格納制御部４１は、情報処理装置４５から書込み要求を受信した場合、情報処理装置４５から受信した書込み対象データを分割して複数の分割データを生成する。そして、格納制御部４１は、書き込み対象データと、複数の分割データとを検索可能に対応づけた情報を管理情報に登録する。そして格納制御部４１は、複数の分割データの各々を、複数の記録媒体４６に並列に格納する。
【００６０】
また、格納制御部４１は、第１要求に応じて、複数の記録媒体４６のうち目的の記憶媒体から、一組のデータの先頭ブロックを含む分割データを読み出して記憶部４４に格納する。そしてアクセス制御部４２は、一組のデータの先頭からの上書き要求に応じて、記憶部４４において一組のデータの先頭ブロックを含む分割データが格納された領域に対して、上書き処理を行う。
【００６１】
また、格納制御部４１は、第１要求に応じて、複数の記録媒体４６のうち目的の記憶媒体から、一組のデータの先頭ブロックを含む分割データを読み出して記憶部４４に格納する。そして、アクセス制御部４２は、一組のデータの先頭からの読み出し要求に応じて、記憶部４４に格納された一組のデータの先頭ブロックを含む分割データの先頭ブロックからデータを読み出して、情報処理装置４５へ送信する。さらに、格納制御部４１は、読み出し要求に応じて、アクセス制御部４２が最初に記憶部４４から読み出すデータを含む分割データの次の分割データ以降の分割データを、順次、複数の記録媒体４６から読み出して、記憶部４４に格納する。
【００６２】
また、管理情報には、さらに、分割データと、分割データが格納される物理又は仮想媒体上における位置を示すための制御情報を分割データが検索可能に対応付けた情報が登録される。そして、格納制御部４１は、情報処理装置４５から、一組のデータが格納される物理又は仮想媒体上におけるアクセス位置を示す情報を含むアクセス要求を受信した場合、以下の処理を行う。すなわち格納制御部４１は、制御情報に基づいて、アクセス位置に格納されたデータを含む分割データを、記録媒体４６から読み出して、記憶部４４に格納する。
【００６３】
また、格納制御部４１は、記憶部４４に分割データを格納可能な空き領域が存在しない場合以下の処理を行う。すなわち格納制御部４１は、記憶部４４に格納されている複数の分割データのうち、一組のデータの先頭ブロックを含む分割データと、一組のデータの最後端のデータを含む分割データと、の間に位置する分割データから順次、記憶部４４が分割データを格納可能となるまで記憶部４４から削除する。
【００６４】
図８は、実施形態に係る制御部２５の構成の一例を示す。制御部２５は、管理情報格納部５１、マウント処理部５２、移動処理部５３、書き込み処理部５４、マイグレーション処理部５５、読み出し処理部５６、及びオフキャッシュ処理部５７を含む。管理情報格納部５１は、管理情報格納部４３の一例である。マウント処理部５２、移動処理部５３、マイグレーション処理部５５、及びオフキャッシュ処理部５７は、格納制御部４１の一例である。書き込み処理部５４、及び読み出し処理部５６は、アクセス制御部４２の一例である。
【００６５】
管理情報格納部５１は、管理情報５８とＬＶ一覧情報５９とを格納する。管理情報５８は、仮想ボリューム３２に関する情報と、その仮想ボリューム３２を分割した複数の分割ボリュームに関する情報と、を対応付けた情報である。分割ボリュームに関する情報には、分割ボリュームが最後にアクセスされた日時、及び、分割ボリュームに含まれるデータのブロックの範囲とテープマーク数の情報が含まれる。ＬＶ一覧情報５９は、仮想テープシステム２２で管理される仮想ボリューム３２の一覧情報であり、各仮想ボリューム３２についての、最後にアクセスされた日時などの情報を含む。
【００６６】
図９は、管理情報５８の構成の一例を示す。管理情報５８には、「分割ボリュームＩＤ」、「仮想ボリュームＩＤ」、「タイムスタンプ」、「開始ブロック番号」、「終了ブロック番号」、「テープマーク数」、及び「オンキャッシュフラグ」のデータ項目を含む。管理情報５８のそれぞれのデータ項目のデータは対応付けて記憶される。
【００６７】
「分割ボリュームＩＤ」は、仮想テープシステム２２における分割ボリュームを一意に識別するための識別情報である。「仮想ボリュームＩＤ」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームが対応する仮想ボリューム３２を仮想テープシステム２２において一意に識別するための識別情報である。「タイムスタンプ」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームが最後にアクセスされた日時を示す情報である。「開始ブロック番号」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームに含まれるデータの開始ブロック番号（開始ブロックの識別情報）である。「終了ブロック番号」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームに含まれるデータの終了ブロック番号（終了ブロックの識別情報）である。「テープマーク数」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームに含まれるテープマークの数を示す情報である。「オンキャッシュフラグ」は、対応する「分割ボリュームＩＤ」で示される分割ボリュームがオンキャッシュか否かを示す情報である。
【００６８】
図１０は、ＬＶ一覧情報５９の一例を示す。ＬＶ一覧情報５９は、「仮想ボリュームＩＤ」、「グループＩＤ」、「サイズ」、「最終アクセス日時」、及び「オンキャッシュフラグ」のデータ項目を含み、それぞれのデータ項目のデータを対応付けて記憶する。「仮想ボリュームＩＤ」は、仮想ボリューム３２を仮想テープシステム２２において一意に識別するための識別情報である。「グループＩＤ」は、対応する「仮想ボリュームＩＤ」で示される仮想ボリューム３２が含まれるグループを、仮想テープシステム２２において一意に識別するための識別情報である。「サイズ」は、対応する「仮想ボリュームＩＤ」で示される仮想ボリューム３２のサイズを示す情報である。「最終アクセス日時」は、対応する「仮想ボリュームＩＤ」で示される仮想ボリューム３２が最後にアクセスされた日時を示す情報である。「オンキャッシュフラグ」は、対応する「仮想ボリュームＩＤ」で示される仮想ボリューム３２が、オンキャッシュか否かを示す情報である。尚、以下の説明では、図９、図１０の「オンキャッシュフラグ」が「False」の場合は、オンキャッシュでない（オフキャッシュである）ことを示し、「オンキャッシュフラグ」が「True」の場合は、オンキャッシュであることを示すものとする。ＬＶ一覧情報５９の「オンキャッシュフラグ」は、仮想ボリュームの複数の分割ボリュームのうち何れかの分割ボリュームがオンキャッシュである場合には、オンキャッシュを示す値となる。
【００６９】
マウント処理部５２は、ホスト装置２１から所定の仮想ボリューム３２のマウント命令を受信した場合に、所定の仮想ボリューム３２のデータを記憶部２６に展開するマウント処理を行う。マウント処理においてマウント処理部５２は、ホスト装置２１からマウント命令を受信すると、先ず、対象ボリュームが新規の仮想ボリューム３２か既存の仮想ボリューム３２かを判定する。この対象ボリュームの判定は、管理情報５８に基いて行われる。すなわちマウント処理部５２は、管理情報５８の「分割ボリュームＩＤ」と「仮想ボリュームＩＤ」の対応関係を参照して、マウント対象の仮想ボリューム３２が、分割ボリュームと対応付けられているか否かを判定する。マウント対象の仮想ボリューム３２が分割ボリュームと対応付けられていると判定した場合、マウント処理部５２は、対象ボリュームは既存の仮想ボリューム３２であると判定する。一方、マウント対象の仮想ボリューム３２が分割ボリュームと対応付けられていないと判定した場合、マウント処理部５２は、対象ボリュームは新規の仮想ボリューム３２であると判定する。
【００７０】
対象ボリュームが新規の仮想ボリューム３２であると判定した場合、マウント処理部５２は、新規分割ボリュームの展開処理を行う。
【００７１】
新規分割ボリュームの展開処理において、先ずマウント処理部５２は、プール３６から未割り当ての分割ボリュームを選択して、選択した分割ボリュームを仮想ボリューム３２に割り当てる。具体的にはマウント処理部５２は、新規の仮想ボリューム３２の識別情報と、選択した分割ボリュームの識別情報とを対応付けて、管理情報５８に格納する。すなわち、マウント処理部５２は、管理情報５８に新しいエントリを追加し、そのエントリの「分割ボリュームＩＤ」と「仮想ボリュームＩＤ」に、それぞれ、選択した分割ボリュームの識別情報と、新規の仮想ボリューム３２の識別情報を格納する。尚、分割ボリュームのサイズは予め設定されているものとするが、分割ボリュームの割当の際に、ホスト装置２１により指定されてもよい。
【００７２】
尚、プール３６には、未割り当ての分割ボリュームを管理するための情報が格納されており、例えば、未割り当ての分割ボリュームの識別情報、サイズ等の情報が格納されるものである。実施形態では、未割り当ての分割ボリュームの集合をプール３６と記載する。未割り当ての分割ボリュームとは、どの仮想ボリューム３２にも割り当てられていない分割ボリュームを指す。
【００７３】
分割ボリュームを仮想ボリューム３２に割り当てる処理が完了すると、マウント処理部５２は、割り当てた分割ボリュームの領域を記憶部２６に展開する。すなわちマウント処理部５２は、割り当てた分割ボリュームのサイズの空き領域を記憶部２６上に確保する。
【００７４】
割り当てた分割ボリュームのサイズの空き領域を記憶部２６に確保できない場合、マウント処理部５２は、オフキャッシュ処理の実行要求をオフキャッシュ処理部５７に出力する。オフキャッシュ処理の実行要求を受け付けたオフキャッシュ処理部５７は、オフキャッシュを行い、分割ボリュームのサイズの空き領域を記憶部２６に確保する。そしてオフキャッシュ処理部５７はオフキャッシュが完了したことをマウント処理部５２に通知する。この通知を受け取るとマウント処理部５２は、割り当てた分割ボリュームを記憶部２６に展開する。ここでは展開処理は、分割ボリューム内にデータが格納されていないので、分割ボリュームのサイズの空き領域が確保される処理となる。
【００７５】
以上のようにして、マウント処理部５２は、新規分割ボリュームの展開処理を行う。新規分割ボリュームの展開処理が完了すると、マウント処理部５２は、ホスト装置２１にマウントが完了したことを示す完了通知を送信する。以上のようにして、マウント処理部５２は、対象ボリュームが新規の仮想ボリューム３２であると判定した場合のマウント処理を行う。尚、実施形態では、分割ボリュームが記憶部２６に展開された段階で、制御部２５（または例えばＯＳ等の所定のソフトウェア）が、展開された分割ボリュームを認識するものとする。
【００７６】
一方、対象ボリュームが既存の仮想ボリューム３２であると判定した場合、マウント処理部５２は、対象ボリュームの複数の分割ボリュームのうち、一部の特定の分割ボリュームが記憶部２６に存在するか否かを判定する。
【００７７】
具体的には、一部の特定の分割ボリュームとは、対象ボリュームの複数の分割ボリュームのうち、最初の４つの分割ボリューム及び最後の分割ボリュームである。ここで、分割ボリュームは、各分割ボリュームの先頭のブロックＩＤが小さい順に順序付けられるものとして説明する。
【００７８】
図１１は、マウント処理部５２による対象ボリュームの一部の特定のデータが記憶部２６に存在するか否かの判定において、判定の対象となる一部の特定のデータについて説明する図である。図１１において、１つの仮想ボリューム３２を分割した複数の分割ボリュームは、４つのタイプ（分割ボリューム６１〜６４）に分類されている。分割ボリューム６１は、仮想ボリューム３２の先頭の位置のブロックを含む分割ボリューム（先頭の分割ボリューム）である。分割ボリューム６２は、分割ボリューム６１の次の３つの分割ボリュームである。分割ボリューム６４は、対象ボリュームの最後に位置するブロックを含む分割ボリューム（最後端の分割ボリューム）である。分割ボリューム６３は、仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６１、６２、６４以外のデータ、すなわち、分割ボリューム６２と分割ボリューム６４の間に位置する分割ボリュームである。尚、実施形態では、分割ボリューム６２は、分割ボリューム６１の次の３つの分割ボリュームとしたが、分割ボリューム６２の数は３つに限定されず、所定の数としてもよい。
【００７９】
図１１のように分類された分割ボリュームを用いて説明すると、マウント処理部５２は、少なくとも、分割ボリューム６１、６２、及び６４のデータが記憶部２６に存在するか否かを判定する。マウント処理部５２は、分割ボリューム６１、６２、及び６４のデータのいずれもが記憶部２６に存在すると判定した場合、マウントは完了したと判定し、マウントが完了したことを示す完了通知をホスト装置２１へ送信する。一方、マウント処理部５２は、仮想ボリューム３２のデータのうち、分割ボリューム６１、６２、６４の何れかが記憶部２６に存在しないと判定した場合は、分割ボリューム６１、６２、６４のうち、記憶部２６に存在しない分割ボリュームをリコールする。そしてリコールが完了し、分割ボリューム６１、６２、及び６４の全てが記憶部２６に展開されると、マウント処理部５２はマウントが完了したと判定し、マウントが完了したことを示す完了通知を、ホスト装置２１へ送信する。
【００８０】
すなわちマウント処理部５２は、（１）マウント対象の仮想ボリューム３２のうち、少なくとも分割ボリューム６１、６２、及び６４のいずれもが記憶部２６に存在する時にマウント要求を受信した場合、ホスト装置２１にマウントの完了通知を即応答する。またマウント処理部５２は、（２）マウント対象の仮想ボリューム３２のうち、分割ボリューム６１、及び６２のみオンキャッシュの時にマウント要求を受信した場合、分割ボリューム６４をリコールし、リコール完了後にマウントの完了通知を応答する。またマウント処理部５２は、（３）マウント対象の仮想ボリューム３２のうち、分割ボリューム６１のみオンキャッシュの時にマウント要求を受信した場合、分割ボリューム６２、６４をリコールし、リコール完了後にマウントの完了通知を応答する。尚、分割ボリューム６２、６４のリコールにおいては、複数の物理ドライブ３４を介して並列にリコールが行われる。またマウント処理部５２は、（４）マウント対象の仮想ボリューム３２のうち、オンキャッシュの領域がない時にマウント要求を受信した場合、分割ボリューム６１、６２、６４をリコールし、リコール完了後にマウントの完了通知を応答する。尚、分割ボリューム６１、６２、６４のリコールにおいては、複数の物理ドライブ３４を介して並列にリコールが行われる。
【００８１】
リコールを行う分割ボリュームを決定した場合、実際のリコールを行う前にマウント処理部５２は、記憶部２６に、リコール対象の分割ボリュームを格納する空き領域が存在するか否かを判定する。リコール対象の分割ボリュームを格納する空き領域が記憶部２６に存在しない場合、マウント処理部５２は、オフキャッシュ処理部５７に対してオフキャッシュ要求を出力する。オフキャッシュ要求を受け付けたオフキャッシュ処理部５７は、オフキャッシュを行い、リコール対象の分割ボリュームのサイズの空き領域を記憶部２６に確保する。そしてオフキャッシュ処理部５７はオフキャッシュが完了したことをマウント処理部５２に通知する。この通知を受け取るとマウント処理部５２は、リコール対象の分割ボリュームを、確保された空き領域へリコールする。
【００８２】
尚、実施形態では、マウント処理部５２による対象ボリュームの一部の特定のデータが記憶部２６に存在するか否かの判定において、判定の対象となる一部の特定のデータは、分割ボリューム６１、６２、６４であるとしたこれに限定されない。すなわち、一部の特定のデータは分割ボリューム６１、６２、６４の何れか、または、任意の組合せとしてもよい。
【００８３】
移動処理部５３は、ホスト装置２１から移動系コマンドを受信して、移動対象ボリュームに対する、移動系コマンドの実行を行う。移動系コマンドは、マウント処理部５２によるマウント処理が完了してから実行される。
【００８４】
移動処理部５３は先ず、移動系コマンドによって指定される移動先のブロックを含む分割ボリュームを、管理情報５８に基づいて特定する。すなわち移動処理部５３は、管理情報５８の「開始ブロック番号」と「終了ブロック番号」、または、「テープマーク数」を参照することによって、移動先のブロックを含む分割ボリュームを特定する。次に移動処理部５３は、管理情報５８に基づいて、移動先の分割ボリュームがオンキャッシュか否かを判定する。すなわち移動処理部５３は、管理情報５８の「オンキャッシュフラグ」を参照することによって、移動先の分割ボリュームがオンキャッシュか否かを判定する。尚、移動先の分割ボリュームがオンキャッシュか否かを判定する処理は、移動先の分割ボリュームと、移動先の分割ボリューム以降の所定の数の分割ボリュームがオンキャッシュか否かを判定する処理としてもよい。
【００８５】
移動先の分割ボリュームがオンキャッシュでないと判定した場合、移動処理部５３は、移動先の分割ボリュームと、移動先の分割ボリュームの次の分割ボリュームをリコールする。ここでリコールする分割ボリュームは、移動先の分割ボリュームと、移動先の分割ボリューム以降の所定の数の分割ボリュームとしてもよい。リコールが完了すると、移動処理部５３は、仮想ドライブ３１の仮想ヘッドを、移動対象のブロックの位置へ移動させる処理を行う。そして移動処理部５３は、移動処理が完了したと判定し、移動処理が完了したことを示す移動完了通知をホスト装置２１へ送信する。
【００８６】
ここで、実施形態に係る仮想テープシステム２２の移動系コマンドの処理にかかる時間の削減について説明する。図１２は、実施形態に係る仮想テープシステム２２の移動系コマンドの処理にかかる時間の削減について説明する図である。図１２（Ａ）は、比較例のマウント処理と移動系コマンドの処理時間を説明する図である。図１２（Ｂ）は、実施形態にかかる仮想テープシステム２２のマウント処理と移動系コマンドの処理時間を説明する図である。尚、図１２においては、移動対象の仮想ボリューム３２のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と移動系コマンドが実行される場合の例を示している。
【００８７】
比較例では、図１２（Ａ）に示すように、マウント処理において移動対象の仮想ボリューム３２の全てのデータのリコールが行われ、仮想ボリューム３２の全てのデータのリコールが完了してから、移動処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ３４（１）により行われている。
【００８８】
これに対して実施形態においては、図１２（Ｂ）に示すように、マウント処理において分割ボリューム６１、６２、６４のデータ（図１２（Ｂ）のＡ、Ｂ、Ｃ、Ｄ、Ｚ）のリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム（図１２（Ｂ）ではＧの例を示している）と、移動先の分割ボリューム（Ｇ）の次の分割ボリューム（Ｈ）がリコールされ、移動処理が行われる。
【００８９】
このように実施形態の仮想テープシステム２２では、比較例と比べると、マウント処理と移動系コマンドに対する処理にかかる時間を削減することができる。
【００９０】
書き込み処理部５４は、ホスト装置２１から書き込み命令を受信して、書き込み対象ボリュームに対する、書き込み対象データの書き込み処理を行う。書き込み処理部５４による書き込み処理は、マウント処理部５２によるマウント処理が完了してから実行される。
【００９１】
書き込み命令は、２つに分類される。すなわち、新規の仮想ボリューム３２に対する書き込み命令と、既存の仮想ボリューム３２に対する書き込み命令である。さらに、既存の仮想ボリューム３２に対する書き込み命令は、仮想ボリューム３２の先頭からの書き込み命令と、仮想ボリューム３２の途中からの書き込み命令の２つに分類される。
【００９２】
新規の仮想ボリューム３２に対する書き込み処理は、マウント処理により、新しく割り当てられた分割ボリューム（以下、説明のために分割ボリュームＬＶ’１と記す）の領域が記憶部２６に確保された状態から開始される。
【００９３】
新規の仮想ボリューム３２に対する書き込み処理において、書き込み処理部５４は、書き込み対象データを、新規に割り当てられた分割ボリュームＬＶ’１に対して書き込む。そして分割ボリュームＬＶ’１に対する書込みが進み、書き込みデータ量が分割ボリュームＬＶ’１の容量を超えた場合、書き込み処理部５４は管理情報５８に、書き込んだデータに関する情報と、分割ボリュームＬＶ’１の識別情報とを対応付けて記録する。書き込んだデータに関する情報は具体的には、分割ボリュームに書き込んだデータの、ブロックＩＤの範囲と、テープマーク数である。管理情報５８への記録が完了すると、書き込み処理部５４は、記憶部２６から、分割ボリュームＬＶ’１をアンマウントする。アンマウントは、すなわち、ホスト装置２１から見て、制御部２５（または例えば制御部２５のＯＳ（Operating System）等の所定のソフトウェア）が、分割ボリュームＬＶ’１を認識できない状態にする動作である。そして、書き込み処理部５４は、アンマウントした分割ボリュームＬＶ’１のマイグレーションの実行要求を、マイグレーション処理部５５に出力する。
【００９４】
マイグレーションの実行要求を出力するとともに書き込み処理部５４は、新規分割ボリュームの展開処理を行う。この新規分割ボリュームの展開処理は、マウント処理部５２により行われる新規分割ボリュームの展開処理と同様である。すなわち、プール３６から新規の分割ボリュームを選択して、管理情報５８を更新し、選択した分割ボリュームを展開する。
【００９５】
そして書き込み処理部５４は、ＬＶ’１に書込みが完了したブロックＩＤの次のブロックＩＤのブロックから、新たに割り当てられた分割ボリューム（以下、説明のために分割ボリュームＬＶ’２と記す）に対して書き込みを再開する。そして分割ボリュームＬＶ’２に対する書込みが進み、書き込みデータ量が、分割ボリュームＬＶ’２の容量を超えた場合は、書き込み処理部５４は、ＬＶ’１と同様の処理をＬＶ’２に対して行う。そして書き込み処理部５４は、再度新規分割ボリュームの展開処理を行い、同様の処理を繰り返す。
【００９６】
書き込み対象データの全てのデータの書込みが完了したら、書き込み処理部５４は、書き込みコマンドに対する書き込み処理を終了する。尚、書き込み処理において書き込み対象の最後のデータを書き込んだ分割ボリューム（説明のために分割ボリュームＬＶ’ｎと記す）に対しても、書き込み処理部５４は、ＬＶ’１に対してと同様の処理を行ってもよい。すなわち書き込み処理部５４は、管理情報５８に、書き込んだデータに関する情報と、分割ボリュームＬＶ’ｎの識別情報とを対応付けて記録してもよい。そして書き込み処理部５４は、分割ボリュームＬＶ’ｎをアンマウントし、ＬＶ’ｎのマイグレーションの実行要求を、マイグレーション処理部５５に出力してもよい。
【００９７】
既存の仮想ボリューム３２に対する書き込み命令は、仮想ボリューム３２の先頭からの書き込み命令と、仮想ボリューム３２の途中からの追加書き込み命令の２つに分類される。仮想ボリューム３２の途中からの追加書き込み命令は、移動系コマンドの処理完了後に実行される書き込み命令である。
【００９８】
既存の仮想ボリューム３２に対する書き込み処理であって、仮想ボリューム３２の先頭からの書き込み処理は、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリュームが記憶部２６に存在する状態から開始される。これは、書き込み処理の前に実行されるマウント処理によるものである。仮想ボリューム３２が１つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部２６に存在する状態から開始される。
【００９９】
書き込み処理部５４は先ず、書き込み対象データを、記憶部２６に展開済みの先頭の分割ボリューム６１に対して書き込む。それとともに書き込み処理部５４は、分割ボリューム６２、６３、６４の各分割ボリュームに対して、仮想ボリューム３２との対応付けを外す処理を行う。具体的には書き込み処理部５４は、管理情報５８において、書き込み対象の仮想ボリューム３２に対応付けられた分割ボリュームのうち、分割ボリューム６２、６３、６４のエントリを削除する。そして書き込み処理部５４は、各分割ボリューム６２、６３、６４を初期化して、初期化した分割ボリューム６２、６３、６４を未割り当ての分割ボリュームとしてプール３６に戻す。
【０１００】
書き込みデータ量が先頭の分割ボリューム６１の容量を超えた場合の動作は、新規仮想ボリュームに対する書き込み処理におけるものと同様である。すなわち書き込み処理部５４は、管理情報５８に、書き込んだデータに関する情報と、分割ボリューム６１の識別情報とを対応付けて記録する。そして書き込み処理部５４は、記憶部２６から、分割ボリューム６１をアンマウントし、アンマウントした分割ボリューム６１のマイグレーションの実行要求を、マイグレーション処理部５５に出力する。マイグレーションの実行要求を出力するとともに書き込み処理部５４は、新規分割ボリュームの展開処理を行う。ここで、新規分割ボリュームの展開処理においてプール３６から選択される新規の分割ボリュームは、ディスク上に存在する未割り当ての分割ボリュームを優先して選択されるように制御してもよい。そして書き込み処理部５４は、書込みが完了したブロックＩＤの次のブロックＩＤのブロックから、新たに割り当てられた分割ボリュームに対して書き込みを再開する。以降の動作も、新規仮想ボリュームに対する書き込み処理におけるものと同様である。
【０１０１】
尚、初期化した分割ボリュームをプール３６に戻す際に、その分割ボリュームが記憶部２６に存在していた場合には、分割ボリュームのデータは記憶部２６からも削除されてもよい。
【０１０２】
ここで、実施形態に係る仮想テープシステム２２の先頭からの書き込み処理にかかる時間の削減について説明する。図１３は、実施形態に係る仮想テープシステム２２の先頭からの書き込み処理にかかる時間の削減について説明する図である。図１３（Ａ）は、比較例のマウント処理と先頭からの書き込み処理の処理時間を説明する図である。図１３（Ｂ）は、実施形態にかかる仮想テープシステム２２のマウント処理と先頭からの書き込み処理の処理時間を説明する図である。尚、図１３においては、書き込み対象の仮想ボリューム３２のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と書き込み処理が実行される場合の例を示している。
【０１０３】
比較例では、図１３（Ａ）に示すように、マウント処理において書き込み対象の仮想ボリューム３２の全てのデータのリコールが行われ、仮想ボリューム３２の全てのデータのリコールが完了してから、書き込み処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ３４（１）により行われている。
【０１０４】
これに対して実施形態の仮想テープシステム２２においては、図１３（Ｂ）に示すように、マウント処理において分割ボリューム６１、６２、６４（図１３（Ｂ）のＡ、Ｂ、Ｃ、Ｄ、Ｚ）のデータのリコールが最初に行わる。そして、これらの分割ボリュームのリコールが完了した時点で、書き込み処理が開始される。このように分割ボリューム６３のリコールが行われないため、実施形態の仮想テープシステム２２では、比較例と比べると、マウント処理と書き込みコマンドに対する処理にかかる時間を削減することができる。
【０１０５】
既存の仮想ボリューム３２に対する書き込み処理であって、仮想ボリューム３２の途中からの追加書き込み処理は、移動系コマンドの実行完了後に開始される。よって、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部２６に存在する状態から書き込み処理が開始される。尚、仮想ボリューム３２が１つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部２６に存在する状態から開始される。
【０１０６】
書き込み処理部５４は先ず、書き込み対象データを、記憶部２６に展開済みの移動後の分割ボリューム（説明のために分割ボリュームＬＶ’ｍと記す）に対して書き込む。それとともに、書き込み処理部５４は、書き込み対象の仮想ボリューム３２の複数の分割ボリュームのうち、移動後の分割ボリュームＬＶ’ｍ以降の各分割ボリュームに対して、対象ボリュームとの対応付けを外す。すなわち書き込み処理部５４は、管理情報５８において、書き込み対象の仮想ボリューム３２に対応付けられた分割ボリュームのうち、分割ボリュームＬＶ’ｍ以降の分割ボリュームのエントリを削除する。そして書き込み処理部５４は、分割ボリュームＬＶ’ｍ以外の各分割ボリュームを初期化して、初期化した分割ボリュームをプール３６に戻す。それ以降の書き込み処理部５４の動作は、既存の仮想ボリューム３２の先頭からの書き込み処理の動作と同様である。
【０１０７】
ここで、実施形態に係る仮想テープシステム２２の途中からの追加書き込み処理にかかる時間の削減について説明する。図１４は、実施形態に係る仮想テープシステム２２の途中からの追加書き込み処理にかかる時間の削減について説明する図である。図１４（Ａ）は、比較例における、マウント処理と途中からの追加書き込み処理の処理時間を説明する図である。図１４（Ｂ）は、実施形態にかかる仮想テープシステム２における、マウント処理と途中からの追加書き込み処理の処理時間を説明する図である。尚、図１４においては、書き込み対象の仮想ボリューム３２のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理、移動処理、及び書き込み処理が実行される場合の例を示している。
【０１０８】
比較例では、図１４（Ａ）に示すように、マウント処理において書き込み対象の仮想ボリューム３２の全てのデータのリコールが行われ、仮想ボリューム３２の全てのデータのリコールが完了してから、移動処理が開始される。そして、移動処理の完了後、書き込み処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ３４（１）により行われている。
【０１０９】
これに対して実施形態においては、図１４（Ｂ）に示すように、マウント処理において分割ボリューム６１、６２、６４（図１４（Ｂ）のＡ、Ｂ、Ｃ、Ｄ、Ｚ）のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム（Ｇ）と、移動先の分割ボリュームの次の分割ボリューム（Ｈ）がリコールされ、移動処理が行われる。そして移動処理の完了後、書き込み処理が開始される。
【０１１０】
以上から実施形態の仮想テープシステム２２では、比較例と比べると、マウント処理と、移動系コマンド及び書き込みコマンドに対する処理にかかる時間を削減することができる。
【０１１１】
マイグレーション処理部５５は、分割ボリュームのマイグレーションを実行する。分割ボリュームのマイグレーションは、書き込み処理部５４からの分割ボリュームのマイグレーションの実行要求を、マイグレーション処理部５５が受信したタイミングで実行される。
【０１１２】
マイグレーション処理において、マイグレーション処理部５５は、記憶部２６に格納されている分割ボリュームのデータを、テープライブラリ装置２４のテープカートリッジに生成された物理ボリューム３５に格納する。マイグレーション処理に先立ち、物理ボリューム３５は予め、テープライブラリ装置２４の物理ドライブ３４と同数分生成される。これらの物理ボリューム３５は物理ドライブ３４に１対１で対応しており、各物理ボリューム３５は、各々対応する物理ドライブ３４によりデータの読み書きが行われるものである。このようにマイグレーション先の物理ボリューム３５が、テープライブラリ装置２４の物理ドライブ３４と１対１で対応することにより、マイグレーションまたはリコールにおいて、物理ボリューム３５に対するデータのアクセスを並行して行うことができる。
【０１１３】
マイグレーション処理部５５は、各分割ボリュームをマイグレーションする際に、マイグレーションに使用する物理ドライブ３４をローテーションさせる。例えば、物理ドライブ３４が１〜Ｎ個存在するテープライブラリ装置２４においては、マイグレーション処理部５５は、物理ドライブ３４（１）がマイグレーションで使用されたら、次は、物理ドライブ３４（２）が使用されるように制御する。そして、順番に物理ドライブ３４（３）、（４）、・・・と使用され、物理ドライブ３４（Ｎ）が使用されたら、次は再度、物理ドライブ３４（１）が使用されるようにマイグレーション処理部５５は制御する。尚、複数の物理ドライブ３４による各物理ボリューム３５への書き込み処理は、並行して行うことができる。
【０１１４】
このように、物理ボリューム３５と物理ドライブ３４とを１対１で対応付けて、分割ボリュームのデータを順番に各物理ボリューム３５に格納することで、１つの仮想ボリューム３２に対応する複数の分割ボリュームの読み書きを最大限に並列化することができる。また、各分割ボリュームのサイズを均一にすることで、分割ボリューム毎のマイグレーション性能のばらつきを抑えることができ、特定の分割ボリュームの読み書きがボトルネックとなることを防ぐことができる。
【０１１５】
読み出し処理部５６は、ホスト装置２１からの読み出し命令を受信して、読み出し対象の仮想ボリューム３２から、読み出し対象のデータを読み出して、ホスト装置２１へ送信する処理を行う。読み出し処理部５６による読み出し処理は、マウント処理部５２によるマウント処理が完了してから実行される。
【０１１６】
読み出し命令は、２つに分類される。すなわち、仮想ボリューム３２の先頭からの読み出し命令と、仮想ボリューム３２の途中からの読み出し命令である。仮想ボリューム３２の途中からの読み出し命令は、移動系コマンドの実行後に処理される読み出し命令である。
【０１１７】
仮想ボリューム３２の先頭からの読み出し処理は、読み出し対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリュームが記憶部２６に存在する状態から開始される。これは、読み出し処理の前に実行されるマウント処理によるものである。尚、仮想ボリューム３２が１つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部２６に存在する状態から開始される。
【０１１８】
読み出し処理部５６は、先ず、記憶部２６に既に格納されている最初の分割ボリューム６１のデータの読み出しを開始して、ホスト装置２１へ送信する。オフキャッシュされている分割ボリュームが存在する場合は、記憶部２６からのデータの読み出し及びホスト装置２１への送信を開始するとともに、読み出し処理部５６は、オフキャッシュされている分割ボリュームを物理ボリューム３５から並行してリコールする。リコールは、オフキャッシュされている分割ボリュームのうち、先頭に位置する分割ボリュームから順に行われる。読み出し処理部５６は、リコールを行いつつ、リコールが完了した分割ボリュームのデータを、順次記憶部２６から読み出してホスト装置２１へ送信する。すなわち、リコールのプロセスと、記憶部２６からのデータの読み出し及び送信のプロセスと、が並行して実行される。記憶部２６からのデータの読み出しが、リコールよりも速く進行した場合、記憶部２６からのデータの読み出し処理において、読み出し対象のデータが記憶部２６に存在しない場合が発生する。この場合は、読み出し処理部５６は、ホスト装置２１に対して、読み出しコマンドのリトライ要求を送信する。
【０１１９】
ここで、実施形態に係る仮想テープシステム２２の先頭からの読み出し処理にかかる時間の削減について説明する。図１５は、実施形態に係る仮想テープシステム２２の先頭からの読み出し処理にかかる時間の削減について説明する図である。図１５（Ａ）は、比較例のマウント処理と先頭からの読み出し処理の処理時間を説明する図である。図１５（Ｂ）は、実施形態にかかる仮想テープシステム２２のマウント処理と先頭からの読み出し処理の処理時間を説明する図である。尚、図１５においては、読み出し対象の仮想ボリューム３２のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と読み出し処理が実行される場合の例を示している。
【０１２０】
比較例では、図１５（Ａ）に示すように、マウント処理において読み出し対象の仮想ボリューム３２の全てのデータのリコールが行われ、仮想ボリューム３２の全てのデータのリコールが完了してから、読み出し処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ３４（１）により行われている。
【０１２１】
これに対して実施形態の仮想テープシステム２２においては、図１５（Ｂ）に示すように、マウント処理において分割ボリューム６１、６２、６４（図１５（Ｂ）のＡ、Ｂ、Ｃ、Ｄ、Ｚ）のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、読み出し処理が開始される。そして、読み出し処理と並行して、未だリコールが行われていない分割ボリュームがリコールされる。このリコール処理では、複数の物理ドライブ３４が並行して分割ボリュームをリコールする。以上から実施形態の仮想テープシステム２２では、比較例と比べると、マウント処理と読み出しコマンドに対する処理にかかる時間を削減することができる。
【０１２２】
仮想ボリューム３２の途中からの読み出し処理は、移動系コマンドの処理完了後に開始される。よって、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部２６に存在する状態から読み出し処理が開始される。尚、仮想ボリューム３２が１つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部２６に存在する状態から開始される。
【０１２３】
読み出し処理部５６は、先ず、記憶部２６に展開済みの移動後の分割ボリュームＬＶ’ｍからデータの読み出しを開始して、ホスト装置２１へ送信する。分割ボリュームＬＶ’ｍ以降の分割ボリュームのうちでオフキャッシュされている分割ボリュームが存在する場合、読み出し処理部５６は、記憶部２６からのデータの読み出し及びホスト装置２１への送信を開始するとともに、並行して以下の処理を行う。すなわち読み出し処理部５６は、分割ボリュームＬＶ’ｍ以降の分割ボリュームのうち、オフキャッシュされている1以上の分割ボリュームを物理ボリューム３５からリコールする。このリコールは、リコール対象の分割ボリュームのうち、先頭に位置する分割ボリュームから順に行われる。読み出し処理部５６は、リコールを行いつつ、リコールにより展開した分割ボリュームのデータを、順次記憶部２６から読み出してホスト装置２１へ送信する。すなわち、リコールのプロセスと、記憶部２６からのデータの読み出し及び送信のプロセスと、が並行して実行される。記憶部２６からのデータの読み出しが、リコールよりも速く進行した場合、記憶部２６からのデータの読み出し処理において、読み出し対象のデータが記憶部２６に存在しない場合が発生する。この場合は、読み出し処理部５６は、ホスト装置２１に対して、読み出しコマンドのリトライ要求を送信する。
【０１２４】
ここで、実施形態に係る仮想テープシステム２２の途中からの読み出し処理にかかる時間の削減について説明する。図１６は、実施形態に係る仮想テープシステム２２の途中からの読み出し処理にかかる時間の削減について説明する図である。図１６（Ａ）は、比較例における、マウント処理と途中からの読み出し処理の処理時間を説明する図である。図１６（Ｂ）は、実施形態にかかる仮想テープシステム２２のマウント処理と途中からの読み出し処理の処理時間を説明する図である。尚、図１６においては、読み出し対象の仮想ボリューム３２のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理、移動処理、及び読み出し処理が実行される場合の例を示している。
【０１２５】
比較例では、図１６（Ａ）に示すように、マウント処理により読み出し対象の仮想ボリューム３２の全てのデータのリコールが完了してから、移動系コマンドが実行され、その後に、読み出し処理が開始される。比較例におけるリコール処理は単一の物理ドライブ３４（１）により行われている。
【０１２６】
これに対して実施形態においては、図１６（Ｂ）に示すように、マウント処理において分割ボリューム６１、６２、６４（図１５（Ｂ）のＡ、Ｂ、Ｃ、Ｄ、Ｚ）のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム（Ｇ）と、移動先の分割ボリュームの次の分割ボリューム（Ｈ）がリコールされ、移動処理が行われる。そして移動処理の完了後、読み出し処理が開始される。また、読み出し処理と並行して、未だリコールが行われていない分割ボリューム（Ｉ、Ｊ、・・・）がリコールされる。このリコール処理では、複数の物理ドライブ３４が並行して分割ボリュームをリコールする。以上から実施形態の仮想テープシステム２２では、比較例と比べると、マウント処理と、移動系コマンド及び読み出しコマンドに対する処理にかかる時間を削減することができる。
【０１２７】
オフキャッシュ処理部５７は、オフキャッシュ処理の実行要求を受信し、この実行要求に応じて、分割ボリューム単位でオフキャッシュを行う。オフキャッシュ処理の実行要求には、オフキャッシュの結果、記憶部２６に確保したい空き容量を示す空き指定情報が含まれる。このとき、オフキャッシュ処理部５７は、オフキャッシュする分割ボリュームの順番を制御する。複数の分割ボリュームのそれぞれにオフキャッシュ優先度が設定され、このオフキャッシュ優先度に基づいて、分割ボリュームがオフキャッシュされる順番が制御される。
【０１２８】
先ず、１つの仮想ボリューム３２の分割ボリュームをオフキャッシュする場合の動作について説明する。この場合、オフキャッシュ優先度は、分割ボリュームのそれぞれに対して、以下のように設定される。すなわち、図１１に示したように分割ボリュームを４つのタイプに分類した場合、オフキャッシュ優先度は、分割ボリューム６３＞６４＞６２＞６１の順に高くなるように割り当てられる。そしてこのように割り当てられた優先度に基づいて、オフキャッシュ処理部５７は順番に、十分な空き容量が確保できるまで、分割ボリュームを記憶部２６から削除する。
【０１２９】
具体的にはオフキャッシュ処理部５７は先ず、オフキャッシュ対象の仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６３をオフキャッシュし、空き容量の確認を行う。そしてオフキャッシュ処理部５７は、分割ボリューム６３をオフキャッシュしても記憶部２６の空き領域が足りなかった場合は、分割ボリューム６４、分割ボリューム６２、分割ボリューム６１の順でオフキャッシュと空き容量の確認を順次行う。尚、空き容量の確認において十分な空き容量が確保できた時点で、オフキャッシュ処理部５７はそれ以上のオフキャッシュは行わない。また、空き容量の確認では、記憶部２６の空き領域が、空き指定情報により示される容量以上であるか否かが判定される。
【０１３０】
次に、複数の仮想ボリューム３２にわたる複数の分割ボリュームをオフキャッシュする場合の動作について説明する。
【０１３１】
複数の仮想ボリューム３２にわたる複数の分割ボリュームをオフキャッシュする場合には、最後にアクセスされた日時が所定の閾値（以下、優先度の閾値と記す）よりも古い仮想ボリューム３２を、先にオフキャッシュの対象とする。そして、これらの古い仮想ボリューム３２のオフキャッシュが完了しても未だ空き容量が不足する場合に、最後にアクセスされた日時が優先度の閾値よりも新しい仮想ボリューム３２をオフキャッシュの対象とする。尚、優先度の閾値は、オフキャッシュの優先度を設定する上で基準となる日時を示すものであり、仮想テープシステム２２の管理者により任意に設定可能な値である。
【０１３２】
ここで、最後にアクセスされた日時が所定の閾値よりも古い仮想ボリューム３２を古仮想ボリュームと記し、最後にアクセスされた日時が所定の閾値よりも新しい仮想ボリューム３２を新仮想ボリュームと記す。古仮想ボリュームと新仮想ボリュームの特定は、ＬＶ一覧情報５９の「最終アクセス日時」の項目を参照することにより行われる。また、以下の優先度の設定の説明では、説明を簡単にするために、優先度の設定を行う順に優先度が高くなるように設定されるものとして説明する。ただし、結果的に割り当てられる優先度の値の関係が同じになるのであれば、設定の順番は所定の順番で行ってよい。
【０１３３】
先ず、オフキャッシュ処理部５７は、１又は複数の古仮想ボリュームを対象として、優先度の設定を行う。古仮想ボリュームが１つの場合には、上述した、１つの仮想ボリューム３２の分割ボリュームをオフキャッシュする場合の動作と同様に設定される。古仮想ボリュームが複数の場合には、オフキャッシュ処理部５７は、複数の古仮想ボリュームの複数の分割ボリュームのうち、各仮想ボリューム３２の分割ボリュームのタイプ毎に順にオフキャッシュ優先度を割り当てる。すなわち、先ずオフキャッシュ処理部５７は、複数の古仮想ボリュームの複数の分割ボリューム６３において、オフキャッシュ優先度を割り当てる。次に、複数の古仮想ボリュームの複数の分割ボリューム６４において、同様にオフキャッシュ優先度を割り当て、その後、複数の古仮想ボリュームの複数の分割ボリューム６２、６１の順でオフキャッシュ優先度を割り当てる。
【０１３４】
分割ボリュームのタイプ毎のオフキャッシュ優先度の割り当てにおいては、最後にアクセスされた日時が古い順に、オフキャッシュ優先度が高くなるようにオフキャッシュ処理部５７は割り当てを行う。すなわち、先ずオフキャッシュ処理部５７は、複数の古仮想ボリュームの複数の分割ボリューム６３において、最後にアクセスされた日時が古い分割ボリュームの順に高いオフキャッシュ優先度となるように、オフキャッシュ優先度を割り当てる。そして、オフキャッシュ処理部５７は、複数の古仮想ボリュームの複数の分割ボリューム６４、６２、６１のそれぞれにおける優先度の割り当てにおいても、同様にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部５７は、複数の分割ボリューム６４、６２、６１の各々について、最後にアクセスされた日時が古い分割ボリュームの順に、高いオフキャッシュ優先度となるように、オフキャッシュ優先度を割り当てる。
【０１３５】
図１７は、複数の仮想ボリューム３２の複数の分割ボリュームをオフキャッシュする場合の動作を説明する図である。図１７において、仮想ボリューム３２ａ、３２ｂ、３２ｃのそれぞれは、複数の分割ボリュームに分割されており、仮想ボリューム３２ａ、３２ｂ、３２ｃの順に最後にアクセスされた日時が古くなっている。また、仮想ボリューム３２ａ、及び３２ｂは、優先度の閾値よりも、最後にアクセスされた日時が古く、仮想ボリューム３２ｃは、優先度の閾値よりも最後にアクセスされた日時が新しいものとする。すなわち、仮想ボリューム３２ａ、及び３２ｂは古仮想ボリュームであり、仮想ボリューム３２ｃは新仮想ボリュームである。
【０１３６】
この場合、オフキャッシュ処理部５７は、先ず古仮想ボリュームである、仮想ボリューム３２ａ、及び３２ｂの分割ボリューム６３のうちで、仮想ボリューム３２が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部５７は、分割ボリューム６３ａ、６３ｂの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
【０１３７】
次にオフキャッシュ処理部５７は、仮想ボリューム３２ａ、及び３２ｂの分割ボリューム６４のうちで、仮想ボリューム３２が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部５７は、分割ボリューム６４ａ、６４ｂの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
【０１３８】
次にオフキャッシュ処理部５７は、仮想ボリューム３２ａ、及び３２ｂの分割ボリューム６２のうちで、仮想ボリューム３２が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部５７は、分割ボリューム６２ａ、６２ｂの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
【０１３９】
そしてオフキャッシュ処理部５７は、仮想ボリューム３２ａ、及び３２ｂの分割ボリューム６１のうちで、仮想ボリューム３２が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部５７は、分割ボリューム６１ａ、６１ｂの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
【０１４０】
古仮想ボリュームに対する優先度の割り当てが完了したら、次にオフキャッシュ処理部５７は、新仮想ボリュームである仮想ボリューム３２ｃに対する優先度の割り当てを行う。すなわちオフキャッシュ処理部５７は、仮想ボリューム３２ｃに対する優先度として、分割ボリューム６３ｃ＞６４ｃ＞６２ｃ＞６１ｃの順に優先度が高くなるように割り当てる。
【０１４１】
このように優先度を割り当てた結果、図１７の（）内の数字に示すような順で優先度が割り当てられる。尚、図１７において優先度は、１が最も高く、１２が最も低いものとする。
【０１４２】
優先度を各分割ボリュームに割り当てると、オフキャッシュ処理部５７は、リコールのために十分な空き容量が確保できるまで、優先度の順に分割ボリュームを削除していき、容量が確保できた時点で、オフキャッシュの処理を終了する。
【０１４３】
図１８は、実施形態に係るマウント処理部５２のマウント処理の詳細を図解したフローチャートの一例である。
【０１４４】
図１８において、マウント処理部５２は先ず、ホスト装置２１からマウント命令を受信する（Ｓ１０１）。
【０１４５】
次にマウント処理部５２は、管理情報５８を参照し、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられているか否かを判定する（Ｓ１０２）。すなわちマウント処理部５２は、対象仮想ボリュームが既存の仮想ボリューム３２か、新規の仮想ボリューム３２かを判定する。尚、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられている場合は、対象仮想ボリュームは既存の仮想ボリュームであり、対応付けられていない場合には、対象仮想ボリュームは新規の仮想ボリュームである。具体的にはマウント処理部５２は、管理情報５８の「仮想ボリュームＩＤ」の値が、マウント対象ボリュームの識別情報と一致するエントリを抽出し、抽出したエントリの「分割ボリュームＩＤ」に値が格納されているか否かを判定する。抽出したエントリの「分割ボリュームＩＤ」に値が格納されている場合は、マウント処理部５２は、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていると判定する。抽出したエントリの「分割ボリュームＩＤ」に値が格納されていない場合、または、該当するエントリがない場合は、マウント処理部５２は、マウント対象の対象仮想ボリュームと分割ボリュームとは対応付けられていないと判定する。
【０１４６】
Ｓ１０２において、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていないと判定した場合（Ｓ１０２でＮｏ）、マウント処理部５２は以下の処理を行う。すなわち、マウント処理部５２は、プール３６から未割り当ての分割ボリュームを選択して、選択した分割ボリュームを対象仮想ボリュームに割り当てる（Ｓ１０３）。
【０１４７】
そしてマウント処理部５２は、記憶部２６の空き容量が、Ｓ１０３で割り当てた分割ボリュームの容量以上か否かを判定する（Ｓ１０４）。この判定処理は、Ｓ１０３で割り当てた分割ボリュームが記憶部２６に展開可能か否かを判定する処理である。
【０１４８】
記憶部２６の空き容量が、Ｓ１０３で割り当てた分割ボリュームの容量未満であると判定した場合（Ｓ１０４でＮｏ）、マウント処理部５２は、オフキャッシュ処理部５７にオフキャッシュ処理の実行要求を出力する（Ｓ１０５）。オフキャッシュ処理の実行要求を受けたオフキャッシュ処理部５７はオフキャッシュ処理を実行する。このオフキャッシュ処理の詳細については、後ほど、図２１及び図２２を用いて説明する。オフキャッシュ処理の完了通知を受信すると、マウント処理部５２は、処理をＳ１０６に遷移させる。
【０１４９】
Ｓ１０４において、記憶部２６の空き容量が、Ｓ１０３で割り当てた分割ボリュームの容量以上であると判定した場合（Ｓ１０４でＹｅｓ）、マウント処理部５２は、Ｓ１０３で割り当てた分割ボリュームを記憶部２６に展開する（Ｓ１０６）。すなわちマウント処理部５２は、割り当てた分割ボリュームのサイズの空き領域を記憶部２６上に確保し、その領域をＳ１０３で割り当てた分割ボリュームの領域とする。
【０１５０】
そしてマウント処理部５２は、マウント処理が完了したと判定して、マウントが完了したことを示すマウント完了通知をホスト装置２１へ送信する（Ｓ１０７）。そして、処理は終了する。
【０１５１】
Ｓ１０２において、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていると判定した場合（Ｓ１０２でＹｅｓ）、マウント処理部５２は以下の処理を行う。すなわちマウント処理部５２は、管理情報５８を参照し、対象仮想ボリュームと対応する分割ボリュームのうち、一部の特定の分割ボリュームが、記憶部２６に存在する（オンキャッシュ）か否かを判定する（Ｓ１０８）。一部の特定の分割ボリュームとは、上述したように、対象仮想ボリュームに対応する複数の分割ボリュームのうちの、最初の所定の数の分割ボリュームと、最後の分割ボリュームである。より具体的には、一部の特定の分割ボリュームとは、分割ボリューム６１、６２、及び６４である。この判定処理において、具体的にはマウント処理部５２は、管理情報５８の「オンキャッシュフラグ」を参照して、各分割ボリュームが記憶部２６に存在するか否かを判定する。一部の特定の分割ボリュームが記憶部２６に存在すると判定した場合（Ｓ１０８でＹｅｓ）、マウント処理部５２は、処理をＳ１０７に遷移させる。
【０１５２】
Ｓ１０８において、一部の特定の分割ボリュームのいずれかが記憶部２６に存在しないと判定した場合（Ｓ１０８でＮｏ）、マウント処理部５２は一部の特定の分割ボリュームのうち、記憶部２６に存在しない分割ボリュームのリコール処理１を実行する（Ｓ１０９）。リコール処理１の詳細については、後ほど図２４を用いて説明する。リコール処理１が完了すると、マウント処理部５２は、処理をＳ１０７に遷移させる。
【０１５３】
図１９は、実施形態に係る書き込み処理部５４の書き込み処理の詳細を図解したフローチャートの一例である。
【０１５４】
図１９において、書き込み処理部５４は先ず、ホスト装置２１からコマンドを受信する（Ｓ２０１）。次に書き込み処理部５４は、受信したコマンドが書き込みコマンドか否かを判定する（Ｓ２０２）。受信したコマンドが書き込みコマンドでないと判定された場合（Ｓ２０２でＮｏ）、処理は終了する。
【０１５５】
一方、受信したコマンドが書き込みコマンドであると判定した場合（Ｓ２０２でＹｅｓ）、書き込み処理部５４は以下の処理を行う。すなわち書き込み処理部５４は、先ず、現在（Ｓ２０３を実行する時点）において、仮想ドライブ３１の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームについて、対象仮想ボリュームとの対応付けを外す（Ｓ２０３）。具体的には書き込み処理部５４は、管理情報５８において、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームのエントリを全て抽出する。そして書き込み処理部５４は、抽出したエントリを削除する。次に書き込み処理部５４は、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームを初期化して、プール３６に戻す。すなわち、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームは、未割り当てボリュームとして扱われることとなる。尚、初期化処理には、例えば、分割ボリュームのデータを削除する処理、または、記憶部２６から削除する処理が含まれてもよい。
【０１５６】
次に、書き込み処理部５４は、現在（Ｓ２０４を実行する時点）において仮想ドライブ３１の書き込み位置のデータが含まれる分割ボリュームに対して、書き込み対象データの書き込みを開始する（Ｓ２０４）。ここで、以下の図１９を参照した説明においては、書込みが行われている対象の分割ボリュームを対象分割ボリュームと記す。
【０１５７】
Ｓ２０４において対象分割ボリュームに対する書き込みが開始されると、書き込み処理部５４は、対象分割ボリュームに対して書き込んだ書き込み対象データのデータ量が、対象分割ボリュームの容量を超えたか否かの判定を開始する（Ｓ２０５）。
【０１５８】
対象分割ボリュームに対して書き込んだデータ量が、対象分割ボリュームの容量を超えたと判定した場合（Ｓ２０５でＹｅｓ）、書き込み処理部５４は、Ｓ２０４で開始した対象分割ボリュームへの書き込みを停止し、管理情報５８を更新する（Ｓ２０６）。管理情報５８の更新では、書き込み処理部５４は、対象分割ボリュームに書き込んだデータに関する情報と、分割ボリュームの識別情報とを対応付けて管理情報５８に記録する。具体的には書き込み処理部５４は、管理情報５８の「分割ボリュームＩＤ」が対象分割ボリュームの識別情報と一致するエントリを抽出する。そして書き込み処理部５４は、抽出したエントリの「開始ブロック番号」、「終了ブロック番号」、及び「テープマーク数」に、Ｓ２０４の書き込みにより書き込んだデータの情報をそれぞれ格納する。
【０１５９】
次に、書き込み処理部５４は、記憶部２６から対象分割ボリュームの領域をアンマウントする（Ｓ２０７）。そして書き込み処理部５４は、Ｓ２０７でアンマウントした対象分割ボリュームのマイグレーション処理の実行要求をマイグレーション処理部５５へ出力する（Ｓ２０８）。マイグレーション処理部５５によるマイグレーション処理の詳細については、後ほど図２０を参照して説明する。
【０１６０】
次に、書き込み処理部５４は、次に書き込み対象データを書き込む新規分割ボリュームの展開処理を行う（Ｓ２０９）。新規分割ボリュームの展開処理は、具体的には、図１８のＳ１０３〜Ｓ１０６までの処理と同様の処理となる。そして書き込み処理部５４は、処理をＳ２０４に遷移させ、Ｓ２０９で展開した新規分割ボリュームに対して、書き込み対象データの書込みが完了したブロックの次のブロックから書き込みを開始する。
【０１６１】
Ｓ２０５において、Ｓ２０４で開始した書込みが完了しても、対象分割ボリュームに対して書き込んだデータの量が、対象分割ボリュームの容量を超えていないと判定した場合（Ｓ２０５でＮｏ）、書き込み処理部５４以下の処理を行う。すなわち、書き込み処理部５４は、書き込み処理が完了したか否かを判定する（Ｓ２１０）。書き込み処理部５４は書き込み処理が完了していないと判定した場合（Ｓ２１０でＮｏ）、書き込み処理部５４は、処理をＳ２０１に再び遷移させる。一方、書き込み処理が完了したと判定された場合（Ｓ２１０でＹｅｓ）、処理は終了する。
【０１６２】
図２０は、実施形態に係るマイグレーション処理部５５のマイグレーション処理の詳細を図解したフローチャートの一例である。
【０１６３】
図２０において、マイグレーション処理部５５は、マイグレーション処理の開始前に初期化処理として、マイグレーション処理で使用する一時変数の値を設定する（Ｓ３０１）。具体的にはマイグレーション処理部５５は、変数Ｎに物理ドライブ３４の数を設定し、変数ｎに０を設定する。そしてマイグレーション処理部５５は、物理ドライブ３４数分の物理ボリューム３５を選択する（Ｓ３０２）。ここで選択される物理ボリューム３５の組合せは、各物理ドライブ３４に１対１で対応するものとする。
【０１６４】
次に、マイグレーション処理部５５は、書き込み処理部５４から、分割ボリュームのマイグレーション処理の実行要求を受信したか否かを判定する（Ｓ３０３）。すなわち、マイグレーション処理部５５は、書き込み処理部５４からのマイグレーション処理の実行要求を受信したか否かを監視する。
【０１６５】
分割ボリュームのマイグレーション処理の実行要求を受信したと判定した場合（Ｓ３０３でＹｅｓ）、マイグレーション処理部５５は、マイグレーション対象の分割ボリュームを、物理ボリューム３５（ｎ）に書き込む（Ｓ３０４）。ここで物理ボリューム３５（ｎ）は、複数の物理ドライブのうちの、ｎ番目の物理ドライブにより書込みが行われる物理ボリュームである。
【０１６６】
次にマイグレーション処理部５５は、変数ｎをインクリメント（＋１）し（Ｓ３０５）、ｎが（Ｎ−１）より大きいか否かを判定する（Ｓ３０６）。ｎが（Ｎ−１）以下であると判定した場合（Ｓ３０６でＮｏ）、マイグレーション処理部５５は、処理をＳ３０３に再び遷移させる。一方、ｎが（Ｎ−１）より大きいと判定した場合（Ｓ３０６でＹｅｓ）、マイグレーション処理部５５は、ｎに０を代入し（Ｓ３０７）、処理をＳ３０３に再び遷移させる。
【０１６７】
Ｓ３０３において、分割ボリュームのマイグレーション処理の実行要求を受信しないと判定された場合（Ｓ３０３でＮｏ）、処理は終了する。
【０１６８】
図２１は、実施形態に係るオフキャッシュ処理部５７のオフキャッシュ処理の詳細を図解したフローチャート（前半）の一例である。図２２は、実施形態に係るオフキャッシュ処理部５７のオフキャッシュ処理の詳細を図解したフローチャート（後半）の一例である。
【０１６９】
オフキャッシュ処理部５７は、オフキャッシュ処理の実行要求を受信したタイミングで図２１のフローで説明するオフキャッシュ処理を実行する。オフキャッシュ処理の実行要求には、オフキャッシュした結果、記憶部２６に確保したい空き容量を示す空き指定情報を含むものとする。
【０１７０】
図２１において、オフキャッシュ処理部５７は先ず、ＬＶ一覧情報５９の「最終アクセス日時」を参照して、最後にアクセスされた日時が優先度の閾値より古い仮想ボリュームであって、オンキャッシュの仮想ボリュームが存在するか否かを判定する（Ｓ４０１）。具体的にはオフキャッシュ処理部５７は先ず、ＬＶ一覧情報５９の「最終アクセス日時」を参照して、最後にアクセスされた日時が優先度の閾値より古いエントリを抽出する。そして、オフキャッシュ処理部５７は、抽出したエントリのうち、「オンキャッシュフラグ」が「True」であるエントリが存在するか否かを判定する。
【０１７１】
最後にアクセスされた日時が優先度の閾値より古い仮想ボリュームが記憶部に存在すると判定した場合（Ｓ４０１でＹｅｓ）、オフキャッシュ処理部５７は、古仮想ボリュームの一覧を作成する（Ｓ４０２）。具体的には、オフキャッシュ処理部５７は先ず、ＬＶ一覧情報５９の「最終アクセス日時」が、優先度の閾値よりも古いエントリを全て抽出する。そしてオフキャッシュ処理部５７は、抽出したエントリのうち、「オンキャッシュフラグ」が「True」であるエントリの「仮想ボリュームＩＤ」をまとめて、古い仮想ボリューム３２の一覧を作成する。そしてオフキャッシュ処理部５７は処理をＳ４０４に遷移させる。
【０１７２】
一方、Ｓ４０１において、最後にアクセスされた日時が優先度の閾値より古い仮想ボリューム３２が記憶部に存在しないと判定した場合（Ｓ４０１でＮｏ）、オフキャッシュ処理部５７は、新しい仮想ボリューム３２の一覧を作成する（Ｓ４０３）。具体的には、オフキャッシュ処理部５７は先ず、ＬＶ一覧情報５９の「最終アクセス日時」が、優先度の閾値よりも新しいエントリを全て抽出する。そしてオフキャッシュ処理部５７は、抽出したエントリのうち「オンキャッシュメモリ」の値が「True」でエントリの「ボリュームＩＤ」をまとめて、新しい仮想ボリューム３２の一覧を作成する。そしてオフキャッシュ処理部５７は処理をＳ４０４に遷移させる。
【０１７３】
Ｓ４０４では、オフキャッシュ処理部５７は、Ｓ４０２またはＳ４０３で作成した一覧において、最後にアクセスされた日時が最も古い仮想ボリューム３２が、分割ボリュームと１対１で対応付けられているか否かを判定する（Ｓ４０４）。この処理はすなわち、最後にアクセスされた日時が最も古い仮想ボリューム３２のサイズが小容量であるために分割が行われていないかどうかを確認する処理である。一覧のうちで最も古い仮想ボリューム３２と分割ボリュームとの対応付けが１対１であると判定した場合（Ｓ４０４でＹｅｓ）、オフキャッシュ処理部５７は、その分割ボリュームをオフキャッシュする（Ｓ４０５）。またオフキャッシュ処理部５７は、オフキャッシュした分割ボリュームに対応する管理情報５８の「オンキャッシュフラグ」の値を「False」に設定する。さらにオフキャッシュ処理部５７は、オフキャッシュした分割ボリュームに対応する仮想ボリュームについて、ＬＶ一覧情報５９の「オンキャッシュフラグ」の値を「False」に設定する。そして、オフキャッシュ処理部５７は処理をＳ４１０に遷移させる。
【０１７４】
一方、一覧のうち最も古い仮想ボリューム３２と分割ボリュームとの対応付けが１対１でないと判定した場合（Ｓ４０４でＮｏ）、オフキャッシュ処理部５７は以下の処理を行う。すなわちオフキャッシュ処理部５７は、一覧から、対応する分割ボリューム６３がオンキャッシュである仮想ボリューム３２を抽出する（Ｓ４０６）。
【０１７５】
次に、オフキャッシュ処理部５７は、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６３がオンキャッシュである仮想ボリューム３２が存在するか否かを判定する（Ｓ４０７）。すなわち、オフキャッシュ処理部５７は、Ｓ４０６で抽出できた仮想ボリューム３２があるか否かを判定する。一覧の仮想ボリューム３２のうち、対応する分割ボリューム６３がオンキャッシュである仮想ボリューム３２が存在しないと判定した場合（Ｓ４０７でＮｏ）、オフキャッシュ処理部５７は、処理を図２２のＳ４１１に遷移させる。
【０１７６】
一方、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６３がオンキャッシュである仮想ボリューム３２が存在すると判定した場合（Ｓ４０７でＹｅｓ）、オフキャッシュ処理部５７は以下の処理を行う。すなわちオフキャッシュ処理部５７は、Ｓ４０６で抽出した仮想ボリューム３２のうち、最もアクセス日時の古い仮想ボリューム３２を選択する（Ｓ４０８）。
【０１７７】
次に、オフキャッシュ処理部５７は、Ｓ４０８で選択した仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６３をオフキャッシュする（Ｓ４０９）。またオフキャッシュ処理部５７は、オフキャッシュした分割ボリューム６３に対応する管理情報５８の「オンキャッシュフラグ」の値を「False」に設定する。
【０１７８】
次に、オフキャッシュ処理部５７は、記憶部２６に十分な空き容量が確保されたか否かを判定する（Ｓ４１０）。具体的にはオフキャッシュ処理部５７は、オフキャッシュ処理の実行要求に含まれる、空き指定情報により示される空き容量が、記憶部２６に確保されたか否かを判定する。記憶部２６に十分な空き容量が確保されたと判定された場合（Ｓ４１０でＮｏ）、処理は終了する。
【０１７９】
一方、記憶部２６に十分な空き容量が確保されていないと判定した場合（Ｓ４１０でＹｅｓ）、オフキャッシュ処理部５７は、処理をＳ４０１に再び遷移させる。
【０１８０】
図２２のＳ４１１において、オフキャッシュ処理部５７は、一覧から、対応する分割ボリューム６４がオンキャッシュである仮想ボリューム３２を抽出する（Ｓ４１１）。
【０１８１】
次に、オフキャッシュ処理部５７は、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６４がオンキャッシュである仮想ボリューム３２が存在するか否かを判定する（Ｓ４１２）。すなわち、オフキャッシュ処理部５７は、Ｓ４１１で抽出できた仮想ボリューム３２があるか否かを判定する。一覧の仮想ボリューム３２のうち、対応する分割ボリューム６４がオンキャッシュである仮想ボリューム３２が存在しないと判定した場合（Ｓ４１２でＮｏ）、オフキャッシュ処理部５７は、処理をＳ４１５に遷移させる。
【０１８２】
一方、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６４がオンキャッシュである仮想ボリューム３２が存在すると判定した場合（Ｓ４１２でＹｅｓ）、オフキャッシュ処理部５７は以下の処理を行う。すなわちオフキャッシュ処理部５７は、Ｓ４１１で抽出した仮想ボリューム３２のうち、最もアクセス日時の古い仮想ボリューム３２を選択する（Ｓ４１３）。
【０１８３】
次に、オフキャッシュ処理部５７は、Ｓ４１３で選択した仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６４をオフキャッシュする（Ｓ４１４）。またオフキャッシュ処理部５７は、オフキャッシュした分割ボリューム６４に対応する管理情報５８の「オンキャッシュフラグ」の値を「False」に設定する。そしてオフキャッシュ処理部５７は、処理を図２１のＳ４１０に遷移させる。
【０１８４】
Ｓ４１５において、オフキャッシュ処理部５７は、一覧から、対応する分割ボリューム６２がオンキャッシュである仮想ボリューム３２を抽出する（Ｓ４１５）。
【０１８５】
次に、オフキャッシュ処理部５７は、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６２がオンキャッシュである仮想ボリューム３２が存在するか否かを判定する（Ｓ４１６）。すなわち、オフキャッシュ処理部５７は、Ｓ４１５で抽出できた仮想ボリューム３２があるか否かを判定する。一覧の仮想ボリューム３２のうち、対応する分割ボリューム６２がオンキャッシュである仮想ボリューム３２が存在しないと判定した場合（Ｓ４１６でＮｏ）、オフキャッシュ処理部５７は、処理をＳ４１９に遷移させる。
【０１８６】
一方、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６２がオンキャッシュである仮想ボリューム３２が存在すると判定した場合（Ｓ４１６でＹｅｓ）、オフキャッシュ処理部５７は以下の処理を行う。すなわちオフキャッシュ処理部５７は、Ｓ４１５で抽出した仮想ボリューム３２のうち、最もアクセス日時の古い仮想ボリューム３２を選択する（Ｓ４１７）。
【０１８７】
次に、オフキャッシュ処理部５７は、Ｓ４１７で選択した仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６２をオフキャッシュする（Ｓ４１８）。またオフキャッシュ処理部５７は、オフキャッシュした分割ボリューム６２に対応する管理情報５８の「オンキャッシュフラグ」の値を「False」に設定する。そしてオフキャッシュ処理部５７は、処理を図２１のＳ４１０に遷移させる。
【０１８８】
Ｓ４１９において、オフキャッシュ処理部５７は、一覧から、対応する分割ボリューム６１がオンキャッシュである仮想ボリューム３２を抽出する（Ｓ４１９）。
【０１８９】
次に、オフキャッシュ処理部５７は、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６１がオンキャッシュである仮想ボリューム３２が存在するか否かを判定する（Ｓ４２０）。すなわち、オフキャッシュ処理部５７は、Ｓ４１９で抽出できた仮想ボリューム３２があるか否かを判定する。一覧の仮想ボリューム３２のうち、対応する分割ボリューム６１がオンキャッシュである仮想ボリューム３２が存在しないと判定した場合（Ｓ４２０でＮｏ）、オフキャッシュ処理部５７は、処理を図２１のＳ４１０に遷移させる。
【０１９０】
一方、一覧の仮想ボリューム３２のうち、対応する分割ボリューム６１がオンキャッシュである仮想ボリューム３２が存在すると判定した場合（Ｓ４２０でＹｅｓ）、オフキャッシュ処理部５７は以下の処理を行う。すなわちオフキャッシュ処理部５７は、Ｓ４１９で抽出した仮想ボリューム３２のうち、最もアクセス日時の古い仮想ボリューム３２を選択する（Ｓ４２１）。
【０１９１】
次に、オフキャッシュ処理部５７は、Ｓ４２１で選択した仮想ボリューム３２の複数の分割ボリュームのうち、分割ボリューム６１をオフキャッシュする（Ｓ４２２）。またオフキャッシュ処理部５７は、オフキャッシュした分割ボリューム６１に対応する管理情報５８の「オンキャッシュフラグ」の値を「False」に設定する。さらに、オフキャッシュした分割ボリューム６１に対応する仮想ボリュームについて、ＬＶ一覧情報５９のオンキャッシュフラグの値を「False」に設定する。そしてオフキャッシュ処理部５７は、処理を図２１のＳ４１０に遷移させる。
【０１９２】
図２３は、実施形態に係る読み出し処理部５６の読み出し処理の詳細を図解したフローチャートの一例である。
【０１９３】
図２３において、読み出し処理部５６は先ず、ホスト装置２１からコマンドを受信する（Ｓ５０１）。次に読み出し処理部５６は、受信したコマンドが読み出しコマンドか否かを判定する（Ｓ５０２）。受信したコマンドが読み出しコマンドでないと判定された場合（Ｓ５０２でＮｏ）、処理は終了する。
【０１９４】
一方、受信したコマンドが読み出しコマンドであると判定した場合（Ｓ５０２でＹｅｓ）、読み出し処理部５６は、読み出し対象のブロックＩＤを持つ分割ボリュームがオンキャッシュであるか否かを判定する（Ｓ５０３）。すなわち読み出し処理部５６は、現在（Ｓ５０３を実行する時点）において、仮想ドライブ３１の読み出し位置のデータが含まれる分割ボリュームがオンキャッシュであるか否かを判定する。読み出し対象のブロックＩＤを持つ分割ボリュームがオンキャッシュでないと判定した場合（Ｓ５０３でＮｏ）、読み出し処理部５６は、処理をＳ５０５に遷移させる。
【０１９５】
一方、読み出し対象のブロックＩＤを持つ分割ボリュームがオンキャッシュであると判定した場合（Ｓ５０３でＹｅｓ）、読み出し処理部５６は以下の処理を行う。すなわち読み出し処理部５６は、現在（Ｓ５０４を実行する時点）において、記憶部２６に格納された、仮想ドライブ３１の読み出し位置のブロックから読み出しとホスト装置２１への送信を開始する（Ｓ５０４）。図２３の以下の説明においては、記憶部２６からの読み出し処理中のデータが格納された分割ボリュームを、読み出し中の分割ボリュームと記す。尚、Ｓ５０４で開始された記憶部２６からのデータの読み出しは、以降のＳ５０５〜Ｓ５０７の処理と並行して実行されるものである。
【０１９６】
次に、読み出し処理部５６は、読み出し中の分割ボリューム以降の３つの連続する分割ボリュームがオンキャッシュか否かを判定する（Ｓ５０５）。これは、Ｓ５０４で開始された記憶部２６からのデータの読み出しが進行するのと並行して、読み出し中の分割ボリューム以降の３つの分割ボリュームがオンキャッシュでなくなったかどうかを監視する処理である。尚、２つの分割ボリュームが「連続する」とは、一方の分割ボリュームの最後のブロック番号と、他方の分割ボリュームの最初のブロック番号が連続することを指す。
【０１９７】
Ｓ５０５において、読み出し中の分割ボリューム以降の３つの連続する分割ボリュームがオンキャッシュであると判定した場合（Ｓ５０５でＹｅｓ）、読み出し処理部５６は、処理をＳ５０７に遷移させる。
【０１９８】
一方、Ｓ５０５において、読み出し中の分割ボリューム以降の３つの連続する分割ボリュームがオンキャッシュでないと判定した場合（Ｓ５０５でＮｏ）、読み出し処理部５６は以下の処理を行う。すなわち読み出し処理部５６は、読み出し中の分割ボリューム以降の３つの分割ボリュームがオンキャッシュとなるように、リコール処理２を行う（Ｓ５０６）。リコール処理２の詳細は、後ほど図２６を参照して説明する。
【０１９９】
Ｓ５０５及びＳ５０６の処理は、読み出し中の分割ボリュームが後ろに進むにつれて、読み出し中の分割ボリュームより後ろの分割ボリュームを、前もって並行してリコールする処理である。尚、Ｓ５０５、Ｓ５０６における３つの分割ボリュームは、３つに限定されず、所定の数とすることができる。
【０２００】
Ｓ５０７において、読み出し処理部５６は、読み出し中の分割ボリュームがオンキャッシュか否かを判定する（Ｓ５０７）。これは、Ｓ５０４で開始された記憶部２６からのデータの読み出しが進み、Ｓ５０６で行われるリコールが完了する前に、読み出し対象の分割ボリュームが記憶部２６に存在しなくなったかどうかを監視する処理である。読み出し中の分割ボリュームがオンキャッシュでないと判定した場合（Ｓ５０７でＮｏ）、読み出し処理部５６は、ホスト装置２１に読み出しコマンドのリトライ要求を送信する（Ｓ５０８）。そして読み出し処理部５６は、処理をＳ５０１に再び遷移させる。一方、読み出し中の分割ボリュームがオンキャッシュであると判定し、読み出し対象の仮想ボリューム３２のデータをすべて読み出した場合（Ｓ５０７でＹｅｓ）、処理は終了する。
【０２０１】
図２４は、実施形態に係るマウント処理部５２によるリコール処理１の詳細を図解したフローチャートである。
【０２０２】
図２４において、マウント処理部５２は先ず、管理情報５８に基いて、マウント対象の対象仮想ボリュームが分割されているか否かを判定する（Ｓ６０１）。具体的にはマウント処理部５２は、管理情報５８を参照して、「仮想ボリュームＩＤ」が対象仮想ボリュームの識別情報と一致するエントリが２つ以上存在するか否かを判定する。「仮想ボリュームＩＤ」が対象仮想ボリュームの識別情報と一致するエントリが２つ以上存在する場合は、マウント処理部５２は、仮想ボリューム３２は複数の分割ボリュームに分割されていると判定する。一方、「仮想ボリュームＩＤ」が対象仮想ボリュームの識別情報と一致するエントリが１つしか存在しない場合は、マウント処理部５２は、仮想ボリューム３２は複数の分割ボリュームに分割されていないと判定する。
【０２０３】
Ｓ６０１において、マウント対象の対象仮想ボリュームが分割されていないと判定した場合（Ｓ６０１でＮｏ）、マウント処理部５２は、マウント対象の仮想ボリューム３２をリコールするリコール処理２を実行する（Ｓ６０２）。ここでリコールする仮想ボリューム３２は、言い換えると、仮想ボリューム３２と１対１で対応する分割ボリュームである。Ｓ６０２のリコール処理２の詳細は、後ほど図２６を参照して説明する。そして、処理は終了する。
【０２０４】
一方、Ｓ６０１において、マウント対象の対象仮想ボリュームが分割されていると判定した場合（Ｓ６０１でＹｅｓ）、マウント処理部５２は以下の処理を行う。すなわちマウント処理部５２は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム６１、６２、及び６４がいずれもオンキャッシュか否かを判定する（Ｓ６０３）。具体的には、マウント処理部５２は、管理情報５８から、対象仮想ボリュームの分割ボリューム６１、６２、及び６４のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム６１、６２、及び６４のいずれもがオンキャッシュであると判定された場合（Ｓ６０３でＹｅｓ）、処理は終了する。
【０２０５】
一方、分割ボリューム６１、６２、６４のいずれかがオンキャッシュではないと判定した場合（Ｓ６０３でＮｏ）、マウント処理部５２は以下の処理を行う。すなわちマウント処理部５２は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム６１、及び６２がいずれもオンキャッシュか否かを判定する（Ｓ６０４）。具体的には、マウント処理部５２は、管理情報５８から、対象仮想ボリュームの分割ボリューム６１、及び６２のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム６１、及び６２がいずれもがオンキャッシュであると判定された場合（Ｓ６０４でＹｅｓ）、マウント処理部５２は、分割ボリューム６４をリコールするリコール処理２を実行する（Ｓ６０５）。Ｓ６０５のリコール処理２の詳細は、後ほど図２６を参照して説明する。そして、処理は終了する。
【０２０６】
一方、分割ボリューム６１、６２のいずれかがオンキャッシュではないと判定した場合（Ｓ６０４でＮｏ）、マウント処理部５２は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム６１がオンキャッシュか否かを判定する（Ｓ６０６）。具体的には、マウント処理部５２は、管理情報５８から、対象仮想ボリュームの分割ボリューム６１のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム６１がオンキャッシュであると判定された場合（Ｓ６０６でＹｅｓ）、マウント処理部５２は、分割ボリューム６２、及び６４をリコールするリコール処理２を実行する（Ｓ６０７）。Ｓ６０７のリコール処理２の詳細は、後ほど図２６を参照して説明する。そして、処理は終了する。
【０２０７】
一方、分割ボリューム６１がオンキャッシュではないと判定した場合（Ｓ６０６でＮｏ）、マウント処理部５２は、分割ボリューム６１、６２、及び６４をリコールするリコール処理２を実行する（Ｓ６０８）。Ｓ６０８のリコール処理２の詳細は、後ほど図２６を参照して説明する。そして、処理は終了する。
【０２０８】
図２５は、実施形態に係る移動処理部５３による移動処理の詳細を図解したフローチャートである。
【０２０９】
図２５において、移動処理部５３は先ず、ホスト装置２１からコマンドを受信する（Ｓ７０１）。次に移動処理部５３は、受信したコマンドが移動系コマンドか否かを判定する（Ｓ７０２）。受信したコマンドが移動系コマンドでないと判定された場合（Ｓ７０２でＮｏ）、処理は終了する。
【０２１０】
一方、受信したコマンドが移動系コマンドであると判定した場合（Ｓ７０２でＹｅｓ）、移動処理部５３は管理情報５８を参照して、移動先のデータを含む分割ボリュームを検索する（Ｓ７０３）。具体的には移動処理部５３は、移動系コマンドが移動先のブロックＩＤを含んでいる場合、移動先のブロックＩＤを含む分割ボリュームを管理情報５８から検索する。すなわち移動処理部５３は、管理情報５８の「仮想ボリュームＩＤ」が対象仮想ボリュームの識別情報と一致するエントリを抽出する。そして移動処理部５３は、抽出したエントリのうち、移動系コマンドに含まれる移動先のブロックＩＤのブロックを含む分割ボリュームを、管理情報５８の「開始ブロック番号」と「終了ブロック番号」を参照することによって特定する。また、移動系コマンドがテープマーク数を含んでいる場合、移動処理部５３は、管理情報５８を参照して、指定されたテープマークを持つ分割ボリュームを検索する。すなわち移動処理部５３は、管理情報５８において、「仮想ボリュームＩＤ」が対象仮想ボリュームの識別情報と一致するエントリのうち、移動系コマンドに含まれるテープマーク数をもつ分割ボリュームを、「テープマーク数」を参照することによって特定する。
【０２１１】
次に、移動処理部５３は、Ｓ７０３で特定した移動先の分割ボリュームがオンキャッシュか否かを判定する（Ｓ７０４）。具体的には移動処理部５３は、管理情報５８において、移動先の分割ボリュームのエントリの「オンキャッシュフラグ」を参照することにより、移動先の分割ボリュームがオンキャッシュか否かを判定する。移動先の分割ボリュームがオンキャッシュでないと判定した場合（Ｓ７０４でＮｏ）、移動処理部５３は、移動先の分割ボリュームをリコールするリコール処理２を実行する（Ｓ７０５）。Ｓ７０５のリコール処理２の詳細は、図２６を参照して後ほど説明する。そして移動処理部５３は、処理を再びＳ７０４に遷移させる。
【０２１２】
Ｓ７０４において、移動先の分割ボリュームがオンキャッシュであると判定した場合（Ｓ７０４でＹｅｓ）、移動処理部５３は、移動先の次の分割ボリュームはオンキャッシュか否かを判定する（Ｓ７０６）。具体的には移動処理部５３は、管理情報５８において、移動先の次の分割ボリュームのエントリの「オンキャッシュフラグ」を参照することにより、移動先の分割ボリュームがオンキャッシュか否かを判定する。移動先の次の分割ボリュームはオンキャッシュでないと判定した場合（Ｓ７０６でＮｏ）、移動処理部５３は、移動先の分割ボリュームをリコールするリコール処理２を実行する（Ｓ７０７）。Ｓ７０７のリコール処理２の詳細は、図２６を参照して後ほど説明する。そして移動処理部５３は、処理を再びＳ７０４に遷移させる。
【０２１３】
Ｓ７０６において、移動先の次の分割ボリュームはオンキャッシュであると判定した場合（Ｓ７０６でＹｅｓ）、移動処理部は、移動処理が完了したと判定し、移動処理が完了したことを示す移動完了通知をホスト装置２１へ送信する（Ｓ７０８）。そして処理は終了する。
【０２１４】
図２６は、実施形態に係るリコール処理２の詳細を図解したフローチャートである。このリコール処理は、図２３のフローのＳ５０６、図２４のフローのＳ６０２、Ｓ６０５、Ｓ６０７、Ｓ６０８、図２５のフローのＳ７０５、Ｓ７０７において呼び出される処理である。ここでは、図２４の処理においてマウント処理部５２により各ステップが実行される場合の動作を説明するが、図２３の処理における読み出し処理部５６、図２５の処理における移動処理部５３による動作も同様である。
【０２１５】
図２６において、先ずマウント処理部５２は、記憶部２６の空き容量がリコール対象の分割ボリュームの容量以上か否かを判定する（Ｓ８０１）。記憶部２６の空き容量がリコール対象の分割ボリュームの容量以上であると判定した場合（Ｓ８０１でＹｅｓ）、マウント処理部５２は、処理をＳ８０３に遷移させる。
【０２１６】
一方、記憶部２６の空き容量がリコール対象の分割ボリュームの容量未満であると判定した場合（Ｓ８０１でＮｏ）、マウント処理部５２は、オフキャッシュ処理の実行要求をオフキャッシュ処理部５７へ出力する（Ｓ８０２）。オフキャッシュ処理の詳細は、図２１及び図２２を参照して説明した処理である。尚、マウント処理部５２は、オフキャッシュ処理の実行要求には、リコール対象の分割ボリュームの容量を含ませる。そしてマウント処理部５２は処理をＳ８０３に遷移させる。
【０２１７】
Ｓ８０３において、マウント処理部５２は、リコール対象の分割ボリュームが格納された各物理ボリューム３５を物理ドライブ３４にマウントするように制御する（Ｓ８０３）。具体的には、マウント処理部５２は、テープライブラリ装置２４の物理ドライブ３４に、リコール対象の分割ボリュームが格納された各物理ボリューム３５をマウントするように指示する。
【０２１８】
次に、マウント処理部５２は、Ｓ８０３でマウントした各物理ボリューム３５から、リコール対象の分割ボリュームのデータを読み出して、記憶部２６に格納するリコール処理を行う（Ｓ８０４）。またマウント処理部５２は、リコールした分割ボリュームについて、管理情報５８の「オンキャッシュフラグ」の値を「True」に設定する。またマウント処理部５２は、リコールした分割ボリュームに対応する仮想ボリュームについて、ＬＶ一覧情報５９の「オンキャッシュフラグ」の値が「False」の場合には、「True」に設定する。そして処理は終了する。
【０２１９】
次に、仮想テープ装置２３の制御部２５のハードウェア構成の一例を説明する。図２７は、実施形態に係る制御部２５のハードウェア構成の一例を示す。
【０２２０】
図２７において、制御部２５は、ＣＰＵ（Central Processing Unit）７１、メモリ７２、記憶装置７３、読取装置７４、及び通信インターフェース７５を含む。ＣＰＵ７１、メモリ７２、記憶装置７３、読取装置７４、及び通信インターフェース７５はバスを介して接続される。
【０２２１】
ＣＰＵ７１は、メモリ７２を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、マウント処理部５２、移動処理部５３、書き込み処理部５４、マイグレーション処理部５５の一部または全部の機能を提供する。またＣＰＵ７１は同様に、読み出し処理部５６、及びオフキャッシュ処理部５７の一部または全部の機能を提供する。
【０２２２】
メモリ７２は、例えば半導体メモリであり、ＲＡＭ（Random Access Memory）領域およびＲＯＭ（Read Only Memory）領域を含んで構成される。記憶装置７３は、例えばハードディスクである。なお、記憶装置７３は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置７３は、外部記録装置であってもよい。記憶装置７３は管理情報格納部５１の一部または全部の機能を提供する。
【０２２３】
読取装置７４は、ＣＰＵ７１の指示に従って着脱可能記憶媒体８０にアクセスする。着脱可能記憶媒体８０は、たとえば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。尚、読取装置７４は制御部２５に含まれなくてもよい。
【０２２４】
通信インターフェース７５は、ＣＰＵ７１の指示に従ってネットワークを介して、ホスト装置２１及びテープライブラリ装置２４と通信する。また、記憶装置８１とネットワーク又はバスを介して通信する。
【０２２５】
実施形態のプログラムは、例えば、下記の形態で制御部２５に提供される。
（１）記憶装置７３に予めインストールされている。
（２）着脱可能記憶媒体８０により提供される。
（３）プログラムサーバ（図示せず）から通信インターフェース７５を介して提供される。
【０２２６】
記憶装置８１は、例えばハードディスク、または、ディスクアレイ装置等のストレージ装置である。なお、記憶装置８１は、フラッシュメモリ等の半導体メモリであってもよい。記憶装置８１は記憶部２６の一部または全部の機能を提供する。
【０２２７】
さらに、実施形態の制御部２５の一部は、ハードウェアで実現してもよい。或いは、実施形態の制御部２５は、ソフトウェアおよびハードウェアの組み合わせで実現してもよい。
【０２２８】
尚、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
【０２２９】
上記実施形態に関し、更に以下の付記を開示する。
（付記１）
情報処理装置からの第１要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納する格納制御部と、
前記情報処理装置からの第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行うアクセス制御部と、
を備えることを特徴とする媒体制御装置。
（付記２）
媒体制御装置は、さらに、
前記一組のデータと前記複数の分割データとを対応付けた情報を登録する管理情報を記憶する管理情報格納部
を備え、
前記格納制御部は、前記管理情報に基づいて、前記複数の記録媒体から前記複数の分割データのうちのいずれかの分割データを読み出して前記記憶部に格納する
ことを特徴とする付記１に記載の媒体制御装置。
（付記３）
前記格納制御部は、前記情報処理装置から書込み要求を受信した場合、前記情報処理装置から受信した書込み対象データを分割して複数の分割データを生成し、前記書き込み対象データと、前記複数の分割データとを対応づけた情報を前記管理情報に登録し、前記複数の分割データの各々を、前記複数の記録媒体に並列に格納する
ことを特徴とする付記２に記載の媒体制御装置。
（付記４）
前記第２要求は、前記一組のデータの先頭からの上書き要求であり、
前記格納制御部は、前記第１要求に応じて、前記複数の記録媒体のうち目的の記憶媒体から、前記一組のデータの先頭ブロックを含む分割データを読み出して前記記憶部に格納し、
前記アクセス制御部は、前記第２要求に応じて、前記記憶部において前記一組のデータの先頭ブロックを含む分割データが格納された領域に対して、上書き処理を行う
ことを特徴とする付記１〜３のうちいずれか１項に記載の媒体制御装置。
（付記５）
前記第２要求は、前記一組のデータの先頭からの読み出し要求であり、
前記格納制御部は、前記第１要求に応じて、前記複数の記録媒体のうち目的の記憶媒体から、前記一組のデータの先頭ブロックを含む分割データを読み出して前記記憶部に格納し、
前記アクセス制御部は、前記読み出し要求に応じて、前記記憶部に格納された前記一組のデータの先頭ブロックを含む分割データの先頭ブロックからデータを読み出して、前記情報処理装置へ送信し、
前記格納制御部は、前記読み出し要求に応じて、前記アクセス制御部が最初に前記記憶部から読み出すデータを含む分割データの次の分割データ以降の分割データを、順次、前記複数の記録媒体から読み出して、前記記憶部に格納する
ことを特徴とする付記１〜４のうちいずれか１項に記載の媒体制御装置。
（付記６）
前記管理情報は、さらに、前記分割データが格納される物理又は仮想媒体上における位置を示すための制御情報を含み、
前記第２要求は、前記データが格納される物理又は仮想媒体上におけるアクセス位置を示す情報を含むアクセス要求であり、
前記格納制御部は、前記情報処理装置から前記アクセス要求を受信した場合、前記制御情報に基づいて、前記アクセス位置に格納されたデータを含む分割データを、前記記録媒体から読み出して、前記記憶部に格納する
ことを特徴とする付記１〜５のうちいずれか１項に記載の媒体制御装置。
（付記７）
前記格納制御部は、前記記憶部に前記分割データを格納可能な空き領域が存在しない場合、前記記憶部に格納されている前記複数の前記分割データのうち、前記一組のデータの先頭ブロックを含む分割データと、前記一組のデータの最後端のブロックを含む分割データと、の間に位置する分割データから順次、前記記憶部が前記分割データを格納可能となるまで前記記憶部から削除する
ことを特徴とする付記１〜６のうちいずれか１項に記載の媒体制御装置。
（付記８）
情報処理装置からの第１要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納し、
前記情報処理装置からの第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
ことを特徴とする制御方法。
（付記９）
コンピュータに、
情報処理装置からの第１要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納し、
前記情報処理装置からの第２要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
処理を実行させることを特徴とする制御プログラム。
【符号の説明】
【０２３０】
１      
２１    ホスト装置
２２    仮想テープシステム
２３    仮想テープ装置
２４    テープライブラリ装置
２５    制御部
２６    記憶部
３１    仮想ドライブ
３２    仮想ボリューム
３３    分割ボリューム
３４    物理ドライブ
３５    物理ボリューム
３６    プール
４０    媒体制御装置
４１    格納制御部
４２    アクセス制御部
４３    管理情報格納部
４４    記憶部
４５    情報処理装置
４６    記録媒体
５１    管理情報格納部
５２    マウント処理部
５３    移動処理部
５４    書き込み処理部
５５    マイグレーション処理部
５６    読み出し処理部
５７    オフキャッシュ処理部
５８    管理情報
５９    ＬＶ一覧情報
６１    分割ボリューム
６２    分割ボリューム
６３    分割ボリューム
７１  ＣＰＵ
７２  メモリ
７３  記憶装置
７４  読取装置
７５  通信インターフェース
８０  着脱可能記憶媒体
８１  記憶装置
【図１】
0006365034.tif 000002
【図２】
0006365034.tif 000003
【図３】
0006365034.tif 000004
【図４】
0006365034.tif 000005
【図５】
0006365034.tif 000006
【図６】
0006365034.tif 000007
【図７】
0006365034.tif 000008
【図８】
0006365034.tif 000009
【図９】
0006365034.tif 000010
【図１０】
0006365034.tif 000011
【図１１】
0006365034.tif 000012
【図１２】
0006365034.tif 000013
【図１３】
0006365034.tif 000014
【図１４】
0006365034.tif 000015
【図１５】
0006365034.tif 000016
【図１６】
0006365034.tif 000017
【図１７】
0006365034.tif 000018
【図１８】
0006365034.tif 000019
【図１９】
0006365034.tif 000020
【図２０】
0006365034.tif 000021
【図２１】
0006365034.tif 000022
【図２２】
0006365034.tif 000023
【図２３】
0006365034.tif 000024
【図２４】
0006365034.tif 000025
【図２５】
0006365034.tif 000026
【図２６】
0006365034.tif 000027
【図２７】
0006365034.tif 000028