本発明を実施する形態について、図面とともに説明する。
図1は、磁気ディスク記憶装置を含むシステム1を示す図である。図1に示すように、システム1は、制御装置100、磁気ディスク記憶装置105および106、情報処理装置107を備える。
制御装置100は、CPU(Central Processing Unit)101と、メモリ102、記憶装置側アダプタ103、記憶装置側アダプタ103、情報処理装置側アダプタ104、を備え、それぞれはバスによって相互に通信可能に接続される。
CPU101は、制御装置100が実行する演算処理等を実行する。メモリ102は、CPU101が実行する演算処理に用いられる情報を記憶する。また、メモリ102には、CPU101が実行するプログラムがロードされることとしても良い。
制御装置100は、記憶装置側アダプタ103を介して磁気ディスク記憶装置105、106に接続され、処理装置側アダプタ104を介して記憶装置を利用する情報処理装置107に接続される。記憶装置側アダプタ103と磁気ディスク記憶装置105、106との接続には、例えばSCSI(Small Computer System Interface)を用いることが可能である。尚、図1では、制御装置100に磁気ディスク記憶装置105、106の2台が接続されているが、磁気ディスクドライブの台数は適宜変更可能である。
磁気ディスク記憶装置105、106は、SCSI規格でデータ通信可能な磁気ディスク記憶装置であり、セクタ1つあたりに記憶可能なデータ長は520バイト(512バイトの記憶領域+8バイトの冗長領域)である。
制御装置100は、記憶装置側アダプタ103を介して磁気ディスク記憶装置105、106に接続され、処理装置側アダプタ104を介して情報処理装置107に接続される。記憶装置側アダプタ103は、例えばSCSI(Small Computer System Interface)を用いて磁気ディスク記憶装置105、106と接続されてもよい。尚、図1では、制御装置100に磁気ディスク記憶装置105、106の2台が接続されているが、磁気ディスク記憶装置の台数は適宜変更してもよい。また、処理装置側アダプタ104は、例えばファイバーチャネル(Fibre Channel)やSAN(Storage Area Network)を介して情報処理装置107と接続されてもよい。
情報処理装置107は、例えば、磁気ディスク記憶装置105、106に記憶されたデータを処理するサーバ装置や、PC(Personal Computer)であってもよい。
図2は、制御装置100の機能的構成を示すブロック図である。制御装置100は、変換部201、番号比較部202、トラックデータ長算出部203、ゾーン数決定部204、ブロックデータ長決定部205、データ領域算出部206、分割指示部207、記憶部208を備える。記憶部208は、番号情報記憶部209と、トラック情報記憶部210と、ゾーン情報記憶部211とを有する。
変換部201は、LBAに対して物理アドレス変換コマンドを発行し、そのLBAが割り振られたセクタのヘッド番号、トラック番号を取得する。ここで、物理アドレス変換コマンドとは、セクタに割り当てられたLBAから、セクタのヘッド番号と、トラック番号とを特定するコマンドである。尚、磁気ディスク記憶装置105、106は、物理アドレス変換コマンドに基づく処理を実行し、処理結果を制御装置に100に送信することが可能な記憶装置であるものとする。
番号比較部202は、後述する番号情報記憶部209に記憶されたヘッド番号、トラック番号と、変換部201が取得したヘッド番号、トラック番号とが同一であるかを判定する。また、番号比較部202は、必要に応じてヘッド番号、トラック番号を、番号情報記憶部209に記憶する。
トラックデータ長算出部203は、記憶部208に記憶された、セクタのヘッド番号、トラック番号の情報に基づいて、磁気ディスク記憶装置105、106が有するプラッタのトラックのデータ長を算出する。またトラックデータ長算出部203は、算出したトラックのデータ長をトラック情報記憶部210に記憶する。
ゾーン決定部204は、トラックデータ長算出部203により算出されたトラックのデータ長を用いて、後述するゾーンの数を決定し、ゾーンを識別するためのゾーン番号を各ゾーンに割り当てる。またゾーン数決定部204は、必要に応じて算出した番号を、ゾーン情報記憶部211に記憶する。
ブロックデータ長決定部205は、トラックデータ長算出部203により算出されたトラックのデータ長を用いて、ゾーン決定部204により決定された各ゾーンのブロックのデータ長を決定する。またブロックデータ長決定部205は、決定したブロックのデータ長と、そのデータ長のブロックを有するゾーンの番号とを関連付けて記憶部208に記憶させる。
データ領域算出部206は、ゾーン決定部204によって決定されたゾーン数およびゾーン番号を用いて、磁気ディスク記憶装置105および106それぞれのデータ領域全体に対して、各ゾーンが占めるデータ領域の割合を算出する。また、データ領域算出部206は、算出された各ゾーンのデータ領域の割合を記憶部208に記憶させる。
分割指示部207は、記憶部208に記憶された情報に基づいて、制御装置100に接続された磁気ディスク記憶装置105および106のデータ領域の分割を行う。
図2に示す変換部201、番号比較部202、トラックデータ長算出部203、ゾーン数決定部204、ブロックデータ長決定部205、データ領域算出部206、分割指示部207は、例えば、図1に示す制御装置100が有するCPU101がメモリ102に記憶されたプログラムを実行することによって実現されても良い。
記憶部208は、前述した各機能部により生成、参照される情報を記憶する。記憶部208は、番号情報記憶部209、トラック情報記憶部210、ゾーン情報記憶部211を有する。
番号情報記憶部209は、変換部201により取得されたプラッタのセクタと、そのセクタのヘッド番号、トラック番号とを関連付けて記憶する。
トラック情報記憶部210は、トラックデータ長算出部203により算出されたトラックのデータ長を記憶する。
ゾーン情報記憶部211は、ゾーン決定部204により決定されたゾーン数を記憶する。また、ゾーン決定部204により決定されたゾーン番号と、ブロックデータ長決定部205により決定された各ゾーンの1ブロックあたりのデータ長と、データ領域算出部206により決定された磁気ディスク記憶装置105および106のデータ領域全体に対する各ゾーンのデータ領域の割合とを関連付けて記憶する。
記憶部208は、例えば、図1に示す制御装置100が有するメモリ102であってもよい。
〔トラックのデータ長取得手順〕
磁気ディスク記憶装置105、106に関するヘッド番号とトラック番号について説明する。ヘッド番号は、プラッタにデータを読み書きするための磁気ヘッドを特定するために、磁気ディスク記憶装置が有する磁気ヘッドそれぞれに割り振られる番号である。本実施態様の磁気ディスク記憶装置105、106は、両面にデータを記憶可能なプラッタを有し、プラッタの記録面1つに対して、1つの磁気ヘッドを有する。したがって、例えば、異なるヘッド番号によってデータの読み書きがされる各セクタは、異なるプラッタの記録面に属することとなる。
トラック番号は、プラッタのトラックそれぞれを識別するために、トラックに割り振られる番号である。例えば、トラック番号が異なる各セクタは、異なるトラックに属することとなる。なお、本実施形態においては、ヘッド番号およびトラック番号といった、数字形式の情報であるが、ヘッドおよびトラックを識別可能な識別子であれば、本実施以外の態様であっても構わない。
〔実施例1〕
最外周トラックのデータ長を算出する手順の一例を説明する。
図3は、実施例1におけるプラッタの最外周トラックのデータ長を算出することを説明するための図である。図4は、実施例1における最外周トラックのデータ長の算出手順を示すフローチャートである。
まず、変換部201は、LBA=0x0000(最小のLBA)となるセクタのヘッド番号、トラック番号を取得する(S401)。以後、LBA=0x0000となるセクタを先頭セクタと記載する。図3では、LBA=0x0000である先頭セクタとして先頭セクタ301を示す。本実施態様における磁気ディスク記憶装置105、106において、LBA=0x0000である先頭セクタ301は最外周トラックにある。先頭セクタ301に対して変換部201が物理アドレス変換コマンドを発行することで、図3のように先頭セクタ301のヘッド番号0x00、トラック番号0x00が取得される。
先頭セクタ301のヘッド番号、トラック番号を取得後、変換部201は取得された先頭セクタ301のヘッド番号およびトラック番号を番号情報記憶部209に記憶する(S402)。
次に、変換部201は、現在のセクタよりもLBAが1大きいセクタのヘッド番号とトラック番号とを取得する(S403)。例えば、変換部201が図3に示すLBA=0x0001であるセクタ302に対して物理アドレス変換コマンドを発行することで、ヘッド番号とトラック番号とを取得する。
セクタ302のヘッド番号、トラック番号を取得後、番号比較部202は、先頭セクタ301のヘッド番号とセクタ302のヘッド番号とを比較する。また、番号比較部202は、先頭セクタ301のトラック番号とセクタ302のトラック番号を比較する。そして、番号比較部202は、セクタ301とセクタ302とで、ヘッド番号およびトラック番号が一致するかを判定する(S404)。セクタ302のヘッド番号およびトラック番号が先頭セクタ301のヘッド番号およびトラック番号と一致すると番号比較部202が判定した場合、ステップS403に戻り、変換部201による上記ステップS403の処理が実行され、その後に変換部201によって上記ステップS404の処理が実行される。
以後、ステップS404にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出するまで、ステップS403、S404の処理が繰り返される。例えば、図3において、セクタ302が番号比較部202における比較対象のセクタとされた場合、セクタ302のヘッド番号およびトラック番号は先頭セクタ301のヘッド番号、トラック番号と同一であるので、ステップS404の判定後にステップS403およびS404の処理が繰り返される。
一方、ステップS404にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、先頭セクタ301から現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)よりもLBAの値が1つ小さいセクタまでのセクタ数に対応するデータ長を算出する。そして、トラックデータ長算出部203は、算出したデータ長を最外周トラックのデータ長としてトラック情報記憶部210に記憶する(S407)。
例えば、セクタ304がステップS404における比較対象のセクタとされた場合、セクタ304のヘッド番号=0x01は、番号情報記憶部209に記憶された先頭セクタ301のヘッド番号=0x00と異なる。そのため、トラックデータ長算出部203によりステップS407の処理が実行され、図3に示す先頭セクタ301からセクタ303までのセクタ数に対応するデータ長を算出する。ここで例えば、算出されたデータ長が512キロバイトであった場合、トラックデータ長算出部203は最外周トラックのデータ長が512キロバイトであることをトラック情報記憶部210に記憶する。
以上の手順で、磁気ディスク記憶装置105、106が有する最外周トラックのデータ長が算出される。
図5は、LBAの割り当て方法が相違する磁気ディスク記憶装置の例を示す図である。図5(A)は、LBAがプラッタ順に割り当てられた磁気ディスク記憶装置の例を示す。図5(A)のような場合、トラックデータ長算出部203は、番号比較部202が前述した図3に示すように、ヘッド番号の相違を検出したことに基づいて、最外周トラックのデータ長を算出することになる。図5(B)は、LBAが同一プラッタにおけるトラック順に割り当てられた磁気ディスク記憶装置の例を示す。図5(B)のような場合、トラックデータ長算出部203は、番号比較部202がトラック番号の相違を検出したことに基づいて、最外周トラックのデータ長を算出することになる。
図6は、実施例1における、プラッタの最内周トラックのデータ長を算出することを説明するための図である。図7は、実施例2における最内周トラックのデータ長の算出手順を示すフローチャートである。プラッタの最内周トラックのデータ長を算出する手順を、図6、図7を用いて説明する。
まず、変換部201は、磁気ディスク記憶装置の容量上最大のLBAをもつセクタのヘッド番号、トラック番号を取得する(S701)。以後の記載および図面においては、磁気ディスク記憶装置の容量上最大のLBAをもつセクタを最終セクタと記載する。図6は、LBA=0xFF80である最終セクタとして最終セクタ601を示す。本実施態様における磁気ディスク記憶装置105、106において、最終セクタ601は最内周トラックにある。例えば、変換部201が図6に示す最終セクタ601に対して物理アドレス変換コマンドを発行することで、最終セクタ601のヘッド番号=0x07とトラック番号=0xFFとを取得する。
最終セクタ601のヘッド番号、トラック番号を取得後、変換部201は取得された最終セクタ601のヘッド番号およびトラック番号を番号情報記憶部209に記憶する(S702)。
次に、変換部201は、現在のLBAよりもLBAが1小さいセクタのヘッド番号とトラック番号とを取得する(S703)。例えば、変換部201は、ステップS701、S702の処理を実行後、最終セクタ601よりもLBAが1小さい、LBA=0xFF7Fであるセクタ602に対して物理アドレス変換コマンドを発行し、ヘッド番号とトラック番号とを取得する。
セクタ602のヘッド番号、トラック番号を取得後、番号比較部202は、番号情報記憶部209に記憶された最終セクタ601のヘッド番号と、セクタ602のヘッド番号とを比較する。また、番号比較部202は、番号情報記憶部209に記憶された最終セクタ601のトラック番号と、セクタ602のトラック番号を比較する。そして比較した結果、最終セクタ601とセクタ602とで、ヘッド番号およびトラック番号が一致するかを判定する(S704)。セクタ602のヘッド番号およびトラック番号が最終セクタ601のヘッド番号およびトラック番号と一致すると番号比較部202が判定した場合、変換部201による上記ステップS703の処理が再び実行され、その後に番号比較部202によって上記ステップS704の処理が実行される。
以後、ステップS704にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出するまで、ステップS703、S704の処理が繰り返される。例えば、図6において、セクタ602が番号比較部202における比較対象のセクタとされた場合、セクタ602のヘッド番号およびトラック番号は最終セクタ601のヘッド番号、トラック番号と同一であるので、ステップS704の判定後にステップS703およびS704の処理が繰り返される。
一方、ステップS704にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)のヘッド番号およびトラック番号を番号情報記憶部209に記憶する。(S705)。
例えば、セクタ603が番号比較部202における比較対象のセクタとされた場合、セクタ603のヘッド番号=0x06は、番号情報記憶部209に記憶された最終セクタ601のヘッド番号=0x07と異なるので、トラック長算出部203が実行するステップS705の処理により、セクタ603のヘッド番号=0x06、トラック番号=0xFFが番号情報記憶部209に記憶される。
ステップS705の処理を実行後、変換部201は、LBAが1小さいセクタのヘッド番号とトラック番号とを取得する(S706)。
そして、番号比較部202は、番号情報記憶部209に記憶された、セクタ603のヘッド番号と、ステップS706で変換部201により取得されたヘッド番号とを比較する。また、番号比較部202は、番号情報記憶部209に記憶されたセクタ603のトラック番号と、ステップS706で変換部201により取得されたトラック番号とを比較する。そして比較した結果、両者のヘッド番号およびトラック番号が一致するかを判定する(S707)。セクタ603のヘッド番号およびトラック番号とステップS706で変換部201により取得されたヘッド番号およびトラック番号とが一致すると番号比較部202が判定した場合、ステップS706の処理に戻り、変換部201による上記ステップS706の処理が実行され、その後に番号比較部202によって上記ステップS707の処理が実行される。
以後、ステップS707にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号がことなることを検出するまで、ステップS706、S707の処理が繰り返される。例えば、図6において、セクタ604が番号比較部202における比較対象のセクタとされた場合、セクタ604のヘッド番号およびトラック番号はセクタ603のヘッド番号、トラック番号と同一であるので、ステップS707の判定後にステップS706およびS707の処理が繰り返される。
一方、ステップS707にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、セクタ603から現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)よりもLBAの値が1つ小さいセクタまでのセクタ数に対応するデータ長を算出する。そして、トラックデータ長算出部203は、算出したデータ長を最内周トラックのデータ長としてトラック情報記憶部210に記憶する(S708)。
例えば、セクタ605がステップS707における比較対象のセクタとされた場合、セクタ605のヘッド番号=0x05は、番号情報記憶部209に記憶されたセクタ603のヘッド番号=0x06と異なる。そのため、トラックデータ長算出部203によりステップS708の処理が実行され、図6に示すセクタ603からセクタ604までのセクタ数に対応するデータ長を算出する。ここで例えば、算出されたデータ長が256キロバイトであった場合、トラックデータ長算出部203は最内周トラックのデータ長が256キロバイトであることをトラック情報記憶部210に記憶する。
以上の手順で、磁気ディスク記憶装置105、106が有する最内周トラックのデータ長が算出される。
ここで、最内周のトラックのデータ長をセクタ603からセクタ604までのセクタ数に対応するデータ長とする理由について説明する。磁気ディスク記憶装置には、ユーザからの要求によって書き換えが可能な記憶領域の他に、ユーザによる書き換えが行われない(許可されない)記憶領域(ユーザ非使用領域)が設けられることがある。そして、そのようなユーザ非使用領域は、例えば、磁気ディスク記憶装置のプラッタの最内周付近のトラックに設けられ、例えば、磁気ディスク記憶装置の構成情報や、異常発生時の修復のための記憶領域として使用される。また、ユーザ非使用領域は、トラック全体に設けられるとは限らないため、ユーザ非使用領域付近のトラックには、ユーザからの要求によって書き換えが可能な記憶領域と、ユーザ非使用領域が混在する場合がある。ここで、本実施例の磁気ディスク記憶装置105、106は、ユーザ非使用領域がプラッタの最内周付近のトラックに設けられることとすると、最終セクタ601が属するトラックには、ユーザ非使用領域に属するセクタが存在する可能性がある。したがって、上記の図7に示す処理のように、最終セクタ601が属するトラックを最内周トラックとせず、最内周のトラックのデータ長は、セクタ603からセクタ604までのセクタ数に対応するデータ長とする。
このような処理を実行することで、ユーザ非使用領域が存在するトラックが、最内周トラックとして処理されることを抑止する。尚、本実施例においては、ユーザ非使用領域がプラッタの最内周付近のトラックに設けられるとしたが、ユーザ非使用領域がプラッタの最外周付近のトラックに設けられる場合は、前述した最外周のトラックのデータ長を算出する処理において、1回目にヘッド番号が相違したセクタから、その次にヘッド番号が相違したセクタの1つ前のセクタに対応するデータ長を最外周トラックのデータ長とすればよい。
また、図4および図7の手順では、最外周トラックおよび最内周トラックのデータ長を算出する手順について説明したが、LBAの割り当て方法が図5(B)の場合は、最外周トラックおよび最内周トラック以外のトラックのデータ長についても算出することができる。
図8は、プラッタの最外周トラックから最内周トラックの間の各トラックのデータ長を算出する手順を示すフローチャートである。
まず、制御装置100は、図4に示すステップS401〜S405の手順を実行して、最外周トラックのデータ長を算出する(S801)。このステップS801の処理は、図4のステップS401〜S405と同様の処理であってよい。
次に、変換部201は、現在のセクタよりもLBAが1大きいセクタのヘッド番号とトラック番号とを取得する(S802)。このステップS802の処理は、例えば、前述したステップS403の処理と同様の処理であってよい。
ステップS802の処理を実行後、番号比較部202は、番号情報記憶部209に記憶されたトラック番号とステップS802で取得されたトラック番号を比較する。そして比較した結果、両者のトラック番号が一致するかを判定する(S803)。ステップS803で両者のトラック番号が一致すると番号比較部202が判定した場合、番号比較部202は、ステップS805の処理を実行する。
一方、ステップS803でトラック番号が異なると番号比較部202が判定した場合、番号比較部202はその旨をトラック長算出部203に送信する。番号比較からの通知を受信したトラック長算出部203は、番号情報記憶部209に番号を記憶したときのセクタから、現在のセクタよりもLBAが1つ小さいセクタまでのセクタによって得られるデータ長を算出する。そして、現在のセクタのヘッド番号およびトラック番号を記憶するとともに、算出したデータ長を最外周トラックのデータ長としてトラック情報記憶部210に記憶する(S804)。トラック長算出部203がS804の処理を実行した後、番号比較部202は、ステップS805の処理を実行する。
ステップS805において、番号比較部202は、番号情報記憶部209に記憶されたヘッド番号とステップS802で取得されたヘッド番号を比較する。そして比較した結果、両者のヘッド番号が一致するかを判定する。番号比較部202が、ヘッド番号が一致すると番号比較部202が判定した場合、S802からの処理が再実行される。
一方、ステップS805において、番号比較部202が、両者のヘッド番号が異なると判定した場合、番号比較部202はその旨をトラック長算出部203に送信する。番号比較からの通知を受信したトラック長算出部203は、1つ前にデータ長が算出されたトラックを最内周トラックと判断し、1つ前に算出されたデータ長を最内周トラックのデータ長に決定する(S806)。
ステップS806の処理を、トラック長算出部203が実行した後、制御装置100は図8に示すトラック長算出処理を終了する。
以上の手順によれば、最外周トラックから順にトラックのデータ長を求め、ヘッド番号、つまりプラッタの記録面が切り替わったことを検出してトラックのデータ長算出処理を終了する。尚、図8の手順の場合、最初のステップS804で、トラック長算出部203がトラック情報記憶部210に記憶するデータ長が最外周トラックのデータ長である。また、前述したステップS806でトラック長算出部203がトラック情報記憶部210に記憶するデータ長が最内周トラックのデータ長である。
〔実施例2〕
次に、実施例2の場合において、最外周トラックのデータ長を算出する手順を説明する。実施例2は、トラックのデータ長を実施例1と比較して情報処理の量を軽減させる手順である。
図9は、最外周トラックのデータ長を算出する手順を説明する図である。図10は、最外周トラックが有するデータ長を算出する手順を示すフローチャートである。
ヘッド番号、トラック番号の意味については、実施例1と同様のため説明を省略する。
まず、変換部201は、LBA=0x0000となるセクタのヘッド番号、トラック番号を取得する(S1001)。以後、LBA=0x0000となるセクタを先頭セクタと記載する。図9では、LBA=0x0000である先頭セクタとして先頭セクタ901を示す。本実施態様における磁気ディスク記憶装置105、106において、LBA=0x0000である先頭セクタ901は最外周トラックにある。先頭セクタ901に対して変換部201が物理アドレス変換コマンドを発行することで、図9のように先頭セクタ901のヘッド番号0x00、トラック番号0x00が取得される。
先頭セクタ901のヘッド番号、トラック番号を取得後、変換部201は取得された先頭セクタ901のヘッド番号およびトラック番号を番号情報記憶部209に記憶する(S1002)。
次に、変換部201は、現在のセクタよりもLBAが0x80(10進数であれば128、データ長で64キロバイト分)大きいセクタのヘッド番号とトラック番号とを取得する(S1003)。尚、この0x80という値は適宜変更が可能であるが、本実施例で0x80を用いる理由については後述する。例えば、変換部201が図9に示すLBA=0x0080であるセクタ902に対して物理アドレス変換コマンドを発行することで、ヘッド番号とトラック番号とを取得する。
セクタ902のヘッド番号、トラック番号を取得後、番号比較部202は、先頭セクタ901のヘッド番号とセクタ902のヘッド番号とを比較する。また、番号比較部202は、先頭セクタ901のトラック番号とセクタ902のトラック番号を比較する。そして、番号比較部202は、セクタ901とセクタ902とで、ヘッド番号およびトラック番号が一致するかを判定する(S1004)。セクタ902のヘッド番号およびトラック番号が先頭セクタ901のヘッド番号およびトラック番号と一致すると番号比較部202が判定した場合、ステップS1003に戻り、変換部201による上記処理が実行され、その後に変換部201によって上記ステップS1004の処理が実行される。
以後、ステップS1004にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出するまで、ステップS1003、S1004の処理が繰り返される。例えば、図9において、セクタ902が番号比較部202における比較対象のセクタとされた場合、セクタ902のヘッド番号およびトラック番号は先頭セクタ901のヘッド番号、トラック番号と同一であるので、ステップS1004の判定後にステップS1003およびS1004の処理が繰り返される。
一方、ステップS1004にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、先頭セクタ901から現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)よりもLBAの値が0x80小さいセクタまでのセクタ数に対応するデータ長を算出する。そして、トラックデータ長算出部203は、算出したデータ長を最外周トラックのデータ長の近似値としてトラック情報記憶部210に記憶する(S1005)。
例えば、セクタ904がステップS1004における比較対象のセクタとされた場合、セクタ904のヘッド番号=0x01は、番号情報記憶部209に記憶された先頭セクタ901のヘッド番号=0x00と異なる。そのため、トラックデータ長算出部203によりステップS1005の処理が実行され、図9に示す先頭セクタ901からセクタ903よりもLBAが1小さいセクタまでのセクタ数に対応するデータ長を算出する。ここで例えば、算出されたデータ長が512キロバイトであった場合、トラックデータ長算出部203は最外周トラックのデータ長の近似値が512キロバイトであることをトラック情報記憶部210に記憶する。
以上の手順で、磁気ディスク記憶装置105、106が有する最外周トラックのデータ長の近似値が算出される。
実施例1と比較すると、実施例2の場合は、セクタのヘッド番号、シリンダ番号を、0x80ごとに取得するので、より少ない計算量、計算時間でトラックのデータ長の近似値を求めることが可能である。
図11は、実施例2における、プラッタの最内周トラックのデータ長を算出することを説明するための図である。図12は、実施例2における最内周トラックのデータ長の算出手順を示すフローチャートである。プラッタの最内周トラックのデータ長を算出する手順を、図11、図12を用いて説明する。
まず、変換部201は、磁気ディスク記憶装置の容量上最大のLBAをもつセクタのヘッド番号、トラック番号を取得する(S1201)。以後の記載および図面においては、磁気ディスク記憶装置の容量上最大のLBAをもつセクタを最終セクタと記載する。図11では、LBA=0xFF80である最終セクタとして最終セクタ1101を示す。本実施態様における磁気ディスク記憶装置105、106において、最終セクタ1101は最内周トラックにある。例えば、変換部201が図6に示す最終セクタ1101に対して物理アドレス変換コマンドを発行することで、最終セクタ1101のヘッド番号=0x07とトラック番号=0xFFとを取得する。
最終セクタ1101のヘッド番号、トラック番号を取得後、変換部201は取得された最終セクタ1101のヘッド番号およびトラック番号を番号情報記憶部209に記憶する(S1202)。
次に、変換部201は、LBAが現在のセクタより0x80小さいセクタのヘッド番号とトラック番号とを取得する(S1203)。例えば、変換部201は、LBA=0xFF00であるセクタ1102に対して物理アドレス変換コマンドを発行し、ヘッド番号とトラック番号とを取得する。
セクタ1102のヘッド番号、トラック番号を取得後、番号比較部202は、番号情報記憶部209に記憶されたヘッド番号と、ステップS1203で取得されたヘッド番号とを比較する。また、番号比較部202は、番号情報記憶部209に記憶された最終セクタ1101のトラック番号と、ステップS1203で取得されたセクタ1102のトラック番号とを比較する。そして比較した結果、番号比較部202は、番号情報記憶部209に記憶された最終セクタ1101のトラック番号と、ステップS1203で取得されたセクタ1102のトラック番号とが一致するかを判定する(S1204)。最終セクタ1101のトラック番号と、セクタ1102のトラック番号とが一致すると番号比較部202が判定した場合、ステップS1203の処理に戻り、変換部201による上記ステップS1203の処理が実行され、その後に番号比較部202によって上記ステップS1204の処理が実行される。
以後、ステップS1204にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出するまで、ステップS1203、S1204の処理が繰り返される。例えば、図11において、セクタ1102が番号比較部202における比較対象のセクタとされた場合、セクタ1102のヘッド番号およびトラック番号は最終セクタ1101のヘッド番号、トラック番号と同一であるので、ステップS1206の判定後にステップS1203およびS1204の処理が繰り返される。
一方、ステップS1204にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号とステップS1203で取得されたヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)のヘッド番号およびトラック番号を番号情報記憶部209に記憶する。(S1205)。
例えば、セクタ1103が番号比較部202における比較対象のセクタとされた場合、セクタ1103のヘッド番号=0x06は、番号情報記憶部209に記憶された最終セクタ1101のヘッド番号=0x07と異なるので、トラック長算出部203が実行するステップS1205の処理により、セクタ1103のヘッド番号=0x06、トラック番号=0xFFが番号情報記憶部209に記憶される。
ステップS1205の処理を実行後、変換部201は、LBAが0x80小さいセクタのヘッド番号とトラック番号とを取得する(S1206)。
そして、番号比較部202は、番号情報記憶部209に記憶された、セクタ1103のヘッド番号と、ステップS1206で変換部201により取得されたヘッド番号とを比較する。また、番号比較部202は、番号情報記憶部209に記憶されたセクタ1103のトラック番号と、ステップS1206で変換部201により取得されたトラック番号とを比較する。そして比較した結果、両者のヘッド番号およびトラック番号が一致するかを判定する(S1207)。セクタ1103のヘッド番号およびトラック番号とステップS1206で変換部201により取得されたヘッド番号およびトラック番号とが一致すると番号比較部202が判定した場合、ステップS1206の処理に戻り、変換部201による上記ステップS1206の処理が実行され、その後に番号比較部202によって上記ステップS1207の処理が実行される。
以後、ステップS1207にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号がことなることを検出するまで、ステップS1206、S1207の処理が繰り返される。例えば、図6において、セクタ1104が番号比較部202における比較対象のセクタとされた場合、セクタ1104のヘッド番号およびトラック番号は、番号情報記憶部209に記憶されたセクタ1103のヘッド番号、トラック番号と同一であるので、ステップS1207の判定後にステップS1206およびS1207の処理が繰り返される。
一方、ステップS1207にて、番号比較部202が、番号情報記憶部209に記憶されたヘッド番号またはトラック番号と取得したヘッド番号またはトラック番号が異なることを検出した場合、番号比較部202はその旨を示す通知をトラックデータ長算出部203に送信する。番号比較部202からの前記通知を受信したトラックデータ長算出部203は、セクタ1103から現在のセクタ(番号比較部202においてヘッド番号およびトラック番号の相違が検出されたセクタ)よりもLBAの値が0x80大きいセクタ(図11ではセクタ1104)までのセクタ数に対応するデータ長を算出する。そして、トラックデータ長算出部203は、算出したデータ長を最内周トラックのデータ長の近似値としてトラック情報記憶部210に記憶する(S1208)。
例えば、セクタ1105がステップS1207における比較対象のセクタとされた場合、セクタ1105のヘッド番号=0x05は、番号情報記憶部209に記憶されたセクタ1103のヘッド番号=0x06と異なる。そのため、トラックデータ長算出部203によりステップS1208の処理が実行され、図11に示すセクタ1103からセクタ1105よりもLBAが0x80大きいセクタまでのセクタ数に対応するデータ長を算出する。ここで例えば、算出されたデータ長が256キロバイトであった場合、トラックデータ長算出部203は最内周トラックのデータ長の近似値が256キロバイトであることをトラック情報記憶部210に記憶する。
以上の手順で、磁気ディスク記憶装置105、106が有する最内周トラックのデータ長が算出される。
実施例2の処理は、実施例1の処理と比較して、セクタのヘッド番号、シリンダ番号を、0x80ごとに取得するので、より少ない計算量、計算時間でトラックのデータ長の近似値を求めることとなる。
以上のように、本発明の実施例1および実施例2によれば、磁気ディスク記憶装置が有するプラッタのトラックのデータ長が不明である場合に、トラックのデータ長(あるいはその近似値)を算出することが可能である。
また、実施例2の手順において変換部201は、0x80の間隔でセクタのヘッド番号とトラック番号を取得しているが、先に述べたように、この値は、記憶装置の仕様に基づいて適宜変更するようにしてもよい。一例として、記憶装置100のデータ処理におけるデータ長の最小値が64キロバイトであり、1セクタあたりに記憶可能なデータ長が512バイトである場合、本実施例2のように、0x80の間隔でセクタのヘッド番号、トラック番号を取得すればよい。これにより、記憶装置100で実行されるデータ処理への影響を軽減させつつ、実施例1と比較して、より効率良くトラックのデータ長を算出することが可能である。
〔データ領域の分割〕
最外周トラックのデータ長と最内周トラックのデータ長が算出された後、磁気ディスク記憶装置105、106の有する記憶領域の分割を行う手順について説明する。以降の手順においては、実施例2に手順によって算出された、トラックのデータ長の近似値を用いる場合を説明するが、実施例1の手順で算出されたトラックのデータ長や、実施例1、実施例2以外の手段によって予め取得された情報を用いることも可能である。
まず、前述したゾーンについて詳細を説明する。本実施例のゾーンとは、複数のブロックをまとめたグループである。同じゾーンに属するブロックに設定するデータ長を同じ値とする。そして、プラッタの外側のゾーンになる、つまり1トラックあたりのデータ長が大きくなるにつれて、ブロックに設定するデータ長を大きくする。このように、ゾーン、およびブロックのデータ長を設定することで、トラックのデータ長が大きくなることに応じて、ブロックのデータ長が大きくなるように設定される。これにより、ブロックのデータ長が大きくなっても、セクタを磁気ヘッドが走査する際のシーク回数およびシーク時間が増加を軽減することができる。
本実施例のゾーン、およびゾーン毎のブロックのデータ長の設定について詳細に説明する。
ゾーン決定部204は、図13に示す計算式に基づいて、データ領域全体をいくつのゾーンに区切るかを決定する。ここで決定するゾーンの数を、以後、ゾーン数と記載する。図13に示す計算式について説明すると、ゾーン数は、最外周トラックのデータ長と最内周トラックのデータ長との差分を変換部201がセクタのヘッド番号とトラック番号とを取得する間隔に等しいデータ長で割ったものに1を足した数とする。つまり((最も外側のトラックのデータ長)−(最も内側のトラックのデータ長))÷(セクタを特定する間隔)+1をゾーン数とする。
具体例を挙げると、本実施態様の場合、ブロックのデータ長の最大値は前述の実施例2において算出された最も外側のトラックのデータ長の近似値である512キロバイトである。また、ブロックのデータ長の最小値は前述の実施例2において算出された最も内側のトラックのデータ長の近似値である256キロバイトである。さらに、記憶装置100のデータ処理におけるデータ長の最小値が64キロバイトであるとすると、(512−256)÷64+1=5よりゾーン数は5となる。したがって、この例の場合、データ領域全体を5つのゾーンに分割することをゾーン決定部204が決定する。
ゾーン決定部204がゾーン数を決定後、各ゾーンを識別する識別子としてゾーン番号を割り当てる。ゾーン番号は、例えばゾーン番号ごとに異なる通し番号である。具体例を挙げると、例えば、最も外側のゾーンのゾーン番号を0とし、ゾーン番号が0のゾーンよりも1つ内側のゾーンのゾーン番号を1とする。以下、同様の手順で、最内周ゾーンまでゾーン番号を割り当てることで、5つのゾーンを識別するゾーン番号0〜4が割り当てられる。以後、明細書においてもゾーン番号0〜4に対応するゾーンをそれぞれZone#0〜Zone#4と記載する。
ゾーン数およびゾーン番号が決定されると、ブロックデータ長決定部205は、ゾーン決定部204により決定された各ゾーンにおける、1ブロックあたりのデータ長を決定する。
まず、ブロックデータ長決定部205は、Zone#0に属するブロックに割り当てられるデータ長を、ブロックのデータ長の最大値である512キロバイトに決定する。また、ゾーン番号が1であるゾーン(以下、Zone#1と記載する)に属するブロックに割り当てられるデータ長を、512キロバイトから64キロバイトを減じた448キロバイトに決定する。以下、同様の手順で、各ゾーンのブロックに割り当てるデータ長を決定する。尚、例えばこの際に、Zone#4のブロックのデータ長を256キロバイトに決定し、ゾーン番号が1小さくなるごとにブロックに割り当てるデータ長を64キロバイト大きくする手順であってもよい。
各ゾーンにおける、1ブロックあたりのデータ長が決定されると、ブロックデータ長決定部205は、各ゾーンのゾーン番号と1ブロックあたりのデータ長とを対応付けてゾーン情報記憶部211に記憶する。
図14は、ゾーン情報記憶部211に記憶される情報の一例である。ゾーンそれぞれにおける1ブロックあたりのデータ長は、図14に示すゾーン情報1400のようなデータ構造でゾーン情報記憶部211に記憶することとしてもよい。
ゾーン数、および各ゾーンの1ブロックあたりのデータ長が決定された後、データ領域算出部206は、磁気ディスク記憶装置が有するプラッタのデータ領域全体に対する、各ゾーンが占める領域の割合を求める。
データ領域算出部206がプラッタ面のデータ領域全体に対する各ゾーンのデータ領域の割合を決定する手順を説明する。
図15に、データ領域全体における各ゾーンに割り当てるデータ領域の割合を求める計算式を示す。図15に示す式において、ゾーン数とは、データ領域全体に存在するゾーンの数であり、ゾーン番号は前述のデータ領域を分割する手順において各ゾーンに割り当てられた番号である。
本実施態様のZone#0を例に挙げると、ゾーン数は5、ゾーン番号は0なので、図15に示す式により、データ領域全体に対してZone#0が占めるデータ領域は36%と決定される。データ領域算出部206は、ゾーン番号と算出された割合とを対応付けてゾーン情報記憶部211に記憶する。
Zone#0以外のゾーンについても同様の手順でデータ領域全体に対してゾーンが占めるデータ領域の割合を決定し、決定した結果をゾーン情報記憶部211に記憶する。
図16は、ゾーン情報記憶部211に記憶される情報の一例である。結果として、ゾーン情報記憶部211に、図16に示すデータ領域情報1600を記憶することが可能である。
以上の手順により、磁気ディスク記憶装置のデータ領域を分割する際の各ブロックのデータ長が決定される。本実施例によれば、アクセス速度が内側のトラックのブロックと比べて高速な外側のトラックのブロックは、1ブロックあたりのデータ長が大きくなるように分割される。したがって、例えば、同じデータ長のデータを、外側のトラックのブロックから読み出す場合と、内側のトラックのブロックから読み出す場合では、外側のトラックのブロックの方がブロックへのアクセス(I/Oアクセス)の回数を少なくできる。これにより、I/Oアクセスの増加による記憶装置の処理負荷の増加を軽減することができる。
また、各ブロックのデータ長は、プラッタの外側のトラックに属するブロックは大きく、ブロックがプラッタの内側のトラックに属するブロックになるほど小さくなる。つまり、プラッタの外側のトラックに属するブロックと比較してアクセス速度が低速な、プラッタの内側のトラックに属するブロックは、アクセス速度の低下に応じて1ブロックあたりのデータ長が小さく決定される。これにより、ブロック毎の、データにアクセスする際に必要な時間のばらつきを抑制することができる。
ここで、上記の手順によって、データ領域が分割された磁気ディスク装置が奏する効果について、具体例を挙げて説明する。
図17は、従来技術を用いて実現される比較例(従来例)および本実施例のハードウェア構成を示す図である。図17のように、従来例および本実施例の記憶装置は、1台の制御装置100と、5台の磁気ディスク記憶装置1710(1)〜1710(5)がネットワーク1720を介して接続される。本実施例および従来例にはRAID(Redundant Arrays of Inexpensive Disks、またはRedundant Arrays of Independent Disks)5(4+1)が適用されるものとする。
本実施例と比較する従来技術として、データ領域が0x80個のセクタごとに均等に分割された磁気ディスク記憶装置を挙げる。尚、前述した磁気ディスク記憶装置105、106と、従来例の磁気ディスク記憶装置1710(1)〜(5)は、同一のハードウェアであると仮定する。また、ネットワーク1710は例えば、ファイバチャネルやSANであって良い。
本実施例の磁気ディスク記憶装置と、従来例の磁気ディスク記憶装置それぞれについて、Zone#4の領域に記憶されたデータにアクセスが発生する場合を考える。図17におけるZone#4の領域に記憶されるこの領域の1ブロックあたりのデータ長は、本実施例の場合は256キロバイト、従来例の場合は64キロバイトである。
まず、RAID5(4+1)の態様において、本実施例および従来例の磁気ディスク記憶装置に、シーケンシャルリード/ライトアクセスが発生する場合を考える。
図18は、従来例の磁気ディスク記憶装置にシーケンシャルリード/ライトアクセスが発生する場合を表す図である。
従来例の場合、プラッタのデータ領域は、64キロバイトごとに区切られている。このため、0x200×4セクタ分のデータを読み込むためには、磁気ディスク記憶装置全体で20回のI/Oアクセスが必要である。
図19は、本実施例の磁気ディスク記憶装置にシーケンシャルリード/ライトアクセスが発生する場合を表す図である。本実施例のディスク記憶装置の場合、プラッタのデータ領域は、256キロバイトごとに区切られている。このため、0x200×4のデータを読み込むために必要なI/Oアクセスは、磁気ディスク記憶装置全体で4回であるので、従来例と比べてI/Oアクセスの回数が減少し、記憶装置の処理負荷の増加を軽減させることができる。さらに、256キロバイトは、Zone#4のトラック1つ分のデータ長の近似値であるため、1ブロックあたりのデータ長を大きくしつつも、セクタを磁気ヘッドが走査する際のシーク回数およびシーク時間の増加は低減することが可能である。
以上のように、本発明の磁気ディスク記憶装置は、従来例の磁気ディスク記憶装置と比べて、シーケンシャルリード/ライトアクセスが発生する場合のアクセス性能を向上させることが可能である。
次に、本実施例および従来例の磁気ディスク記憶装置に、ランダムリード/ライトアクセスが発生する場合を考える。
図20は、従来例の磁気ディスク記憶装置にランダムリード/ライトアクセスが発生する場合を表す図である。図21は、本実施例の磁気ディスク記憶装置にランダムリード/ライトアクセスが発生する場合を表す図である。
従来例のディスク記憶装置の場合、プラッタのデータ領域は、64キロバイトごとに区切られている。このため、0x200セクタ分のデータを読み込むためには、磁気ディスク記憶装置全体で、4回のI/Oアクセスが必要である。また、データは、64キロバイトごとに分割されて、計4台の磁気ディスク記憶装置に記憶されているため、4台の磁気ディスク記憶装置それぞれにI/Oアクセスが発生する。
一方、本実施例のディスク記憶装置の場合、プラッタのデータ領域は、256キロバイトごとに区切られている。このため、0x200のデータを読み込むために必要なI/Oアクセスは、磁気ディスク記憶装置全体で1回であるので、従来例と比べてI/Oアクセスの回数が減少する。さらに、256キロバイトは、Zone#4のトラック1つ分のデータ長の近似値であるため、1ブロックあたりのデータ長を大きくしつつも、セクタを磁気ヘッドが走査する際のシーク回数およびシーク時間の増加は低減することが可能である。
以上のように、本発明の磁気ディスク記憶装置は、従来例の磁気ディスク記憶装置と比べて、ランダムリード/ライトアクセスが発生する場合のアクセス性能を向上させることが可能である。
以上説明したように、本発明によれば、例えば図17に示す、RAID5(4+1)の態様において、セクタを磁気ヘッドが走査する際のシーク回数およびシーク時間の増加を低減しつつ、I/Oアクセスを少なくすることが可能である。そして、I/Oアクセスを減少させることで、記憶装置100の処理負荷を低減することが可能である。
説明においては、Zone#4に記憶されたデータにアクセスが発生する場合を想定して説明したが、Zone#4以外のゾーンについても、各ゾーンの1トラックあたりのデータ長に基づいて、ブロックのデータ長が決定される。そのため、Zone#4以外のゾーンにおいても、従来例の磁気ディスク記憶装置と比べて、アクセス性能を向上させることが可能である。
本発明によれば、磁気ディスク記憶装置が有するプラッタのトラックのデータ長が不明に、トラックのデータ長を自動で算出することが可能である。また、算出されたトラックのデータ長を用いて、磁気ディスク記憶装置の有する記憶領域を好適に分割することが可能である。明細書にて説明した実施例は、本発明を実施する態様の一例に過ぎず、本発明を実現にあたり、具体的な手法については、適宜変更が加えられても良い。