(57)【特許請求の範囲】
【請求項１】
ストレージ・デバイス上のデータ書き込みを実行する方法であって、コンピュータが、
前記ストレージ・デバイスに関するデバイス・ドライバに前記ストレージ・デバイスに対するデータ書き込みを実行するよう命令するステップと、
前記デバイス・ドライバをトランザクション参加者としてトランザクション・コーディネータに登録するステップと、
前記ストレージ・デバイスのフラッシュコピーを実行するステップと、
前記ストレージ・デバイス上の前記データ書き込みを実行するステップと、
前記デバイス・ドライバと前記トランザクション・コーディネータとの間の２フェーズ・コミットを実行するステップと
を実行することを含む、前記方法。
【請求項２】
前記コンピュータが、
ロールバックを実行する命令を受信するステップと、
前記データ書き込みを前記フラッシュコピーに従って反転させるステップと
を更に実行することを含む、請求項１に記載の方法。
【請求項３】
前記コンピュータが、
前記トランザクションをコミットする命令を受信するステップと、
前記フラッシュコピーを破棄するステップと
を更に実行することを含む、請求項１に記載の方法。
【請求項４】
前記コンピュータが、
前記ストレージ・デバイス上の前記データ書き込みを実行する前記ステップは、前記ストレージ・デバイスの前記フラッシュコピーの開始直後に実行される、請求項１〜３のいずれか一項に記載の方法。
【請求項５】
前記デバイス・ドライバをトランザクション参加者として前記トランザクション・コーディネータに登録する前記ステップは、前記デバイス・ドライバによって実行される、請求項１〜４のいずれか一項に記載の方法。
【請求項６】
ストレージ・デバイス上のデータ書き込みを実行するためのシステムであって、
前記ストレージ・デバイスに関するデバイス・ドライバに前記ストレージ・デバイスに対するデータ書き込みを実行するよう命令するように構成されたファイル・システムと、
前記デバイス・ドライバをトランザクション参加者として登録するように構成されたトランザクション・コーディネータと、
ストレージ・デバイスと、
前記ストレージ・デバイスに関するデバイス・ドライバと、を備え、
前記デバイス・ドライバは、前記ストレージ・デバイスのフラッシュコピーを実行し、前記ストレージ・デバイス上の前記データ書き込みを実行し、前記トランザクション・コーディネータとの間の２フェーズ・コミットを実行するように構成される、
システム。
【請求項７】
前記デバイス・ドライバは、ロールバックを実行する命令を受信し、前記データ書き込みを前記フラッシュコピーに従って反転させるように更に構成される、請求項６に記載のシステム。
【請求項８】
前記デバイス・ドライバは、前記トランザクションをコミットする命令を受信し、前記フラッシュコピーを破棄するように更に構成される、請求項６に記載のシステム。
【請求項９】
前記デバイス・ドライバは、前記ストレージ・デバイス上の前記データ書き込みを、前記ストレージ・デバイスの前記フラッシュコピーの開始直後に実行するように更に構成される、請求項６、７、又は８に記載のシステム。
【請求項１０】
前記デバイス・ドライバは、前記デバイス・ドライバをトランザクション参加者として前記トランザクション・コーディネータに登録するように更に構成される、請求項６〜９のいずれか一項に記載のシステム。
【請求項１１】
ストレージ・デバイス上のデータ書き込みを実行するコンピュータ・プログラムであって、コンピュータに、請求項１〜５のいずれか一項に記載の方法の各ステップを実行させる、前記コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ・デバイス上のデータ書き込みを実行する方法及びシステムに関するものである。一実施形態において、本発明は、ストレージ・サブシステムがトランザクション・ロールバックに参加することを可能にするメカニズムを提供する。
【背景技術】
【０００２】
大規模組織におけるデータの記憶は、データの信頼性とハードウェア障害発生時のデータ・リカバリ能力の両面で極めて重要である。ストレージ・エリア・ネットワーク（ＳＡＮ）は、膨大な量のデータを確実且つ安全な形で記憶する必要がある場合に使用されるアーキテクチャである。この技術を用いると、ディスク・アレイのような遠隔のコンピュータ・ストレージ・デバイスとサーバとの間の接続がオペレーティング・システムから見てローカル接続に見えるようにサポートするネットワークを確立することが可能となる。これらのネットワークでは一般に、データ・ストレージと個々のコンポーネント間のハードウェア接続の両面で高い冗長性が確保される。
【０００３】
データ冗長性を実現する方法には様々なものが存在する。例えば、フラッシュコピー（flashcopy）機能のような機能を用いると、管理者は、読み取り又は書き込みアクセスに直ちに利用可能なコピーを用いてポイント・イン・タイムのフル・ボリューム・データ・コピーを作成することが可能となる。フラッシュコピーは、テープ上でバックアップ・コピーを作成する各環境において利用可能な標準的なバックアップ・ツールと共に使用され得る。フラッシュコピーは、ソース・ボリュームのコピーをターゲット・ボリューム上に作成する。このコピーは、ポイント・イン・タイム・コピーと呼ばれる。
【０００４】
フラッシュコピー操作が開始されると、ソース・ボリュームとターゲット・ボリュームの間の関係が作成される。この関係は、ソース・ボリュームとターゲット・ボリュームの「マッピング」である。このマッピングを用いることにより、該当するソース・ボリュームのポイント・イン・タイム・コピーを関連するターゲット・ボリュームにコピーすることが可能となる。このボリューム・ペアの関係は、フラッシュコピー操作が開始された時点からストレージ・ユニットがすべてのデータをソース・ボリュームからターゲット・ボリュームにコピーするまで又はボリューム・ペアの関係自体が削除されるまで存続する。
【０００５】
データが物理的にコピーされるときは、トラックがバックグラウンド・プロセスによってソース・ボリュームからターゲット・ボリュームにコピーされる。バックグラウンド・コピーが完了するまでの時間は、以下の条件、即ちコピーされるデータの量、実行中のバックグラウンド・コピー・プロセスの数、及び現在実行中の他のアクティビティに依存する。
【０００６】
記憶時に、ユーザは、いくつかのストレージ・ディスクのポイント・イン・タイム・バックアップを取得するフラッシュコピーを作成することができる。後にユーザのストレージに問題が生じた場合、ユーザは、フラッシュコピーを反転させてデータの保存バージョンをリストアすることができる。フラッシュコピー関係の方向は反転させることができ、反転させた場合は、反転以前にターゲットとして定義されていたボリュームが、反転以前にソースとして定義されていた（反転後にターゲットとなる）ボリュームのソースとなる。変更されたデータは、反転以前にソースとして定義されていたボリュームにコピーされる。
【０００７】
管理者は、各自がフラッシュコピー操作を実行する以前のソース・ボリューム（ボリュームＡ）をリストアしたいと望んだ場合は、フラッシュコピー関係を反転させることができる。事実上、管理者は、フラッシュコピー操作が発生しなかった場合と同様のソース・ボリュームが得られるようにフラッシュコピー操作の反転を実行する。フラッシュコピー操作のバックグラウンド・コピー・プロセスが完了しない限り、ボリュームＡをソースに反転させ、ボリュームＢをターゲットに反転させることはできない。
【０００８】
一定の状況下では、当初のフラッシュコピー関係を反転させることが望まれる。例えば、ソース・ボリュームＡとターゲット・ボリュームＢの間のフラッシュコピー関係が作成されたときに、ソース・ボリュームＡ上でデータ損失が発生する可能性がある。この場合は、フラッシュコピー関係を反転させてボリュームＢがボリュームＡにコピーされるようにすることができる。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
残念ながら、データ・ストレージのこのような操作方法にはいくつかの欠点が存在する。例えば、フラッシュコピー機能を使用するとフラッシュコピーが取得されたポイント・イン・タイムへのリストアが容易となるが、データ・リカバリの実行が試行中という文脈では、適時のリストアが常に実現されるとは限らない。同様に、システム内の事象に基づいてコピーが取られるのではなく、クロック・タイムに応じてバックグラウンド・タスクとしてコピーが取られる場合、実際のポイント・イン・タイムがデータ・リカバリのために役立てられない可能性がある。継続的データ保護が自動化されておらず、バックアップを取得する妥当なタイミングがいつであるかの概念も存在しない。これに加え、多数のインターリーブ・システムが動作する性質上、また、すべてのシステム間の整合性を保つ必要もあるため、コピーの容量が大きくなり、多数のディスク・セットが含まれる傾向がある。このため処理及び記憶負荷が増大する。システムは、モノリシック形式で静止させフラッシュ（flush）する必要がある。大部分のフラッシュコピー・シナリオでは、フラッシュコピーに先立ってアプリケーションが停止され、デバイス・ドライバがキャッシュ・データをフラッシュする。これにより、他のｖｄｉｓｋ用にキャッシュされたデータとフラッシュコピーに関与しないアプリケーションとを含み得るフラッシュコピー対象のｖｄｉｓｋのクリーン・イメージを作成するために、すべてのアプリケーション・データがストレージ・デバイスにフラッシュされることになる。
【００１０】
また、ユーザがフラッシュコピーを使用して仮想ディスクのポイント・イン・タイム・バックアップ・コピーを作成するときは、（ディスク上に記憶されている）ビジネス・データ・セット全体のバックアップ・コピーを取得するビジネス要件を特定のポイント・イン・タイムにおいて満足させようと試みる。このような試みには問題がある。というのも、場合によっては例えばアプリケーション及びウェブ・サーバ・ミドルウェア、データベース、ファイル・システム、及びマルチパス・デバイス・ドライバを含めた多数のキャッシュ・レイヤが存在するからである。ビジネス・データ・セットのフラッシュコピーを取得する現行の手法は、ストレージ・ディスクを使用しているすべてのアプリケーション及びミドルウェア作業を停止させ、（典型的には）関連するミドルウェア・サーバをシャット・ダウンさせるものであり、このため、すべてのデータをディスクに記憶することが強いられる。その後このディスクをフラッシュコピーすることにより、バックアップ可能な整合性のあるビジネス・データ・セットを作成することが可能となる。
【００１１】
このことは、ユーザがビジネス・データのポイント・イン・タイム・コピーを取得することを望むが、アプリケーション又はアプリケーション・サーバを停止又はシャット・ダウンすることは望まない場合に問題となる。つまり、整合性のあるデータ・セットを取得することが望まれるため、ユーザが作業単位の途中でデータのフラッシュコピーを取得することを望まないことを意味するが、これらの作業単位の発生は非常に急速であり、すべての作業単位は「マシン速度」で開始及び停止されるので、アプリケーションが整合性のあるビジネス状態に達した正確なポイント・イン・タイムにおいてボタンを押下することあるいは実際にフラッシュコピーを開始することは不可能である。
【００１２】
したがって、本発明の一目的は、既知の技術を改良することである。
【課題を解決するための手段】
【００１３】
本発明の第１の態様によれば、ストレージ・デバイス上のデータ書き込みを実行する方法であって、前記ストレージ・デバイスに関するデバイス・ドライバに前記ストレージ・デバイスに対するデータ書き込みを実行するよう命令するステップと、前記デバイス・ドライバをトランザクション参加者としてトランザクション・コーディネータに登録するステップと、前記ストレージ・デバイスのフラッシュコピーを実行するステップと、前記ストレージ・デバイス上の前記データ書き込みを実行するステップと、前記デバイス・ドライバと前記トランザクション・コーディネータとの間の２フェーズ・コミットを実行するステップと、を含む方法が提供される。
【００１４】
本発明の第２の態様によれば、ストレージ・デバイス上のデータ書き込みを実行するためのシステムであって、前記ストレージ・デバイスに関するデバイス・ドライバに前記ストレージ・デバイスに対するデータ書き込みを実行するよう命令するように構成されたファイル・システムと、前記デバイス・ドライバをトランザクション参加者として登録するように構成されたトランザクション・コーディネータと、ストレージ・デバイスと、前記ストレージ・デバイスに関するデバイス・ドライバと、を備え、前記デバイス・ドライバは、前記ストレージ・デバイスのフラッシュコピーを実行し、前記ストレージ・デバイス上の前記データ書き込みを実行し、前記トランザクション・コーディネータとの間の２フェーズ・コミットを実行するように構成される、システムが提供される。
【００１５】
本発明の第３の態様によれば、ストレージ・デバイスに関するデバイス・ドライバを操作するための、コンピュータ可読媒体上のコンピュータ・プログラム製品であって、前記ストレージ・デバイスに対するデータ書き込みを実行する命令が受信された後に、前記デバイス・ドライバをトランザクション参加者としてトランザクション・コーディネータに登録する命令と、前記ストレージ・デバイスのフラッシュコピーを実行する命令と、前記ストレージ・デバイス上の前記データ書き込みを実行する命令と、前記トランザクション・コーディネータとの間の２フェーズ・コミットを実行する命令と、を含むコンピュータ・プログラム製品が提供される。
【００１６】
本発明の第４の態様によれば、ストレージ・デバイスのフラッシュコピーをスケジューリングする方法であって、ストレージ・デバイス上のフラッシュコピーを実行する命令を受信するステップと、前記ストレージ・デバイスに関する現在のトランザクションを確認するステップと、前記ストレージ・デバイスに関するデバイス・ドライバを前記現在のトランザクションのトランザクション参加者としてトランザクション・コーディネータに登録するステップと、前記トランザクション・コーディネータからトランザクション完了インジケーションを受信するステップと、前記ストレージ・デバイスに関する前記フラッシュコピーを実行するステップと、を含む方法が提供される。
【００１７】
本発明の第５の態様によれば、ストレージ・デバイスのフラッシュコピーをスケジューリングするためのシステムであって、トランザクション・コーディネータと、ストレージ・デバイスと、前記ストレージ・デバイスに関するデバイス・ドライバと、を備え、前記デバイス・ドライバは、ストレージ・デバイス上のフラッシュコピーを実行する命令を受信し、前記ストレージ・デバイスに関する現在のトランザクションを確認し、前記現在のトランザクションのトランザクション参加者として前記トランザクション・コーディネータに登録され、前記トランザクション・コーディネータからトランザクション完了インジケーションを受信し、前記ストレージ・デバイスに関する前記フラッシュコピーを開始するように構成される、システムが提供される。
【００１８】
本発明の第６の態様によれば、ストレージ・デバイスのフラッシュコピーをスケジューリングするための、コンピュータ可読媒体上のコンピュータ・プログラム製品であって、ストレージ・デバイス上のフラッシュコピーを実行する命令を受信する命令と、前記ストレージ・デバイスに関する現在のトランザクションを確認する命令と、前記ストレージ・デバイスに関するデバイス・ドライバを前記現在のトランザクションのトランザクション参加者としてトランザクション・コーディネータに登録する命令と、前記トランザクション・コーディネータからトランザクション完了インジケーションを受信する命令と、前記ストレージ・デバイスに関する前記フラッシュコピーを実行する命令と、を含むコンピュータ・プログラム製品が提供される。
【００１９】
本発明によれば、ストレージ・エリア・ネットワークのようなトランザクション・システムに接続されたストレージ・デバイス上でデータ完全性を維持することが可能となる方法を提供することができる。本発明は、（データ書き込みを含む）トランザクションが失敗した場合に過度の処理又は記憶負荷を必要とせずにデータがリストア可能となる、有効且つ効率的な方法を提供する。
【００２０】
一実施形態において、本発明は、マーク付けされたストレージ・ボリュームに関して、コントローラ・ボリューム用に使用されるマルチパス／デバイス・ドライバ・ソフトウェアが、例えばＤＢ２（Ｒ）又はＷｅｂＳｐｈｅｒｅ（Ｒ）を使用してミドルウェアの調整下でトランザクション参加者となることを可能にするメカニズムである。本発明を用いると、ネットワーク・ストレージ・ディスクを、ロールバック対象のストレージ・システムに書き込まれているすべてのデータがトランザクション・ロールバックによってトランザクション開始時点の状態にリストアされるトランザクション・ファイル・サービスとすることが可能となる。デバイス・ドライバは、トランザクションに参加することができる。特定のスレッドに関するトランザクションの開始がデバイス・ドライバに知らされた場合、デバイス・ドライバは、当該スレッドで更新されるストレージ・ディスクに対するすべてのアクセスを認識することができる。デバイス・ドライバは、最初のデータ書き込みの実行に先立って、反転可能なフラッシュコピーをタイムスタンプを用いて作成するトランザクションをストレージ・コントローラに知らせることができる。
【００２１】
準備（prepare）の際は、必要に応じて任意のキャッシュをディスクにフラッシュすることができるが、必ずしも従来のモノリシック・フラッシュのようにすべてのデータを対象とする必要はなく、当該トランザクションの一環として更新されたブロックのみを対象とすることも可能である。システムは静止させる必要はない。このように、本発明を用いると、フラッシュコピー対象のｖｄｉｓｋ（単数又は複数）に書き込まれているデータを含むトランザクションに関与したデータのみをフラッシュすることが可能となり、トランザクションに関与しない他のデータはキャッシュ内に残すことが可能となる。というのも、各トランザクションのキャッシュ・データは独立してフラッシュすることが可能であり、必ずしもすべてのデータをフラッシュする必要はなく、したがって他のトランザクションに関する新しい作業を受け入れる前にすべての作業単位が停止するのを待つ必要もないため、デバイス・ドライバ及びアプリケーション・サーバは、本発明の動作中に他のトランザクションに関する新しい作業を引き続き受け入れることができるからである。トランザクション・プロトコルは、ドライバとストレージ・コントローラとの間で送信されるデータ・トラフィック・メタデータの形でトンネリングされ得る。ファイル・システム内の適切な構成オプションを用いることにより、ユーザは、所望のｖｄｉｓｋ及びトランザクション調整を設定することが可能となる。
【００２２】
フラッシュコピーは、フラッシュコピーが最後にトリガされた時点以降に変更されたデータだけが全体的にコピー（又はコピー・バック）される増分型とすることができる。これが最も効率的な形のフラッシュコピー操作である。また、（トランザクション中に）アプリケーション書き込みによって「分割（split）」されたグレインだけをコピー・バックすればよく、バックグラウンド・コピー・プロセスによって宛先に転送されるデータ・セットの他の部分は決してコピー・バックされないため、バックグラウンド・コピー・プロセスも必要とされない。
【００２３】
本方法は更に、ロールバックを実行する命令を受信するステップと、その後フラッシュコピーに従ってデータ書き込みを反転させるステップと、を含むことが好ましい。ロールバックが送信されると、デバイス・ドライバは、フラッシュコピーの方向を切り替えることにより、デバイス・ドライバがトランザクション開始時点で有していた内容にデータ・セットをリストアすることができる。トランザクションをコミットする命令を受信した後は、デバイス・ドライバはフラッシュコピーを破棄することができる。トランザクションが完了すると、フラッシュコピーは破棄され得る。
【００２４】
有利なことに、ストレージ・デバイス上のデータ書き込みを実行するステップの直後に、ストレージ・デバイスのフラッシュコピーが開始される。これにより、ストレージ・デバイスから取得されたフラッシュコピーがソース・ボリュームに対する書き込みの実際のアクションの直前のポイント・イン・タイムにおいて確実に取得されることになる。したがって、将来発生し得る任意のロールバック中にフラッシュコピーを使用することにより、ストレージ・デバイス上に記憶されているデータがデータ書き込みの開始直前に元の状態に戻ることが保証される。
【００２５】
理想的には、デバイス・ドライバをトランザクション参加者としてトランザクション・コーディネータに登録するステップは、デバイス・ドライバによって実行される。好ましい実施形態では、デバイス・ドライバ自体がトランザクション・コーディネータに登録される。本実施形態の利点は、デバイス・ドライバが正しいトランザクションのトランザクション参加者として登録されることを保証するプロセスが簡略化されることである。
【００２６】
更に、本発明によれば、フラッシュコピーを整合データ・ポイントと自動的に整合させるとともに、アプリケーションの実行を停止させる必要なくホスト・キャッシュ・フラッシュを処理することが可能なシステムを提供することができる。本方法及びシステムの中核をなす発明は、ストレージｖｄｉｓｋに対するすべてのＩＯを停止させ、且つホストのキャッシュを手動でフラッシュし、その後フラッシュコピーを作成する必要がある現状に対してより優れた解決策を提供することを可能にする。本質的に、本発明のシステムは、フラッシュコピーが要求された正確なポイントでフラッシュコピーを実際に発行する代わりに、該当するｖｄｉｓｋ（単数又は複数）がアプリケーションのトランザクション・アクティビティによって定義される整合点（point of consistency）の隣にあるポイントでフラッシュコピーを作成する。
【００２７】
フラッシュコピーのタイミングをとる本方法において、システムは、前述のようにフラッシュコピーの準備／取得を設定するが、ｖｄｉｓｋに対するＩＯを処理するデバイス・ドライバは、ユーザがフラッシュコピーの取得コマンドを発行したときにＩＯが発生している現在のトランザクションを認識する。フラッシュコピーはすぐには実行されず、次のトランザクション境界で実行される。本発明によれば、デバイス・ドライバがｖｄｉｓｋに関する待ち状態のフラッシュコピー要求があることを知らされたときに、デバイス・ドライバは現在のトランザクションの参加者として登録される。トランザクション完了２フェーズ・コミット・プロトコルからデバイス・ドライバに「prepare」メッセージが送信されると、すべてのローカル・キャッシュ（存在する場合）がストレージ・コントローラにフラッシュされることが保証される。例えばウェブ・アプリケーション・サーバ／データベース等、トランザクションの他のすべての参加者もこれと同じことを行い、それぞれが強化したいデータに関する「fflush」の等価物も発行する。トランザクション参加者に送信されるprepareの「順序」は定義されないが、デバイス・ドライバがそのトランザクションのprepareを受信すると、デバイス・ドライバのキャッシュが当該トランザクションのライト・スルーを開始し、したがってすべての書き込みはサーバに流入する。
【００２８】
したがって、ストレージ・ディスクに対するすべての書き込みがデバイス・ドライバを通過することになり、これらの書き込みはキャッシュされることはない。デバイス・ドライバがトランザクション完了インジケーションを受信すると、デバイス・ドライバは、トランザクションによってディスク上のデータが完成され且つそのディスクに対する後続のＩＯがまだ許可されていないポイント・イン・タイムにおいてフラッシュコピーが実際に開始可能となったことを知らせる通知を（ファイバ・チャネル・ケーブル上のトンネリング・プロトコルを介して）システムに送信する。この利点は、フラッシュコピー・タイムがビジネス・アプリケーションの整合点及びトランザクション境界に関連する実際のポイント・イン・タイムと整合されること、ならびにフロント・エンド・アプリケーションを停止させる必要なく有用なフラッシュコピーを取得する能力が提供されることである。
【００２９】
本発明は、以下のステップで実施することができる。ステップ１で、フラッシュコピーが新しいフラグ（「flashcopy to use transactionboundaries」（トランザクション境界を使用するフラッシュコピー））と共に作成される。ステップ２で、フラッシュコピーが準備され、ステップ３で、フラッシュコピーが「開始」され（これによってフラッシュコピーが実際に開始されるわけではない）、（直前のフラッシュコピー以降に）ｖｄｉｓｋに関するＩＯを作成しているデバイス・ドライバ（単数又は複数）には、待ち状態のトランザクション・フラッシュコピーがあることが知らされる。ステップ４で、デバイス・ドライバは、現在のトランザクションが存在するかどうかを確認する。存在しない場合には、デバイス・ドライバは通常の動作を継続する。存在する場合には、デバイス・ドライバは、現在のトランザクションの参加者として登録され、ＩＯを引き続きサービスするが、２フェーズ・コミットによるトランザクションの完了を待つ。デバイス・ドライバがprepareを受信した時点で該当するｖｄｉｓｋに関するＩＯを受信している場合、デバイス・ドライバは、commitを受信したときに（あるいはrollbackを受信したときに、あるいはユーザ指定のタイム・アウトに達した場合に）すべての／任意のキャッシュをフラッシュし、後続の書き込みは、ストレージ・コントローラに対するライト・スルーに追加される。デバイス・ドライバは、そのポイント・イン・タイムにおいてフラッシュコピーを実際に取得することをストレージ・コントローラに指示する（ダウン・ファイバ・チャネル）。
【００３０】
ストレージ・コントローラは、フラッシュコピーをすぐに取得するのではなく、待ち状態のフラッシュコピーがあることをデバイス・ドライバに知らせ、その後、デバイス・ドライバは、現在のトランザクションの終了時に次のコミット・ポイントが得られた時点で（その後データ整合が得られるので）、そのポイント・イン・タイムを始点とするフラッシュコピーを取得することをストレージ・コントローラに知らせる応答をストレージ・コントローラに返す。ディスクに対する「イン・フライト（in-flight）」状態のトランザクションが複数存在する場合、デバイス・ドライバは、そのセット内の最後のトランザクションが完了したときに通知を送出することができる。以前のトランザクションに関する登録からその完了までの期間中に、まったく新しいトランザクションの下で実行される同じディスクに対するＩＯがデバイス・ドライバにおいて発生した場合は、（ユーザの裁量で）そのトランザクションに関するＩＯを、フラッシュコピーが開始された時点でイン・フライト状態であったトランザクションが完了するまで遅延させることができる。そうしない場合には、絶えず重複する一連のトランザクションによってフラッシュコピーの開始が無期限に遅延される可能性があり、また、ディスク上に存在するデータが十分に整合性のあるビジネス・データ・セットとなっていないポイントでフラッシュコピーを開始せざるを得なくなる可能性もある。
【図面の簡単な説明】
【００３１】
以下では単なる例示として、添付図面を参照しながら本発明の諸実施形態について説明する。
【００３２】
【図１】ストレージ・デバイス上のデータ書き込みを実行するためのシステムの概略図である。
【図２】システム内のデータ・フローを詳しく示した図１のシステムの概略図である。
【図３】システム内のデータ・フローを詳しく示した図１のシステムの概略図である。
【図４】システム内のデータ・フローを詳しく示した図１のシステムの概略図である。
【図５】ストレージ・デバイス上のデータ書き込みを実行する方法を示すフローチャートである。
【図６】好ましい実施形態の一改良例に係る様々なシステム・アクションを詳しく示した図１のシステムの概略図である。
【図７】好ましい実施形態の一改良例に係る様々なシステム・アクションを詳しく示した図１のシステムの概略図である。
【図８】好ましい実施形態の一改良例に従ってストレージ・デバイスのフラッシュコピーをスケジューリングする方法を示すフローチャートである。
【発明を実施するための形態】
【００３３】
図１は、データ書き込みを実行するためのシステムを概略的に示す。ファイル・システム１０は、ストレージ・デバイス１４に固有のドライバであるデバイス・ドライバ１２と通信する。デバイス・ドライバ１２は、トランザクション・コーディネータ１６とも通信する。ファイル・システム１０及びトランザクション・コーディネータ１６は、ストレージ・デバイス１４と共にストレージ・エリア・ネットワーク（ＳＡＮ）を含む１つ又は複数のサーバ上に位置するソフトウェア・コンポーネントである。本発明の実際的な一実施形態では、多数のサーバ及びストレージ・デバイスが相互接続されて全体のネットワークが形成される。デバイス・ドライバ１２は、単独のソフトウェア・コンポーネントであっても、ソフトウェア・コンポーネント及び物理レイヤから構成されてもよい。
【００３４】
ファイル・システム１０及びトランザクション・コーディネータ１６の各ソフトウェア・コンポーネントは、やはりストレージ・エリア・ネットワーク内で実行される外部アプリケーションとの間のアプリケーション・インターフェースを有する。例えば、ネットワークは、商品購入の注文を受け取るための組織の商用ウェブサイトを管理することができ、ストレージ・デバイス１４は、ウェブサイトを介して顧客注文が行われたときにそれらの顧客注文を記憶する。本例では、注文を受け取り、その後ストレージ・デバイス１４によって記憶される注文の作成のような必要なアクションを実行する、ウェブサイトを介したユーザ・インターフェースを有するアプリケーションがネットワーク内で実行される。このアプリケーションは、ファイル・システム１０と相互作用してデータをストレージ・デバイス１４に書き込むタスクを実行する。
【００３５】
トランザクション・コーディネータ１６は、ネットワーク内で実行される任意のアクションが所望のレベルのトランザクション処理に適合することを保証するソフトウェア・コンポーネントである。トランザクション処理は、システム上で実行される任意の相互依存動作がすべて無事完了する又はすべて無事キャンセルされることを保証することにより、本例で論じるネットワークのようなコンピュータ・システムを既知の整合状態に維持するように設計される。ネットワーク内の各作業単位は、各作業単位の整合性を保証するトランザクション・コーディネータ１６を介して処理される。トランザクション処理は、トランザクションが未完了のままとなり、ネットワークが未知の非整合状態となる恐れがあるハードウェア・エラー及びソフトウェア・エラーの発生を防止する。ネットワーク（あるいはネットワーク内の任意のコンポーネント又は接続）の障害がトランザクションの途中で発生した場合、トランザクション・コーディネータ１６は、コミットされていない（即ち処理が完了していない）トランザクションのすべての動作がキャンセルされることを保証する。
【００３６】
図２は、データをストレージ・デバイス１４に書き込むことを必要とするネットワーク内の何らかの作業単位がトリガされた後の図１のシステムを示す。これは、上述のとおりネットワーク内で実行されているアプリケーションによって何らかのアクションが実行された結果であり、例えば当該ネットワークが維持するエンタープライズ・システムによって管理されるウェブサイト上でエンド・ユーザが買い物を行った結果である。したがって、ユーザの注文は、その注文に関する情報が記憶されるストレージ・デバイス１４に記憶する必要がある。
【００３７】
１番目のアクション（１）では、ファイル・システム１０がストレージ・デバイス１４に関するデバイス・ドライバ１２にストレージ・デバイス１４に対するデータ書き込みを実行するよう命令する。これに応答して、２番目のアクション（２）では、デバイス・ドライバ１２がトランザクション参加者としてトランザクション・コーディネータ１６に登録される。このアクション（２）は、デバイス・ドライバ１２自体によって実行されるように図示されているが、実際には、デバイス・ドライバ１２のトランザクション・コーディネータ１６への登録は、ファイル・システム１０のようなシステム内の異なるコンポーネントによって実行される可能性もある。
【００３８】
この登録の目的は、デバイス・ドライバ１２を、登録に付随するすべてのアテンダント要件を備えたトランザクション処理システム内の参加者とすることである。この時点で、デバイス・ドライバ１２は、デバイス・ドライバ１２がデータ書き込みに関して実行するアクションをトランザクション・コーディネータ１６に確認しなければならないシステムの一部となり、トランザクション処理の意味の範囲では、より大きいトランザクションの一部を形成する。
【００３９】
データ書き込み処理の次の段階は、図３に示されている。ここで、デバイス・ドライバ１２は、トランザクション・コーディネータ１６に登録された後にストレージ・デバイス１４のフラッシュコピーを実行するように構成される。このアクションは、図中のアクション（３）として示され、このアクションの結果、ストレージ・デバイス１４のボリュームが新しいストレージ位置１８にレプリケートされる。新しいストレージ位置１８は、異なるハードウェアであることも、全体のネットワーク内の単純に新しい論理位置であることもある。フラッシュコピー機能の性質は、ストレージ・デバイス１４に記憶されたデータのコピーが特定のポイント・イン・タイムに関して作成されるようになることである。フラッシュコピー機能は、ストレージ・デバイス１４によって記憶されているデータを利用可能な帯域幅に従って決定されるレートで新しいストレージ位置１８にコピーするバックグラウンド・タスクを作成する。また、ストレージ・デバイス１４内のデータに対する変更又は新しいストレージ位置１８のデータ要求が行われたときは、ストレージ・デバイス１４から新しいストレージ位置１８にデータが自動的にコピーされる。
【００４０】
デバイス・ドライバ１２は、ストレージ・デバイス１４に対する書き込みが行われる前にストレージ・デバイス１４の内容のフラッシュコピーを開始する。実際、デバイス・ドライバが中間アクションを経ずにデータ書き込みの実行に直接移行することは、新しいストレージ位置１８に保持されるコピーが、新しいデータ書き込みを実行する前とまったく同じデータのコピーとなることを保証する上で有利である。事実上、デバイス・ドライバ１２は、特定のデータ書き込みが一部を形成するトランザクションの障害に備えて、ストレージ・デバイス１４によって記憶されるデータのリカバリ・コピーを準備する。
【００４１】
図４には、ストレージ・デバイス１４上のデータ書き込みを実行するアクション（４）と、デバイス・ドライバ１２とトランザクション・コーディネータ１６との間の２フェーズ・コミットを実行するアクション（５）と、を含むデータ書き込み処理の最後の２つのアクションが示されている。２つのアクションのうちの１番目のアクション（４）は、デバイス・ドライバ１２からストレージ・デバイス１４に対する従来のデータ書き込みである。これにより、ストレージ・デバイス１４内の上書きデータがまだバックグラウンド・タスクによって全体的にコピーされていない場合は、フラッシュコピー機能の制御下で、当該データを図３の新しいストレージ位置１８にコピーする処理もトリガされる。
【００４２】
２つのアクションのうちの２番目のアクション、即ち、デバイス・ドライバ１２とトランザクション・コーディネータ１６との間の２フェーズ・コミットを実行するアクション（５）は、先に図２を参照して詳述したアクション（２）においてトランザクション・コーディネータ１６にトランザクション参加者として登録されたデバイス・ドライバ１２の要求である。このアクションは、２つのコンポーネント１２及び１６間の双方向通信として図示されている。２フェーズ・コミットは、ストレージ・デバイス１４に対するデータ書き込みを含む現在の作業単位内の各作用コンポーネントに必要とされる。
【００４３】
２フェーズ・コミット・プロトコルは、分散ネットワーク内のすべてのコンポーネントがトランザクションの完了前にトランザクションをコミットすることに同意することを保証する分散アルゴリズムである。このプロトコルの結果は、すべてのコンポーネントがトランザクションをコミットするか、すべてのコンポーネントがトランザクションをアボートするかのいずれかである。上記のアルゴリズムには２つのフェーズがあり、まずコミット要求フェーズでトランザクション・コーディネータ１６が参加コンポーネントを準備し、コミット・フェーズでトランザクション・コーディネータ１６がトランザクションを完了させる。
【００４４】
デバイス・ドライバ１２に対する２フェーズ・コミットの影響は、アクション（４）のデータ書き込みが無事完了したか否かに関わらず、デバイス・ドライバ１２がトランザクション・コーディネータ１６に対して同意メッセージ又はアボート・メッセージを発行する必要が生じることである。また、デバイス・ドライバ１２は、２フェーズ・コミット・プロセスを完了させるために、トランザクション・コーディネータ１６からのコミット・メッセージ又はロールバック・メッセージを待つ必要もある。デバイス・ドライバ１２は、データ書き込みをロールバックするよう命令された場合は、ロールバックを正しく実行するために上書きされたオリジナル・データのフラッシュコピーにアクセスすることができる。
【００４５】
図２乃至図４に例示したプロセスの概要を図５のフローチャートに示す。ストレージ・デバイス１４上のデータ書き込みを実行する本方法は、まずステップＳ１として、ストレージ・デバイス１４に関するデバイス・ドライバ１２にストレージ・デバイス１４に対するデータ書き込みを実行するよう命令するステップを含む。このステップが完了すると、２番目のステップであるステップＳ２で、デバイス・ドライバ１２がトランザクション参加者としてトランザクション・コーディネータ１６に登録される。デバイス・ドライバ１２が登録されると、次のステップのステップＳ３で、ストレージ・デバイス１４のフラッシュコピーが実行される。フラッシュコピーが開始されると、次のステップＳ４で、ストレージ・デバイス１４上のデータ書き込みが実行され、ステップＳ５で、デバイス・ドライバ１２とトランザクション・コーディネータ１６との間の２フェーズ・コミットが実行される。
【００４６】
２フェーズ・コミット・プロセスの２つの可能な結果は、相互に排他的な２つのステップＳ６及びＳ７によって表される。１つ目の可能性はステップＳ６であり、ステップＳ６は、ロールバックを実行する命令を受信するステップと、データ書き込みをフラッシュコピーに従って反転させるステップと、を含む。２つ目の可能性はステップＳ７であり、ステップＳ７は、トランザクションをコミットする命令を受信するステップと、フラッシュコピーを破棄するステップと、を含む。図２乃至図４を参照して上述した最初のステップＳ１〜Ｓ５の主な利点は、デバイス・ドライバが２フェーズ・コミットにおいて「ｎｏ」の投票を行ったこと、又はトランザクション・コーディネータ１６が（異なる参加者が「ｎｏ」の投票を行った後に）ロールバックを命令したことによってロールバックが発生した場合に、フラッシュコピーを使用してストレージ・デバイス１４上のデータを再構築することができることである。フラッシュコピーにより、ストレージ・デバイス１４によって記憶されているデータのポイント・イン・タイム・コピーが第２のストレージ位置１８にコピーされ、これを反転させることによってデータ書き込みを効果的に取り消すことができる。現在の作業単位を含むトランザクションをコミットすることが決定された場合は、フラッシュコピーを破棄することができる。
【００４７】
図６は、好ましい実施形態の一改良例に係る図１のシステムを示す。ここでは、ストレージ・デバイスのフラッシュコピーを実行する命令が（図中のアクション１として示すように）受信される。このフラッシュコピー命令は、アプリケーションによって自動的に生成されることも、システム管理者のようなユーザによって生成されることもある。ストレージ・デバイス１４によって保持されるデータのポイント・イン・タイム・コピーが要求される。従来のシステムでは、この時点でストレージ・デバイス１４によって定義されるソース・ボリュームのフラッシュコピーが取得されているはずである。一方、図６に示すシステムは、フラッシュコピー（バックアップ）命令が受信されたときは命令のソースに関わらず常に適合された様式で動作する。
【００４８】
命令（１）が受信された後、デバイス・ドライバは、ストレージ・デバイス１４に関する現在のトランザクションを確認する。このアクションは、図中の（２）として示されている。これに応答して、３番目のアクション（３）では、（２）で識別された現在のトランザクションに関して、デバイス・ドライバ１２がトランザクション参加者としてトランザクション・コーディネータ１６に登録される。このアクション（３）は、デバイス・ドライバ１２自体によって実行されるように図示されているが、実際には、デバイス・ドライバ１２のトランザクション・コーディネータ１６への登録は、ファイル・システム１０のようなシステム内の異なるコンポーネントによって実行される可能性もある。この登録の目的は、デバイス・ドライバ１２を、登録に付随するすべてのアテンダント要件を備えたトランザクション処理システム内の参加者とすることである。この時点で、デバイス・ドライバ１２は、デバイス・ドライバ１２がデータ書き込みに関して実行するアクションをトランザクション・コーディネータ１６に確認しなければならないシステムの一部となり、トランザクション処理の意味の範囲では、より大きいトランザクションの一部を形成する。
【００４９】
フラッシュコピーのスケジューリングの次の段階は、図７に示されている。ここで、デバイス・ドライバ１２は、トランザクション・コーディネータ１６に登録された後にトランザクション・コーディネータ１６からトランザクション完了インジケーションを受信する（４）ように構成される。事実上、デバイス・ドライバ１２は、デバイス・ドライバ１２が現在のトランザクションに関してトランザクション・コーディネータ１６へのそれ自体の登録を済ませ、その後現在のトランザクションが完了し、したがってストレージ・デバイス１４上のデータが整合状態となったことを示すインジケーション（４）をトランザクション・コーディネータ１６から受信しない限り、命令されたフラッシュコピーの実行をすぐに開始することはない。
【００５０】
インジケーション（４）が受信された後、デバイス・ドライバ１２によって実行される次のアクションは、ストレージ・デバイス１４のフラッシュコピーの実行を開始するアクション（５）である。このアクションは、図７のアクション（５）として示され、このアクションの結果、ストレージ・デバイス１４のボリュームが新しいストレージ位置１８にレプリケートされる。新しいストレージ位置１８は、異なるハードウェアであることも、全体のネットワーク内の単純に新しい論理位置であることもある。フラッシュコピー機能の性質は、ストレージ・デバイス１４に記憶されたデータのコピーが特定のポイント・イン・タイムに関して作成されるようになることである。フラッシュコピー機能は、ストレージ・デバイス１４によって記憶されているデータを利用可能な帯域幅に従って決定されるレートで新しいストレージ位置１８にコピーするバックグラウンド・タスクを作成する。また、ストレージ・デバイス１４内のデータに対する変更又は新しいストレージ位置１８のデータ要求が行われたときは、ストレージ・デバイス１４から新しいストレージ位置１８にデータが自動的にコピーされる。
【００５１】
デバイス・ドライバ１２は、ストレージ・デバイス１４が整合状態にあるときにストレージ・デバイス１４の内容のフラッシュコピーを開始する。実際、デバイス・ドライバ１２が中間アクションを経ずにフラッシュコピーの開始に直接移行することは、新しいストレージ位置１８に保持されるコピーが、フラッシュコピー命令受信当初のポイント・イン・タイムにできるだけ近いポイント・イン・タイムにおいてストレージ・デバイス１４が保持するデータのレプリカとなることを保証する上で有利である。
【００５２】
この処理は、先に図６を参照して詳述したアクション（３）においてトランザクション・コーディネータ１６にトランザクション参加者として登録されたデバイス・ドライバ１２の要求である、デバイス・ドライバ１２とトランザクション・コーディネータ１６との間の２フェーズ・コミットの実行を含む。このアクションは、２つのコンポーネント１２及び１６間の双方向通信である。２フェーズ・コミットは、現在のトランザクション内の各作用コンポーネントに必要とされる。
【００５３】
２フェーズ・コミット・プロトコルは、分散ネットワーク内のすべてのコンポーネントがトランザクションの完了前にトランザクションをコミットすることに同意することを保証する分散アルゴリズムである。このプロトコルの結果は、すべてのコンポーネントがトランザクションをコミットするか、すべてのコンポーネントがトランザクションをアボートするかのいずれかである。上記のアルゴリズムには２つのフェーズがあり、まずコミット要求（準備）フェーズでトランザクション・コーディネータ１６が参加コンポーネントを準備し、コミット・フェーズでトランザクション・コーディネータ１６がトランザクションを完了させる。
【００５４】
デバイス・ドライバ１２に対する２フェーズ・コミットの影響は、デバイス・ドライバ１２がトランザクション・コーディネータ１６に対して同意メッセージ又はアボート・メッセージを発行する必要が生じることである。また、デバイス・ドライバ１２は、２フェーズ・コミット・プロセスを完了させるために、トランザクション・コーディネータ１６からのコミット・メッセージ又はロールバック・メッセージを待つ必要もある。デバイス・ドライバ１２は、ロールバックを行うよう命令された場合は、ロールバックを正しく実行するために上書きされたオリジナル・データのフラッシュコピーにアクセスすることができる。２フェーズ・コミットが使用される場合は、トランザクション・コーディネータからトランザクション完了インジケーションを受信する前に、prepareメッセージが受信され、それによってすべてのローカル・キャッシュがフラッシュされる。
【００５５】
好ましい実施形態の一改良例に係るフラッシュコピーのスケジューリング方法の概要を図８に示す。１番目のステップＳ１は、ストレージ・デバイス１４上のフラッシュコピーを実行する命令を受信するステップであり、次のステップＳ２では、デバイス・ドライバ１２がストレージ・デバイス１４に関する現在のトランザクションを確認する。この確認が行われると、次のステップＳ３で、（ストレージ・デバイス１４に関する）デバイス・ドライバ１２が現在のトランザクションのトランザクション参加者としてトランザクション・コーディネータ１６に登録される。この結果、デバイス・ドライバは、ストレージ・デバイス１４に関して実行される現在のトランザクションに追加される。現在のトランザクションが完了すると、次のステップＳ４で、トランザクション・コーディネータ１６からのトランザクション完了インジケーションがデバイス・ドライバ１２において受信される。本方法は、ストレージ・デバイス１４に関するフラッシュコピーを実行するステップを含むステップＳ５によって完了する。この実行は、デバイス・ドライバ１２によって開始され、ストレージ・コントローラによって実行される。
【図１】
0005425922.tif 000002
【図２】
0005425922.tif 000003
【図３】
0005425922.tif 000004
【図４】
0005425922.tif 000005
【図５】
0005425922.tif 000006
【図６】
0005425922.tif 000007
【図７】
0005425922.tif 000008
【図８】
0005425922.tif 000009