先ず、比較例としての仮想テープシステムの処理の流れの一例を説明する。図2は、比較例としての仮想テープシステムの処理の流れを図解したフローチャートの一例である。
図2において、仮想テープシステムの制御サーバは、先ず、仮想テープシステムに接続されたホスト装置からマウント命令を受信する(S1)。次に制御サーバは、S1で受信したマウント命令において、マウント命令の対象として指定された対象ボリュームを、仮想ドライブにマウントする(S2)。
次に制御サーバは、S2でマウントした対象ボリュームに、既に旧データが格納されているか否かを判定する(S3)。対象ボリュームに旧データが格納されていないと判定した場合(S3でNo)、制御サーバは処理をS6に遷移させる。
一方、対象ボリュームに旧データが格納されていると判定した場合(S3でYes)、制御サーバは、ディスクアレイ上に、対象ボリュームのデータが存在するか否かを判定する(S4)。ディスクアレイ上に対象ボリュームのデータが存在すると判定した場合(S4でYes)、制御サーバは処理をS6に遷移させる。
一方、ディスクアレイ上に、対象ボリュームのデータが存在しないと判定した場合(S4でNo)、制御サーバは、物理テープから対象ボリュームのデータを読み出して、ディスクアレイに展開(リコール)する(S5)。そして制御サーバは処理をS6に遷移させる。
S6において、制御サーバは、マウントが完了した旨をホスト装置に通知する(S6)。次に制御サーバは、ホスト装置から各種コマンドを受信する(S7)。次に制御サーバは、S7で受信したコマンドがUNLOADコマンドか否かを判定する(S8)。
S7で受信したコマンドがUNLOADコマンドではないと判定した場合(S8でNo)、制御サーバは、S7で受信したコマンドがWRITEコマンドか否かを判定する(S9)。S7で受信したコマンドがWRITEコマンドであると判定した場合(S9でYes)、制御サーバは、現在のブロックから書き込みを開始する(S10)。そして制御サーバは、処理をS7に戻す。
一方、S7で受信したコマンドがWRITEコマンドではないと判定した場合(S9でNo)、制御サーバは、S7で受信したコマンドがREADコマンドか否かを判定する(S11)。S7で受信したコマンドがREADコマンドであると判定した場合(S11でYes)、制御サーバは、現在のブロックから読み出しを開始し、読み出したデータをホスト装置へ送信する(S12)。ここでS10、S12における現在のブロックとは、例えば、対象ボリュームのデータが格納された仮想媒体上における、仮想ドライブのヘッドが位置するブロックである。そして制御サーバは、処理をS7に戻す。
一方、S7で受信したコマンドがREADコマンドではないと判定した場合(S11でNo)、制御サーバは、S7で受信したコマンドが移動系コマンドか否かを判定する(S13)。具体的には移動系コマンドには、例えば、SPACEコマンドや、LOCATEコマンド等がある。このような移動系コマンドは、例えば、仮想ドライブのヘッドの位置を、対象ボリュームのデータが格納された仮想媒体上の所定の位置へ仮想的に移動させるコマンドである。S7で受信したコマンドが移動系コマンドであると判定した場合(S13でYes)、制御サーバは、指定のブロックに移動する処理を行う(S14)。そして制御サーバは、処理をS7に戻す。
S8において、S7で受信したコマンドがUNLOADコマンドであると判定した場合(S8でYes)、制御サーバは、仮想ボリュームをUNLOAD後、書き込んだデータを物理テープへコピー(マイグレーション)する(S15)。そして処理は終了する。
比較例の仮想テープシステムにおいては、マウント対象の論理ボリュームのサイズが大きい場合、図2のS5におけるリコール処理に多大な時間がかかる。また、S5でリコールしたにもかかわらず、S7で受信したコマンドがWRITEコマンドである場合には、リコールした論理ボリュームのデータが格納されたディスクアレイ上の領域に対して、S10において新たにデータが書き込まれることとなる。よってこの場合リコール処理自体が無駄になる。
図3は、実施形態に係る仮想テープシステムの構成の一例を示す。仮想テープシステムは、ホスト装置21、及び仮想テープシステム22を含む。
ホスト装置21は、テープライブラリシステムに対して、マウント命令、書き込み命令、読み出し命令、移動系の命令を送信する情報処理装置である。マウント命令には、マウント対象の仮想ボリュームを識別する情報が含まれる。書き込み命令には、書き込み対象のデータと書き込み対象の仮想ボリュームを識別する情報が含まれる。読み出し命令には、読み出し対象の仮想ボリュームを識別する情報が含まれる。移動系の命令には、移動対象の仮想ボリュームを識別する情報と、移動先のブロックを識別する情報またはテープマーク数を示す情報と、が含まれる。
仮想テープシステム22は、ホスト装置21からの種々の命令を受信すると、その命令に応じた処理を行って、結果をホスト装置21へ返す。仮想テープシステム22は、仮想テープ装置23とテープライブラリ装置24を含む。仮想テープ装置23は、仮想テープ装置23の種々の制御を行う制御部25と、データを格納する記憶部26を含む。制御部25は、例えば情報処理装置である。記憶部26は、例えばハードディスク(磁気ディスク装置)を複数搭載し、大容量ディスクとして扱うディスクアレイ装置である。テープライブラリ装置24は、1以上のテープドライブと複数のテープカートリッジを格納するスロットとを有し、テープドライブにテープカートリッジをセットしてデータの読み書きを行ったり、セットされたテープカートリッジを入れ替えたりする機能を有する。
仮想テープ装置23はフロントエンドでホスト装置21と接続し、バックエンドでテープライブラリ装置24と接続する。仮想テープ装置23とホスト装置21、仮想テープ装置23とテープライブラリ装置24は、例えば通信ネットワーク等を介して接続される。また、制御部25と記憶部26は、例えば通信ネットワークまたはバス等を介して接続される。
次に、実施形態に係る仮想テープシステム22の書き込み処理について説明する。図4は、実施形態に係る仮想テープシステム22の書き込み処理を説明する図である。
図4において、ホスト装置21は、仮想ボリューム32に対する大容量の書込みデータの書込み命令を、仮想テープシステム22へ送信する。ホスト装置21は、仮想テープシステム22の仮想ドライブ31(31a〜31c)と仮想ボリューム32を認識している。ホスト装置21から書込み命令を受信すると、仮想テープシステム22の仮想テープ装置23は、受信した大容量データの仮想ボリューム32を複数の分割ボリューム33(33a〜33c)に分割する。ここで、分割ボリュームは、仮想ボリューム32を分割した内部仮想ボリュームである。尚、この分割処理に関しては、ホスト装置21に分割処理を認識させない。そして仮想テープ装置23は、複数の分割ボリューム33を、テープライブラリ装置24の物理ドライブ34(34a〜34c)を用いて、並行して各物理ボリューム35(35a〜35c)に格納する。すなわち仮想テープ装置23は、大容量の仮想ボリューム32のデータを分割して、複数の分割したデータに対して並行してマイグレーションを行う。
このように、複数の分割ボリュームを並行して複数の物理ボリューム35に格納するため、一つの大容量の仮想ボリューム32のデータを一つの物理ボリューム35に格納する場合に比べて、マイグレーションにかかる時間を削減することができる。また、物理ボリューム35からデータを読み出す場合にも、複数の物理ボリューム35から並行して分割ボリュームを読み出すことができるので、リコールにかかる時間を削減することができる。
次に、実施形態に係る仮想テープシステム22のマウント処理について説明する。
マウント処理は、ホスト装置21から所定の仮想ボリューム32のマウント命令を受信した場合に、所定の仮想ボリューム32のデータを記憶部26に展開する処理である。この処理は、マウント命令を受信した時点で既に記憶部26に対象ボリュームのデータが格納されている場合と、記憶部26に対象ボリュームのデータが格納されていない場合とで処理内容が異なる。よってホスト装置21からマウント命令を受信すると制御部25は先ず、対象ボリュームが記憶部26に存在するか否かの判定を行う。この判定において、実施形態では、対象ボリュームの全てのデータが記憶部26に存在するか否かの判定を行うのではなく、少なくとも、対象ボリュームの一部の特定のデータ、すなわち一部の特定の分割ボリュームが、記憶部26に存在するか否かの判定を行う。一部の特定の分割ボリュームとは、具体的には、対象ボリュームの複数の分割ボリュームのうち、最初の所定の数の分割ボリュームと、最後の分割ボリュームである。
一部の特定の分割ボリュームが記憶部26に存在すると判定した場合、制御部25はマウント処理が完了したと判定し、ホスト装置21へマウントが完了したことを示す通知を送信する。一方、一部の特定の分割ボリュームが記憶部26に存在しないと判定した場合、制御部25は、一部の特定の分割ボリュームをリコールする。そして、制御部25は、リコールが完了すると、マウント処理が完了したと判定し、ホスト装置21へマウントが完了したことを示す通知を送信する。
以上のように制御部25は、対象ボリュームのうち、少なくとも一部の特定の分割ボリュームが記憶部26に存在する場合にマウントが完了したと判定する。すなわち、制御部25はマウント処理において、対象ボリュームのデータがオンキャッシュでない場合に、対象ボリュームのすべてのデータのリコールは行わずに、一部の特定のデータのみリコールを行って、マウントが完了したと判定する。このようにすることで制御部25がマウント命令を受信してから、次のコマンドの処理を開始するまでの時間を削減することができる。このようにマウント処理において対象ボリュームの一部のみをリコールする実施形態では、マウント完了後に書き込み命令を受信した場合には、無駄に行われるリコールにかかる時間を削減することができる。すなわち実施形態の仮想テープシステム22では、マウント命令と書き込み命令に対応する処理にかかる時間を足し合わせた時間を削減することができる。
次に、実施形態に係る仮想テープシステム22における、対象ボリュームの先頭からの読み出し処理について説明する。図5は、実施形態に係る仮想テープシステム22における、対象ボリュームの先頭からの読み出し処理を説明する図である。
図5の実施形態の仮想テープシステム22において、対象ボリュームの先頭からの読み出し処理は、マウント処理が終了した後に開始される。すなわち、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリューム33(33a〜33d、33n)が記憶部26に存在する状態から読み出し処理が開始される。
ホスト装置21は、仮想ボリューム32のデータの先頭からの読み出し命令を、仮想テープシステム22へ送信する。ホスト装置21からこの読み出し命令を受信すると、仮想テープシステム22の制御部25は、記憶部26から仮想ボリューム32のデータを読み出して、ホスト装置21へ送信する。実施形態においては、読み出し処理の開始時点において、少なくとも最初と最後の所定の分割ボリューム(33a〜33d、33n)は記憶部26に存在している。よって制御部25は、先ず、記憶部26に既に格納されている最初の分割ボリューム33aからデータの読み出しを開始して、ホスト装置21へ送信する。記憶部26からのデータの読み出しとホスト装置21への送信を開始するとともに、制御部25は、物理ドライブ34a〜34dを用いて、物理ボリューム35a〜35dの各々から未展開の複数の分割ボリューム33e、33f、・・・を並行してリコールする。制御部25は、リコールを行いつつ、リコールにより展開した分割ボリューム33(33e、33f、・・・)のデータを、順次記憶部26から読み出してホスト装置21へ送信する。このように、記憶部26からのデータの読み出し及び送信処理と、リコール処理と、を並行して行うことで、マウント命令と読み出し命令に対する処理にかかる時間を足し合わせた時間を削減することができる。尚、読み出し処理においても、ホスト装置21からは、仮想ドライブ31aを用いて、仮想ボリューム32からデータを読み出しているものとして認識される。
以下の説明では、物理ボリューム35からのデータの読み出しと、記憶部26からのデータの読み出しを区別するために、物理ボリューム35からのデータの読み出しは(記憶部26への格納も含めて)「リコール」と記す。そして、記憶部26からのデータの読み出しを「読み出し」と記す。
次に、実施形態に係る仮想テープシステム22の移動系コマンドの処理について説明する。移動系コマンドは、ホスト装置21が認識する仮想ドライブ31のヘッドを、仮想ボリューム32が格納される仮想の媒体上の所定の位置へ仮想的に移動させる命令である。移動系コマンドには、移動先を指定する情報として、ブロックの識別情報を含むコマンドや、テープマーク数を含むコマンドがある。
図6は、実施形態に係る仮想テープシステム22の移動系コマンドの処理を説明する図である。図6の実施形態の仮想テープシステム22において移動系コマンドの処理は、マウント処理が終了した後に開始される。すなわち、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリューム33(33a〜33d、33n)が記憶部26に存在する状態から移動系コマンドの処理が開始される。
ホスト装置21は、移動系コマンドを仮想テープシステム22へ送信する。図6の例では、移動系コマンドの移動先のブロックは、分割ボリューム33gに含まれている。ホスト装置21から移動系コマンドを受信すると、仮想テープシステム22の制御部25は、移動系コマンドによって指定される移動先のブロックのデータが記憶部26に存在するか否かを判定する。そして制御部25は、移動先のブロックが記憶部26に存在しない場合、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームをリコールする。図6の例の場合、移動先のブロックが含まれる分割ボリューム33gと、分割ボリューム33gの次の分割ボリュームである33hがリコールされている。そして制御部25は、移動系コマンドの処理が完了した旨を示す通知をホスト装置21へ送信する。この移動系コマンドの処理では、マウント時にリコールされていた分割ボリューム33dの次の分割ボリュームから、移動先のブロックを含む分割ボリューム33gの前の分割ボリュームのリコールは行われていない。
このように、実施形態に係る仮想テープシステム22では、移動先のブロックを含む分割ボリュームと、それ以降の所定の数の分割ボリュームをリコールし、移動先のブロックを含む分割ボリュームより前の分割ボリュームのリコールは行われない。これにより、マウント命令と移動系コマンドに対する処理にかかる時間を足し合わせた時間を削減することができる。
次に、実施形態に係る仮想テープシステム22における、移動系コマンド実行後の読み出し処理について説明する。
実施形態の仮想テープシステム22において、移動系コマンド実行後の読み出し処理は、移動系コマンドに対する処理が完了した後に開始される。すなわち、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部26に存在する状態から読み出し処理が開始される。
ホスト装置21から、移動系コマンド後の読み出し命令を受信すると、仮想テープシステム22の制御部25は、記憶部26から仮想ボリューム32のデータを読み出して、ホスト装置21へ送信する。実施形態においては、読み出し処理の開始時点において、少なくとも移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部26に存在している。よって制御部25は、先ず、記憶部26に既に格納されている移動先のブロックからデータの読み出しを開始して、ホスト装置21へ送信する。記憶部26からのデータの読み出しとホスト装置21への送信を開始するとともに、制御部25は、物理ボリューム35から未展開の複数の分割ボリュームを並行してリコールする。制御部25は、リコールを行いつつ、リコールにより展開した分割ボリュームのデータを、順次記憶部26から読み出してホスト装置21へ送信する。このように、記憶部26からのデータの読み出し及び送信処理と、リコール処理と、を並行して行うことで、マウント命令と読み出し命令に対する処理にかかる時間を足し合わせた時間を削減することができる。
次に、実施形態に係る仮想テープシステム22のオフキャッシュ処理について説明する。
オフキャッシュ処理は、ホスト装置21からの書き込みデータにより記憶部26の領域が一杯になった場合に、記憶部26の所定のデータを削除して、データの書き込みが可能な領域を確保する処理である。実施形態においてオフキャッシュ処理で削除するデータは、マイグレーション済みで、且つ、最後にアクセスされた時刻が最も古いデータである。
オフキャッシュ処理は、例えば、リコール前に、テープから読み出すデータを格納するための空き領域が記憶部26に存在しないと判定された場合に行われる。すなわち制御部25は、リコールを行う前に、リコール対象のデータのサイズ以上の空き領域が記憶部26に存在するか否かを判定し、存在しない場合には、リコール対象のデータのサイズ以上の空き領域が確保できるまで、記憶部26に格納されたデータを削除する。
比較例の仮想テープシステム22においては、仮想ボリューム32単位で削除が行われる。例えば、オフキャッシュ対象として大容量の仮想ボリューム32が選択された場合、その大容量の仮想ボリューム32の全てのデータが記憶部26から一度に削除される。それに対して、実施形態の仮想テープシステム22は、分割ボリューム単位で削除が行われる。例えば、複数の分割ボリュームのうちのいくつかを記憶部26から削除することにより、リコールで読み出すデータのサイズ以上の空き容量が確保できた場合には、それ以上の分割ボリュームのオフキャッシュは行わない。このようにすることで、仮想ボリューム32の一部を可能な限りオンキャッシュにしておくことができ、その結果、リコールにかかる時間を短縮することができる。
また実施形態の仮想テープシステム22においては、複数の分割ボリュームのうち、分割ボリュームの仮想ボリューム32における位置に応じて、分割ボリュームを削除する順番を制御する。具体的には、制御部25は、複数の分割ボリュームのうち、最初の所定の数の分割ボリュームと、最後の分割ボリュームを、可能な限りオンキャッシュとするように、分割ボリュームを削除する順番を制御する。すなわち、制御部25は最初の所定の数の分割ボリュームと最後の分割ボリュームとに挟まれた所定の数の分割ボリュームを先にオフキャッシュするように制御する。これにより、可能な限り多くの仮想ボリューム32の最初の所定の数の分割ボリュームと最後の分割ボリュームをオンキャッシュとしておくことができる。よって、マウント命令を受信したときに既に、記憶部26にこれらの一部の特定の分割ボリュームが格納されている確率を大きくすることができる。ここで、仮想ボリューム32の最初の所定の数の分割ボリュームと最後の分割ボリュームは、実施形態におけるマウント処理において、マウントの完了の判定対象となるボリュームである。すなわち、マウント処理において制御部25は、少なくとも、仮想ボリューム32の最初の所定の数の分割ボリュームと最後の分割ボリュームが記憶部26に存在するか否かを判定してマウントが完了したと判定する。従って、可能な限り多くの仮想ボリューム32の最初の所定の数の分割ボリュームと最後の分割ボリュームをオンキャッシュとしておくことは、マウント処理におけるリコールの発生確率を低減することにつながる。これにより、複数のマウント要求に対するマウント処理にかかる時間の合計を、システム全体として削減することができる。
尚、最初の分割ボリュームは、仮想ボリュームの先頭からの読み出し又は書き込みの際に、最初にアクセスされるデータが含まれている。また、最後の分割ボリュームは、既存の仮想ボリュームの最後から追加で書き込みを行う際に、移動系コマンドにより移動先として指定されるデータが含まれている。よって、これらの最初と最後の所定の数の分割ボリュームを可能な限りオンキャッシュとすることで、書き込み処理、読み出し処理、または移動処理の開始を早めることができる。尚、データをオンキャッシュにするとは、記憶部26にデータを格納した状態にすることを指す。
図7は、実施形態に係る媒体制御装置40の一例を示す。媒体制御装置40は、格納制御部41、アクセス制御部42、及び管理情報格納部43を含む。また、媒体制御装置40は、記憶部44、情報処理装置45、及び記録媒体46に通信ネットワークまたはバスを介して接続される。制御部25は、媒体制御装置40の一例である。記憶部26は、記憶部44の一例である。テープライブラリ装置34の物理ボリュームが格納されるテープカートリッジは、記録媒体46の一例である。
格納制御部41は、情報処理装置45からの第1要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体46のうち目的の記憶媒体から複数の分割データのうちいずれかの分割データを読み出して記憶部44に格納する。
アクセス制御部42は、情報処理装置45からの第2要求に応じて、記憶部44に格納された分割データにアクセスを行う。
管理情報格納部43は、一組のデータと複数の分割データとを検索可能に対応付けた情報を含む管理情報を記憶する。
また、格納制御部41は、管理情報に基づいて、複数の記録媒体46から複数の分割データのうちのいずれかの分割データを読み出して記憶部44に格納する。
また、格納制御部41は、情報処理装置45から書込み要求を受信した場合、情報処理装置45から受信した書込み対象データを分割して複数の分割データを生成する。そして、格納制御部41は、書き込み対象データと、複数の分割データとを検索可能に対応づけた情報を管理情報に登録する。そして格納制御部41は、複数の分割データの各々を、複数の記録媒体46に並列に格納する。
また、格納制御部41は、第1要求に応じて、複数の記録媒体46のうち目的の記憶媒体から、一組のデータの先頭ブロックを含む分割データを読み出して記憶部44に格納する。そしてアクセス制御部42は、一組のデータの先頭からの上書き要求に応じて、記憶部44において一組のデータの先頭ブロックを含む分割データが格納された領域に対して、上書き処理を行う。
また、格納制御部41は、第1要求に応じて、複数の記録媒体46のうち目的の記憶媒体から、一組のデータの先頭ブロックを含む分割データを読み出して記憶部44に格納する。そして、アクセス制御部42は、一組のデータの先頭からの読み出し要求に応じて、記憶部44に格納された一組のデータの先頭ブロックを含む分割データの先頭ブロックからデータを読み出して、情報処理装置45へ送信する。さらに、格納制御部41は、読み出し要求に応じて、アクセス制御部42が最初に記憶部44から読み出すデータを含む分割データの次の分割データ以降の分割データを、順次、複数の記録媒体46から読み出して、記憶部44に格納する。
また、管理情報には、さらに、分割データと、分割データが格納される物理又は仮想媒体上における位置を示すための制御情報を分割データが検索可能に対応付けた情報が登録される。そして、格納制御部41は、情報処理装置45から、一組のデータが格納される物理又は仮想媒体上におけるアクセス位置を示す情報を含むアクセス要求を受信した場合、以下の処理を行う。すなわち格納制御部41は、制御情報に基づいて、アクセス位置に格納されたデータを含む分割データを、記録媒体46から読み出して、記憶部44に格納する。
また、格納制御部41は、記憶部44に分割データを格納可能な空き領域が存在しない場合以下の処理を行う。すなわち格納制御部41は、記憶部44に格納されている複数の分割データのうち、一組のデータの先頭ブロックを含む分割データと、一組のデータの最後端のデータを含む分割データと、の間に位置する分割データから順次、記憶部44が分割データを格納可能となるまで記憶部44から削除する。
図8は、実施形態に係る制御部25の構成の一例を示す。制御部25は、管理情報格納部51、マウント処理部52、移動処理部53、書き込み処理部54、マイグレーション処理部55、読み出し処理部56、及びオフキャッシュ処理部57を含む。管理情報格納部51は、管理情報格納部43の一例である。マウント処理部52、移動処理部53、マイグレーション処理部55、及びオフキャッシュ処理部57は、格納制御部41の一例である。書き込み処理部54、及び読み出し処理部56は、アクセス制御部42の一例である。
管理情報格納部51は、管理情報58とLV一覧情報59とを格納する。管理情報58は、仮想ボリューム32に関する情報と、その仮想ボリューム32を分割した複数の分割ボリュームに関する情報と、を対応付けた情報である。分割ボリュームに関する情報には、分割ボリュームが最後にアクセスされた日時、及び、分割ボリュームに含まれるデータのブロックの範囲とテープマーク数の情報が含まれる。LV一覧情報59は、仮想テープシステム22で管理される仮想ボリューム32の一覧情報であり、各仮想ボリューム32についての、最後にアクセスされた日時などの情報を含む。
図9は、管理情報58の構成の一例を示す。管理情報58には、「分割ボリュームID」、「仮想ボリュームID」、「タイムスタンプ」、「開始ブロック番号」、「終了ブロック番号」、「テープマーク数」、及び「オンキャッシュフラグ」のデータ項目を含む。管理情報58のそれぞれのデータ項目のデータは対応付けて記憶される。
「分割ボリュームID」は、仮想テープシステム22における分割ボリュームを一意に識別するための識別情報である。「仮想ボリュームID」は、対応する「分割ボリュームID」で示される分割ボリュームが対応する仮想ボリューム32を仮想テープシステム22において一意に識別するための識別情報である。「タイムスタンプ」は、対応する「分割ボリュームID」で示される分割ボリュームが最後にアクセスされた日時を示す情報である。「開始ブロック番号」は、対応する「分割ボリュームID」で示される分割ボリュームに含まれるデータの開始ブロック番号(開始ブロックの識別情報)である。「終了ブロック番号」は、対応する「分割ボリュームID」で示される分割ボリュームに含まれるデータの終了ブロック番号(終了ブロックの識別情報)である。「テープマーク数」は、対応する「分割ボリュームID」で示される分割ボリュームに含まれるテープマークの数を示す情報である。「オンキャッシュフラグ」は、対応する「分割ボリュームID」で示される分割ボリュームがオンキャッシュか否かを示す情報である。
図10は、LV一覧情報59の一例を示す。LV一覧情報59は、「仮想ボリュームID」、「グループID」、「サイズ」、「最終アクセス日時」、及び「オンキャッシュフラグ」のデータ項目を含み、それぞれのデータ項目のデータを対応付けて記憶する。「仮想ボリュームID」は、仮想ボリューム32を仮想テープシステム22において一意に識別するための識別情報である。「グループID」は、対応する「仮想ボリュームID」で示される仮想ボリューム32が含まれるグループを、仮想テープシステム22において一意に識別するための識別情報である。「サイズ」は、対応する「仮想ボリュームID」で示される仮想ボリューム32のサイズを示す情報である。「最終アクセス日時」は、対応する「仮想ボリュームID」で示される仮想ボリューム32が最後にアクセスされた日時を示す情報である。「オンキャッシュフラグ」は、対応する「仮想ボリュームID」で示される仮想ボリューム32が、オンキャッシュか否かを示す情報である。尚、以下の説明では、図9、図10の「オンキャッシュフラグ」が「False」の場合は、オンキャッシュでない(オフキャッシュである)ことを示し、「オンキャッシュフラグ」が「True」の場合は、オンキャッシュであることを示すものとする。LV一覧情報59の「オンキャッシュフラグ」は、仮想ボリュームの複数の分割ボリュームのうち何れかの分割ボリュームがオンキャッシュである場合には、オンキャッシュを示す値となる。
マウント処理部52は、ホスト装置21から所定の仮想ボリューム32のマウント命令を受信した場合に、所定の仮想ボリューム32のデータを記憶部26に展開するマウント処理を行う。マウント処理においてマウント処理部52は、ホスト装置21からマウント命令を受信すると、先ず、対象ボリュームが新規の仮想ボリューム32か既存の仮想ボリューム32かを判定する。この対象ボリュームの判定は、管理情報58に基いて行われる。すなわちマウント処理部52は、管理情報58の「分割ボリュームID」と「仮想ボリュームID」の対応関係を参照して、マウント対象の仮想ボリューム32が、分割ボリュームと対応付けられているか否かを判定する。マウント対象の仮想ボリューム32が分割ボリュームと対応付けられていると判定した場合、マウント処理部52は、対象ボリュームは既存の仮想ボリューム32であると判定する。一方、マウント対象の仮想ボリューム32が分割ボリュームと対応付けられていないと判定した場合、マウント処理部52は、対象ボリュームは新規の仮想ボリューム32であると判定する。
対象ボリュームが新規の仮想ボリューム32であると判定した場合、マウント処理部52は、新規分割ボリュームの展開処理を行う。
新規分割ボリュームの展開処理において、先ずマウント処理部52は、プール36から未割り当ての分割ボリュームを選択して、選択した分割ボリュームを仮想ボリューム32に割り当てる。具体的にはマウント処理部52は、新規の仮想ボリューム32の識別情報と、選択した分割ボリュームの識別情報とを対応付けて、管理情報58に格納する。すなわち、マウント処理部52は、管理情報58に新しいエントリを追加し、そのエントリの「分割ボリュームID」と「仮想ボリュームID」に、それぞれ、選択した分割ボリュームの識別情報と、新規の仮想ボリューム32の識別情報を格納する。尚、分割ボリュームのサイズは予め設定されているものとするが、分割ボリュームの割当の際に、ホスト装置21により指定されてもよい。
尚、プール36には、未割り当ての分割ボリュームを管理するための情報が格納されており、例えば、未割り当ての分割ボリュームの識別情報、サイズ等の情報が格納されるものである。実施形態では、未割り当ての分割ボリュームの集合をプール36と記載する。未割り当ての分割ボリュームとは、どの仮想ボリューム32にも割り当てられていない分割ボリュームを指す。
分割ボリュームを仮想ボリューム32に割り当てる処理が完了すると、マウント処理部52は、割り当てた分割ボリュームの領域を記憶部26に展開する。すなわちマウント処理部52は、割り当てた分割ボリュームのサイズの空き領域を記憶部26上に確保する。
割り当てた分割ボリュームのサイズの空き領域を記憶部26に確保できない場合、マウント処理部52は、オフキャッシュ処理の実行要求をオフキャッシュ処理部57に出力する。オフキャッシュ処理の実行要求を受け付けたオフキャッシュ処理部57は、オフキャッシュを行い、分割ボリュームのサイズの空き領域を記憶部26に確保する。そしてオフキャッシュ処理部57はオフキャッシュが完了したことをマウント処理部52に通知する。この通知を受け取るとマウント処理部52は、割り当てた分割ボリュームを記憶部26に展開する。ここでは展開処理は、分割ボリューム内にデータが格納されていないので、分割ボリュームのサイズの空き領域が確保される処理となる。
以上のようにして、マウント処理部52は、新規分割ボリュームの展開処理を行う。新規分割ボリュームの展開処理が完了すると、マウント処理部52は、ホスト装置21にマウントが完了したことを示す完了通知を送信する。以上のようにして、マウント処理部52は、対象ボリュームが新規の仮想ボリューム32であると判定した場合のマウント処理を行う。尚、実施形態では、分割ボリュームが記憶部26に展開された段階で、制御部25(または例えばOS等の所定のソフトウェア)が、展開された分割ボリュームを認識するものとする。
一方、対象ボリュームが既存の仮想ボリューム32であると判定した場合、マウント処理部52は、対象ボリュームの複数の分割ボリュームのうち、一部の特定の分割ボリュームが記憶部26に存在するか否かを判定する。
具体的には、一部の特定の分割ボリュームとは、対象ボリュームの複数の分割ボリュームのうち、最初の4つの分割ボリューム及び最後の分割ボリュームである。ここで、分割ボリュームは、各分割ボリュームの先頭のブロックIDが小さい順に順序付けられるものとして説明する。
図11は、マウント処理部52による対象ボリュームの一部の特定のデータが記憶部26に存在するか否かの判定において、判定の対象となる一部の特定のデータについて説明する図である。図11において、1つの仮想ボリューム32を分割した複数の分割ボリュームは、4つのタイプ(分割ボリューム61〜64)に分類されている。分割ボリューム61は、仮想ボリューム32の先頭の位置のブロックを含む分割ボリューム(先頭の分割ボリューム)である。分割ボリューム62は、分割ボリューム61の次の3つの分割ボリュームである。分割ボリューム64は、対象ボリュームの最後に位置するブロックを含む分割ボリューム(最後端の分割ボリューム)である。分割ボリューム63は、仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム61、62、64以外のデータ、すなわち、分割ボリューム62と分割ボリューム64の間に位置する分割ボリュームである。尚、実施形態では、分割ボリューム62は、分割ボリューム61の次の3つの分割ボリュームとしたが、分割ボリューム62の数は3つに限定されず、所定の数としてもよい。
図11のように分類された分割ボリュームを用いて説明すると、マウント処理部52は、少なくとも、分割ボリューム61、62、及び64のデータが記憶部26に存在するか否かを判定する。マウント処理部52は、分割ボリューム61、62、及び64のデータのいずれもが記憶部26に存在すると判定した場合、マウントは完了したと判定し、マウントが完了したことを示す完了通知をホスト装置21へ送信する。一方、マウント処理部52は、仮想ボリューム32のデータのうち、分割ボリューム61、62、64の何れかが記憶部26に存在しないと判定した場合は、分割ボリューム61、62、64のうち、記憶部26に存在しない分割ボリュームをリコールする。そしてリコールが完了し、分割ボリューム61、62、及び64の全てが記憶部26に展開されると、マウント処理部52はマウントが完了したと判定し、マウントが完了したことを示す完了通知を、ホスト装置21へ送信する。
すなわちマウント処理部52は、(1)マウント対象の仮想ボリューム32のうち、少なくとも分割ボリューム61、62、及び64のいずれもが記憶部26に存在する時にマウント要求を受信した場合、ホスト装置21にマウントの完了通知を即応答する。またマウント処理部52は、(2)マウント対象の仮想ボリューム32のうち、分割ボリューム61、及び62のみオンキャッシュの時にマウント要求を受信した場合、分割ボリューム64をリコールし、リコール完了後にマウントの完了通知を応答する。またマウント処理部52は、(3)マウント対象の仮想ボリューム32のうち、分割ボリューム61のみオンキャッシュの時にマウント要求を受信した場合、分割ボリューム62、64をリコールし、リコール完了後にマウントの完了通知を応答する。尚、分割ボリューム62、64のリコールにおいては、複数の物理ドライブ34を介して並列にリコールが行われる。またマウント処理部52は、(4)マウント対象の仮想ボリューム32のうち、オンキャッシュの領域がない時にマウント要求を受信した場合、分割ボリューム61、62、64をリコールし、リコール完了後にマウントの完了通知を応答する。尚、分割ボリューム61、62、64のリコールにおいては、複数の物理ドライブ34を介して並列にリコールが行われる。
リコールを行う分割ボリュームを決定した場合、実際のリコールを行う前にマウント処理部52は、記憶部26に、リコール対象の分割ボリュームを格納する空き領域が存在するか否かを判定する。リコール対象の分割ボリュームを格納する空き領域が記憶部26に存在しない場合、マウント処理部52は、オフキャッシュ処理部57に対してオフキャッシュ要求を出力する。オフキャッシュ要求を受け付けたオフキャッシュ処理部57は、オフキャッシュを行い、リコール対象の分割ボリュームのサイズの空き領域を記憶部26に確保する。そしてオフキャッシュ処理部57はオフキャッシュが完了したことをマウント処理部52に通知する。この通知を受け取るとマウント処理部52は、リコール対象の分割ボリュームを、確保された空き領域へリコールする。
尚、実施形態では、マウント処理部52による対象ボリュームの一部の特定のデータが記憶部26に存在するか否かの判定において、判定の対象となる一部の特定のデータは、分割ボリューム61、62、64であるとしたこれに限定されない。すなわち、一部の特定のデータは分割ボリューム61、62、64の何れか、または、任意の組合せとしてもよい。
移動処理部53は、ホスト装置21から移動系コマンドを受信して、移動対象ボリュームに対する、移動系コマンドの実行を行う。移動系コマンドは、マウント処理部52によるマウント処理が完了してから実行される。
移動処理部53は先ず、移動系コマンドによって指定される移動先のブロックを含む分割ボリュームを、管理情報58に基づいて特定する。すなわち移動処理部53は、管理情報58の「開始ブロック番号」と「終了ブロック番号」、または、「テープマーク数」を参照することによって、移動先のブロックを含む分割ボリュームを特定する。次に移動処理部53は、管理情報58に基づいて、移動先の分割ボリュームがオンキャッシュか否かを判定する。すなわち移動処理部53は、管理情報58の「オンキャッシュフラグ」を参照することによって、移動先の分割ボリュームがオンキャッシュか否かを判定する。尚、移動先の分割ボリュームがオンキャッシュか否かを判定する処理は、移動先の分割ボリュームと、移動先の分割ボリューム以降の所定の数の分割ボリュームがオンキャッシュか否かを判定する処理としてもよい。
移動先の分割ボリュームがオンキャッシュでないと判定した場合、移動処理部53は、移動先の分割ボリュームと、移動先の分割ボリュームの次の分割ボリュームをリコールする。ここでリコールする分割ボリュームは、移動先の分割ボリュームと、移動先の分割ボリューム以降の所定の数の分割ボリュームとしてもよい。リコールが完了すると、移動処理部53は、仮想ドライブ31の仮想ヘッドを、移動対象のブロックの位置へ移動させる処理を行う。そして移動処理部53は、移動処理が完了したと判定し、移動処理が完了したことを示す移動完了通知をホスト装置21へ送信する。
ここで、実施形態に係る仮想テープシステム22の移動系コマンドの処理にかかる時間の削減について説明する。図12は、実施形態に係る仮想テープシステム22の移動系コマンドの処理にかかる時間の削減について説明する図である。図12(A)は、比較例のマウント処理と移動系コマンドの処理時間を説明する図である。図12(B)は、実施形態にかかる仮想テープシステム22のマウント処理と移動系コマンドの処理時間を説明する図である。尚、図12においては、移動対象の仮想ボリューム32のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と移動系コマンドが実行される場合の例を示している。
比較例では、図12(A)に示すように、マウント処理において移動対象の仮想ボリューム32の全てのデータのリコールが行われ、仮想ボリューム32の全てのデータのリコールが完了してから、移動処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ34(1)により行われている。
これに対して実施形態においては、図12(B)に示すように、マウント処理において分割ボリューム61、62、64のデータ(図12(B)のA、B、C、D、Z)のリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム(図12(B)ではGの例を示している)と、移動先の分割ボリューム(G)の次の分割ボリューム(H)がリコールされ、移動処理が行われる。
このように実施形態の仮想テープシステム22では、比較例と比べると、マウント処理と移動系コマンドに対する処理にかかる時間を削減することができる。
書き込み処理部54は、ホスト装置21から書き込み命令を受信して、書き込み対象ボリュームに対する、書き込み対象データの書き込み処理を行う。書き込み処理部54による書き込み処理は、マウント処理部52によるマウント処理が完了してから実行される。
書き込み命令は、2つに分類される。すなわち、新規の仮想ボリューム32に対する書き込み命令と、既存の仮想ボリューム32に対する書き込み命令である。さらに、既存の仮想ボリューム32に対する書き込み命令は、仮想ボリューム32の先頭からの書き込み命令と、仮想ボリューム32の途中からの書き込み命令の2つに分類される。
新規の仮想ボリューム32に対する書き込み処理は、マウント処理により、新しく割り当てられた分割ボリューム(以下、説明のために分割ボリュームLV’1と記す)の領域が記憶部26に確保された状態から開始される。
新規の仮想ボリューム32に対する書き込み処理において、書き込み処理部54は、書き込み対象データを、新規に割り当てられた分割ボリュームLV’1に対して書き込む。そして分割ボリュームLV’1に対する書込みが進み、書き込みデータ量が分割ボリュームLV’1の容量を超えた場合、書き込み処理部54は管理情報58に、書き込んだデータに関する情報と、分割ボリュームLV’1の識別情報とを対応付けて記録する。書き込んだデータに関する情報は具体的には、分割ボリュームに書き込んだデータの、ブロックIDの範囲と、テープマーク数である。管理情報58への記録が完了すると、書き込み処理部54は、記憶部26から、分割ボリュームLV’1をアンマウントする。アンマウントは、すなわち、ホスト装置21から見て、制御部25(または例えば制御部25のOS(Operating System)等の所定のソフトウェア)が、分割ボリュームLV’1を認識できない状態にする動作である。そして、書き込み処理部54は、アンマウントした分割ボリュームLV’1のマイグレーションの実行要求を、マイグレーション処理部55に出力する。
マイグレーションの実行要求を出力するとともに書き込み処理部54は、新規分割ボリュームの展開処理を行う。この新規分割ボリュームの展開処理は、マウント処理部52により行われる新規分割ボリュームの展開処理と同様である。すなわち、プール36から新規の分割ボリュームを選択して、管理情報58を更新し、選択した分割ボリュームを展開する。
そして書き込み処理部54は、LV’1に書込みが完了したブロックIDの次のブロックIDのブロックから、新たに割り当てられた分割ボリューム(以下、説明のために分割ボリュームLV’2と記す)に対して書き込みを再開する。そして分割ボリュームLV’2に対する書込みが進み、書き込みデータ量が、分割ボリュームLV’2の容量を超えた場合は、書き込み処理部54は、LV’1と同様の処理をLV’2に対して行う。そして書き込み処理部54は、再度新規分割ボリュームの展開処理を行い、同様の処理を繰り返す。
書き込み対象データの全てのデータの書込みが完了したら、書き込み処理部54は、書き込みコマンドに対する書き込み処理を終了する。尚、書き込み処理において書き込み対象の最後のデータを書き込んだ分割ボリューム(説明のために分割ボリュームLV’nと記す)に対しても、書き込み処理部54は、LV’1に対してと同様の処理を行ってもよい。すなわち書き込み処理部54は、管理情報58に、書き込んだデータに関する情報と、分割ボリュームLV’nの識別情報とを対応付けて記録してもよい。そして書き込み処理部54は、分割ボリュームLV’nをアンマウントし、LV’nのマイグレーションの実行要求を、マイグレーション処理部55に出力してもよい。
既存の仮想ボリューム32に対する書き込み命令は、仮想ボリューム32の先頭からの書き込み命令と、仮想ボリューム32の途中からの追加書き込み命令の2つに分類される。仮想ボリューム32の途中からの追加書き込み命令は、移動系コマンドの処理完了後に実行される書き込み命令である。
既存の仮想ボリューム32に対する書き込み処理であって、仮想ボリューム32の先頭からの書き込み処理は、対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリュームが記憶部26に存在する状態から開始される。これは、書き込み処理の前に実行されるマウント処理によるものである。仮想ボリューム32が1つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部26に存在する状態から開始される。
書き込み処理部54は先ず、書き込み対象データを、記憶部26に展開済みの先頭の分割ボリューム61に対して書き込む。それとともに書き込み処理部54は、分割ボリューム62、63、64の各分割ボリュームに対して、仮想ボリューム32との対応付けを外す処理を行う。具体的には書き込み処理部54は、管理情報58において、書き込み対象の仮想ボリューム32に対応付けられた分割ボリュームのうち、分割ボリューム62、63、64のエントリを削除する。そして書き込み処理部54は、各分割ボリューム62、63、64を初期化して、初期化した分割ボリューム62、63、64を未割り当ての分割ボリュームとしてプール36に戻す。
書き込みデータ量が先頭の分割ボリューム61の容量を超えた場合の動作は、新規仮想ボリュームに対する書き込み処理におけるものと同様である。すなわち書き込み処理部54は、管理情報58に、書き込んだデータに関する情報と、分割ボリューム61の識別情報とを対応付けて記録する。そして書き込み処理部54は、記憶部26から、分割ボリューム61をアンマウントし、アンマウントした分割ボリューム61のマイグレーションの実行要求を、マイグレーション処理部55に出力する。マイグレーションの実行要求を出力するとともに書き込み処理部54は、新規分割ボリュームの展開処理を行う。ここで、新規分割ボリュームの展開処理においてプール36から選択される新規の分割ボリュームは、ディスク上に存在する未割り当ての分割ボリュームを優先して選択されるように制御してもよい。そして書き込み処理部54は、書込みが完了したブロックIDの次のブロックIDのブロックから、新たに割り当てられた分割ボリュームに対して書き込みを再開する。以降の動作も、新規仮想ボリュームに対する書き込み処理におけるものと同様である。
尚、初期化した分割ボリュームをプール36に戻す際に、その分割ボリュームが記憶部26に存在していた場合には、分割ボリュームのデータは記憶部26からも削除されてもよい。
ここで、実施形態に係る仮想テープシステム22の先頭からの書き込み処理にかかる時間の削減について説明する。図13は、実施形態に係る仮想テープシステム22の先頭からの書き込み処理にかかる時間の削減について説明する図である。図13(A)は、比較例のマウント処理と先頭からの書き込み処理の処理時間を説明する図である。図13(B)は、実施形態にかかる仮想テープシステム22のマウント処理と先頭からの書き込み処理の処理時間を説明する図である。尚、図13においては、書き込み対象の仮想ボリューム32のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と書き込み処理が実行される場合の例を示している。
比較例では、図13(A)に示すように、マウント処理において書き込み対象の仮想ボリューム32の全てのデータのリコールが行われ、仮想ボリューム32の全てのデータのリコールが完了してから、書き込み処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ34(1)により行われている。
これに対して実施形態の仮想テープシステム22においては、図13(B)に示すように、マウント処理において分割ボリューム61、62、64(図13(B)のA、B、C、D、Z)のデータのリコールが最初に行わる。そして、これらの分割ボリュームのリコールが完了した時点で、書き込み処理が開始される。このように分割ボリューム63のリコールが行われないため、実施形態の仮想テープシステム22では、比較例と比べると、マウント処理と書き込みコマンドに対する処理にかかる時間を削減することができる。
既存の仮想ボリューム32に対する書き込み処理であって、仮想ボリューム32の途中からの追加書き込み処理は、移動系コマンドの実行完了後に開始される。よって、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部26に存在する状態から書き込み処理が開始される。尚、仮想ボリューム32が1つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部26に存在する状態から開始される。
書き込み処理部54は先ず、書き込み対象データを、記憶部26に展開済みの移動後の分割ボリューム(説明のために分割ボリュームLV’mと記す)に対して書き込む。それとともに、書き込み処理部54は、書き込み対象の仮想ボリューム32の複数の分割ボリュームのうち、移動後の分割ボリュームLV’m以降の各分割ボリュームに対して、対象ボリュームとの対応付けを外す。すなわち書き込み処理部54は、管理情報58において、書き込み対象の仮想ボリューム32に対応付けられた分割ボリュームのうち、分割ボリュームLV’m以降の分割ボリュームのエントリを削除する。そして書き込み処理部54は、分割ボリュームLV’m以外の各分割ボリュームを初期化して、初期化した分割ボリュームをプール36に戻す。それ以降の書き込み処理部54の動作は、既存の仮想ボリューム32の先頭からの書き込み処理の動作と同様である。
ここで、実施形態に係る仮想テープシステム22の途中からの追加書き込み処理にかかる時間の削減について説明する。図14は、実施形態に係る仮想テープシステム22の途中からの追加書き込み処理にかかる時間の削減について説明する図である。図14(A)は、比較例における、マウント処理と途中からの追加書き込み処理の処理時間を説明する図である。図14(B)は、実施形態にかかる仮想テープシステム2における、マウント処理と途中からの追加書き込み処理の処理時間を説明する図である。尚、図14においては、書き込み対象の仮想ボリューム32のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理、移動処理、及び書き込み処理が実行される場合の例を示している。
比較例では、図14(A)に示すように、マウント処理において書き込み対象の仮想ボリューム32の全てのデータのリコールが行われ、仮想ボリューム32の全てのデータのリコールが完了してから、移動処理が開始される。そして、移動処理の完了後、書き込み処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ34(1)により行われている。
これに対して実施形態においては、図14(B)に示すように、マウント処理において分割ボリューム61、62、64(図14(B)のA、B、C、D、Z)のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム(G)と、移動先の分割ボリュームの次の分割ボリューム(H)がリコールされ、移動処理が行われる。そして移動処理の完了後、書き込み処理が開始される。
以上から実施形態の仮想テープシステム22では、比較例と比べると、マウント処理と、移動系コマンド及び書き込みコマンドに対する処理にかかる時間を削減することができる。
マイグレーション処理部55は、分割ボリュームのマイグレーションを実行する。分割ボリュームのマイグレーションは、書き込み処理部54からの分割ボリュームのマイグレーションの実行要求を、マイグレーション処理部55が受信したタイミングで実行される。
マイグレーション処理において、マイグレーション処理部55は、記憶部26に格納されている分割ボリュームのデータを、テープライブラリ装置24のテープカートリッジに生成された物理ボリューム35に格納する。マイグレーション処理に先立ち、物理ボリューム35は予め、テープライブラリ装置24の物理ドライブ34と同数分生成される。これらの物理ボリューム35は物理ドライブ34に1対1で対応しており、各物理ボリューム35は、各々対応する物理ドライブ34によりデータの読み書きが行われるものである。このようにマイグレーション先の物理ボリューム35が、テープライブラリ装置24の物理ドライブ34と1対1で対応することにより、マイグレーションまたはリコールにおいて、物理ボリューム35に対するデータのアクセスを並行して行うことができる。
マイグレーション処理部55は、各分割ボリュームをマイグレーションする際に、マイグレーションに使用する物理ドライブ34をローテーションさせる。例えば、物理ドライブ34が1〜N個存在するテープライブラリ装置24においては、マイグレーション処理部55は、物理ドライブ34(1)がマイグレーションで使用されたら、次は、物理ドライブ34(2)が使用されるように制御する。そして、順番に物理ドライブ34(3)、(4)、・・・と使用され、物理ドライブ34(N)が使用されたら、次は再度、物理ドライブ34(1)が使用されるようにマイグレーション処理部55は制御する。尚、複数の物理ドライブ34による各物理ボリューム35への書き込み処理は、並行して行うことができる。
このように、物理ボリューム35と物理ドライブ34とを1対1で対応付けて、分割ボリュームのデータを順番に各物理ボリューム35に格納することで、1つの仮想ボリューム32に対応する複数の分割ボリュームの読み書きを最大限に並列化することができる。また、各分割ボリュームのサイズを均一にすることで、分割ボリューム毎のマイグレーション性能のばらつきを抑えることができ、特定の分割ボリュームの読み書きがボトルネックとなることを防ぐことができる。
読み出し処理部56は、ホスト装置21からの読み出し命令を受信して、読み出し対象の仮想ボリューム32から、読み出し対象のデータを読み出して、ホスト装置21へ送信する処理を行う。読み出し処理部56による読み出し処理は、マウント処理部52によるマウント処理が完了してから実行される。
読み出し命令は、2つに分類される。すなわち、仮想ボリューム32の先頭からの読み出し命令と、仮想ボリューム32の途中からの読み出し命令である。仮想ボリューム32の途中からの読み出し命令は、移動系コマンドの実行後に処理される読み出し命令である。
仮想ボリューム32の先頭からの読み出し処理は、読み出し対象ボリュームのうち、少なくとも最初と最後の所定の分割ボリュームが記憶部26に存在する状態から開始される。これは、読み出し処理の前に実行されるマウント処理によるものである。尚、仮想ボリューム32が1つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部26に存在する状態から開始される。
読み出し処理部56は、先ず、記憶部26に既に格納されている最初の分割ボリューム61のデータの読み出しを開始して、ホスト装置21へ送信する。オフキャッシュされている分割ボリュームが存在する場合は、記憶部26からのデータの読み出し及びホスト装置21への送信を開始するとともに、読み出し処理部56は、オフキャッシュされている分割ボリュームを物理ボリューム35から並行してリコールする。リコールは、オフキャッシュされている分割ボリュームのうち、先頭に位置する分割ボリュームから順に行われる。読み出し処理部56は、リコールを行いつつ、リコールが完了した分割ボリュームのデータを、順次記憶部26から読み出してホスト装置21へ送信する。すなわち、リコールのプロセスと、記憶部26からのデータの読み出し及び送信のプロセスと、が並行して実行される。記憶部26からのデータの読み出しが、リコールよりも速く進行した場合、記憶部26からのデータの読み出し処理において、読み出し対象のデータが記憶部26に存在しない場合が発生する。この場合は、読み出し処理部56は、ホスト装置21に対して、読み出しコマンドのリトライ要求を送信する。
ここで、実施形態に係る仮想テープシステム22の先頭からの読み出し処理にかかる時間の削減について説明する。図15は、実施形態に係る仮想テープシステム22の先頭からの読み出し処理にかかる時間の削減について説明する図である。図15(A)は、比較例のマウント処理と先頭からの読み出し処理の処理時間を説明する図である。図15(B)は、実施形態にかかる仮想テープシステム22のマウント処理と先頭からの読み出し処理の処理時間を説明する図である。尚、図15においては、読み出し対象の仮想ボリューム32のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理と読み出し処理が実行される場合の例を示している。
比較例では、図15(A)に示すように、マウント処理において読み出し対象の仮想ボリューム32の全てのデータのリコールが行われ、仮想ボリューム32の全てのデータのリコールが完了してから、読み出し処理が開始される。また、比較例におけるリコール処理は単一の物理ドライブ34(1)により行われている。
これに対して実施形態の仮想テープシステム22においては、図15(B)に示すように、マウント処理において分割ボリューム61、62、64(図15(B)のA、B、C、D、Z)のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、読み出し処理が開始される。そして、読み出し処理と並行して、未だリコールが行われていない分割ボリュームがリコールされる。このリコール処理では、複数の物理ドライブ34が並行して分割ボリュームをリコールする。以上から実施形態の仮想テープシステム22では、比較例と比べると、マウント処理と読み出しコマンドに対する処理にかかる時間を削減することができる。
仮想ボリューム32の途中からの読み出し処理は、移動系コマンドの処理完了後に開始される。よって、対象ボリュームのうち、少なくとも、移動先のブロックを含む分割ボリュームと、その分割ボリューム以降の所定の数の分割ボリュームが記憶部26に存在する状態から読み出し処理が開始される。尚、仮想ボリューム32が1つの分割ボリュームに収まる場合には、その分割ボリュームが記憶部26に存在する状態から開始される。
読み出し処理部56は、先ず、記憶部26に展開済みの移動後の分割ボリュームLV’mからデータの読み出しを開始して、ホスト装置21へ送信する。分割ボリュームLV’m以降の分割ボリュームのうちでオフキャッシュされている分割ボリュームが存在する場合、読み出し処理部56は、記憶部26からのデータの読み出し及びホスト装置21への送信を開始するとともに、並行して以下の処理を行う。すなわち読み出し処理部56は、分割ボリュームLV’m以降の分割ボリュームのうち、オフキャッシュされている1以上の分割ボリュームを物理ボリューム35からリコールする。このリコールは、リコール対象の分割ボリュームのうち、先頭に位置する分割ボリュームから順に行われる。読み出し処理部56は、リコールを行いつつ、リコールにより展開した分割ボリュームのデータを、順次記憶部26から読み出してホスト装置21へ送信する。すなわち、リコールのプロセスと、記憶部26からのデータの読み出し及び送信のプロセスと、が並行して実行される。記憶部26からのデータの読み出しが、リコールよりも速く進行した場合、記憶部26からのデータの読み出し処理において、読み出し対象のデータが記憶部26に存在しない場合が発生する。この場合は、読み出し処理部56は、ホスト装置21に対して、読み出しコマンドのリトライ要求を送信する。
ここで、実施形態に係る仮想テープシステム22の途中からの読み出し処理にかかる時間の削減について説明する。図16は、実施形態に係る仮想テープシステム22の途中からの読み出し処理にかかる時間の削減について説明する図である。図16(A)は、比較例における、マウント処理と途中からの読み出し処理の処理時間を説明する図である。図16(B)は、実施形態にかかる仮想テープシステム22のマウント処理と途中からの読み出し処理の処理時間を説明する図である。尚、図16においては、読み出し対象の仮想ボリューム32のいずれの分割ボリュームもオフキャッシュされている状態から、マウント処理、移動処理、及び読み出し処理が実行される場合の例を示している。
比較例では、図16(A)に示すように、マウント処理により読み出し対象の仮想ボリューム32の全てのデータのリコールが完了してから、移動系コマンドが実行され、その後に、読み出し処理が開始される。比較例におけるリコール処理は単一の物理ドライブ34(1)により行われている。
これに対して実施形態においては、図16(B)に示すように、マウント処理において分割ボリューム61、62、64(図15(B)のA、B、C、D、Z)のデータのリコールが最初に行われる。そして、これらの分割ボリュームのリコールが完了した時点で、移動系コマンドが実行される。移動系コマンドの実行においては、移動先の分割ボリューム(G)と、移動先の分割ボリュームの次の分割ボリューム(H)がリコールされ、移動処理が行われる。そして移動処理の完了後、読み出し処理が開始される。また、読み出し処理と並行して、未だリコールが行われていない分割ボリューム(I、J、・・・)がリコールされる。このリコール処理では、複数の物理ドライブ34が並行して分割ボリュームをリコールする。以上から実施形態の仮想テープシステム22では、比較例と比べると、マウント処理と、移動系コマンド及び読み出しコマンドに対する処理にかかる時間を削減することができる。
オフキャッシュ処理部57は、オフキャッシュ処理の実行要求を受信し、この実行要求に応じて、分割ボリューム単位でオフキャッシュを行う。オフキャッシュ処理の実行要求には、オフキャッシュの結果、記憶部26に確保したい空き容量を示す空き指定情報が含まれる。このとき、オフキャッシュ処理部57は、オフキャッシュする分割ボリュームの順番を制御する。複数の分割ボリュームのそれぞれにオフキャッシュ優先度が設定され、このオフキャッシュ優先度に基づいて、分割ボリュームがオフキャッシュされる順番が制御される。
先ず、1つの仮想ボリューム32の分割ボリュームをオフキャッシュする場合の動作について説明する。この場合、オフキャッシュ優先度は、分割ボリュームのそれぞれに対して、以下のように設定される。すなわち、図11に示したように分割ボリュームを4つのタイプに分類した場合、オフキャッシュ優先度は、分割ボリューム63>64>62>61の順に高くなるように割り当てられる。そしてこのように割り当てられた優先度に基づいて、オフキャッシュ処理部57は順番に、十分な空き容量が確保できるまで、分割ボリュームを記憶部26から削除する。
具体的にはオフキャッシュ処理部57は先ず、オフキャッシュ対象の仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム63をオフキャッシュし、空き容量の確認を行う。そしてオフキャッシュ処理部57は、分割ボリューム63をオフキャッシュしても記憶部26の空き領域が足りなかった場合は、分割ボリューム64、分割ボリューム62、分割ボリューム61の順でオフキャッシュと空き容量の確認を順次行う。尚、空き容量の確認において十分な空き容量が確保できた時点で、オフキャッシュ処理部57はそれ以上のオフキャッシュは行わない。また、空き容量の確認では、記憶部26の空き領域が、空き指定情報により示される容量以上であるか否かが判定される。
次に、複数の仮想ボリューム32にわたる複数の分割ボリュームをオフキャッシュする場合の動作について説明する。
複数の仮想ボリューム32にわたる複数の分割ボリュームをオフキャッシュする場合には、最後にアクセスされた日時が所定の閾値(以下、優先度の閾値と記す)よりも古い仮想ボリューム32を、先にオフキャッシュの対象とする。そして、これらの古い仮想ボリューム32のオフキャッシュが完了しても未だ空き容量が不足する場合に、最後にアクセスされた日時が優先度の閾値よりも新しい仮想ボリューム32をオフキャッシュの対象とする。尚、優先度の閾値は、オフキャッシュの優先度を設定する上で基準となる日時を示すものであり、仮想テープシステム22の管理者により任意に設定可能な値である。
ここで、最後にアクセスされた日時が所定の閾値よりも古い仮想ボリューム32を古仮想ボリュームと記し、最後にアクセスされた日時が所定の閾値よりも新しい仮想ボリューム32を新仮想ボリュームと記す。古仮想ボリュームと新仮想ボリュームの特定は、LV一覧情報59の「最終アクセス日時」の項目を参照することにより行われる。また、以下の優先度の設定の説明では、説明を簡単にするために、優先度の設定を行う順に優先度が高くなるように設定されるものとして説明する。ただし、結果的に割り当てられる優先度の値の関係が同じになるのであれば、設定の順番は所定の順番で行ってよい。
先ず、オフキャッシュ処理部57は、1又は複数の古仮想ボリュームを対象として、優先度の設定を行う。古仮想ボリュームが1つの場合には、上述した、1つの仮想ボリューム32の分割ボリュームをオフキャッシュする場合の動作と同様に設定される。古仮想ボリュームが複数の場合には、オフキャッシュ処理部57は、複数の古仮想ボリュームの複数の分割ボリュームのうち、各仮想ボリューム32の分割ボリュームのタイプ毎に順にオフキャッシュ優先度を割り当てる。すなわち、先ずオフキャッシュ処理部57は、複数の古仮想ボリュームの複数の分割ボリューム63において、オフキャッシュ優先度を割り当てる。次に、複数の古仮想ボリュームの複数の分割ボリューム64において、同様にオフキャッシュ優先度を割り当て、その後、複数の古仮想ボリュームの複数の分割ボリューム62、61の順でオフキャッシュ優先度を割り当てる。
分割ボリュームのタイプ毎のオフキャッシュ優先度の割り当てにおいては、最後にアクセスされた日時が古い順に、オフキャッシュ優先度が高くなるようにオフキャッシュ処理部57は割り当てを行う。すなわち、先ずオフキャッシュ処理部57は、複数の古仮想ボリュームの複数の分割ボリューム63において、最後にアクセスされた日時が古い分割ボリュームの順に高いオフキャッシュ優先度となるように、オフキャッシュ優先度を割り当てる。そして、オフキャッシュ処理部57は、複数の古仮想ボリュームの複数の分割ボリューム64、62、61のそれぞれにおける優先度の割り当てにおいても、同様にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部57は、複数の分割ボリューム64、62、61の各々について、最後にアクセスされた日時が古い分割ボリュームの順に、高いオフキャッシュ優先度となるように、オフキャッシュ優先度を割り当てる。
図17は、複数の仮想ボリューム32の複数の分割ボリュームをオフキャッシュする場合の動作を説明する図である。図17において、仮想ボリューム32a、32b、32cのそれぞれは、複数の分割ボリュームに分割されており、仮想ボリューム32a、32b、32cの順に最後にアクセスされた日時が古くなっている。また、仮想ボリューム32a、及び32bは、優先度の閾値よりも、最後にアクセスされた日時が古く、仮想ボリューム32cは、優先度の閾値よりも最後にアクセスされた日時が新しいものとする。すなわち、仮想ボリューム32a、及び32bは古仮想ボリュームであり、仮想ボリューム32cは新仮想ボリュームである。
この場合、オフキャッシュ処理部57は、先ず古仮想ボリュームである、仮想ボリューム32a、及び32bの分割ボリューム63のうちで、仮想ボリューム32が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部57は、分割ボリューム63a、63bの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
次にオフキャッシュ処理部57は、仮想ボリューム32a、及び32bの分割ボリューム64のうちで、仮想ボリューム32が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部57は、分割ボリューム64a、64bの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
次にオフキャッシュ処理部57は、仮想ボリューム32a、及び32bの分割ボリューム62のうちで、仮想ボリューム32が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部57は、分割ボリューム62a、62bの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
そしてオフキャッシュ処理部57は、仮想ボリューム32a、及び32bの分割ボリューム61のうちで、仮想ボリューム32が最後にアクセスされた日時が古い順にオフキャッシュ優先度を割り当てる。すなわちオフキャッシュ処理部57は、分割ボリューム61a、61bの順に優先度が高くなるように、オフキャッシュ優先度を割り当てる。
古仮想ボリュームに対する優先度の割り当てが完了したら、次にオフキャッシュ処理部57は、新仮想ボリュームである仮想ボリューム32cに対する優先度の割り当てを行う。すなわちオフキャッシュ処理部57は、仮想ボリューム32cに対する優先度として、分割ボリューム63c>64c>62c>61cの順に優先度が高くなるように割り当てる。
このように優先度を割り当てた結果、図17の()内の数字に示すような順で優先度が割り当てられる。尚、図17において優先度は、1が最も高く、12が最も低いものとする。
優先度を各分割ボリュームに割り当てると、オフキャッシュ処理部57は、リコールのために十分な空き容量が確保できるまで、優先度の順に分割ボリュームを削除していき、容量が確保できた時点で、オフキャッシュの処理を終了する。
図18は、実施形態に係るマウント処理部52のマウント処理の詳細を図解したフローチャートの一例である。
図18において、マウント処理部52は先ず、ホスト装置21からマウント命令を受信する(S101)。
次にマウント処理部52は、管理情報58を参照し、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられているか否かを判定する(S102)。すなわちマウント処理部52は、対象仮想ボリュームが既存の仮想ボリューム32か、新規の仮想ボリューム32かを判定する。尚、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられている場合は、対象仮想ボリュームは既存の仮想ボリュームであり、対応付けられていない場合には、対象仮想ボリュームは新規の仮想ボリュームである。具体的にはマウント処理部52は、管理情報58の「仮想ボリュームID」の値が、マウント対象ボリュームの識別情報と一致するエントリを抽出し、抽出したエントリの「分割ボリュームID」に値が格納されているか否かを判定する。抽出したエントリの「分割ボリュームID」に値が格納されている場合は、マウント処理部52は、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていると判定する。抽出したエントリの「分割ボリュームID」に値が格納されていない場合、または、該当するエントリがない場合は、マウント処理部52は、マウント対象の対象仮想ボリュームと分割ボリュームとは対応付けられていないと判定する。
S102において、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていないと判定した場合(S102でNo)、マウント処理部52は以下の処理を行う。すなわち、マウント処理部52は、プール36から未割り当ての分割ボリュームを選択して、選択した分割ボリュームを対象仮想ボリュームに割り当てる(S103)。
そしてマウント処理部52は、記憶部26の空き容量が、S103で割り当てた分割ボリュームの容量以上か否かを判定する(S104)。この判定処理は、S103で割り当てた分割ボリュームが記憶部26に展開可能か否かを判定する処理である。
記憶部26の空き容量が、S103で割り当てた分割ボリュームの容量未満であると判定した場合(S104でNo)、マウント処理部52は、オフキャッシュ処理部57にオフキャッシュ処理の実行要求を出力する(S105)。オフキャッシュ処理の実行要求を受けたオフキャッシュ処理部57はオフキャッシュ処理を実行する。このオフキャッシュ処理の詳細については、後ほど、図21及び図22を用いて説明する。オフキャッシュ処理の完了通知を受信すると、マウント処理部52は、処理をS106に遷移させる。
S104において、記憶部26の空き容量が、S103で割り当てた分割ボリュームの容量以上であると判定した場合(S104でYes)、マウント処理部52は、S103で割り当てた分割ボリュームを記憶部26に展開する(S106)。すなわちマウント処理部52は、割り当てた分割ボリュームのサイズの空き領域を記憶部26上に確保し、その領域をS103で割り当てた分割ボリュームの領域とする。
そしてマウント処理部52は、マウント処理が完了したと判定して、マウントが完了したことを示すマウント完了通知をホスト装置21へ送信する(S107)。そして、処理は終了する。
S102において、マウント対象の対象仮想ボリュームと分割ボリュームとが対応付けられていると判定した場合(S102でYes)、マウント処理部52は以下の処理を行う。すなわちマウント処理部52は、管理情報58を参照し、対象仮想ボリュームと対応する分割ボリュームのうち、一部の特定の分割ボリュームが、記憶部26に存在する(オンキャッシュ)か否かを判定する(S108)。一部の特定の分割ボリュームとは、上述したように、対象仮想ボリュームに対応する複数の分割ボリュームのうちの、最初の所定の数の分割ボリュームと、最後の分割ボリュームである。より具体的には、一部の特定の分割ボリュームとは、分割ボリューム61、62、及び64である。この判定処理において、具体的にはマウント処理部52は、管理情報58の「オンキャッシュフラグ」を参照して、各分割ボリュームが記憶部26に存在するか否かを判定する。一部の特定の分割ボリュームが記憶部26に存在すると判定した場合(S108でYes)、マウント処理部52は、処理をS107に遷移させる。
S108において、一部の特定の分割ボリュームのいずれかが記憶部26に存在しないと判定した場合(S108でNo)、マウント処理部52は一部の特定の分割ボリュームのうち、記憶部26に存在しない分割ボリュームのリコール処理1を実行する(S109)。リコール処理1の詳細については、後ほど図24を用いて説明する。リコール処理1が完了すると、マウント処理部52は、処理をS107に遷移させる。
図19は、実施形態に係る書き込み処理部54の書き込み処理の詳細を図解したフローチャートの一例である。
図19において、書き込み処理部54は先ず、ホスト装置21からコマンドを受信する(S201)。次に書き込み処理部54は、受信したコマンドが書き込みコマンドか否かを判定する(S202)。受信したコマンドが書き込みコマンドでないと判定された場合(S202でNo)、処理は終了する。
一方、受信したコマンドが書き込みコマンドであると判定した場合(S202でYes)、書き込み処理部54は以下の処理を行う。すなわち書き込み処理部54は、先ず、現在(S203を実行する時点)において、仮想ドライブ31の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームについて、対象仮想ボリュームとの対応付けを外す(S203)。具体的には書き込み処理部54は、管理情報58において、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームのエントリを全て抽出する。そして書き込み処理部54は、抽出したエントリを削除する。次に書き込み処理部54は、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームを初期化して、プール36に戻す。すなわち、対象仮想ボリュームに対応する分割ボリュームであって、現在の書き込み位置のデータが含まれる分割ボリュームより後ろの分割ボリュームは、未割り当てボリュームとして扱われることとなる。尚、初期化処理には、例えば、分割ボリュームのデータを削除する処理、または、記憶部26から削除する処理が含まれてもよい。
次に、書き込み処理部54は、現在(S204を実行する時点)において仮想ドライブ31の書き込み位置のデータが含まれる分割ボリュームに対して、書き込み対象データの書き込みを開始する(S204)。ここで、以下の図19を参照した説明においては、書込みが行われている対象の分割ボリュームを対象分割ボリュームと記す。
S204において対象分割ボリュームに対する書き込みが開始されると、書き込み処理部54は、対象分割ボリュームに対して書き込んだ書き込み対象データのデータ量が、対象分割ボリュームの容量を超えたか否かの判定を開始する(S205)。
対象分割ボリュームに対して書き込んだデータ量が、対象分割ボリュームの容量を超えたと判定した場合(S205でYes)、書き込み処理部54は、S204で開始した対象分割ボリュームへの書き込みを停止し、管理情報58を更新する(S206)。管理情報58の更新では、書き込み処理部54は、対象分割ボリュームに書き込んだデータに関する情報と、分割ボリュームの識別情報とを対応付けて管理情報58に記録する。具体的には書き込み処理部54は、管理情報58の「分割ボリュームID」が対象分割ボリュームの識別情報と一致するエントリを抽出する。そして書き込み処理部54は、抽出したエントリの「開始ブロック番号」、「終了ブロック番号」、及び「テープマーク数」に、S204の書き込みにより書き込んだデータの情報をそれぞれ格納する。
次に、書き込み処理部54は、記憶部26から対象分割ボリュームの領域をアンマウントする(S207)。そして書き込み処理部54は、S207でアンマウントした対象分割ボリュームのマイグレーション処理の実行要求をマイグレーション処理部55へ出力する(S208)。マイグレーション処理部55によるマイグレーション処理の詳細については、後ほど図20を参照して説明する。
次に、書き込み処理部54は、次に書き込み対象データを書き込む新規分割ボリュームの展開処理を行う(S209)。新規分割ボリュームの展開処理は、具体的には、図18のS103〜S106までの処理と同様の処理となる。そして書き込み処理部54は、処理をS204に遷移させ、S209で展開した新規分割ボリュームに対して、書き込み対象データの書込みが完了したブロックの次のブロックから書き込みを開始する。
S205において、S204で開始した書込みが完了しても、対象分割ボリュームに対して書き込んだデータの量が、対象分割ボリュームの容量を超えていないと判定した場合(S205でNo)、書き込み処理部54以下の処理を行う。すなわち、書き込み処理部54は、書き込み処理が完了したか否かを判定する(S210)。書き込み処理部54は書き込み処理が完了していないと判定した場合(S210でNo)、書き込み処理部54は、処理をS201に再び遷移させる。一方、書き込み処理が完了したと判定された場合(S210でYes)、処理は終了する。
図20は、実施形態に係るマイグレーション処理部55のマイグレーション処理の詳細を図解したフローチャートの一例である。
図20において、マイグレーション処理部55は、マイグレーション処理の開始前に初期化処理として、マイグレーション処理で使用する一時変数の値を設定する(S301)。具体的にはマイグレーション処理部55は、変数Nに物理ドライブ34の数を設定し、変数nに0を設定する。そしてマイグレーション処理部55は、物理ドライブ34数分の物理ボリューム35を選択する(S302)。ここで選択される物理ボリューム35の組合せは、各物理ドライブ34に1対1で対応するものとする。
次に、マイグレーション処理部55は、書き込み処理部54から、分割ボリュームのマイグレーション処理の実行要求を受信したか否かを判定する(S303)。すなわち、マイグレーション処理部55は、書き込み処理部54からのマイグレーション処理の実行要求を受信したか否かを監視する。
分割ボリュームのマイグレーション処理の実行要求を受信したと判定した場合(S303でYes)、マイグレーション処理部55は、マイグレーション対象の分割ボリュームを、物理ボリューム35(n)に書き込む(S304)。ここで物理ボリューム35(n)は、複数の物理ドライブのうちの、n番目の物理ドライブにより書込みが行われる物理ボリュームである。
次にマイグレーション処理部55は、変数nをインクリメント(+1)し(S305)、nが(N−1)より大きいか否かを判定する(S306)。nが(N−1)以下であると判定した場合(S306でNo)、マイグレーション処理部55は、処理をS303に再び遷移させる。一方、nが(N−1)より大きいと判定した場合(S306でYes)、マイグレーション処理部55は、nに0を代入し(S307)、処理をS303に再び遷移させる。
S303において、分割ボリュームのマイグレーション処理の実行要求を受信しないと判定された場合(S303でNo)、処理は終了する。
図21は、実施形態に係るオフキャッシュ処理部57のオフキャッシュ処理の詳細を図解したフローチャート(前半)の一例である。図22は、実施形態に係るオフキャッシュ処理部57のオフキャッシュ処理の詳細を図解したフローチャート(後半)の一例である。
オフキャッシュ処理部57は、オフキャッシュ処理の実行要求を受信したタイミングで図21のフローで説明するオフキャッシュ処理を実行する。オフキャッシュ処理の実行要求には、オフキャッシュした結果、記憶部26に確保したい空き容量を示す空き指定情報を含むものとする。
図21において、オフキャッシュ処理部57は先ず、LV一覧情報59の「最終アクセス日時」を参照して、最後にアクセスされた日時が優先度の閾値より古い仮想ボリュームであって、オンキャッシュの仮想ボリュームが存在するか否かを判定する(S401)。具体的にはオフキャッシュ処理部57は先ず、LV一覧情報59の「最終アクセス日時」を参照して、最後にアクセスされた日時が優先度の閾値より古いエントリを抽出する。そして、オフキャッシュ処理部57は、抽出したエントリのうち、「オンキャッシュフラグ」が「True」であるエントリが存在するか否かを判定する。
最後にアクセスされた日時が優先度の閾値より古い仮想ボリュームが記憶部に存在すると判定した場合(S401でYes)、オフキャッシュ処理部57は、古仮想ボリュームの一覧を作成する(S402)。具体的には、オフキャッシュ処理部57は先ず、LV一覧情報59の「最終アクセス日時」が、優先度の閾値よりも古いエントリを全て抽出する。そしてオフキャッシュ処理部57は、抽出したエントリのうち、「オンキャッシュフラグ」が「True」であるエントリの「仮想ボリュームID」をまとめて、古い仮想ボリューム32の一覧を作成する。そしてオフキャッシュ処理部57は処理をS404に遷移させる。
一方、S401において、最後にアクセスされた日時が優先度の閾値より古い仮想ボリューム32が記憶部に存在しないと判定した場合(S401でNo)、オフキャッシュ処理部57は、新しい仮想ボリューム32の一覧を作成する(S403)。具体的には、オフキャッシュ処理部57は先ず、LV一覧情報59の「最終アクセス日時」が、優先度の閾値よりも新しいエントリを全て抽出する。そしてオフキャッシュ処理部57は、抽出したエントリのうち「オンキャッシュメモリ」の値が「True」でエントリの「ボリュームID」をまとめて、新しい仮想ボリューム32の一覧を作成する。そしてオフキャッシュ処理部57は処理をS404に遷移させる。
S404では、オフキャッシュ処理部57は、S402またはS403で作成した一覧において、最後にアクセスされた日時が最も古い仮想ボリューム32が、分割ボリュームと1対1で対応付けられているか否かを判定する(S404)。この処理はすなわち、最後にアクセスされた日時が最も古い仮想ボリューム32のサイズが小容量であるために分割が行われていないかどうかを確認する処理である。一覧のうちで最も古い仮想ボリューム32と分割ボリュームとの対応付けが1対1であると判定した場合(S404でYes)、オフキャッシュ処理部57は、その分割ボリュームをオフキャッシュする(S405)。またオフキャッシュ処理部57は、オフキャッシュした分割ボリュームに対応する管理情報58の「オンキャッシュフラグ」の値を「False」に設定する。さらにオフキャッシュ処理部57は、オフキャッシュした分割ボリュームに対応する仮想ボリュームについて、LV一覧情報59の「オンキャッシュフラグ」の値を「False」に設定する。そして、オフキャッシュ処理部57は処理をS410に遷移させる。
一方、一覧のうち最も古い仮想ボリューム32と分割ボリュームとの対応付けが1対1でないと判定した場合(S404でNo)、オフキャッシュ処理部57は以下の処理を行う。すなわちオフキャッシュ処理部57は、一覧から、対応する分割ボリューム63がオンキャッシュである仮想ボリューム32を抽出する(S406)。
次に、オフキャッシュ処理部57は、一覧の仮想ボリューム32のうち、対応する分割ボリューム63がオンキャッシュである仮想ボリューム32が存在するか否かを判定する(S407)。すなわち、オフキャッシュ処理部57は、S406で抽出できた仮想ボリューム32があるか否かを判定する。一覧の仮想ボリューム32のうち、対応する分割ボリューム63がオンキャッシュである仮想ボリューム32が存在しないと判定した場合(S407でNo)、オフキャッシュ処理部57は、処理を図22のS411に遷移させる。
一方、一覧の仮想ボリューム32のうち、対応する分割ボリューム63がオンキャッシュである仮想ボリューム32が存在すると判定した場合(S407でYes)、オフキャッシュ処理部57は以下の処理を行う。すなわちオフキャッシュ処理部57は、S406で抽出した仮想ボリューム32のうち、最もアクセス日時の古い仮想ボリューム32を選択する(S408)。
次に、オフキャッシュ処理部57は、S408で選択した仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム63をオフキャッシュする(S409)。またオフキャッシュ処理部57は、オフキャッシュした分割ボリューム63に対応する管理情報58の「オンキャッシュフラグ」の値を「False」に設定する。
次に、オフキャッシュ処理部57は、記憶部26に十分な空き容量が確保されたか否かを判定する(S410)。具体的にはオフキャッシュ処理部57は、オフキャッシュ処理の実行要求に含まれる、空き指定情報により示される空き容量が、記憶部26に確保されたか否かを判定する。記憶部26に十分な空き容量が確保されたと判定された場合(S410でNo)、処理は終了する。
一方、記憶部26に十分な空き容量が確保されていないと判定した場合(S410でYes)、オフキャッシュ処理部57は、処理をS401に再び遷移させる。
図22のS411において、オフキャッシュ処理部57は、一覧から、対応する分割ボリューム64がオンキャッシュである仮想ボリューム32を抽出する(S411)。
次に、オフキャッシュ処理部57は、一覧の仮想ボリューム32のうち、対応する分割ボリューム64がオンキャッシュである仮想ボリューム32が存在するか否かを判定する(S412)。すなわち、オフキャッシュ処理部57は、S411で抽出できた仮想ボリューム32があるか否かを判定する。一覧の仮想ボリューム32のうち、対応する分割ボリューム64がオンキャッシュである仮想ボリューム32が存在しないと判定した場合(S412でNo)、オフキャッシュ処理部57は、処理をS415に遷移させる。
一方、一覧の仮想ボリューム32のうち、対応する分割ボリューム64がオンキャッシュである仮想ボリューム32が存在すると判定した場合(S412でYes)、オフキャッシュ処理部57は以下の処理を行う。すなわちオフキャッシュ処理部57は、S411で抽出した仮想ボリューム32のうち、最もアクセス日時の古い仮想ボリューム32を選択する(S413)。
次に、オフキャッシュ処理部57は、S413で選択した仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム64をオフキャッシュする(S414)。またオフキャッシュ処理部57は、オフキャッシュした分割ボリューム64に対応する管理情報58の「オンキャッシュフラグ」の値を「False」に設定する。そしてオフキャッシュ処理部57は、処理を図21のS410に遷移させる。
S415において、オフキャッシュ処理部57は、一覧から、対応する分割ボリューム62がオンキャッシュである仮想ボリューム32を抽出する(S415)。
次に、オフキャッシュ処理部57は、一覧の仮想ボリューム32のうち、対応する分割ボリューム62がオンキャッシュである仮想ボリューム32が存在するか否かを判定する(S416)。すなわち、オフキャッシュ処理部57は、S415で抽出できた仮想ボリューム32があるか否かを判定する。一覧の仮想ボリューム32のうち、対応する分割ボリューム62がオンキャッシュである仮想ボリューム32が存在しないと判定した場合(S416でNo)、オフキャッシュ処理部57は、処理をS419に遷移させる。
一方、一覧の仮想ボリューム32のうち、対応する分割ボリューム62がオンキャッシュである仮想ボリューム32が存在すると判定した場合(S416でYes)、オフキャッシュ処理部57は以下の処理を行う。すなわちオフキャッシュ処理部57は、S415で抽出した仮想ボリューム32のうち、最もアクセス日時の古い仮想ボリューム32を選択する(S417)。
次に、オフキャッシュ処理部57は、S417で選択した仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム62をオフキャッシュする(S418)。またオフキャッシュ処理部57は、オフキャッシュした分割ボリューム62に対応する管理情報58の「オンキャッシュフラグ」の値を「False」に設定する。そしてオフキャッシュ処理部57は、処理を図21のS410に遷移させる。
S419において、オフキャッシュ処理部57は、一覧から、対応する分割ボリューム61がオンキャッシュである仮想ボリューム32を抽出する(S419)。
次に、オフキャッシュ処理部57は、一覧の仮想ボリューム32のうち、対応する分割ボリューム61がオンキャッシュである仮想ボリューム32が存在するか否かを判定する(S420)。すなわち、オフキャッシュ処理部57は、S419で抽出できた仮想ボリューム32があるか否かを判定する。一覧の仮想ボリューム32のうち、対応する分割ボリューム61がオンキャッシュである仮想ボリューム32が存在しないと判定した場合(S420でNo)、オフキャッシュ処理部57は、処理を図21のS410に遷移させる。
一方、一覧の仮想ボリューム32のうち、対応する分割ボリューム61がオンキャッシュである仮想ボリューム32が存在すると判定した場合(S420でYes)、オフキャッシュ処理部57は以下の処理を行う。すなわちオフキャッシュ処理部57は、S419で抽出した仮想ボリューム32のうち、最もアクセス日時の古い仮想ボリューム32を選択する(S421)。
次に、オフキャッシュ処理部57は、S421で選択した仮想ボリューム32の複数の分割ボリュームのうち、分割ボリューム61をオフキャッシュする(S422)。またオフキャッシュ処理部57は、オフキャッシュした分割ボリューム61に対応する管理情報58の「オンキャッシュフラグ」の値を「False」に設定する。さらに、オフキャッシュした分割ボリューム61に対応する仮想ボリュームについて、LV一覧情報59のオンキャッシュフラグの値を「False」に設定する。そしてオフキャッシュ処理部57は、処理を図21のS410に遷移させる。
図23は、実施形態に係る読み出し処理部56の読み出し処理の詳細を図解したフローチャートの一例である。
図23において、読み出し処理部56は先ず、ホスト装置21からコマンドを受信する(S501)。次に読み出し処理部56は、受信したコマンドが読み出しコマンドか否かを判定する(S502)。受信したコマンドが読み出しコマンドでないと判定された場合(S502でNo)、処理は終了する。
一方、受信したコマンドが読み出しコマンドであると判定した場合(S502でYes)、読み出し処理部56は、読み出し対象のブロックIDを持つ分割ボリュームがオンキャッシュであるか否かを判定する(S503)。すなわち読み出し処理部56は、現在(S503を実行する時点)において、仮想ドライブ31の読み出し位置のデータが含まれる分割ボリュームがオンキャッシュであるか否かを判定する。読み出し対象のブロックIDを持つ分割ボリュームがオンキャッシュでないと判定した場合(S503でNo)、読み出し処理部56は、処理をS505に遷移させる。
一方、読み出し対象のブロックIDを持つ分割ボリュームがオンキャッシュであると判定した場合(S503でYes)、読み出し処理部56は以下の処理を行う。すなわち読み出し処理部56は、現在(S504を実行する時点)において、記憶部26に格納された、仮想ドライブ31の読み出し位置のブロックから読み出しとホスト装置21への送信を開始する(S504)。図23の以下の説明においては、記憶部26からの読み出し処理中のデータが格納された分割ボリュームを、読み出し中の分割ボリュームと記す。尚、S504で開始された記憶部26からのデータの読み出しは、以降のS505〜S507の処理と並行して実行されるものである。
次に、読み出し処理部56は、読み出し中の分割ボリューム以降の3つの連続する分割ボリュームがオンキャッシュか否かを判定する(S505)。これは、S504で開始された記憶部26からのデータの読み出しが進行するのと並行して、読み出し中の分割ボリューム以降の3つの分割ボリュームがオンキャッシュでなくなったかどうかを監視する処理である。尚、2つの分割ボリュームが「連続する」とは、一方の分割ボリュームの最後のブロック番号と、他方の分割ボリュームの最初のブロック番号が連続することを指す。
S505において、読み出し中の分割ボリューム以降の3つの連続する分割ボリュームがオンキャッシュであると判定した場合(S505でYes)、読み出し処理部56は、処理をS507に遷移させる。
一方、S505において、読み出し中の分割ボリューム以降の3つの連続する分割ボリュームがオンキャッシュでないと判定した場合(S505でNo)、読み出し処理部56は以下の処理を行う。すなわち読み出し処理部56は、読み出し中の分割ボリューム以降の3つの分割ボリュームがオンキャッシュとなるように、リコール処理2を行う(S506)。リコール処理2の詳細は、後ほど図26を参照して説明する。
S505及びS506の処理は、読み出し中の分割ボリュームが後ろに進むにつれて、読み出し中の分割ボリュームより後ろの分割ボリュームを、前もって並行してリコールする処理である。尚、S505、S506における3つの分割ボリュームは、3つに限定されず、所定の数とすることができる。
S507において、読み出し処理部56は、読み出し中の分割ボリュームがオンキャッシュか否かを判定する(S507)。これは、S504で開始された記憶部26からのデータの読み出しが進み、S506で行われるリコールが完了する前に、読み出し対象の分割ボリュームが記憶部26に存在しなくなったかどうかを監視する処理である。読み出し中の分割ボリュームがオンキャッシュでないと判定した場合(S507でNo)、読み出し処理部56は、ホスト装置21に読み出しコマンドのリトライ要求を送信する(S508)。そして読み出し処理部56は、処理をS501に再び遷移させる。一方、読み出し中の分割ボリュームがオンキャッシュであると判定し、読み出し対象の仮想ボリューム32のデータをすべて読み出した場合(S507でYes)、処理は終了する。
図24は、実施形態に係るマウント処理部52によるリコール処理1の詳細を図解したフローチャートである。
図24において、マウント処理部52は先ず、管理情報58に基いて、マウント対象の対象仮想ボリュームが分割されているか否かを判定する(S601)。具体的にはマウント処理部52は、管理情報58を参照して、「仮想ボリュームID」が対象仮想ボリュームの識別情報と一致するエントリが2つ以上存在するか否かを判定する。「仮想ボリュームID」が対象仮想ボリュームの識別情報と一致するエントリが2つ以上存在する場合は、マウント処理部52は、仮想ボリューム32は複数の分割ボリュームに分割されていると判定する。一方、「仮想ボリュームID」が対象仮想ボリュームの識別情報と一致するエントリが1つしか存在しない場合は、マウント処理部52は、仮想ボリューム32は複数の分割ボリュームに分割されていないと判定する。
S601において、マウント対象の対象仮想ボリュームが分割されていないと判定した場合(S601でNo)、マウント処理部52は、マウント対象の仮想ボリューム32をリコールするリコール処理2を実行する(S602)。ここでリコールする仮想ボリューム32は、言い換えると、仮想ボリューム32と1対1で対応する分割ボリュームである。S602のリコール処理2の詳細は、後ほど図26を参照して説明する。そして、処理は終了する。
一方、S601において、マウント対象の対象仮想ボリュームが分割されていると判定した場合(S601でYes)、マウント処理部52は以下の処理を行う。すなわちマウント処理部52は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム61、62、及び64がいずれもオンキャッシュか否かを判定する(S603)。具体的には、マウント処理部52は、管理情報58から、対象仮想ボリュームの分割ボリューム61、62、及び64のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム61、62、及び64のいずれもがオンキャッシュであると判定された場合(S603でYes)、処理は終了する。
一方、分割ボリューム61、62、64のいずれかがオンキャッシュではないと判定した場合(S603でNo)、マウント処理部52は以下の処理を行う。すなわちマウント処理部52は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム61、及び62がいずれもオンキャッシュか否かを判定する(S604)。具体的には、マウント処理部52は、管理情報58から、対象仮想ボリュームの分割ボリューム61、及び62のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム61、及び62がいずれもがオンキャッシュであると判定された場合(S604でYes)、マウント処理部52は、分割ボリューム64をリコールするリコール処理2を実行する(S605)。S605のリコール処理2の詳細は、後ほど図26を参照して説明する。そして、処理は終了する。
一方、分割ボリューム61、62のいずれかがオンキャッシュではないと判定した場合(S604でNo)、マウント処理部52は、対象仮想ボリュームの複数の分割ボリュームのうち、分割ボリューム61がオンキャッシュか否かを判定する(S606)。具体的には、マウント処理部52は、管理情報58から、対象仮想ボリュームの分割ボリューム61のエントリを抽出し、抽出したエントリの「オンキャッシュフラグ」の値がオンキャッシュであることを示しているか否かを判定する。分割ボリューム61がオンキャッシュであると判定された場合(S606でYes)、マウント処理部52は、分割ボリューム62、及び64をリコールするリコール処理2を実行する(S607)。S607のリコール処理2の詳細は、後ほど図26を参照して説明する。そして、処理は終了する。
一方、分割ボリューム61がオンキャッシュではないと判定した場合(S606でNo)、マウント処理部52は、分割ボリューム61、62、及び64をリコールするリコール処理2を実行する(S608)。S608のリコール処理2の詳細は、後ほど図26を参照して説明する。そして、処理は終了する。
図25は、実施形態に係る移動処理部53による移動処理の詳細を図解したフローチャートである。
図25において、移動処理部53は先ず、ホスト装置21からコマンドを受信する(S701)。次に移動処理部53は、受信したコマンドが移動系コマンドか否かを判定する(S702)。受信したコマンドが移動系コマンドでないと判定された場合(S702でNo)、処理は終了する。
一方、受信したコマンドが移動系コマンドであると判定した場合(S702でYes)、移動処理部53は管理情報58を参照して、移動先のデータを含む分割ボリュームを検索する(S703)。具体的には移動処理部53は、移動系コマンドが移動先のブロックIDを含んでいる場合、移動先のブロックIDを含む分割ボリュームを管理情報58から検索する。すなわち移動処理部53は、管理情報58の「仮想ボリュームID」が対象仮想ボリュームの識別情報と一致するエントリを抽出する。そして移動処理部53は、抽出したエントリのうち、移動系コマンドに含まれる移動先のブロックIDのブロックを含む分割ボリュームを、管理情報58の「開始ブロック番号」と「終了ブロック番号」を参照することによって特定する。また、移動系コマンドがテープマーク数を含んでいる場合、移動処理部53は、管理情報58を参照して、指定されたテープマークを持つ分割ボリュームを検索する。すなわち移動処理部53は、管理情報58において、「仮想ボリュームID」が対象仮想ボリュームの識別情報と一致するエントリのうち、移動系コマンドに含まれるテープマーク数をもつ分割ボリュームを、「テープマーク数」を参照することによって特定する。
次に、移動処理部53は、S703で特定した移動先の分割ボリュームがオンキャッシュか否かを判定する(S704)。具体的には移動処理部53は、管理情報58において、移動先の分割ボリュームのエントリの「オンキャッシュフラグ」を参照することにより、移動先の分割ボリュームがオンキャッシュか否かを判定する。移動先の分割ボリュームがオンキャッシュでないと判定した場合(S704でNo)、移動処理部53は、移動先の分割ボリュームをリコールするリコール処理2を実行する(S705)。S705のリコール処理2の詳細は、図26を参照して後ほど説明する。そして移動処理部53は、処理を再びS704に遷移させる。
S704において、移動先の分割ボリュームがオンキャッシュであると判定した場合(S704でYes)、移動処理部53は、移動先の次の分割ボリュームはオンキャッシュか否かを判定する(S706)。具体的には移動処理部53は、管理情報58において、移動先の次の分割ボリュームのエントリの「オンキャッシュフラグ」を参照することにより、移動先の分割ボリュームがオンキャッシュか否かを判定する。移動先の次の分割ボリュームはオンキャッシュでないと判定した場合(S706でNo)、移動処理部53は、移動先の分割ボリュームをリコールするリコール処理2を実行する(S707)。S707のリコール処理2の詳細は、図26を参照して後ほど説明する。そして移動処理部53は、処理を再びS704に遷移させる。
S706において、移動先の次の分割ボリュームはオンキャッシュであると判定した場合(S706でYes)、移動処理部は、移動処理が完了したと判定し、移動処理が完了したことを示す移動完了通知をホスト装置21へ送信する(S708)。そして処理は終了する。
図26は、実施形態に係るリコール処理2の詳細を図解したフローチャートである。このリコール処理は、図23のフローのS506、図24のフローのS602、S605、S607、S608、図25のフローのS705、S707において呼び出される処理である。ここでは、図24の処理においてマウント処理部52により各ステップが実行される場合の動作を説明するが、図23の処理における読み出し処理部56、図25の処理における移動処理部53による動作も同様である。
図26において、先ずマウント処理部52は、記憶部26の空き容量がリコール対象の分割ボリュームの容量以上か否かを判定する(S801)。記憶部26の空き容量がリコール対象の分割ボリュームの容量以上であると判定した場合(S801でYes)、マウント処理部52は、処理をS803に遷移させる。
一方、記憶部26の空き容量がリコール対象の分割ボリュームの容量未満であると判定した場合(S801でNo)、マウント処理部52は、オフキャッシュ処理の実行要求をオフキャッシュ処理部57へ出力する(S802)。オフキャッシュ処理の詳細は、図21及び図22を参照して説明した処理である。尚、マウント処理部52は、オフキャッシュ処理の実行要求には、リコール対象の分割ボリュームの容量を含ませる。そしてマウント処理部52は処理をS803に遷移させる。
S803において、マウント処理部52は、リコール対象の分割ボリュームが格納された各物理ボリューム35を物理ドライブ34にマウントするように制御する(S803)。具体的には、マウント処理部52は、テープライブラリ装置24の物理ドライブ34に、リコール対象の分割ボリュームが格納された各物理ボリューム35をマウントするように指示する。
次に、マウント処理部52は、S803でマウントした各物理ボリューム35から、リコール対象の分割ボリュームのデータを読み出して、記憶部26に格納するリコール処理を行う(S804)。またマウント処理部52は、リコールした分割ボリュームについて、管理情報58の「オンキャッシュフラグ」の値を「True」に設定する。またマウント処理部52は、リコールした分割ボリュームに対応する仮想ボリュームについて、LV一覧情報59の「オンキャッシュフラグ」の値が「False」の場合には、「True」に設定する。そして処理は終了する。
次に、仮想テープ装置23の制御部25のハードウェア構成の一例を説明する。図27は、実施形態に係る制御部25のハードウェア構成の一例を示す。
図27において、制御部25は、CPU(Central Processing Unit)71、メモリ72、記憶装置73、読取装置74、及び通信インターフェース75を含む。CPU71、メモリ72、記憶装置73、読取装置74、及び通信インターフェース75はバスを介して接続される。
CPU71は、メモリ72を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、マウント処理部52、移動処理部53、書き込み処理部54、マイグレーション処理部55の一部または全部の機能を提供する。またCPU71は同様に、読み出し処理部56、及びオフキャッシュ処理部57の一部または全部の機能を提供する。
メモリ72は、例えば半導体メモリであり、RAM(Random Access Memory)領域およびROM(Read Only Memory)領域を含んで構成される。記憶装置73は、例えばハードディスクである。なお、記憶装置73は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置73は、外部記録装置であってもよい。記憶装置73は管理情報格納部51の一部または全部の機能を提供する。
読取装置74は、CPU71の指示に従って着脱可能記憶媒体80にアクセスする。着脱可能記憶媒体80は、たとえば、半導体デバイス(USBメモリ等)、磁気的作用により情報が入出力される媒体(磁気ディスク等)、光学的作用により情報が入出力される媒体(CD−ROM、DVD等)などにより実現される。尚、読取装置74は制御部25に含まれなくてもよい。
通信インターフェース75は、CPU71の指示に従ってネットワークを介して、ホスト装置21及びテープライブラリ装置24と通信する。また、記憶装置81とネットワーク又はバスを介して通信する。
実施形態のプログラムは、例えば、下記の形態で制御部25に提供される。
(1)記憶装置73に予めインストールされている。
(2)着脱可能記憶媒体80により提供される。
(3)プログラムサーバ(図示せず)から通信インターフェース75を介して提供される。
記憶装置81は、例えばハードディスク、または、ディスクアレイ装置等のストレージ装置である。なお、記憶装置81は、フラッシュメモリ等の半導体メモリであってもよい。記憶装置81は記憶部26の一部または全部の機能を提供する。
さらに、実施形態の制御部25の一部は、ハードウェアで実現してもよい。或いは、実施形態の制御部25は、ソフトウェアおよびハードウェアの組み合わせで実現してもよい。
尚、本実施形態は、以上に述べた実施の形態に限定されるものではなく、本実施形態の要旨を逸脱しない範囲内で種々の構成または実施形態を取ることができる。
上記実施形態に関し、更に以下の付記を開示する。
(付記1)
情報処理装置からの第1要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納する格納制御部と、
前記情報処理装置からの第2要求に応じて、前記記憶部に格納された該分割データにアクセスを行うアクセス制御部と、
を備えることを特徴とする媒体制御装置。
(付記2)
媒体制御装置は、さらに、
前記一組のデータと前記複数の分割データとを対応付けた情報を登録する管理情報を記憶する管理情報格納部
を備え、
前記格納制御部は、前記管理情報に基づいて、前記複数の記録媒体から前記複数の分割データのうちのいずれかの分割データを読み出して前記記憶部に格納する
ことを特徴とする付記1に記載の媒体制御装置。
(付記3)
前記格納制御部は、前記情報処理装置から書込み要求を受信した場合、前記情報処理装置から受信した書込み対象データを分割して複数の分割データを生成し、前記書き込み対象データと、前記複数の分割データとを対応づけた情報を前記管理情報に登録し、前記複数の分割データの各々を、前記複数の記録媒体に並列に格納する
ことを特徴とする付記2に記載の媒体制御装置。
(付記4)
前記第2要求は、前記一組のデータの先頭からの上書き要求であり、
前記格納制御部は、前記第1要求に応じて、前記複数の記録媒体のうち目的の記憶媒体から、前記一組のデータの先頭ブロックを含む分割データを読み出して前記記憶部に格納し、
前記アクセス制御部は、前記第2要求に応じて、前記記憶部において前記一組のデータの先頭ブロックを含む分割データが格納された領域に対して、上書き処理を行う
ことを特徴とする付記1〜3のうちいずれか1項に記載の媒体制御装置。
(付記5)
前記第2要求は、前記一組のデータの先頭からの読み出し要求であり、
前記格納制御部は、前記第1要求に応じて、前記複数の記録媒体のうち目的の記憶媒体から、前記一組のデータの先頭ブロックを含む分割データを読み出して前記記憶部に格納し、
前記アクセス制御部は、前記読み出し要求に応じて、前記記憶部に格納された前記一組のデータの先頭ブロックを含む分割データの先頭ブロックからデータを読み出して、前記情報処理装置へ送信し、
前記格納制御部は、前記読み出し要求に応じて、前記アクセス制御部が最初に前記記憶部から読み出すデータを含む分割データの次の分割データ以降の分割データを、順次、前記複数の記録媒体から読み出して、前記記憶部に格納する
ことを特徴とする付記1〜4のうちいずれか1項に記載の媒体制御装置。
(付記6)
前記管理情報は、さらに、前記分割データが格納される物理又は仮想媒体上における位置を示すための制御情報を含み、
前記第2要求は、前記データが格納される物理又は仮想媒体上におけるアクセス位置を示す情報を含むアクセス要求であり、
前記格納制御部は、前記情報処理装置から前記アクセス要求を受信した場合、前記制御情報に基づいて、前記アクセス位置に格納されたデータを含む分割データを、前記記録媒体から読み出して、前記記憶部に格納する
ことを特徴とする付記1〜5のうちいずれか1項に記載の媒体制御装置。
(付記7)
前記格納制御部は、前記記憶部に前記分割データを格納可能な空き領域が存在しない場合、前記記憶部に格納されている前記複数の前記分割データのうち、前記一組のデータの先頭ブロックを含む分割データと、前記一組のデータの最後端のブロックを含む分割データと、の間に位置する分割データから順次、前記記憶部が前記分割データを格納可能となるまで前記記憶部から削除する
ことを特徴とする付記1〜6のうちいずれか1項に記載の媒体制御装置。
(付記8)
情報処理装置からの第1要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納し、
前記情報処理装置からの第2要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
ことを特徴とする制御方法。
(付記9)
コンピュータに、
情報処理装置からの第1要求に応じて、一組のデータが分割された複数の分割データがそれぞれ記憶される複数の記録媒体のうち目的の記憶媒体から前記複数の分割データのうちいずれかの分割データを読み出して記憶部に格納し、
前記情報処理装置からの第2要求に応じて、前記記憶部に格納された該分割データにアクセスを行う
処理を実行させることを特徴とする制御プログラム。