===全体構成例===
まず、本実施の形態に係る記憶装置システムを含む情報処理システムの概略構成を図1に示す。本実施の形態に係る情報処理システムは、情報処理装置11、第一の記憶装置10、第二の記憶装置20を含んで構成されている。また、第一の記憶装置10は、第一の記憶装置がデータ入出力処理を行う論理ボリューム30(以後、「第一の論理ボリューム」と称する)を備え、第二の記憶装置20は、第二の記憶装置がデータ入出力処理を行う論理ボリューム40(以後、「第二の論理ボリューム」と称する)を備えている。
また、情報処理装置11と第一の記憶装置10とは、第一のネットワーク50により通信可能に接続されている。第一のネットワーク50は、例えば、LAN(Local Area Network)やSAN(Storage Area Network)、iSCSI(Internet Small Computer System Interface)、ESCON(Enterprise Systems Connection)(登録商標)、FICON(Fibre Connection)(登録商標)などである。
第一の記憶装置10と第二の記憶装置20とは、第二のネットワーク60により通信可能に接続されている。第二のネットワーク60は、例えば、ギガビットイーサネット(登録商標)、ATM(Asynchronous Transfer Mode)、公衆回線などである。
===情報処理装置===
情報処理装置11は、CPU(Central Processing Unit)やメモリを備えるコンピュータであり、パーソナルコンピュータやワークステーション、メインフレームなどのコンピュータである。情報処理装置11は、結合された複数台のコンピュータで構成されることもある。情報処理装置11ではオペレーティングシステムが動作している。オペレーティングシステム上ではアプリケーションソフトウェアが動作している。
===記憶装置===
図2に第一及び第二の記憶装置10,20の一例として説明するディスクアレイ装置の具体的な構成を示している。なお、第一及び第二の記憶装置10,20は、ディスクアレイ装置以外にも、例えば、半導体記憶装置などであってもよい。ディスクアレイ装置は、チャネル制御部201、リモート通信インタフェース202、ディスク制御部203、共有メモリ204、キャッシュメモリ205、これらの間を通信可能に接続するクロスバスイッチなどで構成されるスイッチング制御部206、管理端末207、及び記憶デバイス208などを備えて構成される。
キャッシュメモリ205は、主としてチャネル制御部201とディスク制御部203との間で授受されるデータを一時的に記憶するために用いられる。例えばチャネル制御部201が情報処理装置11から受信したデータ入出力コマンドが書き込みコマンドである場合には、チャネル制御部201は情報処理装置11から受信した書き込みデータをキャッシュメモリ205に書き込む。またディスク制御部203はキャッシュメモリ205から書き込みデータを読み出して記憶デバイス208に書き込む。
ディスク制御部203は、チャネル制御部201により共有メモリ204に書き込まれたデータI/O要求を読み出してそのデータI/O要求に設定されているコマンド(例えば、SCSI規格のコマンド)に従って記憶デバイス208にデータの書き込みや読み出しなどの処理を実行する。ディスク制御部203は記憶デバイス208から読み出したデータをキャッシュメモリ205に書き込む。またデータの書き込み完了通知や読み出し完了通知などをチャネル制御部201に送信する。ディスク制御部203は、記憶デバイス208をいわゆるRAID(Redundant Array of Inexpensive Disks)方式に規定されるRAIDレベル(例えば、0,1,5)で制御する機能を備えることもある。
記憶デバイス208は、例えば、ハードディスク装置である。記憶デバイス208はディスクアレイ装置と一体型とすることもできるし、別体とすることもできる。各サイトの記憶デバイス208により提供される記憶領域は、この記憶領域上に論理的に設定されるボリュームである論理ボリューム209を単位として管理されている。記憶デバイス208へのデータの書き込みや読み出しは、論理ボリューム209に付与される識別子であるLUN(Logical Unit Number)を指定して行なうことができる。また、論理ボリューム209は、例えば512KBといった決まった単位で管理され、この単位でデータの入出力が行われる。ここで、当該単位を論理ブロックと呼び、各論理ブロックには、位置情報を示す論理ブロックアドレス(以後、「LBA」と称する)が付与されている。
管理端末207はディスクアレイ装置や記憶デバイス208を保守・管理するためのコンピュータである。チャネル制御部201やディスク制御部203において実行されるソフトウェアやパラメタの変更は、管理端末207からの指示により行われる。管理端末207はディスクアレイ装置に内蔵される形態とすることもできるし、別体とすることもできる。
リモート通信インタフェース202は、他の記憶装置10,20とデータ伝送をするための通信インタフェース(チャネルエクステンダ)であり、後述するリモートコピーにおける複製データの伝送はこのリモート通信インタフェース202を介して行われる。リモート通信インタフェース202は、チャネル制御部201のインタフェース(例えば、ESCON(登録商標)、FICON(登録商標)などのインタフェース)を第一のネットワーク40の通信方式に変換する。これにより他の記憶装置10,20との間でのデータ伝送が実現される。
なお、ディスクアレイ装置は、以上に説明した構成のもの以外にも、例えば、NFS(Network File System)などのプロトコルにより情報処理装置11からファイル名指定によるデータ入出力要求を受け付けるように構成されたNAS(Network Attached Storage)として機能するものなどであってもよい。
共有メモリ204はチャネル制御部201とディスク制御部203の両方からアクセスが可能である。データ入出力要求コマンドの受け渡しに利用される他、記憶装置10,20や記憶デバイス208の管理情報等が記憶される。本実施の形態においては、図3に示すLUNマップ情報テーブル301、図5に示すコマンドデバイス管理テーブル501、図10に示すペア管理テーブル1001が共有メモリ204に記憶される。
===仮想ボリューム===
前述の通り、論理ボリューム209は物理ボリューム上に論理的に設定される記憶領域である。また、論理ボリュームとして「仮想ボリューム」を用いることにより、論理ボリューム209が設定されている記憶装置10,20と、当該論理ボリューム209と対応づけられた物理ボリュームが備えられた記憶装置10,20とを別のものとすることができる。
この機能を実現するため、第一の記憶装置10は、図3に示すLUNマップ情報テーブル301を記憶している。このLUNマップ情報テーブル301には、第一の記憶装置10が取り扱う論理ボリューム209に関する情報が記述されている。
LUNの欄には、各論理ボリュームのLUNが記述される。論理ボリューム209が仮想ボリュームである場合は、ターゲットの欄に、当該仮想ボリュームと対応づけられている論理ボリューム209が備えられている記憶装置が設定される。さらに、マッピングLUNの欄には、仮想ボリュームと対応づけられている論理ボリューム209のLUNが設定される。つまり、マッピングLUNの欄に記述のある場合は、その論理ボリュームが仮想ボリュームであることを意味している。
LUNマップ情報テーブル301の内容は、例えば、第一の記憶装置10に接続された管理端末207などからオペレータにより登録される。
第一の記憶装置10は、以上に説明したLUNマップ情報テーブル301を用い、後述する仕組みにより、第二の記憶装置20の第二の論理ボリューム40を、あたかも第一の記憶装置10の第一の論理ボリューム30であるかのように、情報処理装置11に提供する。つまり、情報処理装置11は、第二の記憶装置20の論理ボリューム209に対するデータ入出力要求を、第一の記憶装置10に対して行うことができる。
情報処理装置11から送信されたデータ入出力要求が、データ書き込み要求である場合における、記憶装置システムの処理を図4を用いて説明する。情報処理装置11は、第一の通信規約に従い第一の記憶装置にデータの書き込みを要求する第一の書き込み要求部401を備えている。第一の記憶装置10は、第一の書き込み要求部401からデータ書き込み要求を受信すると(S401)、このデータ書き込み要求とともに受信した書き込み対象データを、キャッシュメモリ205に記憶する。
第一の記憶装置10が備えるデータ転送部402は、LUNマップ情報テーブル301を参照し、書き込み要求に設定された第一の論理ボリューム30に対して、マッピングLUNが設定されているかどうかを確認する。マッピングLUNに第二の論理ボリューム40が設定されていると、データ転送部402は、当該データを第二の通信規約に従い第二の論理ボリューム40に書き込む要求を第二の書き込み要求部403に送信する。ここで、第二の書き込み要求部403とは、第二の通信規約に従い第二の記憶装置20にデータの書き込みを要求するものである。第二の記憶装置20は、第二の書き込み要求部403から、当該データの書き込み要求を受信し、当該データを第二の論理ボリューム40に書き込む(S402)。
なお、第一の通信規約、及び第二の通信規約とは、例えばSCSI規約により定められるWRITEコマンドである。従って、第一の記憶装置10、及び第二の記憶装置20におけるデータ書き込みインタフェースを変更する必要が無い。
以上は書き込み処理についての説明であったが、論理ボリュームからのデータの読み出し処理についても、以上の書き込みの場合とデータの転送の向きが逆になるだけで、それ以外は同様の仕組みで行われる。
以上に説明したように、この記憶装置システムにおいては、情報処理装置11は、それがあたかも第一の記憶装置10上の論理ボリュームであるかのように第二の論理ボリュームにアクセスする。
===コマンドデバイス===
記憶装置10,20は、特殊な命令を制御するための「コマンドデバイス」を備えている。コマンドデバイスは、情報処理装置11から記憶装置10,20への命令伝達に用いられ、記憶装置10,20はコマンドデバイスに記憶されている命令を実行することができる。通常の命令と異なるのは、コマンドデバイスが論理ボリューム209であることである。このコマンドデバイスの機能について、説明を行う。
図5は、記憶装置10,20が記憶しているコマンドデバイス管理テーブル501である。装置の欄は、コマンドデバイスがどの記憶装置10,20に対するものであるかを示している。コマンドデバイスLUNの欄には、コマンドデバイスの実体を表す論理ボリューム209のLUNが設定されている。コマンドデバイス管理テーブル501の内容は、例えば、記憶装置10,20に接続された管理端末207などからオペレータにより登録される。
また、各記憶装置10,20のコマンドデバイス管理テーブル501には、他の記憶装置10,20のコマンドデバイスも登録することができる。他の記憶装置10,20のコマンドデバイスを登録する場合、コマンドデバイスLUNには、他の記憶装置10,20のコマンドデバイスLUNに対応する、仮想ボリュームのLUNを登録する。
図6は、コマンドデバイスに書き込まれるデータの形式である、コマンドデバイスインタフェース601を表している。コマンドデバイスインタフェース601は、制御パラメタ、入力パラメタ、及び編集データから構成されている。制御パラメタは、記憶装置が実行する命令を示す「処理番号」と、当該命令を実行した結果、データの出力があるかどうかを示す「編集データ有無」で構成されている。入力パラメタには、当該命令を実行する際に用いられるパラメタ情報が設定される。また、編集データには、当該命令を実行した結果出力されたデータが設定される。
コマンドデバイスを用いて命令を実行する流れの概要を、図7を用いて説明する。情報処理装置11は、命令設定部701と命令送信部702とを備える。命令設定部701は、第一の記憶装置10で実行される命令の「処理番号」と「編集データ有無」をコマンドインタフェース601に設定したデータを生成する。命令送信部702は、当該データを第一の通信規約に従い第一の記憶装置10のコマンドデバイスである第一の論理ボリュームに書き込む要求を第一の書き込み要求部401に送信する。
第一の記憶装置10は、命令実行部703を備える。また、命令実行部703は、後述する論理ボリューム209のペアを制御する、ペア管理部704、形成コピー部705、リストア部706、ジャーナル記憶部707、ジャーナル取得部708、ジャーナル停止部709を備える。
命令実行部703は、コマンドデバイス管理テーブル501を参照し、第一の記憶装置10に対するコマンドデバイスLUNを取得する(S701)。命令実行部703は、当該コマンドデバイスを参照し(S702)、コマンドデバイスインタフェース601形式のデータが存在すれば、当該データの処理番号で指定された命令を実行する。
図8及び図9のフローチャートを用いて、情報処理装置11、及び記憶装置10,20の処理の流れを説明する。まず、情報処理装置11はコマンドデバイスインタフェース601の形式の第一のデータに、処理番号と編集データ有無とを設定する(S801)。次に、情報処理装置11は、記憶装置10,20に記憶されているコマンドデバイス管理テーブル501を参照し、命令を実行する記憶装置10,20のコマンドデバイスLUNを取得する。情報処理装置11は、記憶装置10,20に対して、第一のデータを当該コマンドデバイスに書き込むWrite要求を送信する(S802)。記憶装置10,20は当該Write要求を受信すると、第一のデータをコマンドデバイスに書き込む。なお、コマンドデバイスは論理ボリューム209であり、当該Write要求は、コマンドデバイス以外の論理ボリューム209に対する書き込み要求と同じ通信規約に基づいて送信される。
記憶装置10,20は、コマンドデバイス管理テーブル501を参照し、自身の記憶装置10,20のコマンドデバイスにデータがあるかどうか監視している(S901)。コマンドデバイスに第一のデータが存在していると、記憶装置10,20は、第一のデータの処理番号で指定された命令を実行する(S902)。記憶装置10,20は、当該命令の実行が完了すると第一のデータの編集データ有無を確認する(S903)。記憶装置10,20は、編集データが無い場合は、第一のデータをコマンドデバイスから削除する(S906)。記憶装置10,20は、編集データがある場合は、当該命令を実行し出力されたデータを編集データに設定する(S904)。
情報処理装置11は、当該命令の編集データ有無を確認し(S803)、編集データがある場合は、第一のデータの編集データを読み取るRead要求を、記憶装置10,20に対して送信する(S804)。情報処理装置11は、記憶装置10,20から編集データを受領すると(S805)、処理を終了する。なお、当該Read要求は、コマンドデバイス以外の論理ボリューム209に対する読み出し要求と同じ通信規約に基づいて送信される。
編集データがある場合、記憶装置10,20は、情報処理装置11から当該編集データに対するRead要求を受領した後に(S906)、第一のデータをコマンドデバイスから削除する(S906)。
このように、情報処理装置11が記憶装置10,20の通常の論理ボリューム209に対するデータの読み書きに使用するRead/Write要求を用いて、情報処理装置11が記憶装置10,20に命令を伝達することができる。また、前述の仮想ボリュームを用いることにより、情報処理装置11が、第一の記憶装置10を経由して第二の記憶装置20に命令を伝達し、第二の記憶装置20に命令を実行させることができる。
なお、情報処理装置11は、以後に説明する「ペア形成」、「ジャーナル取得」、「ジャーナルの処理状況の取得」、「リストア」、及び「スワップ」を記憶装置10,20に要求する際に、仮想ボリュームとコマンドデバイスとを使用する。
===ペア形成===
次に、本実施の形態において、第一の記憶装置10の論理ボリューム209のデータの複製を第二の記憶装置20の論理ボリューム209に記憶させる方法について説明する。
図10にペア管理テーブル1001を示す。複製元装置の欄には、複製元の論理ボリューム(以後、「主ボリューム」と称する)が属する記憶装置10,20が示されている。複製先装置の欄には、複製先の論理ボリューム(以後、「副ボリューム」と称する)が属する記憶装置10,20が示されている。また、主LUNの欄には主ボリュームのLUNが、副LUNの欄には副ボリュームのLUNが設定されている。この主ボリュームと副ボリュームとの対応を「ペア」と称する。主ボリューム、及び副ボリュームには、後述するジャーナルを格納するための論理ボリューム209が割り当てられている。主ジャーナルLUNの欄には、主ボリューム用に割り当てられたジャーナル(以後、「主ジャーナル」と称する)の論理ボリューム209のLUNが設定されている。副ジャーナルLUNの欄には、副ボリューム用に割り当てられたジャーナル(以後、「副ジャーナル」と称する)の論理ボリューム209のLUNが設定されている。
なお、ジャーナルとして論理ボリューム209を割り当てる方法は、ユーザ自身がジャーナルとして使用する論理ボリューム209を指定しても良いし、情報処理装置11が、未使用の論理ボリューム209を任意に選択して使用するようにしても良い。
図11を用いて、ペアを形成する流れを説明する。ここで、第一の記憶装置10は第三の論理ボリュームと第五の論理ボリュームとを備え、第二の記憶装置20は第四の論理ボリュームと第六の論理ボリュームとを備えているとする。情報処理装置11は、第三の論理ボリュームを主ボリューム、第四の論理ボリュームを副ボリューム、第五の論理ボリュームを主ジャーナル、第六の論理ボリュームを副ジャーナルとするペアを形成する命令を第一の記憶装置10と第二の記憶装置20とに送信する(S1101,S1102)。第一及び第二の記憶装置10,20のペア管理部704は、当該ペアの状態を各記憶装置10,20のペア管理テーブル1001に記憶する。第二の記憶装置20の形成コピー部705は、主ボリュームのRead要求を第一の記憶装置10に送信し、第一の記憶装置10から主ボリュームのデータの複製を受信すると、そのデータを副ボリュームに書き込む(S1103)。これにより、主ボリュームのデータと副ボリュームのデータとを一致させることができる。ペア形成指示により、主ボリュームと副ボリュームとを一致させる処理を、「形成コピー」と呼ぶ。
また、第一の記憶装置10のジャーナル記憶部707は、主ボリュームに書き込まれたデータの複製及び位置情報を主ジャーナルに取得する処理を開始する。主ボリュームと主ジャーナルとの対応を、図12を用いて説明する。主ジャーナルは、メタデータ領域1201とジャーナルデータ領域1202とで構成される。第一の記憶装置10のジャーナル記憶部707は、主ボリュームに書き込まれたデータの複製(以後、「ジャーナルデータ」と称する)を、ジャーナルデータ領域1202に格納する。また、第一の記憶装置10のジャーナル記憶部707は、主ボリュームにおいてデータ1203が更新された時刻、データ1203のLBA1204、対応するジャーナルデータ領域のLBA1206、及び更新データ長を、メタデータ領域1201に格納する。なお、副ジャーナルも主ジャーナルと同じく、メタデータ領域1201とジャーナルデータ領域1202とで構成されている。
また、同様の方法を用いることで、情報処理装置11からの指示により、第二の記憶装置20の論理ボリューム209のデータの複製を第一の記憶装置10の論理ボリューム209に記憶させることも可能である。
これにより、情報処理装置間でのデータ通信を行うことなく、かつ、情報処理装置11のオペレーティングシステムに新たな命令を追加することなく、プライマリサイトの記憶装置のデータをリモートサイトの記憶措置にバックアップすることができる。また、本実施の形態においては、リモートサイトの記憶装置がプライマリサイトの記憶装置にRead要求を送信することにより形成コピーを行っている。これにより、形成コピー時におけるプライマリサイトの記憶装置の処理負荷を軽減させている。つまり、プライマリサイトの記憶装置がリモートサイトの記憶装置にデータをWriteする方法においては、プライマリサイトの記憶装置は、リモートサイトの記憶装置がペア形成の準備ができているか確認した後に、リモートサイトの記憶装置にデータをWriteする必要がある。そのため、プライマリサイトの記憶装置の処理負荷が高くなり、本番処理を行っているプライマリサイト全体の性能に影響を与えることとなる。本実施の形態においては、プライマリサイトの記憶装置はリモートサイトの記憶装置からのRead要求に対してデータを送信するだけで良く、プライマリサイトの記憶装置の処理負荷が軽減される。
===リストア===
前述の形成コピーが行われた後も、第一の記憶装置10は情報処理装置11からの書き込み要求を受け、主ボリュームのデータを更新している。そのため、主ボリュームのデータと副ボリュームのデータが一致していない状態となる。前述の通り、主ジャーナルには形成コピーが行われた以降のジャーナルデータが記憶されている。そこで、第二の記憶装置20が、主ジャーナルに記憶されているデータを副ジャーナルにコピーし、副ジャーナルに記憶されているデータを副ボリュームに書き込むことにより、主ボリュームで行われたデータの更新を、副ボリュームに対しても行うことができる。
ここで、第二の記憶装置20が主ジャーナルに記憶されているデータを副ジャーナルにコピーすることを「ジャーナル取得」、副ジャーナルに記憶されたジャーナルデータを副ボリュームに書き込むことを「リストア」と呼ぶ。
図13は、ジャーナル取得の流れを示している。情報処理装置11は、第二の記憶装置20に、ジャーナル取得命令を送信する(S1301)。ジャーナル取得命令を受信した第二の記憶装置20のジャーナル取得部708は、ペア管理テーブル1001を参照し、当該ペアの主ジャーナルLUNを取得する。第二の記憶装置20のジャーナル取得部708は、主ジャーナルのRead要求を、第一の記憶装置10に送信し、第一の記憶装置10から主ジャーナルのデータの複製を受信すると、そのデータを副ジャーナルに書き込む(S1302)。
次に、図14を用いてリストアの流れを説明する。情報処理装置11は、第二の記憶装置20に、副ジャーナルから副ボリュームへのリストア命令を送信する(S1401)。リストア命令を受信した第二の記憶装置20のリストア部706は、副ジャーナルに記憶されているジャーナルデータを副ボリュームに書き込む。
図15は、本実施の形態における、主ジャーナルと副ジャーナルのジャーナルデータ領域1202を示す図である。主ジャーナルと副ジャーナルのジャーナルデータ領域は、同じ先頭LBAと末尾LBAとで定義されている。主ジャーナルのジャーナルデータ領域1202は、ジャーナルデータが格納されているジャーナル格納済み領域1502,1503,及び1504と、ジャーナルデータが格納されていないパージ済み領域1501とで構成されている。
副ジャーナルのジャーナルデータ領域1202は、既に副ボリュームへのリストアに使用されたジャーナルデータが格納されているリストア済み領域1521、副ボリュームへのリストア対象として指定されたジャーナルデータが格納されているリストア中領域1522、リストア対象として指定されていないジャーナルデータが格納されているリード済み領域1523、及びジャーナル取得命令により主ジャーナルからRead中のジャーナルデータが格納されているリード中領域1524で構成される。
記憶装置10,20は、ジャーナルデータが作成された時刻順に、先頭LBAから末尾LBAに向かってジャーナルデータをジャーナルデータ領域1202に記憶する。また、記憶装置10,20は、ジャーナルデータが末尾LBAまで達すると、再度先頭LBAに戻ってジャーナルデータを記憶する。つまり、記憶装置10,20は、ジャーナルデータ領域を先頭LBAと末尾LBAとの間でサイクリックに使用する。
主ジャーナルを備える第一の記憶装置10は、ジャーナル格納済み領域1502,1503,及び1504の先頭LBAであるジャーナル・アウトLBA1511と、パージ済み領域1501の先頭LBAであるジャーナル・インLBA1512とを記憶している。ここで、ジャーナル・アウトLBAとジャーナル・インLBAとが等しい場合は、主ジャーナルにはジャーナルデータが格納されていないことになる。
副ジャーナルを備える第二の記憶装置20は、リストア済み領域1521の最大LBAであるリストア済みLBA、リストア中領域1522の最大LBAであるリストア予定LBA、リード済み領域1523の最大LBAであるリード済みLBA1533、及びリード中領域1534の最大LBAであるリード予定LBAを記憶している。
つまり、リストア済みLBA1531とリストア予定LBA1532とが等しい場合は、情報処理装置11から指示されたリストア処理が完了していることになる。また、リード済みLBA1533とリード予定LBA1534とが等しい場合は、情報処理装置10から指示されたジャーナル取得処理が完了していることになる。
情報処理装置11は、第一の記憶装置10、及び第二の記憶装置20に対して、ジャーナルの処理状況の取得要求を送信することができる。各記憶装置10,20は、前述の通り、領域の境界を示すLBAの状態を確認し、これに応答する。
また、記憶装置10,20は、ジャーナルデータ領域を前述の通りサイクリックに使用しているため、不要となった領域を解放する必要がある。この解放を「パージ」と呼ぶ。記憶装置10,20は、領域の境界を示すLBAの指すアドレスを変更することによりパージを行うことができる。第一の記憶装置10は、主ジャーナルのジャーナル格納済み領域1502,1503,及び1504のうち、第二の記憶装置20が副ジャーナルに取得済みのジャーナル格納済み領域1502をパージすることができる。この場合、第一の記憶装置10は、ジャーナル・アウトLBA1511を、ジャーナル格納済み領域1503の先頭LBAに変更することにより、ジャーナル格納済み領域1502はパージ済み領域1501となる。第二の記憶装置20は、副ジャーナルのリストア済み領域1521をパージされた領域として扱い、ジャーナル取得命令により取得したジャーナルデータを、リストア済み領域1521に格納する。
図16のフローチャートを用いて、ジャーナル取得処理、及びリストア処理の流れを説明する。情報処理装置11は、主ジャーナルの処理状況の取得要求を第一の記憶装置10に送信する(S1601)。情報処理装置11は、主ジャーナルの処理状況が設定されたコマンドデバイスの編集データのRead要求を第一の記憶装置10に送信する(S1602)。情報処理装置11は、第一の記憶装置からコマンドデバイスの編集データを受領すると(S1603)、ジャーナル・アウトLBA1511から、ジャーナル・インLBA1512の一つ前のLBAまでの、ジャーナル取得要求を第二の記憶装置20に送信する(S1604)。情報処理装置11は、副ジャーナルの処理状況の取得要求を第二の記憶装置に送信する(S1605)。情報処理装置11は、副ジャーナルの処理状況が設定されたコマンドデバイスの編集データのRead要求を第二の記憶装置20に送信する(S1606)。情報処理装置11は、第二の記憶装置からコマンドデバイスの編集データを受領すると(S1607)、編集データに設定されているリード済みLBA1533とリード予定LBA1534とを比較し、ジャーナルの取得が完了しているかどうか確認する(S1608)。ジャーナル取得処理が完了していると、情報処理装置11は、リード済みLBA1533までのリストア要求を第二の記憶装置20に送信する(S1609)。その後、情報処理装置11は、リード済みLBA1533までのジャーナルデータのパージ要求を、第一の記憶装置10に送信する(S1610)。情報処理装置11は、ジャーナル取得処理、及びリストア処理を繰り返し行う。
これにより、情報処理装置間でデータ通信を行うことなく、かつ、情報処理装置のオペレーティングシステムに新たな命令を追加することなく、プライマリサイトの記憶装置において更新されたデータをリモートサイトの記憶装置に反映させることができる。なお、リモートサイトの記憶装置と通信可能に接続された情報処理装置11からの指示により、リモートサイトの記憶装置がプライマリサイトの記憶装置からジャーナルを取得し、データをリストアすることもできる。
===スワップ===
第一の記憶装置10と通信可能に接続された情報処理装置11(以後、「第一の情報処理装置」と称する)からの指示により、第一の記憶装置10の主ボリュームと第二の記憶装置20の副ボリュームとでペアが形成されているとする。ここで、第一の情報処理装置に障害が発生すると、第二の記憶装置20と通信可能に接続された情報処理装置11(以後、「第二の情報処理装置」と称する)が、前記ペアの副ボリュームを用いて第一の情報処理装置が行っていた処理を継続して行う。この際に、第二の情報処理装置は、前記ペアの主ボリュームと副ボリュームとの関係の入れ替えを行う。つまり、第二の記憶装置20が備える論理ボリューム209を主ボリューム、第一の記憶装置10が備える論理ボリューム209を副ボリュームとしたペアが形成されることになる。このようなペア関係の入れ替えを、「スワップ」と呼ぶ。
図17,18を用いて、ペアのスワップの流れを説明する。図17に示すように、第二の情報処理装置11は、第一の記憶装置10と第二の記憶装置20とに、ペアのスワップ命令を送信する(S1701,S1702)。スワップ命令を受信した第一の記憶装置10のジャーナル停止部は、主ボリュームに対するジャーナルの記憶を停止する。また、第一の記憶装置10のペア管理部704は、ペア管理テーブル1001の主ボリュームと副ボリュームとを入れ替える。同様に、スワップ命令を受信した第二の記憶装置20のペア管理部704は、ペア管理テーブル1001の主ボリュームと副ボリュームとを入れ替える。第二の記憶装置20のジャーナル記憶部707は、主ボリュームとなる第二の記憶装置20が備える論理ボリューム209のジャーナルの記憶を開始する。
図18は、当該命令を受信した第一の記憶装置10と第二の記憶装置20とがスワップ処理を実施し、第二の記憶装置20の論理ボリューム209を主ボリューム、第一の記憶装置10の論理ボリューム209を副ボリュームとしたペアが形成された状態を表している。
第二の情報処理装置、及び各記憶装置10,20で行うスワップ処理の詳細を、図19〜図21のフローチャートを用いて説明する。第二の情報処理装置は、前述したジャーナル取得、及びリストアの処理を実行する(S1901)。第二の情報処理装置は、副ジャーナルの処理状況の取得要求を第二の記憶装置20に送信する(S1902)。第二の情報処理装置は、副ジャーナルの処理状況が設定されたコマンドデバイスの編集データのRead要求を第二の記憶装置10に送信する(S1903)。第二の情報処理装置は、第二の記憶装置20からコマンドデバイスの編集データを受領すると(S1904)、編集データに設定されているリストア済みLBA1531とリストア予定LBA1532とを比較し、リストアが完了しているかどうか確認する(S1905)。リストアが完了していると、第二の情報処理装置は、ペアのスワップ要求を第一の記憶装置10と第二の記憶装置とに送信する(S1906,S1907)。ペアのスワップ要求を受信した第一の記憶装置10は、主ボリュームに対して行っていたジャーナルの取得処理を停止し(S2001)、ペア管理テーブル1001の複製元と複製先との関係を入れ替える(S2002)。また、ペアのスワップ要求を受信した第二の記憶装置20は、ペア管理テーブル1001の複製元と複製先との関係を入れ替え(S2101)、第二の記憶装置20の主ボリュームに対するジャーナルの取得処理を開始する(S2102)。
ここで、第一の情報処理装置、及び第一の記憶装置10を備えるプライマリサイトと、第二の情報処理装置、及び第二の記憶装置20を備えるリモートサイトとで構成される情報処理システムがあるとする。第一の情報処理装置に障害が発生すると、第二の情報処理装置は、第二の記憶装置20を用いて、プライマリサイトで行われていた本番処理を継続して行う。第二の情報処理装置は、第一の記憶装置10と第二の記憶装置20とに前述のスワップ命令を指示することにより、第二の記憶装置20を本番で使用し、かつ、第二の記憶装置20のデータを第一の記憶装置10にバックアップすることができる。また、第二の記憶装置20のデータが第一の記憶装置10にバックアップされているため、第一の情報処理装置の障害が回復した際には、本番処理の実行を迅速にプライマリサイトに切り替えることも可能である。
また、情報処理装置11から記憶装置10,20へのスワップ指示は、情報処理装置11が備えているRead/Writeコマンドを用いて行われるため、情報処理装置11のオペレーティングシステムに新たな命令を追加する必要がない。
==コマンドデバイス方式での3サイト構成==
前述のように、仮想ボリュームとコマンドデバイスを用いて2つの記憶装置間で命令を転送する方式を説明したが、仮想ボリュームの構成を3つ以上の記憶装置間で形成することにより、3つ以上の記憶装置間で命令を転送することも可能である。
図22は、第一の記憶装置10、第二の記憶装置20、及び第三の記憶装置25を含んで構成される記憶装置システムを示す図である。
第一の記憶装置10の論理ボリューム2201は第二の記憶装置20の論理ボリューム2202の仮想ボリュームであり、第二の記憶装置の論理ボリューム2202は第三の記憶装置25の論理ボリューム2203の仮想ボリュームである。第三の論理ボリューム2203はコマンドデバイスである。このように、仮想ボリュームを繋げることにより、情報処理装置11から第三の記憶装置25に命令を伝えることが可能となる。
これにより、1つの情報処理装置11と3つの記憶装置10,20,25とを用いてディザスタリカバリに対応するための記憶装置システムを構築することができる。図23は、この記憶装置システムを示す図である。
第一の記憶装置10、第二の記憶装置20、及び第三の記憶装置25は、それぞれ論理ボリューム2301,2302,2303を備えている。ここで、第一の記憶装置10の論理ボリューム2301と第二の記憶装置20の論理ボリューム2302とは、第一の記憶装置10の論理ボリューム2301を主論理ボリュームとする同期ペアが形成されている。
同期ペアについて、説明する。図24は同期ペア管理テーブル2401を示している。同期ペア管理テーブル2401は、「複製元装置」、「複製先装置」、「主LUN」、及び「副LUN」の欄を備えている。第一の記憶装置10の論理ボリューム2301と第二の記憶装置20の論理ボリューム2302とが同期ペアを形成している場合、複製元装置に第一の記憶装置10、複製先装置に第二の記憶装置20、主LUNに第一の記憶装置10の論理ボリューム2301のLUN、副LUNに第二の記憶装置20の論理ボリューム2302のLUNが設定されている。第一の記憶装置10は、情報処理装置11から主ボリュームである第一の記憶装置の論理ボリューム2301に対するデータの書き込み要求を受信すると、同期ペア管理テーブル2401を参照して、当該主ボリュームに対する副ボリュームである第二の記憶装置20の論理ボリューム2302に当該データを書き込む要求を第二の記憶装置20に送信する。第一の記憶装置10は、第二の記憶装置20から当該書き込み要求に対する完了通知を受信すると、情報処理装置11に対して当該データの書き込み完了通知を送信する。つまり、情報処理装置11に書き込み完了通知を送信する際には、主ボリュームと副ボリュームとに同じデータが書き込まれていることとなる。そのため、同期ペアを用いることで、第一の記憶装置10のデータを失うことなく、第二の記憶装置20にバックアップすることが可能となる。しかし、同期ペアにおいて、第一の記憶装置10と第二の記憶装置20との間の距離が長くなると、情報処理装置11への書き込み完了通知の送信が遅くなり、情報処理装置11の処理に影響を与えてしまう。
そこで、第一の記憶装置10と第二の記憶装置20とは近距離で同期ペアを形成し、第二の記憶装置20と第三の記憶装置25とで前述したジャーナルを用いたペア(以後、「非同期ペア」と称する)を形成する。情報処理装置11は、第二の記憶装置20の論理ボリュームを主ボリューム、第三の記憶装置25の論理ボリュームを副ボリュームとするペアを形成する命令を仮想ボリュームとコマンドデバイスとを用いて第二の記憶装置20と第三の記憶装置25とに送信する。ペアが形成された後は、情報処理装置11が第三の記憶装置25に、当該ペアにおけるジャーナルの取得およびリストアの命令を仮想ボリュームとコマンドデバイスとを用いて送信する。これにより、第一の記憶装置10とは遠距離に設置されている第三の記憶装置25に、第一の記憶装置10のデータをバックアップすることが可能となる。また、第三の記憶装置25及び中継点である第二の記憶装置20に情報処理装置を必要としない。なお、第三の記憶装置25にはバックアップ用の情報処理装置を接続しておき、第一の記憶装置10に障害が発生した場合は、第三の記憶装置25のデータを用いて処理を継続することとしてもよい。
以上、仮想ボリュームとコマンドデバイスとを用いて記憶装置間で命令を転送し、データのバックアップを行う方法を説明した。なお、前述の説明においては、情報処理装置11が命令を記憶装置10,20,25に送信することとしたが、記憶装置10,20,25が命令設定部701及び命令送信部702を有することとしてもよい。例えば、図23の構成において、第一の記憶装置10が、第三の記憶装置25で実行する命令を第二の記憶装置20の仮想ボリュームを経由して第三の記憶装置25のコマンドデバイスに送信することができる。これにより、例えば、第一の記憶装置10が第三の記憶装置25の状態確認命令を第三の記憶装置25に送信することができ、第三の記憶装置25の障害等を検知することが可能となる。第一の記憶装置10は、第三の記憶装置25に障害が発生している場合は、前述した第二の記憶装置20と第三の記憶装置25との非同期ペアを解消する命令を第二の記憶装置20と第三の記憶装置25とに送信することも可能である。
==転送先アドレス指定方式==
次に、命令転送時に転送先の記憶装置のアドレスを指定する方法を説明する。
図25は、情報処理装置11が記憶している経路情報管理テーブル2501を示す図である。経路情報管理テーブル2501は、「装置」の欄と「経路」の欄とを有している。装置の欄には記憶装置10,20のアドレスが記憶されている。なお、アドレスとは、例えば記憶装置10,20の製品番号やポート番号などで構成される情報である。経路の欄には、各記憶装置10,20が情報処理装置とどのように接続されているかを示す情報が記憶されている。例えば、図25に示す経路情報管理テーブル2501においては、第一の記憶装置10の経路は「直接」、第二の記憶装置20の経路は「第一」となっている。これは、情報処理装置11が、第一の記憶装置10とは直接接続されており、第二の記憶装置20とは第一の記憶装置10を介して接続されていることを示している。
図26は、情報処理装置11が記憶装置10,20に命令を転送する際のデータの形式である、コマンドインタフェース2601を表している。コマンドインタフェース2601は、識別番号、転送先パラメタ、制御パラメタ、及び入力パラメタから構成されている。識別番号は、当該データを識別するための番号であり、情報処理装置11が当該データを生成する際に付与するものである。転送先パラメタには当該データを転送する記憶装置10,20のアドレスが設定される。制御パラメタおよび入力パラメタはコマンドデバイスで用いたコマンドデバイスインタフェース601と同様である。
図27を用いて、コマンドインタフェース2601を用いて情報処理装置11が第二の記憶装置20に命令を転送する処理の概要を説明する。
情報処理装置11はデータ生成部2701とデータ送信部2702とを備えている。各記憶装置10,20は、コマンド解析部2703、データ転送部2704、及び命令実行部2705を備えている。
情報処理装置11のデータ生成部2701は、経路情報管理テーブル2501を参照して第二の記憶装置20の経路を参照し、第二の記憶装置20は第一の記憶装置10を介して接続されていることを認識する。データ生成部2701は、転送先アドレスに第二の記憶装置20のアドレスを、処理番号に第一の命令を設定したコマンドインタフェース2601形式のデータ2710を生成する。データ生成部2701は当該データ2710を第一の記憶装置10に送信するようデータ送信部2702に通知する。データ送信部2702は当該データ2710を第一の記憶装置10に送信する。
第一の記憶装置10のコマンド解析部2703は、当該データ2710を受信すると、当該データ2710を転送先アドレスに設定されている第二の記憶装置20に転送するよう、第一の記憶装置10のデータ転送部2704に通知する。第一の記憶装置10のデータ転送部2704は、当該データから転送先パラメタを削除したデータ2711を生成し、このデータ2711を第二の記憶装置に転送する。第二の記憶装置20のコマンド解析部2703は、当該データ2711を受信すると、当該データに転送先パラメタが設定されていないため、制御パラメタから第一の命令を取得する。第二の記憶装置20のコマンド解析部2703は、第二の記憶装置20の命令実行部2705に第一の命令を実行するよう通知する。第二の記憶装置20の命令実行部2705は、コマンド解析部2703からの通知を受けて、第一の命令を実行する。
第一の命令に出力結果がある場合、第二の記憶装置20の命令実行部2705は、この出力結果を編集データ2712として記憶する。ここで、全てのデータ2710,2711,2712には、同じ識別番号が付与されている。情報処理装置11は、第一の命令に出力結果がある場合、第一の記憶装置10に識別番号を指定して編集データ2712の送信命令を送信することで、第一の命令の出力結果を取得することができる。
==転送先アドレス指定方式での3サイト構成==
転送先アドレスを指定することにより、2つの記憶装置間で命令を転送する方式を説明したが、転送先アドレスを複数指定することにより、3つ以上の記憶装置間で命令を転送することも可能である。
図28は、第一の記憶装置10,第二の記憶装置20,及び第三の記憶装置25の3つの記憶装置間で命令を転送する処理の流れを示す図である。情報処理装置11は第一の記憶装置10と通信可能に接続され、第一の記憶装置10は第二の記憶装置20と通信可能に接続され、第二の記憶装置20は第三の記憶装置25と通信可能に接続されている。このとき、情報処理装置11の経路情報管理テーブル2501には、図29のように経路が設定されている。
情報処理装置11が第三の記憶装置25に第一の命令を転送する流れを説明する。情報処理装置11のデータ生成部2701は、経路情報管理テーブル2501を参照し、第三の記憶装置25が、第一の記憶装置10と第二の記憶装置20とを経由して接続されていることを認識する。データ生成部2701は、転送先アドレスに、第二の記憶装置20と第三の記憶装置25とを設定し、処理番号に第一の命令を設定したコマンドインタフェース2601形式のデータ2801を生成する。データ生成部2701は、生成したデータ2801を経路の先頭である第一の記憶装置10に送信するよう、データ送信部2702に通知する。データ送信部2702は、当該通知を受信すると当該データ2801を第一の記憶装置10に送信する。
第一の記憶装置10のコマンド解析部2703は、当該データ2801を受信すると、転送先パラメタの先頭にある第二の記憶装置20のアドレスを取得し、当該データ2801を第二の記憶装置20に送信するよう第一の記憶装置10のデータ転送部2704に通知する。データ転送部2704は当該通知を受信すると、当該データ2801から第二の記憶装置20の転送先アドレスを削除したデータ2802を生成し、このデータ2802を第二の記憶装置20に送信する。
第二の記憶装置20は、第一の記憶装置10と同様に、転送先パラメタの先頭にある第三の記憶装置25のアドレスを取得し、転送先パラメタから第三の記憶装置25を削除したデータ2803を生成し、第三の記憶装置25に送信する。
第三の記憶装置25のコマンド解析部2703は、当該データ2803を受信すると、転送先アドレスが設定されていないため、制御パラメタから第一の命令の処理番号を取得し、第三の記憶装置25の命令実行部2705に第一の命令を実行するよう通知する。第三の記憶装置25の命令実行部2705は当該通知を受信すると、第一の命令を実行する。
このように、転送先パラメタに複数の転送先アドレスを設定することにより、3つ以上の記憶装置間で命令を転送することが可能である。
==転送先アドレス指定方式の処理==
図30は、転送先アドレスを指定して命令を転送する場合における、情報処理装置11での処理を示すフローチャートである。
まず、情報処理装置11は、識別番号を生成してコマンドインタフェース2601に設定する(S3001)。識別番号は、生成されるコマンドインタフェース2601を一意に識別できるものであればよい。経路情報管理テーブル2501を参照して、命令を転送したい記憶装置の経路を取得する(S3002)。情報処理装置11は、取得した経路情報をもとに、1つ又は複数の転送先アドレスを転送先パラメタに設定する(S3003)。次に、情報処理装置11は、転送先の記憶装置で実行する命令の処理番号と当該命令の編集データ有無とを設定する(S3004)。そして、情報処理装置11は、当該コマンドインタフェース2601のデータを転送経路の先頭の記憶装置に送信する(S3005)。情報処理装置11は、当該命令が編集データありかどうか確認し(S3006)、編集データがない場合は処理を終了する。編集データがある場合、情報処理装置11は、当該識別番号を指定して編集データ送信要求を、転送経路の先頭の記憶装置に送信する(S3007)。情報処理装置11は、編集データを受領するまで待機し(S3008)、編集データを受領すると処理を終了する。
図31は、転送先アドレスを指定して命令を転送する場合における、記憶装置10,20,25での処理を示すフローチャートである。
記憶装置は、コマンドインタフェース2601のデータを受信すると(S3101)、当該データをキャッシュメモリに記憶する(S3102)。記憶装置は、当該データに転送先パラメタがあるかどうか確認する(S3103)。転送先パラメタがある場合、記憶装置は、転送先パラメタの先頭の転送先アドレスを取得する(S3104)。次に記憶装置は、当該データから先頭の転送先アドレスを削除し(S3105)、先に取得した先頭の転送先アドレスに当該データを送信する(S3106)。記憶装置は、当該命令が編集データありかどうか確認する(S3107)。編集データがある場合、記憶装置は編集データ取得処理を実行し(S3108)、当該データをキャッシュメモリから削除して(S3109)処理を終了する。編集データがない場合は、記憶装置は編集データ取得処理を行わずに当該データをキャッシュメモリから削除して(S3109)処理を終了する。
記憶装置10,20,25は、受信したコマンドインタフェース2601に転送先パラメタが設定されていない場合、制御パラメタの処理番号を取得し(S3110)、処理番号で指定された命令を実行する(S3111)。記憶装置10,20,25は当該命令が編集データありかどうか確認する(S3112)。編集データがある場合、記憶装置10,20,25は当該コマンドインタフェース2601に設定されている識別番号を設定した編集データを生成し(S3113)、編集データ取得処理を実行し(S3108)、当該データをキャッシュメモリから削除して(S3109)処理を終了する。編集データがない場合、記憶装置10,20,25は当該データをキャッシュメモリから削除して(S3109)処理を終了する。
図32は、記憶装置10,20,25における編集データ取得処理を示すフローチャートである。編集データ取得処理において、記憶装置10,20,25は編集データ取得要求を受信するまで待機している(S3201)。記憶装置は、編集データ取得要求を受信すると、当該取得要求に設定されている識別番号のコマンドインタフェース2601を参照する(S3202)。記憶装置10,20,25は、参照したコマンドインタフェース2601に転送先パラメタがあるかどうか確認する(S3203)。転送先パラメタがある場合、命令を実行した記憶装置10,20,25ではないため、記憶装置10,20,25は転送先パラメタの先頭の転送先アドレスを取得し(S3204)、取得した転送先アドレスに当該取得要求を送信する(S3205)。記憶装置10,20,25は、編集データを受領するまで待機し(S3206)、受領した編集データを当該要求の送信元に送信する(S3207)。転送先パラメタがない場合、命令を実行した記憶装置10,20,25であるため、記憶装置10,20,25は当該識別番号の編集データを取得し(S3208)、取得した編集データを当該要求の送信元に送信する(S3209)。これにより、編集データは命令が転送された経路を遡って情報処理装置11に送信される。
図31に示す処理においては、コマンドインタフェース2601を転送する際に、先頭の転送先アドレスを削除することとしているが、削除せずにコマンドインタフェース2601のデータをそのまま転送先に送信することとしてもよい。図33および図34は、その場合における記憶装置10,20,25の処理を示すフローチャートである。
図33は、コマンドインタフェース2601を受信した記憶装置10,20,25の処理を示しているが、基本的な処理の流れは図31と同じである。異なるのは、コマンドインタフェース2601のデータを受信した記憶装置10,20,25が、自身が転送経路の記憶装置10,20,25であるか命令を実行する記憶装置10,20,25であるかを判断する必要がある点である。
つまり、記憶装置10,20,25は最後の転送先アドレスが自身のアドレスであるかどうかを確認し(S3303)、自身のアドレスでない場合は転送経路の記憶装置10,20,25、自身のアドレスである場合は命令を実行する記憶装置10,20,25であると判断する。転送経路の記憶装置10,20,25である場合、記憶装置は、転送先アドレスの中に自身のアドレスがあるかどうか確認し(S3304)、自身のアドレスがある場合はその次の転送先アドレスを取得し(S3305)、自身のアドレスがない場合は先頭の転送先アドレスを取得する(S3306)。そして、記憶装置10,20,25は取得した転送先アドレスにコマンドインタフェース2601のデータを送信する(S3307)。命令を実行する記憶装置10,20,25である場合は、制御パラメタの処理番号を取得し(S3311)、処理番号で指定された命令を実行する(S3312)。その他は、編集データ取得処理(S3309)を除き、図31の処理と同じである。
図34は転送先アドレスを削除しない場合における、編集データ取得処理を示すフローチャートである。図32の編集データ取得処理と異なるのは、編集データ取得要求を受信した記憶措置が、自身が転送経路の記憶装置10,20,25であるか命令を実行した記憶装置10,20,25であるかを判断する必要がある点である。記憶装置10,20,25は図33と同じ方法によりこの判断を行い(S3403)、転送経路の記憶装置10,20,25である場合は、次の転送先に編集データ取得要求を送信し(S3405〜S3408)、命令を実行した記憶装置10,20,25である場合は、当該取得要求に設定されている識別番号の編集データを取得する(S3411)。その他は、図32の処理と同じである。
==最短転送経路の判断==
次に、記憶装置10,20,25が最短の転送経路を判断してコマンドインタフェース2601を転送する処理について説明する。
図35は、第一の記憶装置10が情報処理装置11からコマンドインタフェースのデータ3501を受信した際の処理の流れを示す図である。第一の記憶装置10の共有メモリ204には図36に示す接続情報管理テーブル3601が記憶されている。この接続情報管理テーブル3601は、管理者により管理端末207から設定される。接続情報管理テーブル3601には、接続されている記憶装置10,20,25のアドレスが記憶されている。例えば、図36の接続情報管理テーブル3601は、第一の記憶装置10には第二の記憶装置20と第三の記憶装置25とが接続されていることを表している。
第一の記憶装置10は、情報処理装置11からコマンドインタフェースのデータ3501を受信すると、接続情報管理テーブル3601を参照して、転送先パラメタの末尾に設定されている第三の記憶装置25のアドレスを取得する。第一の記憶装置10は、第三の記憶装置25のアドレスが接続情報管理テーブル3601に記憶されているため、第三の記憶装置25に直接データを送信可能と判断する。第一の記憶装置10は、第三の記憶装置25及び第二の記憶装置20の転送先アドレスを削除したデータ3502を生成し、当該データ3502を第二の記憶装置20を介さず、第三の記憶装置25に直接送信する。
図37は、記憶装置10,20,25が最短経路を判断してコマンドインタフェースのデータを転送する処理のフローチャートを示す図である。図31の処理と異なるのは、記憶装置10,20,25が最短経路を判断する部分のみである。
記憶装置10,20,25は、転送先パラメタに設定されている転送先アドレス数を取得し、これを変数「N」に設定する(S3704)。そして、N番目の転送先アドレスを取得し(S3705)、取得した転送先アドレスが接続情報管理テーブル3601に記憶されているかどうか確認する(S3706)。接続情報管理テーブル3601に記憶されていない場合は、Nを1減じて(S3707)N番目の転送先アドレスの取得と接続情報管理テーブル3601の確認を繰り返し行う(S3705,S3706)。これにより、記憶装置10,20,25は最短の転送経路を取得することができる。そして、記憶装置10,20,25はコマンドインタフェース2601のデータからN番目以前の転送先アドレスを削除し(S3708)、当該データをN番目の転送先アドレスに転送する。その他は、図31の処理と同じである。また、編集データ取得処理(S3711)は図32の処理と同じである。
このように、記憶装置10,20,25が最短の転送経路を判断して命令を転送することにより、記憶装置間のデータ転送量を軽減し、さらに命令の転送時間を短くすることが可能となる。
==各記憶装置で命令実行==
次に、情報処理装置11が1回の指示で複数の記憶装置10,20,25に命令を送信する方法について説明する。
図38は、複数の記憶装置10,20,25に命令を送信するためのコマンドインタフェース3801を示す図である。これは、図26のコマンドインタフェース2601を複数繋げた構成となっている。
図39は、情報処理装置11が第二の記憶装置20に第一の命令を第三の記憶装置25に第二の命令を送信する例を示す図である。情報処理装置11は、最初の転送先パラメタの転送先アドレスに第二の記憶装置20を設定し、最初の制御パラメタの処理番号に第一の命令を設定する。そして、情報処理装置11は、二番目の転送先パラメタの転送先アドレスに第三の記憶装置25を設定し、二番目の制御パラメタの処理番号に第二の命令を設定する。情報処理装置11は、このようにして生成したデータ3901を経路の先頭である第一の記憶装置10に送信する。
第一の記憶装置10は、当該データ3901を受信すると、最初の転送先パラメタの転送先アドレスを取得し、当該データ3901から先頭の転送先パラメタを削除したデータ3902を第二の記憶装置20に送信する。第二の記憶装置20は、当該データ3902を受信すると、先頭の制御パラメタに設定されている第一の命令を実行する。そして、第二の記憶装置20は、当該データの先頭の制御パラメタを削除し、次に転送先パラメタの転送先アドレスを取得する。第二の記憶装置20は、当該データから先頭の転送先パラメタを削除したデータ3903を第三の記憶装置25に送信する。第三の記憶装置25は、当該データ3903を受信すると、先頭の制御パラメタに設定されている第二の命令を実行する。
図40は、複数の記憶装置10,20,25に命令を送信する場合における、情報処理装置11での処理のフローチャートを示す図である。情報処理装置11は、経路情報管理テーブル2501を参照して、命令を送信する各記憶装置10,20,25の経路を取得する(S4001)。そして、情報処理装置11は、経路の先頭の記憶装置10,20,25から順に、転送先パラメタへの転送先アドレスの設定(S4002)と制御パラメタへの命令の設定(S4003)を転送先がなくなるまで(S4004)繰り返し実行する。情報処理装置は、このようにして生成したコマンドインタフェース3801のデータを転送経路の先頭の記憶装置10,20,25に送信する(S4005)。
図41は、複数の記憶装置10,20,25に命令を送信する場合における、記憶装置10,20,25での処理のフローチャートを示す図である。記憶装置10,20,25は、コマンドインタフェース3801のデータを受信すると(S4101)、当該データをキャッシュメモリに記憶する(S4102)。記憶装置10,20,25は、当該データの先頭が転送先パラメタであるかどうか確認する(S4103)。先頭が転送先パラメタである場合、記憶装置10,20,25は、先頭の転送先パラメタの転送先アドレスを取得し(S4104)、先頭の転送先パラメタを当該データから削除し(S4105)、取得した転送先アドレスに当該データを送信する(S4106)。先頭が転送先パラメタでない場合、記憶装置10,20,25は先頭の制御パラメタの処理番号を取得し(S4107)、処理番号で指定された命令を実行する(S4108)。記憶装置10,20,25は先頭の制御パラメタを削除し(S4108)、さらに転送先パラメタがあるかどうか確認する(S4109)。転送先パラメタがある場合、記憶装置10,20,25は転送先アドレスの取得から転送先アドレスへのデータ送信までの処理(S4104〜S4106)を行う。
このように複数の記憶装置10,20,25に命令を送信することにより、記憶装置間で非同期ペアを形成する場合等において、情報処理装置11は非同期ペアの主ボリュームを形成する記憶装置10,20,25と副ボリュームを形成する記憶装置10,20,25とに同時にペア形成の命令を送信する等の制御を行うことが可能となる。つまり、情報処理装置間で通信を行うことなく、ペアの形成等を容易に行うことができる。
以上、転送先アドレスを指定して命令を転送する方法を説明した。なお、前述の説明においては、情報処理装置11が命令を記憶装置10,20,25に送信することとしたが、記憶装置10,20,25がデータ生成部2701及びデータ送信部2702を有することとしてもよい。
このように、転送先アドレスを指定して命令を転送する方法を用いることにより、仮想ボリュームとコマンドデバイスとを用いて命令を転送する場合と同様、情報処理装置が接続されていない記憶装置10,20,25に命令を実行させることができる。これにより、情報処理装置間でデータの通信を行うことなく、データのバックアップやペアの操作等を行うことが可能となる。また、転送先アドレスを指定して命令を転送する場合、コマンドデバイスのような専用の論理ボリュームを設ける必要がないため、ユーザのデータ領域が減らされることがない。また、コマンドデバイスの場合は特定の論理ボリュームに対してデータ入出力要求が集中することによる記憶装置10,20,25の性能低下が考えられるが、転送先アドレスを指定して命令を転送する場合はキャッシュメモリを用いるため記憶装置10,20,25の性能低下を防ぐことが可能となる。
以上、本実施の形態について説明したが、上記実施例は本発明の理解を容易にするためのものであり、本発明を限定して解釈するためのものではない。本発明は、その趣旨を逸脱することなく、変更、改良され得ると共に、本発明にはその等価物も含まれる。例えば、本実施の形態においては、転送する命令として論理ボリュームのペアに関する命令を説明したが、転送する命令はペアに関するものに限られず、記憶装置10,20,25が実行可能な命令であればよい。