以下、本発明の実施形態について図面を参照しながら具体的に説明する。
第1の実施形態に係るコンピュータシステム1は、2台のドライブによるRAID1構成で、図1に示すように、ホスト2と、RAIDコントローラ3と、複数のドライブ(本実施形態においては、第1ドライブD1及び第2ドライブD2)と、バス(4、5)とを有して構成されている。
ホスト2とRAIDコントローラ3とは、バス4で接続されるとともに、RAIDコントローラ3と第1ドライブD1及び第2ドライブD2とは、バス5で接続されている。これらバス4及びバス5は、例えばSerial ATA(SATA)などのバスを用いることができる。バス4及びバス5は、同一種類であってもよく、或いは異なる種類のものでもよい。なお、RAID1を構成する場合、第1ドライブD1及び第2ドライブD2は、同一製造者、且つ、同一モデルのドライブが使われることが多いが、異なる製造者のドライブ、若しくは同じ製造者の異なるモデル(容量)のドライブであってもよい。
RAIDコントローラ3は、第1ドライブD1及び第2ドライブD2を管理および制御するとともに、ホスト2から要求されたアクセス要求を処理するものとされている。具体的には、ホスト2がデータの書き込みを行う時、RAIDコントローラ3は、ホスト2からのデータ書き込み要求を受信すると、その受信したデータ書き込み要求を、第1ドライブD1及び第2ドライブD2の両方に送信するようになっている。
また、ホスト2がデータの読み出しを行う時、RAIDコントローラ3は、ホスト2からのデータ読み出し要求を受信すると、その受信したデータ読み出し要求を、第1ドライブD1のみ、第2ドライブD2のみ、若しくは第1ドライブD1及び第2ドライブD2の両方に送信するようになっている。このように、RAIDコントローラ3により、第1ドライブD1及び第2ドライブD2は、それぞれの同一のLBA領域に同一のデータを記憶している。
したがって、本実施形態に係るコンピュータシステム1によれば、ホスト2からの読み出し要求を第1ドライブD1と第2ドライブD2のどちらに送信してもよい構成となっている。そして、第1ドライブD1から転送されたデータ、第2ドライブD2から転送されたデータ、若しくは第1ドライブD1及び第2ドライブD2から転送されたデータのどちらか一方がホスト2に転送されることとなる。
ホスト2は、図2に示すように、RAM6と、CPU7と、インターフェースコントローラ8と、バス9とを有して構成されており、これらCPU7、RAM6及びインターフェースコントローラ8は、バス9により接続されている。また、インターフェースコントローラ8は、バス4によりRAIDコントローラ3と接続されている。
CPU7は、オペレーティングシステムなどのソフトウェアを実行することにより、ホスト2を制御し得るものである。RAM6は、CPU7で動作するソフトウェアのワーキングメモリとして機能するとともに、RAIDコントローラ3との間で読み書きするデータを一時的に蓄える目的で使用されるものである。インターフェースコントローラ8は、ホスト2とRAIDコントローラ3の間で、要求や通知の送信や受信、データ転送などを行うためのものである。
このような構成により、CPU7が発行したデータの読み出し(Read)や書き込み(Write)のための要求は、インターフェースコントローラ8を経由し、バス4を介してRAIDコントローラ3に送信されることとなる。なお、ホスト2は、図2に示した構成要素の他に、キーボードやマウス、ディスプレイやネットワークインターフェース、などを備えていてもよい。
RAIDコントローラ3は、図3に示すように、ホスト側インターフェースコントローラ10と、コマンド処理部11と、ドライブ管理部12と、ドライブ側インターフェースコントローラ13と、ドライブ制御部14と、リビルド制御部15と、データバッファ16とを有して構成され、これら構成部品がバス17で接続されている。
ホスト側インターフェースコントローラ10は、ホスト2とバス4で接続されており、ホスト2から送信されたアクセス要求の受信、ホスト2への通知の送信、及びホスト2との間でのデータ転送を行い得るものである。コマンド処理部11は、ホスト側インターフェースコントローラ10が受信したホスト2からの要求を解釈し、ドライブ制御部12を操作して、第1ドライブD1及び第2ドライブD2に要求を送信し得るものである。
また、コマンド処理部11は、ドライブ制御部12からのデータ転送完了通知や要求処理完了通知に従い、ホスト側インターフェースコントローラ10を通じて、ホスト2へのデータ転送や要求処理完了通知の送信を行い得るようになっている。さらに、コマンド処理部11は、ホスト2からのデータ書き込み要求に応じて、ホスト側インターフェースコントローラ10を操作して、ホスト2から書き込みデータを受信し得るようになっている。
ドライブ管理部12は、RAIDコントローラ3に接続されているドライブ(本実施形態においては第1ドライブD1及び第2ドライブD2)を管理するものであり、例えば、何個のドライブが接続されているか、接続されているドライブが正常かどうか、などを管理し得るようになっている。また、ドライブ管理部12は、故障によってドライブが切り離されたことや、新しいドライブが接続されたことを検出する機能を備えてもよい。
ドライブ側インターフェースコントローラ13は、ドライブ制御部14からの指示に従い、RAIDコントローラ3に接続されているドライブ(第1ドライブD1及び第2ドライブD2)との間で通信を行い得るものである。ドライブ制御部14は、ドライブ側インターフェースコントローラ13を操作して、RAIDコントローラ3に接続されているドライブ(第1ドライブD1及び第2ドライブD2)との間で、要求の送信や通知の受信、及びデータ転送の指示などを行い得るものである。
リビルド制御部15は、リビルドを制御するものである。データバッファ16は、ホスト2と、RAIDコントローラ3に接続されているドライブ(第1ドライブD1及び第2ドライブD2)との間で転送されるデータを一時的に記憶し得るようになっている。また、データバッファ16は、リビルド時に、コピー元ドライブから読み出したデータを一時的に記憶し得るようになっている。
このような構成により、ホスト2が発行したアクセス要求は、まずホスト側インターフェースコントローラ10が受信するとともに、コマンド処理部11が、受信した要求の内容を解釈し、第1ドライブD1及び第2ドライブD2に要求を送信するよう、ドライブ制御部14に指示を出すこととなる。かかるドライブ制御部14は、コマンド処理部11の指示に従い、ドライブ側インターフェースコントローラ13を操作し、バス5を介して第1ドライブD1及び第2ドライブD2に要求を送信する。
然るに、データ読み出し要求時には、ドライブ制御部14は、ドライブ側インターフェースコントローラ13を操作して、第1ドライブD1もしくは第2ドライブD2から読み出したデータをデータバッファ16に格納するとともに、コマンド処理部11は、ホスト側インターフェースコントローラ10を操作して、データバッファ16内のデータをホスト2に送信する。また、データ書き込み要求時には、コマンド処理部11は、ホスト側インターフェースコントローラ10を操作して、ホスト2から受信したデータをデータバッファ16に格納するとともに、ドライブ制御部14は、ドライブ側インターフェースコントローラ13を操作して、データバッファ16内のデータを第1ドライブD1及び第2ドライブD2に転送する。
第1ドライブD1及び第2ドライブD2は、ドライブコントローラ18と、NANDフラシュメモリ19とを有して構成され、これらドライブコントローラ18及びNANDフラシュメモリ19がバス28により接続されている。なお、第1ドライブD1及び第2ドライブD2(後述する第3ドライブD3も同様)は、構成が同一のドライブであると仮定して説明する。
ドライブコントローラ18は、ドライブ全体を制御し、バス6を経由してRAIDコントローラ3から受信した要求に対応する処理を実行するものである。NANDフラッシュメモリ19は、ドライブ(第1ドライブD1、第2ドライブD2及び第3ドライブD3)の記憶媒体を構成するものである。そして、ドライブコントローラ18とNANDフラッシュメモリ19とは、バス28(NANDインターフェースバス)を介して接続されている。なお、図4においては、第1ドライブD1及び第2ドライブD2は、4つのNANDフラッシュメモリ19を具備しているが、他の任意の数のNANDフラッシュメモリ19を具備してもよい。
ドライブコントローラ18は、ホストインターフェースコントローラ20と、データバッファ21と、記憶域管理部22と、ECC処理部23と、NANDインターフェースコントローラ24と、コマンド処理部26と、NAND制御部25とを有して構成され、これら構成部品がバス27により接続されている。ホストインターフェースコントローラ20は、バス6を介してRAIDコントローラ3との間で、要求や通知の送受信、データ転送を行うものである。
データバッファ21は、ホストインターフェースコントローラ20を介してRAIDコントローラ3から受信したデータの格納場所として、また、NANDフラッシュメモリ19から読み出したデータの格納場所として使用されるものである。記憶域管理部22は、どのLBAの最新データがNANDフラッシュメモリ19のどこに記憶されているか、という対応関係の情報を管理するものである。このような対応関係の情報は、マッピングテーブルから成るものであり、後ほど詳細に説明する。
ECC処理部23は、NANDフラッシュメモリ19に書き込むデータに誤り訂正符号化処理を行うことによる検査符号(パリティ)の作成、および、NANDフラッシュメモリ19から読み出したデータに誤り訂正処理を行うことによる元のデータの復元、を行うものである。NANDインターフェースコントローラ24は、NAND制御部25の指示に従い、NANDフラッシュメモリ19との間で、処理要求の送信、処理完了通知の受信、データの送受信、などを行うものである。
NAND制御部25は、コマンド処理部26や記憶域管理部22の指示に従い、NANDインターフェースコントローラ24を操作して、NANDフラッシュメモリ19に所望の処理を行わせるものである。コマンド処理部26は、ホストインターフェースコントローラ20を通じて、RAIDコントローラ3から受信した要求を解釈し、記憶域管理部22、NAND制御部25、及びECC処理部23を操作して、前記要求を処理するものである。
バス27は、ドライブコントローラ18内の各要素を接続するもので、例えば、制御バスとデータバスの2つに分離されていてもよい。また、バス27は、制御バスとデータバスの2つに分離されたうえ、各バスのバス幅や動作周波数が異なっているものであってもよい。
次に、第1ドライブD1及び第2ドライブD2の記憶域管理部22に保持されたマッピングテーブルについて、図5を用いて説明する。
図5(a)は、記憶域管理部22が作成して管理する、マッピングテーブル29を示す模式図である。かかるマッピングテーブル29は、ユニットアドレス30に対応するNANDアドレス31を、テーブル(表)構造で表現したものである。
ここで、ユニット32は、いくつかのセクタをまとめた、ドライブ内でのデータ管理単位のことであり、ユニットアドレス30とは、前記各ユニットに対して割り当てた識別子(アドレス)である。例えば、LBA=0からLBA=7までをユニットアドレス=0、LBA=8からLBA=15までをユニットアドレス=1、などと割り当てる。以降の説明では、ユニットアドレス30は、LBAを8で割った商であるとする。
図5(b)は、ドライブが具備するNANDフラッシュメモリ19を、ユニットサイズに分割した各記憶領域を示している。例えば、同図(a)の例においては、マッピングテーブル29の、ユニットアドレス=1に対応するエントリに、NANDアドレスAが記憶されている。また、ユニットアドレス=2に対応するエントリに、NANDアドレスBが記憶されている。
これは、ドライブが具備するNANDフラッシュメモリ19のNANDアドレスAに相当する記憶領域に、ユニットアドレス=1に対応する最新データが記憶されていることを意味している。また、ドライブが具備するNANDフラッシュメモリ19におけるNANDアドレスBに相当する記憶領域に、ユニットアドレス=2に対応する最新データが記憶されていることを意味している。さらに、ユニットアドレス=0、3、4、および5、に相当するエントリには有効なNANDアドレスが記憶されていない(N/A)。これは、当該ユニットアドレスに対応するデータが未書き込みであることを示している。
具体的に、ドライブ(第1ドライブD1もしくは第2ドライブD2)が、ホスト2からRAIDコントローラ3を経由してLBA=9の読み出し要求を受信した場合を考える。ドライブ(第1ドライブD1もしくは第2ドライブD2)は、まずLBAからユニットアドレス30を計算し、LBA=9を8で割った商は1なので、読み出すべきデータのユニットアドレスは1となる。そして、マッピングテーブル29のユニットアドレス=1のエントリを参照すると、NANDアドレスがAであることがわかるので、NANDフラッシュメモリ19におけるNANDアドレスAの記憶領域から、ユニット32の中のLBA=9に相当する部分のデータを読み出し、RAIDコントローラ3に転送する。
また、ドライブ(第1ドライブD1もしくは第2ドライブD2)が、ホスト2からRAIDコントローラ3を経由してLBA=7のデータの読み出し要求を受信した場合を考える。ドライブ(第1ドライブD1もしくは第2ドライブD2)は、まずLBAからユニットアドレス30を計算し、LBA=7を8で割った商は0なので、読み出すべきデータのユニットアドレスは0となる。そして、マッピングテーブル29のユニットアドレス=0のエントリを参照すると、NANDアドレスが存在しない(N/A)であることから、ユニットアドレス=0のデータは未書き込みであることがわかる。なお、データが未書き込みのLBAへの読み出し要求を受信した場合の動作は、ドライブ(第1ドライブD1もしくは第2ドライブD2)によって異なる。一般的なドライブ(第1ドライブD1もしくは第2ドライブD2)は、データが未書き込みのLBAへの読み出し要求を受信した場合、すべて0のデータを返す。
第1ドライブD1及び第2ドライブD2の記憶域管理部22に保持されたマッピングテーブルは、上記のように構成されている。なお、第1ドライブD1と第2ドライブD2において、同一LBAのデータが記憶されているNANDアドレスは、第1ドライブD1と第2ドライブD2とで同じであることもあれば、異なることもある。
RAID1構成をとるコンピュータシステム1において重要なことは、第1ドライブD1及び第2ドライブD2の同一LBAに対して同一のデータが記憶されていることであり、第1ドライブD1と第2ドライブD2の同一NANDアドレスに対して同一のデータが記憶されていることではない。
次に、マッピングテーブル29に関する書き込み処理について、図6を用いて説明する。なお、マッピングテーブル29と、NANDフラッシュメモリ19内の記憶領域については、図5と同一とされている。
ドライブ(第1ドライブD1及び第2ドライブD2)は、RAIDコントローラ3から書き込み要求を受信すると、データの書き込み先となるNANDアドレスを割り当てて、マッピングテーブル29内の、書き込み先LBAを示すユニットアドレス30に対応するエントリを、当該書き込み先NANDアドレスで更新する。
具体的に、ドライブ(第1ドライブD1及び第2ドライブD2)がLBA=36への書き込み要求を受信した場合を考える。
ドライブは、まずLBAからユニットアドレス30を計算する。今回の例では、書き込み先LBAは36であるので、ユニットアドレスは36を8で割った商、つまり4となる。そして、今回の例では、本書き込み要求に対してNANDアドレスCが割り当てられたとして、マッピングテーブル30の、ユニットアドレス=4に対応するエントリを、NANDアドレスCで更新する。このようにすることで、以降、LBA=36のデータに対して読み出し要求を受信した時も、最新のデータをNANDフラッシュメモリ19から読み出してRAIDコントローラ3に返すことができる。
なお、第1ドライブD1と第2ドライブD2では、前記NANDアドレスCが同一の値になることもあれば、異なる値になることもある。RAID1構成をとるコンピュータシステム1において重要なことは、第1ドライブD1及び第2ドライブD2のLBA=36に対して同一のデータが記憶されていることであり、第1ドライブD1と第2ドライブD2においてLBA=36のデータが記憶されているNANDアドレスが同一であることではない。
次に、図7a〜図7cを参照して、ドライブ(第1ドライブD1及び第2ドライブD2)におけるデータ書き込み処理について詳細に説明する。
まず、ホストインターフェースコントローラ20が、RAIDコントローラ3から送信されたWriteコマンドを受信する(ステップS7001)と、ホストインターフェースコントローラ20は、受信したWriteコマンドをコマンド処理部26に通知する(ステップS7002)。
そして、コマンド処理部26は、受信したWriteコマンドが正常かどうかをチェックする(ステップS7003)。かかるチェックの内容は、例えば、指定されたLBAが、ドライブに指定可能な範囲内にあるかどうかや、指定されたセクタ数が多すぎないかどうか、などである。コマンド処理部26によるチェックの結果、受信したコマンドが正常なコマンドではないと判断した場合(ステップS7004、No)、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にエラーを通知する(ステップS7024)。
一方、コマンド処理部26によるチェックの結果、受信したコマンドが正常なコマンドであると判断した場合(ステップS7004、Yes)、ホストインターフェースコントローラ20に、データバッファ21内のデータ格納位置を指定して、RAIDコントローラ3から書き込みデータを受信するよう指示する(ステップS7005)。そして、ホストインターフェースコントローラ20は、RAIDコントローラ3から書き込みデータを受信(ステップS7006)するとともに、RAIDコントローラ3からデータを受信した場合、データの受信が完了したことをコマンド処理部26に通知する(ステップS7007)。
コマンド処理部26は、ホストインターフェースコントローラ20からデータ受信の完了通知を受け取った場合、記憶域管理部22に、Writeコマンドの情報を通知する(ステップS7008)。かかるWriteコマンドの情報には、ステップS7001で受信した書き込み先の先頭LBA及び書き込むセクタ数と、ステップS7006で取得した書き込むデータが格納されているデータバッファ21内の位置を含むものとされるが、この他の情報が含まれていてもよい。
そして、コマンド処理部26からWriteコマンドの情報を受信した記憶域管理部22は、今後の処理のため、ユニットアドレスに書き込み先の先頭LBAが含まれるユニットのアドレスを、残りユニット数に、書き込むユニットの数を設定する(ステップS7009)。かかる書き込み先の先頭LBAのユニットアドレスは、例えば、ユニット内のセクタ数が8であれば、LBAを8で割った商である。
また、書き込むユニットの数は、例えば、ユニット内のセクタ数が8であれば、書き込み先の先頭LBAに書き込むセクタ数を足した数を8で割った商である。なお、前記割り算において剰余がある場合は、商に1を足したものが書き込むユニットの数になる。ところで、セクタサイズは、ユニットサイズと異なる場合がある。例えば、セクタサイズが512バイトで、ユニットサイズが4096バイトの場合である(この時、ユニット内のセクタ数は4096÷512=8である)。この場合、ステップS7001で受信した書き込み先の先頭LBAが、ユニット内の先頭セクタではないことがある。つまり、ユニット内の途中のセクタから書き込まれることになる。
同様に、ステップS7001で受信した書き込み先のLBA領域の末尾が、ユニット内の途中のセクタになっていることもある。そのような時は、ユニット内の、書き込みを指定されていないセクタのデータを、NANDフラッシュメモリ19から読み出すなどして、ステップS7006で受信したデータとマージすることで、ユニットデータを生成する必要がある。なお、本実施例ではそのようなケースの説明は省略する。
その後、記憶域管理部22は、NAND制御部25に、ユニットアドレスと、当該ユニットの書き込みデータのデータバッファ21内の格納位置とを示して、ユニットデータの書き込みを要求する(ステップS7010)。NAND制御部25は、受信したユニットアドレスに対して、データの書き込み先NANDアドレスを割り当て(ステップS7011)、NANDインターフェースコントローラ24に対して、書き込みデータのデータバッファ21内の格納位置と、割り当てたNANDアドレスとを示して、データの書き込みを要求する(ステップS7012)。
そして、NANDインターフェースコントローラ24は、データバッファ21内の指定されたデータを読み出してECC管理部23に転送して誤り訂正符号化を施した後、そのデータを指定されたNANDアドレスの存在するNANDフラッシュメモリ19に転送(ステップS7013)するとともに、当該NANDフラッシュメモリ19に、データの書き込みを要求する(ステップS7014)。
NANDインターフェースコントローラ24からデータの書き込みを指示されたNANDフラッシュメモリ19は、データの書き込みを行い、書き込みが完了すると、データ書き込み処理が完了したことをNANDインターフェースコントローラ24が検出できるようにする。そして、NANDインターフェースコントローラ24は、NANDフラッシュメモリ19がデータ書き込みを完了したことを検出する(ステップS7015)と、書き込み処理を要求したNAND制御部25に、データ書き込みの完了を通知する(ステップS7016)。
NANDインターフェースコントローラ24からデータ書き込み完了の通知を受信したNAND制御部25は、ユニットデータが書き込まれたNANDアドレスとともに、記憶域管理部22にデータの書き込み完了を通知する(ステップS7017)。そして、データの書き込み完了通知を受信した記憶域管理部22は、マッピングテーブル29の当該ユニットアドレスに対応するエントリの内容を、NAND制御部25から受信したNANDアドレスに書き換える(ステップS7018)。この書き換え処理は、図6で説明した処理である。
以上によりユニットアドレス1つ分の書き込み処理が完了することとなるので、記憶域管理部22は、コマンド処理部26に、ユニットデータの書き込み完了を通知する(ステップS7019)。そして、コマンド処理部26は、この書き込み完了通知を受けて、書き込みが完了したユニットデータが格納されているデータバッファ21内の領域の再利用や、データバッファ21の容量が足りずRAIDコントローラ3から受領していなかったデータの受信を行う。
その後、記憶域管理部22は、次のユニットデータの処理を行うため、ユニットアドレスに1を足し、残りユニット数から1を引く(ステップS7020)。1つではなくN個のユニットデータをNANDフラッシュメモリ19に書き込む処理を行う場合は、ユニットアドレスに1ではなくNを加算し、残りユニット数からNを減算すればよい。記憶域管理部22は、残りユニット数が0かどうか、つまり当該Writeコマンドにかかわるデータ書き込み処理がすべて完了したかどうかを判断する(ステップS7021)。
残りユニット数が0でない場合(ステップS7021、No)、ステップS7010に戻って処理を継続するとともに、残りユニット数が0だった場合(ステップS7021、Yes)、記憶域管理部22はWriteコマンドの処理が完了したことをコマンド処理部26に通知する(ステップS7022)。Writeコマンドの処理が完了した通知を受けたコマンド処理部26は、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にコマンド処理完了を通知する(ステップS7023)。以上が、ドライブ(第1ドライブD1及び第2ドライブD2)における書き込み処理(Writeコマンド処理)の手順である。
次に、図8a〜図8cを参照して、ドライブ(第1ドライブD1及び第2ドライブD2)におけるデータ読み出し処理について詳細に説明する。
まず、ホストインターフェースコントローラ20が、RAIDコントローラ3から送信されたReadコマンドを受信する(ステップS8001)と、ホストインターフェースコントローラ20は、受信したReadコマンドをコマンド処理部26に通知する(ステップS8002)。
そして、コマンド処理部26は、受信したReadコマンドが正常かどうかをチェックする(ステップS8003)。かかるチェックの内容は、例えば、指定されたLBAが、ドライブに指定可能な範囲内にあるかどうかや、指定されたセクタ数が多すぎないかどうか、などである。コマンド処理部26によるチェックの結果、受信したコマンドが正常なコマンドではないと判断した場合(ステップS8004、No)、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にエラーを通知する(ステップS8023)。
一方、コマンド処理部26によるチェックの結果、受信したコマンドが正常なコマンドであると判断した場合(ステップS8004、Yes)、記憶域管理部22にReadコマンドの情報を通知する(ステップS8005)。かかるReadコマンドの情報には、読み出す領域の先頭LBAと、読み出すセクタ数を含むものとされるが、この他に情報が含まれていてもよい。
そして、コマンド処理部26からReadコマンドの情報を受信した記憶域管理部22は、今後の処理のため、ユニットアドレスに読み出す領域の先頭LBAが含まれるユニットのアドレスを、残りユニット数に、読み出すユニットの数を設定する(ステップS8006)。かかる読み出す領域の先頭LBAのユニットアドレスや、読み出すユニット数の計算方法は、Writeコマンド処理(図7)の説明時の内容と同じである。
その後、記憶域管理部22は、当該ユニットアドレスで、マッピングテーブル29にアクセスし、対応するエントリの内容を取得する(ステップS8007)。かかるマッピングテーブル29は、例えば、図5で示すようなものである。そして、記憶域管理部22は、取得した内容がNANDアドレスかどうかを判断し(ステップS8008)、取得した内容がNANDアドレスではなかった場合(ステップS8008、No)、NANDフラッシュメモリ19からはデータの読み出しを行わず、その代わり、予め決められた特定データが存在するアドレスとともに、コマンド処理部26に、当該ユニットのデータの読み出し完了を通知する(ステップS8022)。
この特定データとは、例えば、オールゼロのデータ(全てゼロのデータ)やオール‘1’のデータ(全て1のデータ)などである。上記メモリ領域のアドレスは、例えばデータバッファ21内のアドレスであってもよく、上記特定データを生成するハードウェアのアドレスであってもよい。
一方、マッピングテーブル29から取得した内容がNANDアドレスだった場合(ステップS8008、Yes)、記憶域管理部22は、取得したNANDアドレスを指定して、NAND制御部25にユニットデータの読み出しを要求する(ステップS8009)とともに、NAND制御部25は、NANDインターフェースコントローラ24に対して、読み出し先のNANDアドレスを示して、データの読み出しを要求する(ステップS8010)。
そして、NANDインターフェースコントローラ24は、指定されたNANDアドレスの存在するNANDフラッシュメモリ19に読み出し要求を送り(ステップS8011)、NANDインターフェースコントローラ24からデータの読み出しを指示されたNANDフラッシュメモリ19は、データの読み出しを行う。読み出しが完了して読み出したデータの転送準備が整うと、NANDフラッシュメモリ19は、データ読み出し処理が完了したことをNANDインターフェースコントローラ24が検出できるようにする。
また、NANDインターフェースコントローラ24は、NANDフラッシュメモリ19がデータ読み出しを完了したことを検出する(ステップS8012)と、NANDフラッシュメモリ19からデータを読み出しながら、ECC処理部23に転送する(ステップS8013)。かかるECC処理部23では、転送されてきた読み出しデータに対して誤り訂正処理を行い、訂正を行ったデータを、データバッファ21に格納する(ステップS8014)。
誤り訂正を行った読み出しデータがデータバッファ21に書き込まれた場合、NAND制御部25は読み出し処理の完了を記憶域管理部22に通知する(ステップS8015)。以上によりユニットアドレス1つ分の読み出し処理が完了することとなるので、記憶域管理部22は、コマンド処理部26に、ユニットデータの読み出し完了を通知する(ステップS8016)。そして、コマンド処理部26は、この読み出し完了通知を受けて、例えば、読み出されたユニットデータを、ホストインターフェースコントローラ20を操作してRAIDコントローラ3に転送する(ステップS8017)。
その後、記憶域管理部22は、次のユニットデータの処理を行うため、ユニットアドレスに1を足し、残りユニット数から1を引く(ステップS8018)。1つではなくN個のユニットデータをNANDフラッシュメモリ19から読み出す処理を行う場合は、ユニットアドレスに1ではなくNを加算し、残りユニット数からNを減算すればよい。記憶域管理部22は、残りユニット数が0かどうか、つまり当該Readコマンドにかかわるデータ読み出し処理がすべて完了したかどうかを判断する(ステップS8019)。
残りユニット数が0でない場合(ステップS8019、No)、ステップS8007に戻って処理を継続するとともに、残りユニット数が0だった場合(ステップS8019、Yes)、記憶域管理部22はReadコマンドの処理が完了したことをコマンド処理部26に通知する(ステップS8020)。Readコマンドの処理が完了した通知を受けたコマンド処理部26は、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にコマンド処理完了を通知する(ステップS8021)。以上が、ドライブ(第1ドライブD1及び第2ドライブD2)における読み込み処理(Readコマンド処理)の手順である。
次に、ホスト2とRAIDコントローラ3を含めた、コンピュータシステム1全体としてのデータ書き込み処理の手順について、図9を用いて説明する。
まず、ホスト2は、RAIDコントローラ3に対してWriteコマンドを発行する(ステップSa01)。このWriteコマンドには、書き込む領域の先頭LBAと書き込む領域のセクタ数の情報が含まれるが、この他の情報が含まれていてもよい。
ホスト2からWriteコマンドを受信したRAIDコントローラ3は、その受信したWriteコマンドから作成したWriteコマンドを、第1ドライブD1及び第2ドライブD2に送信する(ステップSa02、ステップSa03)。なお、生成したWriteコマンドは、少なくとも、書き込む領域の先頭LBAと、書き込む領域のセクタ数を含むものとされる。
基本的なRAID1構成の場合、RAIDコントローラ3が生成して第ドライブD1及び第2ドライブD2に送るWriteコマンドは、ホスト2から受信したWriteコマンドに含まれる、書き込む領域の先頭LBAと、書き込む領域のセクタ数を、含むものとされ、RAIDコントローラ3からWriteコマンドを受信した第1ドライブD1及び第2ドライブD2は、それぞれ、図7a〜図7cで説明した処理を行う。
したがって、第1ドライブD1及び第2ドライブD2は、RAIDコントローラ3に対して、書き込むデータを要求する(ステップSa04、ステップSa05)とともに、RAIDコントローラ3は、第1ドライブD1及び第2ドライブD2の両方から書き込むデータの要求が届くのを待ってから、ホスト2に書き込むデータを要求する(ステップSa06)。
RAIDコントローラ3からデータを要求されたホスト2は、書き込むデータを送る(ステップSa07)とともに、RAIDコントローラ3は、ホスト2から受信した書き込みデータを、第1ドライブD1及び第2ドライブD2に転送する(ステップSa08、ステップSa09)。そして、RAIDコントローラ3から書き込むデータを受信した第1ドライブD1及び第2ドライブD2は、それぞれ受信したデータを書き込む(ステップSa10、ステップSa11)。
また、Writeコマンドの書き込みデータが一回のデータ転送では転送しきれない大きなサイズだった場合、ステップSa04からステップSa11までを繰り返す。Writeコマンドの対象データを全て書き込み終えると、第1ドライブD1及び第2ドライブD2は、RAIDコントローラ3にコマンド処理の完了を通知する(ステップSa12、ステップSa13)とともに、RAIDコントローラ3は、第1ドライブD1及び第2ドライブD2の両方からコマンド処理完了の通知を受信するのを待ってから、ホスト2にWriteコマンドの完了を通知する(ステップSa14)。
このように、RAID1においては、RAIDコントローラ3が、接続されているすべてのドライブ(本実施形態においては第1ドライブD1及び第2ドライブD2)に対して、同一のLBAに同一のデータが書き込まれるように制御する。また、RAIDコントローラ3は、接続されているすべてのドライブのWriteコマンド処理完了を待つこととなる。したがって、RAID1のデータ読み書き性能は、最も性能が低いドライブに律速されることとなる。
次に、図9に基づくデータの書き込み処理が行われることよる第1ドライブD1及び第2ドライブD2の内部状態について、図10を用いて説明する。
図10における左側の図は、第1ドライブD1及び第2ドライブD2におけるLBA領域の使用状態を表した模式図である。図9に基づく説明の通り、RAIDコントローラ3の処理によって、第1ドライブD1及び第2ドライブD2における同一のLBAには、ホスト2が指定したデータが書き込まれる。したがって、第1ドライブD1及び第2ドライブD2の、LBA領域の使用状況は全く同じになる。
また、図10における右側の図は、第1ドライブD1及び第2ドライブD2が具備するNANDフラッシュメモリ19の使用状況を表した模式図である。図9に基づく説明の通り、RAIDコントローラ3の処理によって、第1ドライブD1及び第2ドライブD2には、同一回数のWriteコマンドにより同じサイズのデータが書き込まれる。したがって、第1ドライブD1及び第2ドライブD2がそれぞれ具備するNANDフラッシュメモリ19の使用状況も全く同じになる。
すなわち、第1ドライブD1及び第2ドライブD2がそれぞれ具備するNANDフラッシュメモリ19の使用状況が全く同じということは、第1ドライブD1及び第2ドライブD2の、読み書き性能が同一であることを意味し、さらに言えば、NANDフラッシュメモリ19の疲弊状態も、同一であると考えられることを意味する。このことは、データへの冗長性付与及び信頼性向上というRAID1構成の目的を達成するために重要な要件である。
ここで、本実施形態に係るコンピュータシステム1は、複数のドライブ(第1ドライブD1及び第2ドライブD2)と、ドライブをコピー元ドライブ及びコピー先ドライブとして識別し、コピー元ドライブのデータをコピー先ドライブに書き込んでコピー可能なコピー部(RAIDコントローラ3)とを具備するとともに、コピー部は、コピー元ドライブの未書き込みアドレス領域(LBA)に対応するコピー先ドライブのアドレス領域(LBA)を未書き込みアドレス領域(LBA)とするものとされている。
また、本実施形態に係るコピー元ドライブは、当該コピー元ドライブにおける書き込み済みアドレス領域及び未書き込みアドレス領域を特定可能なマップ情報を有したマッピングテーブル29が記憶されるとともに、コピー部は、マッピングテーブル29に基づいてコピーすることによりリビルド可能なものとされている。
さらに、本実施形態に係るマッピングテーブル29のマップ情報は、コピー元ドライブにおいて予め定められたサイズの記憶領域が割り当てられたセクタ単位のビットマップ情報から成るもの、コピー元ドライブにおいて予め定められたサイズの記憶領域が割り当てられたセクタを任意にまとめたユニット単位のビットマップ情報から成るもの、コピー元ドライブにおいて書き込み済みアドレス領域を特定可能な情報から成るもの、又はコピー元ドライブにおいて未書き込みアドレス領域を特定可能な情報から成るものとされている。
特に、第1の実施形態に係るコピー部(RAIDコントローラ3)は、上記したマップ情報に基づいてコピー元ドライブにおける書き込み済みアドレス領域を抽出し、その抽出した書き込み済みアドレス領域のデータのみを当該書き込み済み領域に対応するコピー先ドライブのアドレス領域に書き込むよう構成されている。具体的には、リビルド時に、書き込み済みのLBAの情報をコピー元ドライブから取得し、その情報に基づいて書き込み済みのLBAのデータのみコピーするよう構成されている。
次に、具体的なマップ情報について、図11を用いて説明する。
図11(a)は、書き込み済みLBA(セクタ)を‘1’、未書き込みLBAを‘0’で表現したビットマップ形式のマップ情報の模式図である。この図11(a)では、ビットマップのバイト0ビット0がLBA=0が書き込み済みかどうかを、バイト0ビット1がLBA=1が書き込み済みかどうかを示している。したがって、かかる図11(a)の場合、書き込み済みのLBA領域は、LBA=0から1、4から11、24から39、48から62、となる。そして、LBA=64以降についても、図11(a)と同様にしてマップ情報を作成する。
図11(b)は、LBA単位ではなく、ドライブが使用しているユニットを単位とした、ビットマップ形式のマップ情報であり、書き込み済みユニットを‘1’、未書き込みユニットを‘0’で表現したビットマップ形式のマップ情報の模式図である。この図11(b)では、ビットマップのバイト0ビット0がユニットアドレス=0が書き込み済みかどうかを、バイト0ビット1がユニットアドレス=1が書き込み済みかどうかを示している。したがって、かかる図11(b)の場合、書き込み済みのユニットアドレスは、ユニットアドレス=0から1、4から11、24から39、48から62、となる。そして、ユニットアドレス=64以降についても、図11(b)と同様にしてマップ情報を作成する。
また、マップ情報は、図12に示すように、書き込み済み領域の先頭LBAと、その先頭LBAからの連続するセクタ数との組からなる構造の情報でもよい。同図は、書き込み済み領域の先頭LBAとその先頭LBAからの連続するセクタ数の一組を有効領域として、有効領域0、有効領域1という形で配列上のデータ構造になっている。
図12では、具体的に、有効領域の先頭LBAを8バイト、その先頭LBAからの連続するセクタ数を8バイトとした場合の例を示している。なお、図11(a)のビットマップ形式のマップ情報を、図12の配列構造で表現すると、有効領域0の先頭LBAが0でセクタ数が2、有効領域1の先頭LBAが4でセクタ数が8、有効領域2の先頭LBAが24でセクタ数が16、有効領域3の先頭LBAが48でセクタ数が15、となる。この図12の表現方法は、セクタ(LBA)単位ではなくユニット単位でも同様に作成することができる。
次に、上記したマップ情報を利用した場合のリビルドの手順について、図14を用いて説明する。なお、本実施形態においては、コピー元ドライブを第1ドライブD1、コピー先ドライブを第3ドライブD3として説明する。
まず、RAIDコントローラ3がリビルドを開始すると、RAIDコントローラ3が第3ドライブD3に対してドライブコピー準備の実行を要求する(ステップSb01)とともに、第3ドライブD3はドライブコピー準備を実行する(ステップSb02)。なお、ドライブコピー準備の処理内容は図16を使って説明する。
第3ドライブD3は、ドライブコピー準備が完了すると、処理完了をRAIDコントローラ3に通知する(ステップSb03)とともに、RAIDコントローラ3は、第1ドライブD1に、総セクタ数の読み出しを要求する(ステップSb04)。そして、第1ドライブD1は、RAIDコントローラ3からの要求に応じて、第1ドライブD1の総セクタ数を返す(ステップS1b05)。なお、RAIDコントローラ3がこのリビルドを開始する前に第1ドライブD1の総セクタ数を知っている場合は、この処理をしなくてもよい。
第1ドライブD1の総セクタ数を受信したRAIDコントローラ3は、以降の処理を、第1ドライブD1の全セクタについて完了するまで繰り返す。そして、RAIDコントローラ3は、第1ドライブD1に対して、マップ情報の読み出しを要求し(ステップSb06)、マップ情報の読み出し要求を受領した第1ドライブD1は、マップ情報を作成して、RAIDコントローラ3に返す(ステップSb07)。なお、ここで第1ドライブD1がRAIDコントローラ3に返すマップ情報のサイズは、どのような方法で決めてもよい。
例えば、RAIDコントローラ12から、先頭LBAとセクタ数によってLBA領域を指定して、第1ドライブD1が当該LBA領域内の有効データに関するマップ情報を返す方法でもよい。また、例えば、第1ドライブD1が、固定サイズのマップ情報と、先頭LBAに関する情報を返す方法でもよく、さらには、第1ドライブD1が固定サイズのマップ情報のみを返す場合でもよい。もちろん、この他の方法でもよいが、いずれの方法を使った場合でも、書き込み済みのセクタ(LBA)が判別できるマップ情報を返すことができることが必要である。
マップ情報を受信したRAIDコントローラ3は、受信したマップ情報を解析して、書き込み済みLBA領域を抽出する(ステップSb08)。その後、RAIDコントローラ3は、抽出した書き込み済みLBA領域の個々について、以降の処理を行うものとされ、書き込み済みLBA領域について、第1ドライブD1に読み出し要求を出す(ステップSb09)。
読み出し要求を受けた第1ドライブD1は、NANDフラッシュメモリ19からデータを読み出し(ステップSb10)、読み出したデータをRAIDコントローラ3に返す(ステップSb11)。そして、RAIDコントローラ3から要求されたデータサイズが一回のデータ転送で転送しきれないサイズの場合は、第1ドライブD1は上記転送処理を必要な回数だけ繰り返し、最後にRAIDコントローラ3に読み出しコマンド処理完了を通知する(ステップSb12)。
第1ドライブD1からデータを受信したRAIDコントローラ3は、当該書き込みLBA領域と同じ先頭LBAおよびセクタ数を指定して、第3ドライブD3に書き込み要求を発行する(ステップSb13)。そして、書き込み要求を受領した第3ドライブD3は、RAIDコントローラ3に書き込むデータを要求し(ステップSb14)、その要求に対してRAIDコントローラ3は、第1ドライブD1から読み出したデータを転送する(ステップSb15)。
書き込むデータを受領した第3ドライブD3は、RAIDコントローラ3から指定されたLBA領域に、受領したデータを書き込む(ステップSb16)とともに、ステップSb13における書き込み要求のサイズが、一回のデータ転送で転送しきれないサイズだった場合、このデータ転送処理とデータ書き込み処理を、必要な回数だけ繰り返す。最後に、ステップSb13で受領した書き込み要求に対する処理が完了することにより、第3ドライブD3はRAIDコントローラ3にコマンド処理完了を通知する(ステップSb17)。
次に、本実施形態におけるリビルドの手順について、図15a〜図15cを用いて説明する。なお、この場合も、コピー元ドライブを第1ドライブD1、コピー先ドライブを第3ドライブD3として説明する。
まず、RAIDコントローラ3は、リビルドを開始にあたって、ホスト2からのアクセス要求の処理を一時中断し(ステップS15001)、第3ドライブD3にドライブコピー準備の実行を要求する(ステップS15002)とともに、第3ドライブD3はドライブコピー準備を実行する(ステップS15003)。
そして、第3ドライブD3は、ドライブコピー準備が完了すると、処理完了をRAIDコントローラ3に通知する(ステップS15004)とともに、RAIDコントローラ3は、第1ドライブD1に、総セクタ数の読み出しを要求する(ステップS15005)。そして、第1ドライブD1は、RAIDコントローラ3からの要求に応じて、第1ドライブD1の総セクタ数を返す(ステップS15006)。なお、RAIDコントローラ3がこのリビルドを開始する前に第1ドライブD1の総セクタ数を知っている場合は、この処理をしなくてもよい。
その後、RAIDコントローラ3は、今後の処理のため、先頭LBAに0を、残りセクタ数としてステップS19006で取得した第1ドライブD1の総セクタ数を設定する(ステップS15007)とともに、第1ドライブD1に対して、先頭LBAを指定して、マップ情報の読み出しを要求する(ステップS15008)。マップ情報の読み出し要求を受領した第1ドライブD1は、マップ情報を作成して、RAIDコントローラ3に返す(ステップS15009)。
そして、マップ情報を受信したRAIDコントローラ3は、受信したマップ情報を解析して、書き込み済みLBA領域を抽出する(ステップS15010)とともに、抽出した書き込み済みLBA領域から一つ選択する(ステップS15011)。なお、抽出したLBA領域は複数存在することがある。その後、RAIDコントローラ3は、抽出した書き込み済みLBA領域の先頭LBAとセクタ数を指定して、第1ドライブD1に読み出し要求を出す(ステップS15012)。
読み出し要求を受けた第1ドライブD1は、NANDフラッシュメモリ19からデータを読み出して、読み出したデータをRAIDコントローラ3に返す(ステップS15013)。そして、第1ドライブD1からデータを受信したRAIDコントローラ3は、当該書き込みLBA領域と同じ先頭LBAおよびセクタ数を指定して、第3ドライブD3に書き込み要求を発行する(ステップS15014)。
書き込み要求を受領した第3ドライブD3は、RAIDコントローラ3から書き込むデータを受領して、RAIDコントローラ3から指定されたLBA領域に、受領したデータを書き込む(ステップS15015)とともに、RAIDコントローラ12は、ステップS15010で抽出して全書き込み済みLBA領域のコピーが完了したかどうかを判断する(ステップS15016)。
そして、抽出した全書き込み済みLBA領域のコピーが完了していない場合(ステップS15016、No)、ステップS15011に戻って次の書き込み済みLBA領域情報を取得し、処理を継続するとともに、抽出した全書き込み済みLBA領域のコピーが完了した場合(ステップS15016、Yes)、RAIDコントローラ3は、先頭LBAをステップS15009で取得したマップ情報の次のLBAに設定し、残りセクタ数をS15009で取得したマップ情報に含まれていたセクタ数だけ減算する(ステップS15017)。
ここで、RAIDコントローラ3は、残りセクタ数が0になったかどうか判断し(ステップS15018)、残りセクタ数が0ではなかった場合(ステップS15018、No)、ステップS15008に戻って次のマップ情報を取得し、処理を継続するとともに、残りセクタ数が0だった場合(ステップS15018、Yes)、第3ドライブD3にマッピングテーブル29の不揮発化を要求する(ステップS15019)。この要求は、例えば、SATAのFLUSHコマンドやSTANDBYコマンド、NVMeのFLUSHコマンド、SCSIのSYNCHRONIZE CACHEコマンドなどを使うことが考えられる。
マッピングテーブル29の不揮発化要求を受けた第3ドライブD3は、マッピングテーブル29の不揮発化を行い(ステップS15020)、不揮発化が完了したことをRAIDコントローラ3に通知する(ステップS15021)。このようにリビルドが完了することにより、RAIDコントローラ3は、ホスト2からのアクセス受付を再開する(ステップS15022)。
以上の処理により、第1ドライブD1における書き込み済みLBA領域のデータのみ、コピー先である第3ドライブD3にコピーすることができ、その結果、第3ドライブD3の状態も、第1ドライブD1の状態と同一となる。本実施例におけるリビルドの結果、第1ドライブD1と第3ドライブD3の内部状態が同一になることで、RAID1が目的とする冗長性の付与と信頼性の向上は達成できる。また、第1ドライブD1と、リビルド後の第3ドライブD3との書き込み性能はほぼ同一であり、RAID1の書き込み性能が故障前のドライブと比べて同一に保たれる。
次に、リビルドで必要となるドライブコピー準備処理について、図16a及び図16bを用いて説明する。
このドライブコピー準備処理とは、ドライブの全LBAを未書き込み状態にする処理であり、プロトコルに応じて適切なコマンドを使用すればよい。なお、本実施形態においては、ドライブコピー準備処理を、全LBA領域を対象とした開放機能(後述する)で実現する場合を例にとって説明する。
まず、ホストインターフェースコントローラ20は、RAIDコントローラ3から送信されたドライブコピー準備処理のコマンドを受信する(ステップS16001)と、受信したドライブコピー準備処理コマンドをコマンド処理部26に通知する(ステップS16002)とともに、コマンド処理部26は、受信したドライブコピー準備処理コマンドが正常かどうかをチェックする(ステップS16003)。
そして、コマンド処理部26は、チェックの結果、受信したコマンドが正常なコマンドではないと判断した場合(ステップS16004、No)、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にエラーを通知する(ステップS16018)とともに、チェックの結果、受信したコマンドが正常なコマンドだと判断した場合(ステップS16004、Yes)、記憶域管理部22に、ドライブコピー準備として全LBAを未書き込み状態にするよう指示する。
本実施例では、この処理は全LBA領域の開放処理で実現されるため、コマンド処理部26の指示内容は、全LBA領域の開放となる(ステップS16005)。そこで、記憶域管理部22は、マッピングテーブル29の全エントリを未書き込み状態にする(ステップS16006)。そして、記憶域管理部22は、マッピングテーブル29の処理を終えたことにより、NAND制御部25に、その更新したマッピングテーブル29をNANDフラッシュメモリ19に書き込む要求を発行する(ステップS16007)。
NAND制御部25は、マッピングテーブル29の書き込み先NANDアドレスを割り当て(ステップS16008)、NANDインターフェースコントローラ24に対して、マッピングテーブル29の格納位置と、割り当てたNANDアドレスとを示して、書き込みを要求する(ステップS16009)。そして、NANDインターフェースコントローラ24は、マッピングテーブル29を読み出してECC管理部23に転送して誤り訂正符号化を施した後、指定されたNANDアドレスの存在するNANDフラッシュメモリ19に転送する(ステップS16010)。
そして、NANDインターフェースコントローラ24は、当該NANDフラッシュメモリ19に、書き込みを要求する(ステップS16011)とともに、NANDインターフェースコントローラ24から書き込みを指示されたNANDフラッシュメモリ19は、データの書き込みを行う。そして、書き込みが完了すると、NANDフラッシュメモリ19は、書き込み処理が完了したことをNANDインターフェースコントローラ24が検出できるようにする。
その後、NANDインターフェースコントローラ24によりNANDフラッシュメモリ19が書き込みを完了したことを検出する(ステップS16012)と、NANDインターフェースコントローラ24は、書き込み処理を要求したNAND制御部25に、書き込みの完了を通知する(ステップS16013)。そして、NANDインターフェースコントローラ24から書き込み完了の通知を受信したNAND制御部25は、マッピングテーブル29が書き込まれたNANDアドレスとともに、記憶域管理部22にデータの書き込み完了を通知する(ステップS16014)。
マッピングテーブル29の書き込み完了通知を受信した記憶域管理部22は、マッピングテーブル29の書き込み先アドレスを記録する(ステップS16015)とともに、コマンド処理部26に、全LBA領域の開放処理完了を通知する(ステップS16016)。そして、コマンド処理部26は、この処理完了通知を受けて、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にコマンド処理完了を通知する(ステップS16017)。以上がドライブにおけるドライブコピー準備処理の手順である。
次に、図17を用いて開放処理におけるマッピングテーブル29の操作を説明する。かかる開放処理は、対象のLBA領域を未書き込み状態にする処理である。なお、上述のドライブコピー準備処理は、全LBA領域が開放対象なので、マッピングテーブル29について、すべてのユニットアドレスに対応するエントリを未書き込み状態にすることに相当する。したがって、マッピングテーブル29のエントリの中で、NANDアドレスが記録されているエントリを、すべて未書き込み状態にする。
図17では、ユニットアドレス=1、2、4にNANDアドレスが記録されている。これは、ユニットアドレス=1の最新データがNANDアドレスAに、ユニットアドレス=2の最新データがNANDアドレスBに、ユニットアドレス=4の最新データがNANDアドレスCに、記憶されていることを意味する。この状態でドライブコピー準備処理による開放処理を行った場合、図17のように、ユニットアドレス=1、2、4のエントリを全て未書き込み状態にする。この操作により、ユニットアドレス=1、2、4は最新データがドライブに記憶されていないことになり、開放処理が実現される。
本第1の実施形態に係る発明の従来のリビルドと比較した場合の技術的優位性については、本明細書の末尾にて説明する。同様に、以降で説明する各実施形態に係る発明の従来技術と比較した場合の技術的優位性についても、本明細書の末尾にて説明する。
次に、本発明の第2の実施形態について説明する。なお、コンピュータシステム1の構成は、第1の実施形態と同様である。
本実施形態に係るコンピュータシステム1は、コピー先ドライブにおける書き込みアドレス領域を未書き込みアドレス領域とする開放機能を有し、且つ、コピー部(RAIDコントローラ3)は、コピー元ドライブの全データをコピー先ドライブに書き込んでコピーするとともに、マップ情報に基づいてコピー元ドライブにおける未書き込みアドレス領域を抽出し、その抽出した未書き込みアドレス領域に対応するコピー先ドライブのアドレス領域を開放機能により未書き込みアドレス領域とするものである。
本実施形態においては、開放処理は、ドライブ内の、あるLBAのデータが書き込まれた記憶領域を開放する、という処理を行うものとされ、かかる処理は、SCSIではUNMAPコマンドで、SATAとNVMeではDataset Managementコマンドで、ドライブに対して要求を発行できる。
図13は、開放対象領域情報の一例の模式図である。この開放対象領域情報の構造は、図12で説明した、書き込み済み領域の先頭LBAと、その先頭LBAからの連続するセクタ数との組からなる、マップ情報の構造に似ている。図13では、具体的に、開放対象領域の先頭LBAを8バイト、その先頭LBAからの連続するセクタ数を8バイトとした場合の例を示している。
そして、無効領域0が、開放対象領域の1つめ、無効領域1が開放対象領域の2つめ、という形で、複数の開放対象領域が配列構造をなしている。ドライブはこの開放対象領域情報から解放対象領域を一つずつ取得し、図18を用いて説明する処理を行う。
次に、ドライブにおける開放処理の手順について、図18a〜図18cを用いて説明する。
まず、ホストインターフェースコントローラ20は、RAIDコントローラ3から送信された開放コマンドを受信する(ステップS18001)と、その受信した開放コマンドをコマンド処理部26に通知する(ステップS18002)。
そして、コマンド処理部26は、受信した開放コマンドが正常かどうかをチェックし(ステップS18003)、チェックの結果、受信したコマンドが正常なコマンドではないと判断した場合(ステップS18004、No)、ホストインターフェースコントローラ20を操作して、RAIDコントローラ3にエラーを通知する(ステップS18020)とともに、チェックの結果、受信したコマンドが正常なコマンドだと判断した場合(ステップS18004、Yes)、ホストインターフェースコントローラ20を通じて、RAIDコントローラ3から、開放対象領域の情報を受信する(ステップS18005)。開放対象領域情報とは、少なくとも、開放対象領域の先頭LBAとセクタ数とを含む情報であって、複数の開放対象領域の情報を含んでいてもよい。
そして、ホストインターフェースコントローラ20は、RAIDコントローラ3から受信した開放対象領域情報を、コマンド処理部26から指示された、データバッファ21内の位置に格納し(ステップS18006)、開放対象領域情報の受信を完了したことをコマンド処理部26に通知する(ステップS18007)。その後、コマンド処理部26は、開放対象領域情報が格納されたデータバッファ21内の位置とともに、記憶域管理部22に、開放コマンドを通知する(ステップS18008)。
記憶域管理部22は、複数存在し得る開放対象領域情報から、開放対象領域情報を一つ取得する(ステップS18009)とともに、ユニットアドレスとして開放対象領域の先頭LBAのユニットアドレスを設定し、残りユニット数として同開放対象領域のユニット数を設定する(ステップS18010)。その後、記憶域管理部22は、マッピングテーブル29の当該ユニットアドレスのエントリを参照し(ステップS18011)、取得したエントリがNANDアドレスかどうかを判断する(S18012)。
そして、エントリの内容がNANDアドレスではなかった場合(ステップS18012、No)、このユニットについては何も処理せずステップS18015に進むとともに、エントリの内容がNANDアドレスだった場合、記憶域管理部22は、NAND制御部25に対して、当該NANDアドレスのデータが開放されたことを通知する(ステップS18013)。この通知により、NAND制御部25は、通知を受けたNANDアドレスのデータが不要であることを認識する。
その後、記憶域管理部22は、マッピングテーブル29の、当該ユニットアドレスのエントリを未書き込み状態にする(ステップS18014)。かかるマッピングテーブル29のエントリを未書き込み状態にする工程については、図17を用いて既述した。そして、記憶域管理部22は、次のユニットの処理を行うため、ユニットアドレスに1を加算し、残りユニット数から1を減算し(ステップS18015)、残りユニット数が0かどうかをチェックする(ステップS18016)。
残りユニット数が0ではなかった場合(ステップS18016、No)、当該開放対象領域の処理を継続するため、ステップS18011に戻って処理を継続するとともに、残りユニット数が0だった場合(ステップS18016、Yes)、当該開放対象領域に対する処理は完了したので、ステップS18005で取得した開放対象領域情報に含まれていたすべての開放対象領域に対する処理が完了したかどうかをチェックする。このチェックは、残り開放対象領域が0かどうかチェックすることで行われる(ステップS22017)。
残り開放対象領域数が0ではなかった場合(ステップS18017、No)、ステップS18009に戻って、次の開放対象領域に対する処理を行うとともに、残り開放対象領域数が0だった場合(ステップS18017、Yes)、これでステップS18001において受信した開放コマンドの処理がすべて完了したことを意味する。そこで記憶域管理部22は、開放コマンドの処理が完了したことをコマンド処理部26に通知する(ステップS18018)。
そして、開放コマンド処理完了の通知を受けたコマンド処理部26は、ホストインターフェースコントローラ20を通じて、RAIDコントローラ3に開放コマンド処理完了を通知する(ステップS18019)。以上がドライブにおける開放処理の処理手順である。
図19は、開放対象領域情報の別の一例の模式図である。同図では、開放対象領域の先頭LBAを6バイト、その先頭LBAからの連続するセクタ数を2バイトとした場合の例を示している。そして、無効領域0が、開放領域の1つめ、無効領域1が開放対象領域の2つめ、という形で、複数の開放対象領域が配列構造をなしている。
ドライブは、この開放対象領域情報から解放対象領域を一つずつ取得し、図18で説明した処理を行う。この場合、図13の開放対象領域情報と比較して、領域一つを表現するサイズが半分となっており(図13では16バイトに対して図19では8バイト)、少ないデータサイズで多くの開放対象領域を指定することができる。なお、図13と図19のどちらの形式の開放対象領域情報を使用するかは、準拠する標準規格などによって、ドライブとRAIDコントローラ3の間で整合性がとれていればよい。
次に、本実施形態におけるリビルドの手順について、図20を用いて説明する。
まず、RAIDコントローラ3は、交換によって新たに接続された第3ドライブD3に対して、ドライブコピー準備処理を要求する(ステップSc01)とともに、第3ドライブD3は、ドライブコピー準備を実行する(ステップSc02)。このドライブコピー準備の処理手順は、図16を用いて説明した通りである。
そして、第3ドライブD3は、ドライブコピー準備が完了すると、RAIDコントローラ3に処理完了を通知する(ステップSc03)とともに、第3ドライブD3からドライブコピー準備完了の通知を受信したRAIDコントローラ3は、第1ドライブD1からデータをコピーする準備として、第1ドライブD1に全セクタ数(全LBA数)を読み出す要求を発行する(ステップSc04)。その後、第1ドライブD1が、RAIDコントローラ3に、第1ドライブD1の総セクタ数(LBA数)を送信する(ステップSc05)と、RAIDコントローラ3は、第1ドライブD1のすべてのセクタ(LBA)からデータを読み出し、読み出したデータを、第1ドライブD1と同一のLBAを指定して、第3ドライブD3に書き込む。
具体的には、まずRAIDコントローラ3は、第1ドライブD1に対してReadコマンドを発行する(ステップSc06)とともに、第1ドライブD1は、RAIDコントローラ3から指示されたLBA領域のデータを、図8a〜図8cを用いて説明した手順で読み出し(ステップSc07)、RAIDコントローラ3に送信する(ステップSc08)。その後、第1ドライブD1は、RAIDコントローラ3に、受信したReadコマンドの完了を通知する(ステップSc09)。
次に、RAIDコントローラ3は、第1ドライブD1から読み出したデータを、同一のLBA領域に書き込むように、第3ドライブD3にWriteコマンドを発行する(ステップSc10)とともに、第3ドライブD3は、RAIDコントローラ3からWriteコマンドを受信すると、図7a〜図7cを用いて説明した手順で、Writeコマンドを処理する。すなわち、第3ドライブD3は、まずRAIDコントローラ3に書き込むデータを要求し(ステップSc11)、RAIDコントローラ3からデータを受領すると(ステップSc12)、受領したデータをNANDフラッシュメモリ19に書き込む(ステップSc13)。
そして、第3ドライブD3は、RAIDコントローラ3から受信したWriteコマンドが完了すると、RAIDコントローラ3にWriteコマンドの完了を通知する(ステップSc14)とともに、RAIDコントローラ3は、このステップS11006からステップS11014までの手順を繰り返すことで、第1ドライブD1のすべてのLBAからデータを読み出し、読み出したデータを、第3ドライブD3の同一LBA領域に書き込む。
その後、RAIDコントローラ3は、第1ドライブD1にマップ情報の読み出しを要求する(ステップSc15)とともに、マップ情報の読み出し要求を受信した第1ドライブD1は、マップ情報を生成してRAIDコントローラ3に転送する(ステップSc16)。第1ドライブD1においては、マッピングテーブル29から、例えば、図11や図12を用いて説明した形式のマップ情報や、図13や図19を用いて説明した開放対象領域情報と同じ形式のマップ情報を作成することが考えられる。
本実施形態においては、後ほど、第3ドライブD3内の、第1ドライブD1において未書き込みであるLBAに対して開放要求を発行するので、予めマップ情報の形式が開放要求の開放対象領域情報の形式と同じであるほうが好ましい。また、第1ドライブD1としても、図12は書き込み済みLBA領域を配列形式としたものであり、図13や図19はその逆で、未書き込みLBA領域を配列形式とするものなので、マップ情報作成の手間はそれほど変わらない。
その後、第1ドライブD1からマップ情報を受信したRAIDコントローラ3は、受信したマップ情報を解析し、開放コマンドにおける開放対象領域情報を作成する(ステップSc17)。そして、RAIDコントローラ3は、データコピーが完了した第3ドライブD3に対して、作成した開放対象領域に対する開放コマンドを発行する(ステップSc18)とともに、開放コマンドを受領した第3ドライブD3は、RAIDコントローラ3からの指示に従って開放処理を行う(ステップSc19)。開放コマンドの処理手順は、図18を用いて説明した通りである。
第3ドライブD3は、開放コマンドの処理が完了した後、RAIDコントローラ3にコマンド処理完了を通知する(ステップSc20)とともに、RAIDコントローラ3は、開放処理にかかわるステップSc18からステップSc20の処理を必要なだけ繰り返す。以上が、本実施形態におけるリビルドの手順である。このように、本実施形態で説明した手順でリビルドを行うことで、コピー元ドライブである第1ドライブD1の書き込み済みLBA領域が広い場合でも、従来のリビルドとさほど変わらない時間で、第3ドライブD3の内部状態を第1ドライブD1の内部状態と同一にすることができる。
しかるに、第1の実施形態では、コピー元ドライブの書き込み済みLBAのデータのみをコピー先ドライブに書き込むことで、コピー元ドライブとコピー先ドライブの状態を同一とすることができるとともに、コピー元ドライブの書き込み済みLBAが少ない場合に、従来のリビルドと比較して所要時間を大幅に短縮できることを示した。しかし、第1の実施形態は、コピー元ドライブである第1ドライブD1の書き込み済みLBAが多い場合は、第1ドライブD1のマップ情報の読み出しや、RAIDコントローラ3におけるマップ情報の解析、などの処理オーバーヘッドにより、リビルド時間の大幅な短縮は難しい。
そこで、本第2の実施形態によれば、従来のリビルドと同じ手順でデータのコピーを行った後に、コピー元ドライブにおいて未書き込みのLBAを、コピー先ドライブで未書き込み状態にするので、従来のリビルドと比較して処理オーバーヘッドの増加を抑制しつつ、コピー元ドライブとコピー先ドライブの内部状態を同一にすることができる。
次に、本発明の第3の実施形態について説明する。なお、コンピュータシステム1の構成は、第1の実施形態と同様である。
本実施形態に係るコンピュータシステム1は、抽出したコピー元ドライブの未書き込みアドレス領域のうち、予め設定したサイズ以上の未書き込みアドレス領域のみ、コピー先ドライブにおいて未書き込みアドレス領域とするものである。すなわち、第2の実施形態においては、第1ドライブD1が作成したマップ情報を解析することで得るものとされ、すべての第1ドライブD1の未書き込みLBA領域について、第3ドライブD3に開放コマンドを発行していたが、例えば1セクタのみの未書き込みLBA領域が多数あった場合、開放コマンドの発行と開放処理の数も多数になる一方で、当該開放コマンドを処理することによる第3ドライブD3の余裕容量の空き領域増加度合いは低いものであった。
そこで、第3の実施形態においては、予め定めたサイズ(セクタ数)以上のLBA領域が未書き込みだった場合にのみ、RAIDコントローラ12は第3ドライブD3に開放コマンドを発行するよう構成されている。具体的には、本実施形態は、例えば図20で説明した処理手順において、マップ情報を解析した後、開放コマンドを発行する際に、サイズが4KB以上の領域についてのみ実際に開放コマンドを発行するようになっている。この「4KB」の部分はパラメータとして変更可能としてもよく、4KB以外では、例えば、NANDフラッシュメモリのページサイズの整数倍(16KBや32KB)を使うことが考えられる。本実施形態に係る処理により、開放コマンドのオーバーヘッドを抑えながら、第1ドライブD1と第3ドライブD3の内部状態を可能な限り近づけることできる。
次に、本発明の第4の実施形態について説明する。なお、コンピュータシステム1の構成は、第1の実施形態と同様である。
本実施形態に係るコンピュータシステム1は、コピー元ドライブからコピー先ドライブにデータをコピーする際、コピー元ドライブから読み出したデータに基づいて未書き込みアドレス領域を検出し、その検出された未書き込みアドレス領域に対応するコピー先ドライブのアドレス領域にデータを書き込まないものである。
具体的には、本実施形態に係るコピー部は、コピー元ドライブに対してアドレス領域を指定してデータの読み出しが可能とされ、予め設定した特定のデータが読み出された場合、そのアドレス領域に対応するコピー先ドライブのアドレス領域を未書き込みアドレス領域とするよう構成されている。また、別の形態のコピー部として、コピー元ドライブに対してアドレス領域を指定してデータの読み出しが可能とされ、予め設定した特定のデータとは異なるデータが読み出された場合、そのアドレス領域に対応するコピー先ドライブのアドレス領域を書き込み済みアドレス領域とするよう構成してもよい。
これにより、第1の実施形態から第3の実施形態においては、第1ドライブD1がマップ情報の作成機能と、マップ情報の読み出し機能とを、備えることが必要であったのに対し、本第4の実施形態においては、マップ情報を使用せずに、第3ドライブD3の未書き込みLBA領域のサイズを少なくとも第1ドライブD1以上にすることができる。本実施形態は、図8を用いて説明したように、ドライブは、未書き込みLBA領域に対するReadコマンドに対して予め決められた特定データを返すことである。
この場合の特定データとは、例えば、オールゼロ(すなわち、指定されたアドレス領域のデータが全てゼロ)やオール‘1’(すなわち、指定されたアドレス領域のデータが全て1)などのデータである。すなわち、第1ドライブD1の全LBA領域に対してReadコマンドを発行した際に、特定データが読み出せたLBA領域は、第3ドライブD3において未書き込み状態にしても問題がない。なぜなら、第3ドライブD3においても、未書き込みLBA領域へのReadコマンドに対しては特定データを返すからである。
したがって、実際に第1ドライブD1内で書き込み済みだったか未書き込みだったかにかかわらず、第1ドライブD1から特定データが読めたLBA領域を第3ドライブD3においては未書き込み領域のままにしておけば、第1ドライブD1と第3ドライブD3の当該LBA領域へのReadコマンドに対しては両ドライブから特定データが読めるため、問題とならないのである。
次に、本実施形態におけるリビルドの手順について、図21を用いて説明する。なお、図21のステップSd01からステップSd05までは、第2の実施形態における図20で説明したステップと同一であるため、説明を省略する。
RAIDコントローラ3は、第1ドライブD1に対して、先頭LBAとセクタ数を指定してReadコマンドを発行する(ステップSd06)とともに、第1ドライブD1は、RAIDコントローラ3からの要求に応じてデータを読み出し(ステップSd07)、読み出したデータをRAIDコントローラに転送する(ステップSd08)。このデータ読み出しとデータ転送は、必要に応じて繰り返される。
そして、第1ドライブD1は、RAIDコントローラ3に対して、受信したReadコマンドの完了を通知する(ステップSd09)とともに、RAIDコントローラ3は、ステップSd08において第1ドライブD1から転送されたデータの中身を解析し、特定データではないLBA領域、つまり書き込み済みLBA領域を抽出する(ステップSd10)。書き込み済み領域を抽出したRAIDコントローラ3は、抽出した各領域について、第3ドライブD3への書き込み処理を行う。
まず、RAIDコントローラ3は、第3ドライブD3に対して抽出した書き込み済み領域一つについて、先頭LBAとセクタ数を指定してWriteコマンドを発行する(ステップSd11)。すると、第3ドライブD3はRAIDコントローラ3に対して書き込むデータを要求し(ステップSd12)、その要求に応じてRAIDコントローラ3がデータ転送を行う(ステップSd13)。このデータ転送処理は、必要に応じて繰り返される。
データを受領した第3ドライブD3は、受領したデータをNANDフラッシュメモリ19に書き込む(ステップSd14)とともに、ステップSd11で発行されたWriteコマンドに対するデータ転送と書き込み処理が完了した後、第3ドライブD3はRAIDコントローラ3に対してコマンド完了を通知する(ステップSd15)。このデータ書き込み処理は、ステップSd10にて抽出した各書き込み済みLBA領域に対して行う。以上が、本実施形態におけるリビルドの手順である。
本実施形態に係るリビルドにより、ドライブがマップ情報作成機能を備えていなくても、少なくとも第1ドライブD1の未書き込みLBA領域を第3ドライブD3でも未書き込みLBA領域とすることができる。この結果、コピー先である第3ドライブD3の内部状態について、書き込み性能が第1ドライブD1より低下しないようにすることができる。
この第4の実施形態のリビルドは、特に、第1ドライブD1の書き込み済みLBA領域が狭い場合に、リビルドにかかる時間の短縮効果も得られる。
次に、本発明の第5の実施形態について説明する。なお、コンピュータシステム1の構成は、第1の実施形態と同様である。
本実施形態に係るコンピュータシステム1は、コピー先ドライブにおける書き込み済みアドレス領域を未書き込みアドレス領域とする開放機能を有し、且つ、コピー部(RAIDコントローラ3)は、コピー元ドライブからコピー先ドライブにデータをコピーする際、コピー元ドライブの全データをコピー先ドライブに書き込んでコピーするとともに、コピー元ドライブから読み出したデータに基づいて未書き込みアドレス領域を検出し、その検出された未書き込みアドレス領域に対応するコピー先ドライブのアドレス領域を開放機能により未書き込みアドレス領域とするものである。
すなわち、第4の実施形態においては、コピー元ドライブである第1ドライブD1から読み出したデータが特定データかどうかチェックすることで、第3ドライブD3において未書き込みとしても問題ないLBA領域を見つけ、第3ドライブD3の当該LBA領域に書き込みを行わなかったのに対し、本第5の実施形態においては、その第4の実施形態と同様、コピー元ドライブである第1ドライブD1から読み出したデータが特定データかどうかチェックした後に、特定データだったLBA領域に対して開放コマンドを発行するよう構成されている。つまり、第2の実施形態と同様に開放コマンドを使用して第3ドライブD3に未書き込みLBA領域を設定するものの、本第5の実施形態においては、マップ情報を必要としないのである。
次に、本実施形態におけるリビルドの手順について、図22を用いて説明する。なお、図22のステップSe01からステップSe09までは、第4の実施形態におけるリビルド手順と同一であるため、説明を省略する。
RAIDコントローラ3は、ステップSe08において第1ドライブD1から転送されたデータの中身を解析し、特定データであるLBA領域、つまり未書き込みLBA領域を抽出する(ステップSe10)とともに、RAIDコントローラ3は、第3ドライブD3に対して、第1ドライブD1から読み出したデータを、第1ドライブD1と同じLBA領域を指定して書き込む要求を発行する(ステップSe11)。なお、ステップSe12からステップSe15までのデータ書き込みの手順は、第4の実施形態と同じ処理であるため、説明を省略する。
データ書き込み処理完了後、RAIDコントローラ3は、抽出した未書き込みLBA領域について、第3ドライブD3に、開放コマンドを発行する(ステップSe16)。すると、第3ドライブD3は、この開放コマンドを処理し(ステップSe17)、処理完了後にRAIDコントローラ3に対してコマンド処理完了を通知する(ステップSe18)。
なお、第1ドライブD1からの1回のReadコマンドで読み出したLBA領域の中に、複数の未書き込み領域が含まれていた時、例えば、LBAの小さい順に順番にデータ書き込みもしくは開放コマンドを発行してもよい。また、例えば、先に書き込み済みLBA領域のデータを書き込むWriteコマンドを第3ドライブD3に発行して当該Writeコマンドが完了した後で、開放コマンドを第3ドライブD3に発行してもよい。以上が、本実施形態におけるリビルドの手順である。
本実施形態に係るリビルドにより、ドライブがマップ情報作成機能を備えていなくても、少なくとも第1ドライブD1の未書き込みLBA領域を第3ドライブD3でも未書き込みLBA領域とすることができる。この結果、コピー先である第3ドライブD3の内部状態について、書き込み性能が第1ドライブD1より低下しないようにすることができる。本第5の実施形態に係るリビルドは、特に、第1ドライブD1の書き込み済みLBA領域が広い場合に、開放コマンド発行による処理オーバーヘッドを抑えながら、コピー元である第1ドライブD1の内部状態とコピー先である第3ドライブD3の内部状態を近づけることができる。
次に、本発明の第6の実施形態について説明する。
本実施形態に係るコンピュータシステム1’は、図23に示すように、デュプリケータ33と、複数のドライブ(本実施形態においては第1ドライブD1及び第3ドライブD3)とを有して構成されている。なお、デュプリケータ33は、本発明に係るコンピュータシステム1のRAIDコントローラ3に相当するものである。
本実施形態に係るデュプリケータ33は、例えば、第1ドライブD1のデータや内部状態を第3ドライブD3にコピーするものとされる。かかるデュプリケータ33に接続されるドライブは、本実施形態の如く2つである場合の他、3つ以上であってもよく、例えば、あるドライブのデータや内部状態を2つ以上のドライブにコピーするためにも使用することができる。
具体的には、デュプリケータ33は、図24に示すように、CPU34と、データバッファ16と、コピー制御部35と、ドライブ制御部14と、インターフェースコントローラ13と、ドライブ管理部12とを有して構成され、これら構成要素がバス17で接続されている。なお、デュプリケータ33とドライブ(第1ドライブD1及び第3ドライブD3)は、バス5で接続される。かかるバス5は、SATAやNVMe等のバスである。
また、図24においては、インターフェースコントローラ13とドライブ(第1ドライブD1及び第3ドライブD3)を接続するバス5は一種類で記載しているが、ドライブごとに異なっていてもよい。さらに、バス5は同一とされ、複数のドライブのプロトコルがそれらドライブ間で異なっていてもよいが、その場合、デュプリケータ33が、バスごと、若しくはプロトコルごとのインターフェースコントローラ33を備えるものとされる。なお、デュプリケータ33内のデータバッファ16、ドライブ制御部14、ドライブ管理部12、インターフェースコントローラ13、及びバス17は、RAIDコントローラ3を構成する要素と同じものであるため、ここでは説明を省略する。
CPU34は、コピー制御部35を含む、デュプリケータ33の内部構成要素を制御し、ドライブ間でのデータや内部状態のコピーを実現するものである。コピー制御部35は、RAIDコントローラ3のリビルド制御部3に相当するもので、CPU34からの制御に応じて、具体的なコピー処理を実現するものである。そして、デュプリケータ33が実現する処理は、第1の実施形態から第5の実施形態におけるRAIDコントローラ3が実現する処理と同等のものであり、その役割や果たす機能及び実行する処理は、RAIDコントローラ3のそれと変わらない。
デュプリケータ33は、例えば、ドライブコピー処理の開始を受け付ける入力機能(具体的には、コピー部によるコピーを開始させる操作手段)を備えている。この入力機能は、キーボードのような汎用入力機能や、プッシュボタンのような単機能入力機能でもよい。かかる入力機能によって、外部から、ドライブコピー処理の開始を指示されると、その入力をCPU34が検出し、CPU34からコピー制御部35にコピー開始指示を送ることで、第1の実施形態から第5の実施形態において説明したようなドライブコピー処理の実行を開始する。また、この入力機能からのドライブコピー処理開始通知を、コピー制御部35が直接受け取るようにしてもよい。
次に、本発明の第7の実施形態について説明する。
本実施形態に係るコンピュータシステム1’は、第6の実施形態と同様のデュプリケータ33を有するものであり、図26に示すように、複数のドライブ(本実施形態においては第1ドライブD1及び第3ドライブD3)と接続するためのバス5と、コピー実行指示を受け付けるための入力装置38(コピー部によるコピーを開始させる操作手段)と、コピー方法の解析指示を受け付けるための入力装置35と、コピー方法の指示を受け付けるための入力装置36(コピー方法を任意に選択可能な選択手段)と、選択されているコピー方法を表示するための表示装置37(選択手段により選択されたコピー方法を報知する報知手段)と、コピー実行中であることを表示するための表示装置39と、コピー完了を表示するための表示装置40とを具備している。
入力装置36は、ユーザがコピー方法を選択するための入力装置である。かかる入力装置36は、例えば排他選択型(択一選択式)のプッシュボタンから成るものとされている。表示装置37、39、40は、例えばLED等の表示装置から成るもので、図26においては、コピー方法Dに相当する表示装置37のみ点灯するとともに、他のコピー方法に相当する表示装置37は消灯しており、コピー方法Dが選択されていることを表示している。
入力装置35は、後述する手順によって、コピー元ドライブの状態コピーにあたって最適な方法の解析指示を受け付けるためのものであり、例えば、プッシュボタンから成る。入力装置38は、実際にドライブコピーの実行指示を受け付けるためのものであり、例えば、プッシュボタンから成る。そして、ドライブコピーを行うユーザが、コピー元ドライブの内部状態を十分に把握していて、第1の実施形態から第5の実施形態のどの方法を用いるのが最もコピーの効率が良いかわかっている場合は、入力装置36を使って所望のコピー方法を選択し、入力装置38を使ってデュプリケータ33にドライブコピーの実行を指示し得るようになっている。
一方、ユーザが効率の良いコピー方法がわからない場合は、入力装置35を操作してどのコピー方法が最も効率が良いかをデュプリケータ33に解析させ、その解析結果がいずれかの方法になるのかを出力装置37で確認させることができ、その後、入力装置38でデュプリケータ33にドライブコピーの実行を指示し得るようになっている。なお、デュプリケータ33は、ここで説明した入力装置や表示装置以外に、他の形態の入力装置や表示装置を備えても構わない。
すなわち、本実施形態においては、互いに異なるコピー方法を任意に選択可能とされるとともに、コピー部は、コピー元ドライブの状態に応じて、コピー方法を選択してコピーするものとされており、コピー元ドライブにおける書き込み済みアドレス領域の数と予め設定した閾値とを比較することによりコピー方法が選択されるものであってもよく、コピー元ドライブにおけるデータの断片化率と予め設定した閾値とを比較することによりコピー方法が選択されるものであってもよい。
図27は、ドライブのLBA領域の状態に関する分類図を示しており、コピー元ドライブの内部状態をタイプ(TYPE)別に示した模式図である。本実施形態においては、デュプリケータ33における効率の良いコピー方法の解析は、コピー元ドライブのLBA領域の状態が、図27のType1からType4のうちのどれに該当するかを判断することで行うようになっている。以下、同図に示すType1からType4について、図28も交えながら説明する。
Type1(タイプ1)は、コピー元ドライブ(第1ドライブD1)のLBA領域について、断片化率が高く、かつ書き込み済みLBA数が少ないものである。具体的には、図28で示されるType1のような状態であり、LBA領域が書き込み済み領域と未書き込み領域とに細かく分割されていて、かつ未書き込み領域のほうが多いパターンである。コピー元ドライブ(第1ドライブD1)がこのType1の場合、マップ情報から作成した開放対象領域情報の数が多くなり、開放コマンドの発行数も多くなる。よって、この場合、開放対象領域情報の数が多くなり、開放コマンドの発行数が多くなるので、リビルドもしくはドライブコピーにかかる時間が長くなることを意味する。したがって、コピー元ドライブのLBA領域がType1の場合、開放コマンドを使用せず、有効データのみコピーする方法、すなわち第4の実施形態に係るコピー方法を選択するのが適している。
Type2(タイプ2)は、コピー元ドライブ(第1ドライブD1)のLBA領域について、断片化率が低く、かつ書き込み済みLBA数が少ないものである。具体的には、図28で示されるType2のような状態であり、LBA領域が書き込み済み領域と未書き込み領域とに粗く分割されていて、かつ未書き込み領域のほうが多いパターンである。コピー元ドライブ(第1ドライブD1)がこのType2の場合、マップ情報から作成した開放対象領域情報の数は少なく、開放コマンドの発行数も少なくて済む。一方で、書き込み済みLBA数が少ないことから、書き込み済みLBAのデータのみをコピーすることで、リビルドもしくはドライブコピーにかかる時間を短縮することができる。また、書き込み済みLBA数が少ないことから、開放コマンドの処理に時間がかかる可能性がある。したがって、コピー元ドライブのLBA領域がType2の場合、開放コマンドを使用せず、有効データのみコピーする方法、すなわち第1の実施形態若しくは第4の実施形態のコピー方法を選択するのが適している。なお、第1の実施形態と第4の実施形態のどちらを選択するかは、コピー元ドライブからマップ情報を取得できるかどうかで判断すればよい。
Type3(タイプ3)は、コピー元ドライブ(第1ドライブD1)のLBA領域について、断片化率が低く、かつ書き込み済みLBA数が多いものである。具体的には、図28で示されるType3のような状態であり、LBA領域が書き込み済み領域と未書き込み領域とに粗く分割されていて、かつ書き込み済み領域のほうが多いパターンである。コピー元ドライブ(第1ドライブD1)がこのType3の場合、マップ情報から作成した開放対象領域情報の数は少なく、開放コマンドの発行数も少なくて済む。また、書き込み済みLBA数が多いことから、開放コマンドの処理にかかる時間も短い。
したがって、コピー元ドライブのLBA領域がType3の場合、コピー元ドライブの全LBA領域のデータをコピーした後に開放コマンド発行によって未書き込み領域を作成する方法、すなわち第2の実施形態若しくは第5の実施形態のコピー方法を選択するのが適している。なお、第2の実施形態と第5の実施形態のどちらを選択するかは、コピー元ドライブからマップ情報を取得できるかどうかで判断すればよい。さらに、Type3の場合、第3の実施形態を選択することを検討してもよい。つまり、開放コマンドを発行するかどうか判断する際に、開放対象領域が予め決めたセクタ数以上の場合のみ、実際に開放コマンドを発行する方法である。
Type4(タイプ4)は、コピー元ドライブ(第1ドライブD1)のLBA領域について、断片化率が高く、かつ書き込み済みLBA数が多いものである。具体的には、図28で示されるType4のような状態であり、LBA領域が書き込み済み領域と未書き込み領域とに細かく分割されていて、かつ書き込み済み領域のほうが多いパターンである。このType4の場合、書き込み済み領域の数が多いため、書き込み済みLBAのみコピーする方法は、コピー元ドライブへのReadコマンド発行回数およびコピー先ドライブへのWriteコマンド発行回数が多くなり、リビルドもしくはドライブコピーにかかる時間が長くなる。そのため、このType4の場合、コピー元ドライブの全LBA領域をコピー先ドライブにコピーしたほうが時間効率を高くできる。
一方、コピー元ドライブがこのType4の場合、マップ情報から作成した開放対象領域情報の数が多くなり、開放コマンドの発行数も多くなる。このため、コピー元ドライブ13からマップ情報を取得する処理に時間がかかる可能性がある。しかし、Type4の場合、書き込み済みLBA数が多いので、開放コマンドによって未書き込み領域を生成することは、コピー先ドライブの書き込み性能をコピー元ドライブに近づけるために必要である。したがって、コピー元ドライブのLBA領域がType4の場合、コピー元ドライブの全LBA領域のデータをコピーした後に、マップ情報を使用せずに開放コマンド発行によって未書き込み領域を作成する方法、すなわち第5の実施形態に係るコピー方法を選択するのが適している。
次に、本実施形態における最も効率が良いコピー方法の解析手順について、図25を用いて説明する。
デュプリケータ33は、コピー元である第1ドライブD1に、書き込み済みLBA数の読み出し要求を発行する(ステップS25001)とともに、第1ドライブD1は、デュプリケータ33に対し、書き込み済みLBA数を通知する(ステップS25002)。続いて、デュプリケータ33は、第1ドライブD1に断片化率の読み出し要求を発行する(ステップS25003)とともに、第1ドライブD1は、デュプリケータ33に、断片化率を通知する(ステップS25004)。このとき、第1ドライブD1が書き込み済みLBA数の通知や断片化率の通知機能を持たない場合、第4の実施形態や第5の実施形態で説明したように、読み出したセクタデータが予め決められた特定データなら未書き込みセクタである、と判断すればよい。
次に、デュプリケータ33は、第1ドライブD1の書き込み済みLBA数が閾値以下かどうかをチェックし(ステップS25005)、第1ドライブD1の書き込み済みLBA数が閾値以下だった場合(ステップS25005、Yes)、第1ドライブD1の断片化率が閾値以下かどうかをチェックする(ステップS25006)。そして、第1ドライブD1の断片化率が閾値以下だった場合(ステップS25006、Yes)、第1ドライブD1の状態がType2であると判断するとともに、デュプリケータ33は、第1ドライブD1からマップ情報を読み出せるかどうかをチェックする(ステップS25007)。
その後、デュプリケータ33は、第1ドライブD1からマップ情報が読み出せる場合(ステップS25007、Yes)、この第1ドライブD1からのデータコピーにおいては第1の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25008)。一方、第1ドライブD1からマップ情報が読み出せない場合(ステップS25007、No)、デュプリケータ33は、この第1ドライブD1からのデータコピーにおいては第4の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25009)。
また、第1ドライブD1の断片化率が閾値より高かった場合(ステップS25006、No)、第1ドライブD1の状態がType1であると判断し、この第1ドライブD1からのデータコピーにおいては、第4の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25009)。そして、ステップS25005に戻り、第1ドライブD1の書き込み済みLBA数が閾値より多かった場合(ステップS25005、No)、第1ドライブD1の断片化率が閾値以下かどうかをチェックし(ステップS25011)、第1ドライブD1の断片化率が閾値以下だった場合(ステップS25011、Yes)、第1ドライブD1の状態がType3であると判断し、デュプリケータ33は、第1ドライブD1からマップ情報を読み出せるかどうかをチェックする(ステップS25012)。
デュプリケータ33は、第1ドライブD1からマップ情報が読み出せる場合(ステップS25012、Yes)、この第1ドライブD1からのデータコピーにおいては第2の実施形態若しくは第3の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25013)。一方、第1ドライブD1からマップ情報が読み出せない場合(ステップS25012、No)、デュプリケータ33は、この第1ドライブD1からのデータコピーにおいては第5の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25014)。
また、第1ドライブD1の断片化率が閾値より高かった場合(ステップS25011、No)、第1ドライブD1の状態がType4であると判断し、この第1ドライブD1からのデータコピーにおいては第5の実施形態に係るコピー方法が最も効率が良いと判断し、選択する(ステップS25014)。デュプリケータ33は、以上の処理により最適なコピー方法を選択した後に、選択した方法をユーザに伝えるべく、表示する(ステップS25010)。
以上の処理により、ドライブコピー時に最適な方法を選択して実行することが可能なデュプリケータ33を実現することができる。なお、ステップS25005における書き込み済みLBA数判断における閾値は、例えば第1ドライブD1の全LBA領域サイズの半分や2/3などの値が考えられる。さらに、書き込み済みLBA数判断における閾値は、コピーにかかる時間から導いた値でもよく、例えば、1台のドライブへのコピー時間を5分程度に抑えたいとした場合、バス5が最大600MB/秒であると仮定すると、5分間連続して転送可能なデータサイズは600×60×5=180000MB=180GBとなることから、コマンド発行時間等を加味した実際の転送効率(8割程度)を考慮した144GBを閾値とすることが考えられる。
また、ステップS25006とステップS25011におけるコピー元ドライブの断片化率判断における閾値は、例えば、LBA領域の分割数を使用することが考えられる。具体的には、例えば分割数15とすることができるとともに、図28のType1とType4は、両方とも分割数19となっている。この分割数は、分割数が多くなるとコマンド発行数が多くなることから、例えば、ReadやWriteそして開放コマンド発行処理にかかる時間などを基準に決定することが考えられる。
断片化率判断における閾値は、コピー元ドライブのLBA領域サイズで調節してもよく、例えば、LBA領域サイズが大きい(大容量の)ドライブにおける分割数の閾値を、LBA領域サイズが小さい(小容量の)ドライブにおける分割数の閾値よりも多くする、などとすることができる。
上記実施形態(第1の実施形態〜第7の実施形態)によれば、従来のリビルドの課題を解決することができる。以下に本実施形態に係る技術的優位性について説明する。
図29は、本実施形態のリビルドと従来のリビルドとの、コピー先ドライブの書き込み性能の差を端的に示したグラフである。同図においては、ドライブの書き込み済みLBA数がドライブの全LBA数に対して60%、80%、100%の場合に、ドライブの10%の領域(約20GB)に4キロバイトのランダムライトを行った際の性能(1秒間に実行完了できるWriteコマンド数)を計測したものである。なお、計測対象のドライブは240GBのドライブである。
従来のリビルドでは、コピー先ドライブの書き込み済みLBA数は、常に100%となるが、本実施形態のリビルドでは、コピー先ドライブの書き込み済みLBA数は、100%ではなく、コピー元ドライブの書き込み済みLBA数と等しくなる。つまり、コピー元ドライブの書き込み済みLBA数が全LBA数の60%だった場合、本実施形態のリビルドでは、コピー先ドライブの書き込み済みLBA数も60%となる。
したがって、図29から、コピー元ドライブの書き込み済みLBA数が全LBA数の60%だった場合、従来のリビルド(100%)と比較して、書き込み性能が30%異なる(30%改善する)ことがわかる。このように、本実施形態のリビルドにより、従来のリビルドにおけるコピー先ドライブの書き込み性能が低下する課題を解決することができるのである。
さらに、コピー元ドライブ内の書き込み済みLBAが少ない場合、本実施例の方法で書き込み済みLBAのデータのみコピー先ドライブに書き込むことで、リビルドにかかる時間を大幅に短縮することができる。例えば、コピー元ドライブである第1ドライブD1の容量を512ギガバイト(GB)、コピー元ドライブとRAIDコントローラ3との接続バス5のデータ転送バンド幅がSATA Gen3の600MB/s、と仮定した場合、512GB全体を第1ドライブD1から読み出すには512×1000÷600≒853(秒)、つまり約14分かかる。そして、第1ドライブD1から読み出したデータを、同じ時間をかけて第3ドライブD3に書き込んだとすると、リビルドにかかる時間は、第1ドライブD1からのデータ読み出しと第3ドライブD3へのデータ書き込みで約28分が必要となる。
ここで、第1ドライブD1の書き込み済みLBAの総容量が、ドライブ容量512GBの半分の256GBだったとすると、第1ドライブD1からのデータ読み出しにかかる時間と、第3ドライブD3へのデータ書き込み時間の両方が、約半分になる。第1ドライブD1のマップ情報の読み出しや、RAIDコントローラ3におけるマップ情報の解析、さらに第1ドライブD1からのデータ読み出しと第3ドライブD3へのデータ書き込みに必要なコマンド数が多少多くなると仮定しても、第1ドライブD1からのデータ読み出しと第3ドライブD3へのデータ書き込みにかかる時間はそれぞれ10分未満になると予想される。したがって、従来方法では28分かかっていたリビルドが、本実施形態においては20分未満となり、3割以上の時間短縮となる。
以上、本実施形態について説明したが、本発明はこれに限定されない。例えば、本実施形態においては、RAIDコントローラ3、或いはデュプリケータ33により本発明のコピー部及びドライブコピー装置が構成されているが、他の構成要素に代えてもよい。また、コンピュータシステム(1、1’)の構成要素は、他の形態のものであってもよく、他の構成要素を付加するものであってもよい。