(57)【要約】【課題】容量の自動拡張可能なボリューム上で、スナップショット性能及びブロックデバイスレベルのコピー性能を向上させる。【解決手段】ネットワークに接続されるストレージシステムにおいて、前記ストレージシステムは、複数のブロックを含む一つ以上のボリュームを備え、前記複数のブロックは、第１ブロック及び第２ブロックを含み、前記複数のブロックのうち少なくとも一つには、実記憶領域が割り当てられ、前記ストレージシステムは、受信した書き込み要求の対象の第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込まずに、前記第１ブロックに前記書き込み要求の対象のデータを書き込む。【選択図】図４
2007249573.tif 000002
【特許請求の範囲】
【請求項１】
ネットワークに接続されるストレージシステムにおいて、
前記ストレージシステムは、
前記ネットワークに接続されるインターフェースと、
前記インターフェースに接続されるプロセッサと、
前記プロセッサに接続される第１メモリと、
データを格納するディスクドライブと、
一つ以上のボリュームと、を備え、
前記一つ以上のボリュームは、複数のブロックを含み、
前記複数のブロックは、第１ブロック及び第２ブロックを含み、
前記複数のブロックのうち少なくとも一つには、前記ディスクドライブ内の実記憶領域が割り当てられ、
前記インターフェースが、前記第１ブロックを対象としたデータの書き込み要求を、前記ネットワークを介して受信したとき、前記プロセッサは、
前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定し、
前記実記憶領域が割り当てられていると判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込んだ後、前記第１ブロックに前記書き込み要求の対象のデータを書き込み、
前記実記憶領域が割り当てられていないと判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込まずに、前記第１ブロックに前記書き込み要求の対象のデータを書き込むことを特徴とするストレージシステム。
【請求項２】
前記ストレージシステムは、
前記インターフェース、前記プロセッサ及び前記第１メモリを含む計算機と、
前記ディスクドライブ、前記ディスクドライブを制御するディスク制御部及び前記ディスク制御部に接続される第２メモリを含むストレージ装置と、を備え、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記一つ以上のボリュームは、前記第１ブロックを含む運用ボリュームと、前記第２ブロックを含む差分ボリュームと、を含み、
前記プロセッサは、
前記割り当てテーブルに基づいて、前記各ブロックに前記実記憶領域が割り当てられているか否かを示す情報を含む割り当て情報を作成し、
前記割り当て情報に基づいて、前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定することを特徴とする請求項１に記載のストレージシステム。
【請求項３】
前記ストレージシステムは、
前記インターフェース、前記プロセッサ及び前記第１メモリを含む計算機と、
前記ディスクドライブ、前記ディスクドライブを制御するディスク制御部及び前記ディスク制御部に接続される第２メモリを含むストレージ装置と、を備え、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記一つ以上のボリュームは、前記第１ブロックを含む運用ボリュームと、前記第２ブロックを含む差分ボリュームと、を含み、
前記プロセッサは、前記第１ブロックを対象とする読み込み要求を前記ストレージ装置に対して発行し、
前記各ブロックは、ブロックアドレスによって識別され、
前記ブロックアドレスは、前記第１ブロックを識別する第１ブロックアドレス、及び、前記第１ブロックアドレスに連続する第２ブロックアドレスを含み、
前記ディスク制御部は、
前記割り当てテーブルに基づいて、前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定し、
前記第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記第２ブロックアドレスによって識別されるブロックに前記実記憶領域が割り当てられているか否かを示す情報を前記計算機に送信し、
前記プロセッサは、前記第２ブロックアドレスによって識別されるブロックを対象とする書き込み要求を受信した場合、前記ディスク制御部から送信された情報に基づいて、前記第２ブロックアドレスによって識別されるブロックに前記実記憶領域が割り当てられているか否かを判定することを特徴とする請求項１に記載のストレージシステム。
【請求項４】
前記第１メモリは、前記プロセッサによって実行されるアプリケーションプログラムと、ポリシー情報と、を保持し、
前記プロセッサは、
前記ポリシー情報の値に基づいて、前記アプリケーションプログラムによって使用されていない前記ブロックのうち、前記実記憶領域が割り当てられている前記ブロック、又は、前記実記憶領域が割り当てられていない前記ブロックを選択し、
前記選択されたブロックを前記アプリケーションプログラムに使用させることを特徴とする請求項１に記載のストレージシステム。
【請求項５】
前記プロセッサは、
前記ポリシー情報の変更要求を受信し、
前記受信した変更要求に基づいて、前記ポリシー情報の値を変更することを特徴とする請求項４に記載のストレージシステム。
【請求項６】
計算機に接続されるストレージ装置において、
前記計算機は、プロセッサと、前記プロセッサに接続される第１メモリと、を備え、
前記ストレージ装置は、
データを格納するディスクドライブと、前記ディスクドライブを制御するディスク制御部と、前記ディスク制御部に接続される第２メモリと、一つ以上のボリュームと、を備え、
前記一つ以上のボリュームは、複数のブロックを含み、
前記複数のブロックは、第１ブロック及び第２ブロックを含み、
前記複数のブロックのうち少なくとも一つには、前記ディスクドライブ内の実記憶領域が割り当てられ、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記ディスク制御部は、前記計算機から所定のコマンドを受信すると、
前記コマンドによって指定された前記第１ブロックに前記実記憶領域が割り当てられているか否かを前記割り当てテーブルに基づいて判定し、
前記指定された第１ブロックに前記実記憶領域が割り当てられていると判定された場合、前記指定された第１ブロックに格納されているデータの複製を、前記コマンドによって指定された前記第２ブロックに書き込み、
前記指定された第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記指定された第１ブロックに格納されているデータの複製を前記指定された第２ブロックに書き込まなかったことを前記計算機に応答することを特徴とするストレージ装置。
【請求項７】
前記一つ以上のボリュームは、前記計算機から受信したデータが書き込まれるブロックを含む運用ボリュームと、前記計算機から受信したデータが書き込まれる前に前記ブロックに格納されていたデータの複製が書き込まれる差分ボリュームと、を含み、
前記第１ブロックは、前記運用ボリュームに含まれ、
前記第２ブロックは、前記差分ボリュームに含まれることを特徴とする請求項６に記載のストレージ装置。
【請求項８】
前記指定された第１ブロックに前記実記憶領域が割り当てられていると判定された場合、前記コマンドを受信した前記ディスク制御部は、さらに、前記データの複製の書き込み先を識別する情報を、前記差分ボリューム内の前記コマンドによって指定された位置に書き込むことを特徴とする請求項７に記載のストレージ装置。
【請求項９】
前記指定された第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記コマンドを受信した前記ディスク制御部は、さらに、前記差分ボリューム内の所定の位置を示す情報を、前記差分ボリューム内の前記コマンドによって指定された位置に書き込むことを特徴とする請求項８に記載のストレージ装置。
【請求項１０】
前記コマンドを受信した前記ディスク制御部は、さらに、前記コマンドによって指定された書き込み要求の対象のデータを前記指定された第１ブロックに書き込むことを特徴とする請求項８に記載のストレージ装置。
【請求項１１】
ネットワークに接続されるストレージシステムの制御方法において、
前記ストレージシステムは、
前記ネットワークに接続されるインターフェースと、
前記インターフェースに接続されるプロセッサと、
前記プロセッサに接続される第１メモリと、
データを格納するディスクドライブと、
一つ以上のボリュームと、を備え、
前記一つ以上のボリュームは、複数のブロックを含み、
前記複数のブロックは、第１ブロック及び第２ブロックを含み、
前記複数のブロックのうち少なくとも一つには、前記ディスクドライブ内の実記憶領域が割り当てられ、
前記インターフェースが、前記第１ブロックを対象としたデータの書き込み要求を、前記ネットワークを介して受信したとき、前記プロセッサは、
前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定し、
前記実記憶領域が割り当てられていると判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込んだ後、前記第１ブロックに前記書き込み要求の対象のデータを書き込み、
前記実記憶領域が割り当てられていないと判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込まずに、前記第１ブロックに前記書き込み要求の対象のデータを書き込むことを特徴とする方法。
【請求項１２】
前記ストレージシステムは、
前記インターフェース、前記プロセッサ及び前記第１メモリを含む計算機と、
前記ディスクドライブ、前記ディスクドライブを制御するディスク制御部及び前記ディスク制御部に接続される第２メモリを含むストレージ装置と、を備え、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記一つ以上のボリュームは、前記第１ブロックを含む運用ボリュームと、前記第２ブロックを含む差分ボリュームと、を含み、
前記プロセッサは、
前記割り当てテーブルに基づいて、前記各ブロックに前記実記憶領域が割り当てられているか否かを示す情報を含む割り当て情報を作成し、
前記割り当て情報に基づいて、前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記ストレージシステムは、
前記インターフェース、前記プロセッサ及び前記第１メモリを含む計算機と、
前記ディスクドライブ、前記ディスクドライブを制御するディスク制御部及び前記ディスク制御部に接続される第２メモリを含むストレージ装置と、を備え、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記一つ以上のボリュームは、前記第１ブロックを含む運用ボリュームと、前記第２ブロックを含む差分ボリュームと、を含み、
前記プロセッサは、前記第１ブロックを対象とする読み込み要求を前記ストレージ装置に対して発行し、
前記各ブロックは、ブロックアドレスによって識別され、
前記ブロックアドレスは、前記第１ブロックを識別する第１ブロックアドレス、及び、前記第１ブロックアドレスに連続する第２ブロックアドレスを含み、
前記ディスク制御部は、
前記割り当てテーブルに基づいて、前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定し、
前記第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記第２ブロックアドレスによって識別されるブロックに前記実記憶領域が割り当てられているか否かを示す情報を前記計算機に送信し、
前記プロセッサは、前記第２ブロックアドレスによって識別されるブロックを対象とする書き込み要求を受信した場合、前記ディスク制御部から送信された情報に基づいて、前記第２ブロックアドレスによって識別されるブロックに前記実記憶領域が割り当てられているか否かを判定することを特徴とする請求項１１に記載の方法。
【請求項１４】
前記第１メモリは、前記プロセッサによって実行されるアプリケーションプログラムと、ポリシー情報と、を保持し、
前記プロセッサは、
前記ポリシー情報の値に基づいて、前記アプリケーションプログラムによって使用されていない前記ブロックのうち、前記実記憶領域が割り当てられている前記ブロック、又は、前記実記憶領域が割り当てられていない前記ブロックを選択し、
前記選択されたブロックを前記アプリケーションプログラムに使用させることを特徴とする請求項１１に記載の方法。
【請求項１５】
前記プロセッサは、
前記ポリシー情報の変更要求を受信し、
前記受信した変更要求に基づいて、前記ポリシー情報の値を変更することを特徴とする請求項１４に記載の方法。
【請求項１６】
計算機に接続されるストレージ装置の制御方法において、
前記計算機は、プロセッサと、前記プロセッサに接続される第１メモリと、を備え、
前記ストレージ装置は、
データを格納するディスクドライブと、前記ディスクドライブを制御するディスク制御部と、前記ディスク制御部に接続される第２メモリと、一つ以上のボリュームと、を備え、
前記一つ以上のボリュームは、複数のブロックを含み、
前記複数のブロックは、第１ブロック及び第２ブロックを含み、
前記複数のブロックのうち少なくとも一つには、前記ディスクドライブ内の実記憶領域が割り当てられ、
前記第２メモリは、前記各ブロックと前記実記憶領域との対応関係を示す情報を含む割り当てテーブルを格納し、
前記ディスク制御部は、前記計算機から所定のコマンドを受信すると、
前記コマンドによって指定された前記第１ブロックに前記実記憶領域が割り当てられているか否かを前記割り当てテーブルに基づいて判定し、
前記指定された第１ブロックに前記実記憶領域が割り当てられていると判定された場合、前記指定された第１ブロックに格納されているデータの複製を、前記コマンドによって指定された第２ブロックに書き込み、
前記指定された第１のブロックに前記実記憶領域が割り当てられていないと判定された場合、前記指定された第１ブロックに格納されているデータの複製を前記指定された第２ブロックに書き込まなかったことを前記計算機に応答することを特徴とする方法。
【請求項１７】
前記一つ以上のボリュームは、前記計算機から受信したデータが書き込まれるブロックを含む運用ボリュームと、前記計算機から受信したデータが書き込まれる前に前記ブロックに格納されていたデータの複製が書き込まれる差分ボリュームと、を含み、
前記第１ブロックは、前記運用ボリュームに含まれ、
前記第２ブロックは、前記差分ボリュームに含まれることを特徴とする請求項１６に記載の方法。
【請求項１８】
前記指定された第１ブロックに前記実記憶領域が割り当てられていると判定された場合、前記コマンドを受信した前記ディスク制御部は、さらに、前記データの複製の書き込み先を識別する情報を、前記差分ボリューム内の前記コマンドによって指定された位置に書き込むことを特徴とする請求項１７に記載の方法。
【請求項１９】
前記指定された第１ブロックに前記実記憶領域が割り当てられていないと判定された場合、前記コマンドを受信した前記ディスク制御部は、さらに、前記差分ボリューム内の所定の位置を示す情報を、前記差分ボリューム内の前記コマンドによって指定された位置に書き込むことを特徴とする請求項１８に記載の方法。
【請求項２０】
前記コマンドを受信した前記ディスク制御部は、さらに、前記コマンドによって指定された書き込み要求の対象のデータを前記指定された第１ブロックに書き込むことを特徴とする請求項１８に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願明細書で開示される技術は、ストレージシステムにおけるデータの処理技術に関し、特に、自動拡張可能なボリューム上でスナップショット処理又はコピー処理が実行される場合に、Ｉ／Ｏコマンドの発行を最適化する技術に関する。
【背景技術】
【０００２】
ストレージの基本機能の一つとして、ボリュームの自動拡張技術が開示されている（例えば、特許文献１参照）。特許文献１によれば、複数の仮想ボリュームを含むボリュームプールにおいて、仮想ボリューム作成時には、仮想ボリュームを構成するブロックに物理ブロックが割り当てられず、実際の使用要求（書き込みＩ／Ｏ要求等）が発行された時に、その要求の対象のブロックに対して、ボリュームプールから物理ブロックが割り当てられる。ボリュームの自動拡張技術を用いて、仮想ボリュームのサイズを十分に大きく確保し、ボリュームプールのサイズを適度な大きさとすることによって、管理者は基本的にボリュームプールの空き状況の監視のみを行っていればよく、仮想ボリュームの容量拡張作業から解放される。
【０００３】
ただし、仮想ボリュームサイズをあまりに大きくしすぎると、その分ボリューム自身を管理する資源のサイズ（例えば、ファイルシステムメタデータ及びスナップショット管理テーブル）も大きくなってしまう。その結果、管理データをメモリ上に保持しておくことによる使用可能メモリ圧迫による性能低下、及び、管理データ格納のためのディスク容量使用によるユーザ使用可能容量圧迫などの弊害がある。
【０００４】
また、ストレージの別の基本機能としてスナップショット機能が開示されている。スナップショット機能を実現する方式には、ボリューム全体を複製する全体スナップショット方式と、ボリュームの差分情報のみを別途保存しておき、差分データと運用ボリュームのデータからスナップショットイメージを作成する差分スナップショット方式（例えば、特許文献２参照）の二つがある。差分スナップショット方式は、さらに二つに分類することができる。すなわち、運用ボリュームへの書き込みデータを未割当領域へ書き込み、運用ボリュームのマッピングテーブルを書き換えるAllocation on Write方式と、運用ボリュームへの書き込み発生時に、書き込み要求ブロックに元々あったデータを別領域へコピー（退避）し、その後、要求された書き込み処理を実行するCopy on Write（以下、ＣＯＷと記載する）方式がある。特許文献２では、ＣＯＷ方式が開始されている。ＣＯＷ方式の差分スナップショットが実行されているボリュームに対する読み込み性能は、スナップショットなしのボリュームと比較して同等だが、前者のボリュームに対する書き込み性能は、ＣＯＷのためのコピー処理が発生するため、後者のボリュームに対する書き込み性能より低下してしまう。この性能低下を緩和する従来技術として、例えば、特許文献３が開示されている。
【０００５】
特許文献３によれば、運用ボリュームと過去のスナップショットにおけるファイルシステムの未使用領域がそれぞれ抽出され、その重ね合わせ（ＡＮＤ）の未使用領域に対するＣＯＷが発生した場合、ＣＯＷが無効化される。
【特許文献１】特開２００３−１５９１５号公報
【特許文献２】特開２００４−３４２０５０号公報
【特許文献３】米国特許第６７９２５１８号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
特許文献１の自動拡張技術が適用されたボリュームに対して、特許文献２のＣＯＷ方式の差分スナップショットを適用すると、まだ物理ブロックが割り当てられていないブロック（すなわち、データが格納されていないブロック）に対する書き込み要求が発生する場合がある。しかし、特許文献２の技術をそのまま適用すると、物理ブロックが割り当てられていないブロックに対してもデータの退避が実行されるため、書き込み性能が低下する。
【０００７】
特許文献３によれば、各世代の未使用領域の抽出が必要となるため、管理のためのリソースが大きくなってしまうという問題があった。また、特許文献３の方法は、上位のアプリケーション（ファイルシステム等）が未使用領域を管理する必要があった。このため、各アプリケーションごとに実行される必要があった。
【０００８】
本発明は、スナップショット処理及びコピー処理の高速化のために上記の課題を解決することを目的とする。
【課題を解決するための手段】
【０００９】
本願で開示する代表的な発明は、ネットワークに接続されるストレージシステムにおいて、前記ストレージシステムは、前記ネットワークに接続されるインターフェースと、前記インターフェースに接続されるプロセッサと、前記プロセッサに接続される第１メモリと、データを格納するディスクドライブと、一つ以上のボリュームと、を備え、前記一つ以上のボリュームは、複数のブロックを含み、前記複数のブロックは、第１ブロック及び第２ブロックを含み、前記複数のブロックのうち少なくとも一つには、前記ディスクドライブ内の実記憶領域が割り当てられ、前記インターフェースが、前記第１ブロックを対象としたデータの書き込み要求を、前記ネットワークを介して受信したとき、前記プロセッサは、前記第１ブロックに前記実記憶領域が割り当てられているか否かを判定し、前記実記憶領域が割り当てられていると判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込んだ後、前記第１ブロックに前記書き込み要求の対象のデータを書き込み、前記実記憶領域が割り当てられていないと判定された場合、前記第１ブロックに格納されているデータの複製を前記第２ブロックに書き込まずに、前記第１ブロックに前記書き込み要求の対象のデータを書き込むことを特徴とする。
【発明の効果】
【００１０】
本発明の一実施形態によれば、大量のリソースを消費することなく、差分スナップショット処理又はブロックデバイスレベルのコピー処理を高速化することができる。また、差分ボリューム及びコピー先ボリュームの容量を削減することができる。
【発明を実施するための最良の形態】
【００１１】
以下、本発明の実施の形態を、図面を参照しながら説明する。第１の実施の形態及び第２の実施の形態は、スナップショット機能がストレージ制御部（すなわち、ストレージ装置のマイクロプログラム）外にある場合、例えば、外付けＮＡＳ又は内蔵型ＮＡＳ等に本発明を適用する例である。第３の実施の形態は、第１及び第２の実施の形態の構成におけるアプリケーションの新規領域割り当てに関するものである。第４の実施の形態は、スナップショット機能がストレージ制御部内にある形態である。第５の実施の形態は、Ｉ／Ｏコマンドを処理するマイクロプログラムが改善された形態である。
【００１２】
最初に、従来のストレージシステムの構成について説明する。
【００１３】
図５は、自動拡張可能仮想ボリュームを用いてスナップショット機能を提供するネットワーク接続ストレージ（ＮＡＳ）システムの従来の構成を説明する機能ブロック図である。
【００１４】
ネットワークに接続された計算機であるＮＡＳクライアント（図示省略）から、あるファイルを対象としてファイルアクセス要求が発行されると、ＮＡＳ１０１ａのクライアント要求受付部１０２がクライアントからのファイルアクセス要求を受け付ける。クライアント要求受付部１０２は、ファイルシステム制御部１０３ａに対してローカルファイルアクセス要求を発行する。ファイルシステム制御部１０３ａは、対象のファイルのデータ又はメタデータが格納されているブロックに対するＩ／Ｏ要求を発行する。このとき、ブロックＩ／Ｏ要求は、ファイルシステムがスナップショット運用されている場合はスナップショット制御部１０４ａへ、スナップショット運用されていない場合はＩ／Ｏコマンド発行部１０５ａへ発行される。
【００１５】
このブロックＩ／Ｏ要求は、ストレージ装置１１０ａ内のマイクロプログラム１１１ａのＩ／Ｏコマンド制御部１１２ａによって処理される。Ｉ／Ｏコマンド制御部１１２ａは、受信したブロックＩ／Ｏ要求が自動拡張不可仮想ボリュームに対する要求であった場合、自動拡張不可仮想ボリューム管理制御部１１３に処理を移す。ここで、自動拡張不可仮想ボリュームとは、ボリューム内のすべての領域に物理ブロック（すなわち、物理的な記憶領域）が初めから用意されているボリュームである。
【００１６】
自動拡張不可仮想ボリューム管理制御部１１３は、ボリューム群１２０のいずれかのボリューム３００を対象としてブロックＩ／Ｏを実行する。
【００１７】
また、Ｉ／Ｏコマンド制御部１１２ａが受信したブロックＩ／Ｏ要求が、自動拡張可能仮想ボリュームに対する要求であった場合、自動拡張可能仮想ボリューム管理制御部１１４ａへ処理が移る。ここで、自動拡張可能仮想ボリュームとは、ボリューム内の使用されている領域のみに物理ブロックが割り当てられているボリュームである。
【００１８】
自動拡張可能仮想ボリューム管理制御部１１４ａは、自動拡張可能仮想ボリューム割り当てテーブル１１５を参照して、受け付けた要求が、物理ブロックが割り当てられている領域に対するブロックＩ／Ｏ要求であるか否かを判定する。
【００１９】
自動拡張可能仮想ボリューム割り当てテーブル１１５は、自動拡張可能仮想ボリュームに含まれる各領域（ブロック）と物理ブロックとの対応関係を示す情報を含む。具体的には、自動拡張可能仮想ボリューム割り当てテーブル１１５は、少なくとも、自動拡張可能仮想ボリュームに含まれる各領域（ブロック）に割り当てられている物理ブロックを識別する情報を含む。物理ブロックを識別する情報とは、例えば、ブロックアドレスである。自動拡張可能仮想ボリューム割り当てテーブル１１５を参照することによって、自動拡張可能仮想ボリュームの各領域に物理ブロックが割り当てられているか否か、さらに、割り当てられている場合には、どの物理ブロックが割り当てられているかを知ることができる。
【００２０】
受け付けた要求が、物理ブロックが割り当てられている領域に対するブロックＩ／Ｏ要求である場合、自動拡張可能仮想ボリューム管理制御部１１４ａは、自動拡張可能仮想ボリューム割り当てテーブル１１５によって示されるボリュームプール１２１内のボリューム３００の物理ブロックに対してブロックＩ／Ｏを実行する。
【００２１】
一方、受け付けた要求が、物理ブロックが割り当てられていない領域に対するブロックＩ／Ｏ要求である場合、自動拡張可能仮想ボリューム管理制御部１１４ａは、ボリュームプール１２１のボリューム３００内の未使用物理ブロックをＩ／Ｏ要求の対象の領域に割り当てる。そして、自動拡張可能仮想ボリューム管理制御部１１４ａは、自動拡張可能仮想ボリューム割り当てテーブル１１５を更新し、割り当てられた物理ブロックに対してブロックＩ／Ｏを実行する。
【００２２】
次に、本発明の実施の形態について説明する。
【００２３】
図１は、本発明の第１の実施の形態のストレージシステムのハードウェア構成を示すブロック図である。
【００２４】
図１に示すストレージシステムは、相互に接続されたネットワーク接続ストレージ（ＮＡＳ）１０１及びストレージ装置１１０を備える。
【００２５】
ＮＡＳ１０１は、外部ネットワーク１６０に接続され、外部ネットワーク１６０に接続されたクライアント計算機（すなわち、ＮＡＳクライアント）にストレージデータを提供する計算機である。ＮＡＳ１０１は、相互に接続されたＣＰＵ１５１、メモリコントローラ１５２、ＮＡＳ主記憶１５３、Ｉ／Ｏコントローラ１５４、ネットワークコントローラ１５５及びストレージコントローラ１５６を備える。ＮＡＳ１０１は、ＮＡＳヘッド又はＮＡＳノードとも呼ばれる。後で説明するように、ＮＡＳ１０１は、制御装置の一部としてストレージ装置１１０に内蔵されてもよい（図１１参照）。
【００２６】
メモリコントローラ１５２は、ＣＰＵ１５１、ＮＡＳ主記憶１５３及びＩ／Ｏコントローラ１５４と接続される。
【００２７】
ＣＰＵ１５１は、ＮＡＳ主記憶１５３に格納されたプログラムを実行するプロセッサである。
【００２８】
ＮＡＳ主記憶１５３は、例えば、半導体記憶装置であり、ＣＰＵ１５１によって実行されるプログラム及びその実行の際に参照される情報を格納する。
【００２９】
Ｉ／Ｏコントローラ１５４は、ネットワークコントローラ１５５及びストレージコントローラ１５６と接続される。
【００３０】
ネットワークコントローラ１５５は、外部ネットワーク１６０に接続され、クライアント計算機と通信するインターフェースである。外部ネットワーク１６０は、例えば、ローカルエリアネットワーク（ＬＡＮ）であるが、他の種類のネットワークであってもよい。
【００３１】
ストレージコントローラ１５６は、ストレージ装置１１０内のディスクコントローラ１５７とファイバーチャネル等を介して接続され、ディスクコントローラと通信するインターフェースである。
【００３２】
ストレージ装置１１０は、ディスクコントローラ１５７、ストレージ装置主記憶１５８及び一つ以上のディスクドライブ１５９を備える。
【００３３】
ディスクコントローラ１５７は、ストレージ装置主記憶１５８と一つ以上のディスクドライブ１５９とを接続する。ディスクコントローラ１５７は、ストレージ装置主記憶１５８に格納されたプログラムを実行することによって、ディスクドライブ１５９に対するデータのＩ／Ｏコマンド（すなわち、書き込みコマンド及び読み込みコマンド）を処理するプロセッサである。ディスクコントローラ１５７は、ストレージコントローラ１５６と通信するインターフェースを含んでもよい。
【００３４】
ストレージ装置主記憶１５８は、例えば、半導体メモリであり、ディスクコントローラ１５７によって実行されるプログラム及びその実行の際に参照される情報を格納する。
【００３５】
図２は、本発明の第１の実施の形態のストレージシステムの機能ブロック図である。
【００３６】
本実施の形態のＮＡＳ１０１は、クライアント要求受付部１０２、ファイルシステム制御部１０３、スナップショット制御部１０４及びＩ／Ｏコマンド発行部１０５を保持する。これらは、ＣＰＵ１５１によって実行されるプログラムであり、ＮＡＳ主記憶１５３に格納されている。さらに、自動拡張可能仮想ボリューム割り当てビットマップ１０６が、ＮＡＳ１０１上のデータとして、ＮＡＳ主記憶１５３に格納されている。
【００３７】
一方、マイクロプログラム１１１は、ディスクコントローラ１５７によって実行されるプログラムであり、ストレージ装置主記憶１５８に格納されている。
【００３８】
図２に示す構成のうち、ファイルシステム制御部１０３、スナップショット制御部１０４、Ｉ／Ｏコマンド発行部１０５、自動拡張可能仮想ボリューム割り当てビットマップ部１０６、Ｉ／Ｏコマンド制御部１１２及び自動拡張可能仮想ボリューム管理制御部１１４が、図５に示す従来の機能構成と異なっている。図２に示す構成のうち、図５において既に説明されている部分については、説明を省略する。
【００３９】
図２に示すマイクロプログラム１１１は、Ｉ／Ｏコマンド制御部１１２、自動拡張不可仮想ボリューム管理制御部１１３及び自動拡張可能仮想ボリューム管理制御部１１４を含む。これらは、マイクロプログラム１１１のサブプログラムである。マイクロプログラム１１１は、さらに、自動拡張可能仮想ボリューム割り当てテーブル１１５を含む。
【００４０】
図２のストレージ装置１１０は、さらに、ボリューム群１２０及びボリュームプール１２１を含む。ボリューム群１２０及びボリュームプール１２１には、それぞれ、一つ以上のボリューム３００が設定される。各ボリューム３００は、ＮＡＳ１０１によって一つの記憶装置と認識される仮想的な記憶領域である。
【００４１】
各ボリューム３００は、一つ以上のブロック（図示省略）によって構成される。ブロックは、所定の量のデータを格納する記憶領域である。ボリューム群１２０内のボリュームを構成する全てのブロックには、それぞれ、実記憶領域が割り当てられる。実記憶領域とは、ディスクドライブ１５９の物理的な記憶領域（すなわち、物理ブロック）である。各ブロックに格納されるデータは、実際には、そのブロックに割り当てられた物理ブロックに格納される。
【００４２】
図３は、本発明の第１の実施の形態のボリュームプール１２１の構成の説明図である。
【００４３】
ボリュームプール１２１内のボリューム３００のうち少なくとも一つは、運用ボリューム３０１であり、別の少なくとも一つは、差分ボリューム３０２である。図３には、例として、一つの運用ボリューム３０１及び一つの差分ボリューム３０２を示すが、本実施の形態のボリュームプール１２１は、複数の運用ボリューム３０１及び複数の差分ボリューム３０２を含んでもよい。
【００４４】
運用ボリューム３０１を構成するブロックには、外部ネットワーク１６０を経由してＮＡＳクライアントから発行された書き込み要求の対象のデータが格納される。
【００４５】
差分ボリューム３０２は、差分データ格納領域３０３、スナップショット管理テーブル３０４及びダミーデータブロック３０５を含む。差分データ格納領域３０３には、過去に運用ボリューム３０１に格納されていたデータが格納される。具体的には、運用ボリューム３０１内の既にデータが格納されているブロックのデータが更新されるとき、更新の前にそのブロックに格納されていたデータが差分データ格納領域３０３内のブロックに格納される。その結果、運用ボリューム３０１には最新のデータが格納され、差分ボリューム３０２には過去に運用ボリューム３０１に格納されていたデータが格納される。
【００４６】
スナップショット管理テーブル３０４は、運用ボリュームのブロックと、差分データ格納領域３０３のブロックとの対応関係を管理するテーブルである。具体的には、スナップショット管理テーブル３０４には、運用ボリュームのブロックに過去に格納されていたデータが、現在、差分データ格納領域３０３のどのブロックに格納されているかを示す情報が、スナップショットの世代ごと、又は、スナップショットが作成された時刻ごとに登録される。
【００４７】
運用ボリューム３０１を構成するブロックに格納されるデータは、実際には、そのブロックに割り当てられた物理ブロックに格納される。しかし、運用ボリューム３０１は、物理ブロックが割り当てられていないブロックを含む場合がある。物理ブロックが割り当てられていないブロックを対象としたデータ書き込み要求が発行された場合、対象のブロックに空き物理ブロックが新たに割り当てられ、その物理ブロックにデータが格納される。ここで、空き物理ブロックとは、まだどのブロックにも割り当てられていない物理ブロックである。
【００４８】
このように、物理ブロックが割り当てられていないブロックを含む場合があり、それらのブロックに必要に応じて物理ブロックを割り当てることができるボリュームは、自動拡張可能仮想ボリュームとも記載される。一方、全てのブロックに物理ブロックが割り当てられ、必要に応じて物理ブロックを割り当てることができないボリュームは、自動拡張不可仮想ボリュームとも記載される。本実施の形態において、ボリューム群１２０内のボリューム３００は、自動拡張不可仮想ボリュームである。一方、ボリュームプール１２１内の運用ボリューム３０１及び差分ボリューム３０２は、自動拡張可能仮想ボリュームである。
【００４９】
ダミーデータブロック３０５は、例えば「０」等のデータで初期化されたブロックである。ダミーデータブロック３０５は、後述するように、コピー処理が無効化された場合にダミーのコピー先として利用される。なお、ダミーデータブロック３０５は本発明において追加されたものであり、従来の差分ボリューム３０２はダミーデータブロック３０５を含まない。
【００５０】
次に、本実施の形態の概要を説明する。
【００５１】
図４は、本発明の第１の実施の形態において実行される処理の概要の説明図である。
【００５２】
図４の例において、運用ボリューム３０１は、四つのブロック４０１ａ〜４０１ｄを含む。黒塗りの四角形で示すブロック４０１ｂ及び４０１ｃには、物理ブロックが割り当てられていない。一方、白塗りの四角形で示すブロック４０１ａ及び４０１ｄには、物理ブロックが割り当てられている。自動拡張可能仮想ボリューム割り当てテーブル１１５には、ブロック４０１ａ及び４０１ｄに割り当てられている物理ブロックを識別する情報が登録されている。
【００５３】
ＮＡＳ１０１は、最初に、自動拡張可能仮想ボリューム割り当てテーブル１１５を読み込み、各ブロックに物理ブロックが割り当てられているか否かを示す情報を抽出して、自動拡張可能仮想ボリューム割り当てビットマップ１０６を作成する（ステップ（０））。
【００５４】
その後、ＮＡＳ１０１は、ネットワーク１６０を経由して、ＮＡＳクライアントからデータの書き込み要求を受信する（ステップ（１））。本実施の形態では、ステップ（１）で受信する要求は、ファイルアクセス要求である。
【００５５】
次に、ＮＡＳ１０１は、自動拡張可能仮想ボリューム割り当てビットマップ１０６を参照して、要求の対象のファイルのデータが書き込まれる運用ボリューム３０１内のブロックに物理ブロックが割り当てられているか否かを判定する（ステップ（２））。以下、図４の説明において、これから運用ボリューム３０１に書き込まれるデータを新データ、新データによって上書きされるデータ（すなわち、新データが書き込まれるブロックに書き込まれていたデータ）を旧データと記載する。
【００５６】
例えば、新データの書き込み対象のブロックがブロック４０１ａである場合、物理ブロックが割り当てられている。この場合、ブロック４０１ａに書き込まれていた旧データが、差分ボリューム３０２の差分データ格納領域３０３にコピーされる。具体的には、ＮＡＳ１０１がブロック４０１ａに書き込まれていた旧データを読み込み（ステップ（３Ａ））、その旧データを差分データ格納領域３０３のいずれかのブロックに書き込む（ステップ（３Ｂ））。その結果、この時点で、ブロック４０１ａに書き込まれていた旧データの複製が差分データ格納領域３０３に格納される。さらにＮＡＳ１０１は、書き込み先のブロックを識別する情報を、スナップショット管理テーブル３０４に書き込む（ステップ（４））。ブロックを識別する情報とは、例えば、論理ブロックアドレス（ＬＢＡ）である。以下の説明において、ブロックを識別する情報を「ブロックアドレス」と記載する。
【００５７】
一方、例えば、新データの書き込み対象のブロックがブロック４０１ｃである場合、物理ブロックが割り当てられていない。この場合、ブロック４０１ｃには旧データが格納されていないため、ブロック４０１ｃから差分データ格納領域３０３への旧データのコピーを実行する必要がない。このため、ＮＡＳ１０１は、コピーを無効化する（すなわち、コピーを実行しない）（ステップ（３））。
【００５８】
コピーが無効化された場合、差分データ格納領域３０３に旧データが書き込まれないため、ステップ（４）において、書き込み先のブロックを識別する情報をスナップショット管理テーブル３０４に書き込むことができない。この場合、本実施の形態のＮＡＳ１０１は、ダミーデータブロック３０５を識別する情報をスナップショット管理テーブル３０４に書き込む。ダミーデータブロック３０５を識別する情報とは、例えば、差分ボリューム３０２内のダミーデータブロック３０５の位置を示すブロックアドレスである。
【００５９】
ステップ（４）が終了した後、ＮＡＳ１０１は、新データを、運用ボリューム３０１内の書き込み対象のブロック（例えば、ブロック４０１ａ又は４０１ｃ）に書き込む（ステップ（５））。
【００６０】
なお、上記のように、運用ボリュームへの書き込み発生時に、書き込み要求の対象のブロックに格納されていたデータを差分ボリューム３０２へコピーし、その後、要求された書き込みを実行する処理は、Copy on Write（ＣＯＷ）と呼ばれる。
【００６１】
従来、新データの書き込み対象のブロックに物理ブロックが割り当てられていない場合にも、運用ボリューム３０１から差分ボリューム３０２へのデータのコピーが実行されていた。一方、本発明の実施の形態によれば、新データの書き込み対象のブロックに物理ブロックが割り当てられていない場合、コピー処理が無効化される。その結果、不要なコピー処理が省略され、処理を高速にすることができる。
【００６２】
図４は、運用ボリューム３０１と差分ボリューム３０２が独立している例を示す。しかし、運用ボリューム３０１と差分ボリューム３０２が同一のボリュームであってもよい。具体的には、例えば、運用ボリューム３０１が差分データ格納領域３０３及びスナップショット管理テーブル３０４を備えてもよい。この場合、ＣＯＷ処理は、運用ボリューム３０１の内部で実行される。
【００６３】
図４には、ＣＯＷ処理において、運用ボリューム３０１から差分ボリューム３０２へのコピーを無効化する手順を示した。しかし、本実施の形態は、ボリューム３００の種類に関らず、ボリューム３００間で発生するコピー処理を省略するために幅広く適用することができる。
【００６４】
例えば、図４においてＣＯＷ処理が運用されておらず、運用ボリューム３０１及び差分ボリューム３０２がいずれも通常のボリュームである場合について説明する。
【００６５】
ＮＡＳ１０１は、コピー元ボリューム３０１のブロック４０１ａに書き込まれていたデータをコピー先ボリューム３０２にコピーするためのコピー要求を受信した場合、ブロック４０１ａに物理ブロックが割り当てられているか否かを判定する（ステップ（２））。
【００６６】
ブロック４０１ａには物理ブロックが割り当てられているため、ＮＡＳ１０１は、ブロック４０１ａに書き込まれているデータをコピー先ボリューム３０２にコピーする（ステップ（３Ａ）及び（３Ｂ））。
【００６７】
一方、受信したコピー要求が、ブロック４０１ｃに書き込まれていたデータをコピー先ボリューム３０２にコピーすることを要求している場合、ＮＡＳ１０１は、ブロック４０１ｃに物理ブロックが割り当てられているか否かを判定する（ステップ（２））。
【００６８】
ブロック４０１ｃには物理ブロックが割り当てられていないため、ＮＡＳ１０１は、ブロック４０１ｃに書き込まれているデータをコピー先ボリューム３０２にコピーせず（ステップ（３））、コピーを実行しなかったことを要求元に応答する。
【００６９】
さらに、上記のステップ（１）から（５）の処理は、コピー元ボリューム３０１とコピー先ボリューム３０２が同一のボリュームである場合（言い換えると、同一のボリューム３００内の二つのブロック間でデータがコピーされる場合）にも実行することができる。
【００７０】
図６は、本発明の第１の実施の形態の自動拡張可能仮想ボリューム割り当てビットマップ１０６の説明図である。
【００７１】
自動拡張可能仮想ボリューム割り当てビットマップ１０６は、ブロックアドレス毎に、「０」又は「１」のいずれかの値のビットを格納する領域を含む。図６には、例として、ブロックアドレス「０ｘ００００」から「０ｘ００４ｆ」までのブロックに対応する領域を示すが、実際の自動拡張可能仮想ボリューム割り当てビットマップ１０６は、ボリュームの最後のブロックまでの全ブロックに対応するビットを含む。自動拡張可能仮想ボリューム割り当てビットマップ１０６は、ボリュームごとに作成され、ＮＡＳ主記憶１５３に保持される。
【００７２】
図６の１行目はブロックアドレス「０ｘ００００」から「０ｘ０００ｆ」までのブロックに対応し、２行目はブロックアドレス「０ｘ００１０」から「０ｘ００１ｆ」までのブロックに対応する。３行目以降の各領域も、同様の規則に従って各ブロックに対応する。格納されている値が「０」である場合、その領域に対応するブロックに物理ブロックが割り当てられていないことを示す。一方、格納されている値が「１」である場合、その領域に対応するブロックに物理ブロックが割り当てられていることを示す。図６の例では、ブロックアドレス「０ｘ００００」に対応する領域６０１に「０」が格納され、ブロックアドレス「０ｘ００４９」に対応する領域６０２に「１」が格納されている。これは、ブロックアドレスが「０ｘ００００」であるブロックに物理ブロックが割り当てられておらず、ブロックアドレスが「０ｘ００４９」であるブロックに物理ブロックが割り当てられていることを意味する。
【００７３】
次に、本実施の形態の各プログラムが実行する処理について説明する。
【００７４】
図７は、本発明の第１の実施の形態のＩ／Ｏコマンド発行部１０５が起動時に実行する処理を示すフローチャートである。
【００７５】
なお、本実施例の形態ではＩ／Ｏコマンド発行部１０５がこの処理を実行するが、同様の処理をスナップショット制御部１０６又はファイルシステム制御部１０３が実行してもよい。
【００７６】
図２において説明したように、Ｉ／Ｏコマンド発行部１０５は、ＮＡＳ主記憶１５３に格納され、ＣＰＵ１５１によって実行されるプログラムである。したがって、以下の説明においてＩ／Ｏコマンド発行部１０５が実行する処理は、実際にはＣＰＵ１５１によって実行される。ＮＡＳ主記憶１５３に格納される他のプログラムが実行する処理も、同様に、実際にはＣＰＵ１５１によって実行される。
【００７７】
まず、Ｉ／Ｏコマンド発行部１０５は、接続されているボリュームを認識する（ステップ７０１）。例えば、ＮＡＳ１０１とストレージ装置１１０とがＳＣＳＩによって接続されている場合、各ＳＣＳＩ＿ＩＤに対応するボリュームが認識される。
【００７８】
次に、Ｉ／Ｏコマンド発行部１０５は、認識したボリュームの初期化処理を実行する（ステップ７０２）。これは従来のＳＣＳＩドライバの初期化処理等と同等のものである。本実施の形態では、さらに、ボリュームの初期化処理として、ステップ７０２に加えてステップ７０３から７０６に示す処理が実行される。
【００７９】
次に、Ｉ／Ｏコマンド発行部１０５は、認識したボリュームの種別を判定する（ステップ７０３）。具体的には、Ｉ／Ｏコマンド発行部１０５は、認識したボリュームが自動拡張可能仮想ボリュームであるか、あるいは、自動拡張不可仮想ボリュームであるかを判定する。
【００８０】
ステップ７０３において自動拡張不可仮想ボリュームであると判定された場合、ステップ７０７に処理を移す。一方、ステップ７０３において自動拡張可能仮想ボリュームであると判定された場合、Ｉ／Ｏコマンド発行部１０５は、認識したボリュームを対象とする割り当てビットマップ取得コマンドを発行する（ステップ７０４）。このコマンドは、例えば、ＳＣＳＩコマンドを拡張することによって実現されてもよい。
【００８１】
その後、ストレージ装置１１０のマイクロプログラム１１１のＩ／Ｏコマンド制御部１１２が実行される。割り当てビットマップ取得コマンドを受信したＩ／Ｏコマンド制御部１１２は、割り当てビットマップ取得コマンド処理を開始し（図８のステップ８０１）、対象のボリュームの割り当てビットマップを応答する。この処理の詳細については図８で後述する。
【００８２】
割り当てビットマップ取得コマンド処理が終了すると（図８のステップ８１０）、Ｉ／Ｏコマンド発行部１０５は、Ｉ／Ｏコマンド制御部１１２から割り当てビットマップを取得する（ステップ７０５）。
【００８３】
次に、Ｉ／Ｏコマンド発行部１０５は、取得した割り当てビットマップを、自動拡張可能仮想ボリューム割り当てビットマップ１０６へ登録する（ステップ７０６）。以上で現在認識しているボリュームに関する初期化処理を終了する。
【００８４】
次に、Ｉ／Ｏコマンド発行部１０５は、他に認識可能なボリュームがあるか否かをチェックする（ステップ７０７）。認識可能なボリュームがある場合、まだ初期化されていないボリュームが存在する。この場合、処理はステップ７０１に戻り、ステップ７０１から７０６までの処理を繰り返す。他に認識可能なボリュームがない場合、全ての認識可能なボリュームの初期化処理が終了したため、Ｉ／Ｏコマンド発行部１０５は起動処理を終了する。
【００８５】
図８は、本発明の第１の実施の形態のＩ／Ｏコマンド制御部１１２が割り当てビットマップ取得コマンドを受信した際に実行する割り当てビットマップ取得コマンド処理を示すフローチャートである。
【００８６】
図２において説明したように、Ｉ／Ｏコマンド制御部１１２は、ストレージ装置主記憶１５８に格納され、ディスクコントローラ１５７によって実行されるマイクロプログラム１１１のサブプログラムである。したがって、以下の説明においてＩ／Ｏコマンド制御部１１２が実行する処理は、実際にはディスクコントローラ１５７によって実行される。マイクロプログラム１１１に含まれる他のサブプログラムが実行する処理も、同様に、実際にはディスクコントローラ１５７によって実行される。
【００８７】
割り当てビットマップ取得コマンドを受信すると、Ｉ／Ｏコマンド制御部１１２は、割り当てビットマップ取得コマンド処理を開始する（ステップ８０１）。
【００８８】
最初に、Ｉ／Ｏコマンド制御部１１２は、受信したコマンドの対象のボリュームが自動拡張可能仮想ボリュームであるか否かを判定する（ステップ８０２）。
【００８９】
ステップ８０２において、対象のボリュームが自動拡張不可仮想ボリュームであると判定された場合、処理はエラー終了する。
【００９０】
一方、ステップ８０２において、対象のボリュームが自動拡張可能仮想ボリュームであると判定された場合、Ｉ／Ｏコマンド制御部１１２は、自動拡張可能仮想ボリューム管理制御部１１４に対象ボリュームの割り当てビットマップを要求する（ステップ８０３）。
【００９１】
自動拡張可能仮想ボリューム管理制御部１１４は、自動拡張可能仮想ボリューム割り当てテーブル１１５に基づいて、割り当てビットマップを作成する（ステップ８０４）。自動拡張可能仮想ボリューム割り当てテーブル１１５は、自動拡張可能仮想ボリュームの各ブロックとそれに割り当てられている物理ブロックとを対応付ける情報を含むマッピングテーブルである。自動拡張可能仮想ボリューム管理制御部１１４は、自動拡張可能仮想ボリューム割り当てテーブル１１５を参照して、各ブロックに物理ブロックが割り当てられているか否かを調査し、その結果に基づいて割り当てビットマップを作成する。割り当てビットマップがあらかじめ自動拡張可能仮想ボリューム割り当てテーブル１１５に格納されている場合、自動拡張可能仮想ボリューム管理制御部１１４はそれを読み取る。
【００９２】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、作成された割り当てビットマップをＩ／Ｏコマンド制御部１１２に応答する（ステップ８０５）。
【００９３】
Ｉ／Ｏコマンド制御部１１２は、取得した割り当てビットマップをＩ／Ｏコマンド発行部１０５に応答する（ステップ８０６）。
【００９４】
以上で、割り当てビットマップ取得コマンド処理が終了する（ステップ８１０）。
【００９５】
以上で、本発明の第１の実施の形態の初期化処理についての説明を終了する。次に、スナップショット処理の手順を説明する。
【００９６】
図９は、従来のスナップショット処理を示すフローチャートである。
【００９７】
具体的には、図９は、スナップショット運用中の運用ボリューム３０１のあるブロックに書き込みがあった場合に実行される従来の処理のフローチャートである。この処理は、スナップショット制御部１０４ａによって実行される。
【００９８】
スナップショット制御部１０４ａは、スナップショット処理を開始すると（ステップ９０１）、書き込み要求の対象ブロックに格納されているデータが既に差分ボリューム３０２に退避済みか否かを判定する（ステップ９０２）。ここで、退避とは、運用ボリューム３０１のブロックに格納されているデータを差分ボリューム３０２の差分データ格納領域３０３にコピーする処理である。
【００９９】
ステップ９０２において、データが退避済みであると判定された場合、ステップ９０７に処理が移る。
【０１００】
一方、ステップ９０２において、データがまだ退避していないと判定された場合、スナップショット制御部１０４ａは、差分データ格納領域３０３の空きブロックを確保する（ステップ９０３）。
【０１０１】
次に、スナップショット制御部１０４ａは、書き込み要求の対象ブロックに格納されているデータを読み込む（ステップ９０４）。
【０１０２】
次に、スナップショット制御部１０４ａは、読み込んだデータをステップ９０３において確保された差分データ格納領域のブロックに書き込む（ステップ９０５）。なお、ステップ９０４及び９０５の処理が、「退避」に相当する。
【０１０３】
次に、スナップショット制御部１０４ａは、スナップショット管理テーブル３０４に、対象ブロックのデータが退避したことを示す情報を書き込む（ステップ９０６）。具体的には、スナップショット制御部１０４ａは、書き込み要求の対象ブロックを示す運用ボリューム３０１のブロックアドレスと、そのブロックのデータの退避先を示す差分ボリューム３０２のブロックアドレスと、世代番号との関係を示す情報を書き込む。
【０１０４】
次に、スナップショット制御部１０４ａは、書き込み要求の対象データを、運用ボリューム３０１内の、書き込み要求の対象ブロックに書き込む（ステップ９０７）。
【０１０５】
以上で、スナップショット処理が終了する（ステップ９１０）。
【０１０６】
図１０は、本発明の第１の実施の形態のスナップショット制御部１０４が実行するスナップショット処理を示すフローチャートである。
【０１０７】
スナップショット制御部１０４は、ファイルシステム制御部１０３から運用ボリューム３０１内のブロックを対象とするデータの書き込み要求を受信したときに、図１０のスナップショット処理を実行する。
【０１０８】
スナップショット制御部１０４は、スナップショット処理を開始すると（ステップ１００１）、最初に、書き込み要求の対象ブロックに格納されているデータが既に差分ボリューム３０２に退避済みであるか否かを判定する（ステップ１００２）。
【０１０９】
ステップ１００２において、データが退避済みであると判定された場合、ステップ１０１１に処理が移る。
【０１１０】
一方、ステップ１００２において、データがまだ退避されていないと判定された場合、スナップショット制御部１０４は、自動拡張可能仮想ボリューム割り当てビットマップ１０６を参照し、書き込み要求の対象ブロックに物理ブロックが割り当てられているか否かを判定する（ステップ１００３）。
【０１１１】
ステップ１００３において、物理ブロックが割り当てられていると判定された場合、書き込み要求の対象ブロックにはデータが格納されている。この場合、データを退避する必要があるため、スナップショット制御部１０４は、ステップ１００４から１００７までを順次実行する。これらの四つのステップは、それぞれ、図９のステップ９０３から９０６までと同じであるため、説明を省略する。
【０１１２】
一方、ステップ１００３において、物理ブロックが割り当てられていないと判定された場合、書き込み要求の対象ブロックにはデータが格納されていない。この場合、データを退避する必要がない。この場合、スナップショット制御部１０４は、書き込み要求の対象ブロックに対する物理ブロック割り当て要求コマンドを発行する（ステップ１００８）。ステップ１００８の処理は性能を向上させるためだけの処理なので、省略しても問題ない。ステップ１００８が省略された場合、後述するステップ１０１１において、マイクロプログラム１１１が自動的に割り当てを実行する。また、その場合、次のステップ１００９は、ステップ１０１１の後で実行される。
【０１１３】
次に、スナップショット制御部１０４は、自動拡張可能仮想ボリューム割り当てビットマップ１０６において、書き込み要求の対象ブロックに対応する領域の値を「１」（すなわち、割り当て済み）に更新する（ステップ１００９）。
【０１１４】
次に、スナップショット制御部１０４は、スナップショット管理テーブル３０４に、書き込み要求の対象ブロックに格納されているデータをダミーデータブロック３０５へ退避したことを示す情報を書き込む（ステップ１０１０）。本実施例ではダミーデータブロック３０５を物理的に確保しているが、物理的に確保せずとも、退避先のブロックアドレスのフィールドに「０」等のデータを格納することによって、ダミーデータであることを論理的に示してもよい。
【０１１５】
次に、スナップショット制御部１０４は、書き込み要求の対象データを書き込み要求の対象ブロックへ書き込む（ステップ１０１１）。以上で、本実施の形態のスナップショット処理が終了する（ステップ１０１３）。
【０１１６】
図１及び図２は、ＮＡＳ１０１とストレージ装置１１０とが分離しており、これらをファイバーチャネル等によって結合することによって構成されるストレージシステムを示す。しかし、本実施の形態は、ＮＡＳ１０１とストレージ装置１１０とが分離している形態に限定されず、ストレージ装置１１０がＮＡＳ１０１を内蔵する形態のストレージシステムにおいても実現することができる。
【０１１７】
図１１は、本発明の第１の実施の形態の変形例の機能ブロック図である。
【０１１８】
図１１に示すストレージシステムは、図１及び図２に示すストレージ装置１１０がＮＡＳ１０１を内蔵することによって構成される。ＮＡＳ１０１及びマイクロプログラム１１１の構成は、図１及び図２に示すものと同じである。ただし、図１１の構成において、ＮＡＳ１０１とマイクロプログラム１１１との間は、専用バス等によって結合されてもよい。
【０１１９】
図１１に示すストレージシステムにおいて実行される処理は、上記第１の実施の形態において実行されるものと同じであるため、説明を省略する。
【０１２０】
なお、以下に説明する本発明の第２、第３及び第５の実施の形態も、図１１に示すストレージシステムにおいて実現することができる。
【０１２１】
以上の本発明の第１の実施の形態によれば、初期化処理において、運用ボリューム３０１を構成する全ブロックに関する自動拡張可能仮想ボリューム割り当てビットマップ１０６が作成される（図７及び図８参照）。そして、作成された割り当てビットマップを参照することによって、必要のないコピー処理のためのＩ／Ｏコマンドの発行を省略することができる。このように、Ｉ／Ｏコマンドが最適化されるため、Ｉ／Ｏコマンドの処理を高速化することができる。
【０１２２】
次に、本発明の第２の実施の形態について説明する。
【０１２３】
本発明の第１の実施の形態のＮＡＳ１０１は、最初に、運用ボリューム３０１を構成する全ブロックに対応する割り当てビットマップを取得し、それを自動拡張可能仮想ボリューム割り当てビットマップ１０６に登録する。一方、本発明の第２の実施の形態のＮＡＳ１０１は、個々のＩ／Ｏコマンド発行時に、運用ボリュームの一部を構成するブロックに対応する割り当てビットマップを取得する。
【０１２４】
図１２は、本発明の第２の実施の形態のストレージシステムの機能ブロック図である。
【０１２５】
図１２に示す本実施の形態の構成が第１の実施の形態の構成（図２参照）と異なるのは、スナップショット制御部１０４ｂ、Ｉ／Ｏコマンド発行部１０５ｂ、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂ及びＩ／Ｏコマンド制御部１１２ｂである。これらは、第１の実施の形態同様、ＮＡＳ主記憶１５３に格納される。その他の部分については第１の実施の形態と同様であるため、説明を省略する。
【０１２６】
図１３は、本発明の第２の実施の形態の自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂの説明図である。
【０１２７】
自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂは、先頭ブロックアドレスフィールド１３０１とビットマップフィールド１３０２からなる。先頭ブロックアドレスフィールド１３０１には、保持しているビットマップの先頭ブロックアドレスが格納される。ビットマップフィールド１３０２には、それぞれの先頭ブロックアドレスフィールド１３０１に示す先頭ブロックアドレスから始まる所定の数のブロックの割り当て状況を示すビットマップが格納される。図１３のビットマップフィールド１３０１の上に表示された「０」から「ｆ」までの値は、ブロックアドレスの最下位バイトの値である。
【０１２８】
図１３の例では、各先頭ブロックアドレスに対して、１６ブロックの割り当て状況を示すビットマップが格納される。例えば、先頭ブロックアドレスフィールド１３０１に先頭ブロックアドレス「０ｘ０ｆａ０」が格納され（エントリ１３１１）、このブロックアドレスに対応するビットマップフィールド１３０２には、ブロックアドレスが「０ｘ０ｆａ０」から「０ｘ０ｆａｆ」までのブロックの割り当て状況を示すビットマップが格納される（エントリ１３１２）。
【０１２９】
ビットマップフィールド１３０２に格納される値の意味は、自動拡張可能仮想ボリューム割り当てビットマップ１０６と同様である。すなわち、値が「０」である場合、そのビットに対応するブロックに物理ブロックが割り当てられていないことを示す。一方、値が「１」である場合、そのビットに対応するブロックに物理ブロックが割り当てられていることを示す。
【０１３０】
図１３の例では、各先頭ブロックに対応するビットマップフィールド１３０２には、先頭から１６ブロック分の割り当て状況に関する情報が格納されている。また、先頭ブロックアドレスフィールド１３０１のサイズは、有限である。図１３の例では４エントリに限定されている。このため、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂは、運用ボリューム３０１の全ブロックに関する情報を格納することができない。
【０１３１】
先頭ブロックアドレスフィールド１３０１及びビットマップフィールド１３０２は、自動拡張可能仮想ボリューム割り当てビットマップ１０６と同様、ボリューム毎に保持される。
【０１３２】
図１４は、本発明の第２の実施の形態のスナップショット制御部１０４ｂが実行するスナップショット処理を示すフローチャートである。
【０１３３】
スナップショット制御部１０４ｂは、ファイルシステム制御部１０３から運用ボリューム３０１内のブロックを対象とするデータの書き込み要求を受信したときに、図１４のスナップショット処理を実行する。
【０１３４】
スナップショット制御部１０４ｂは、スナップショット処理を開始すると（ステップ１４０１）、最初に、書き込み要求の対象ブロックに格納されているデータが既に差分ボリューム３０２に退避済みであるか否かを判定する（ステップ１４０２）。
【０１３５】
ステップ１４０２において、データが退避済みであると判定された、スナップショット制御部１０４ｂは、ステップ１４１３へ処理を移す。
【０１３６】
一方、ステップ１４０２において、データがまだ退避されていないと判定された場合、スナップショット制御部１０４ｂは、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂに、書き読み要求の対象ブロックに対応するビットマップが存在するか否かを判定する（ステップ１４０３）。
【０１３７】
例えば、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂが図１３に示す通りである場合、書き込み要求の対象ブロックのブロックアドレスが「０ｘ０ｆａ０」から「０ｘ０ｆａｆ」、「０ｘ２５３０」から「０ｘ２５３ｆ」、「０ｘ５ｆｅ０」から「０ｘ５ｆｅｆ」、又は、「０ｘｆｆａ０」から「０ｘｆｆａｆ」のいずれかである場合、書き込み要求の対象ブロックに対応するビットマップが存在すると判定される。なお、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂは、図７に示すような初期化処理によって割当ビットマップを取得しない限り、初期状態においてビットマップを含まない。
【０１３８】
ステップ１４０３において、書き読み要求の対象ブロックに対応するビットマップが存在しないと判定された場合、スナップショット制御部１０４ｂは、自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂを参照して、対象ブロックに物理ブロックが割り当てられているか否かを判定することができない。この場合、ステップ１４０５へ処理が移る。
【０１３９】
一方、ステップ１４０３において、ビットマップが存在すると判定された場合、スナップショット制御部１０４ｂはそのビットマップを参照して、書き読み要求の対象ブロックに物理ブロックが割り当てられているか否かを判定する（ステップ１４０４）。
【０１４０】
ステップ１４０４において、物理ブロックが割り当てられていると判定された場合、その対象ブロックに格納されているデータを退避する必要がある。この場合、ステップ１４０５へ処理が移る。
【０１４１】
一方、ステップ１４０４において、物理ブロックが割り当てられていないと判定された場合、その対象ブロックにデータが格納されていないため、データの退避を実行する必要がない。この場合、ステップ１４０８へ処理が移る。
【０１４２】
ステップ１４０５において、スナップショット制御部１０４ｂは、書き込み要求の対象ブロックに格納されているデータを読み込む。
【０１４３】
次に、スナップショット制御部１０４ｂは、読み込みコマンドを実行したマイクロプログラム１１１から受信した応答が未割り当てエラー又はワーニングであるか否かを判定する（ステップ１４０６）。これらのエラー及びワーニングは、読み込みコマンドの対象のブロック（すなわち、書き込み要求の対象ブロック）に物理ブロックが割り当てられていないことを示すものである。読み込みコマンドを受信したマイクロプログラム１１１が実行する処理については、後で詳細に説明する（図１５参照）。
【０１４４】
ステップ１４０６において、未割り当てエラー又はワーニングを受信したと判定された場合、スナップショット制御部１０４ｂは、エラー等の応答に含まれる詳細情報から、読み込みコマンドの対象ブロックの近傍のブロックの割り当て情報を取得する。そして、スナップショット制御部１０４ｂは、取得した割り当て情報を自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂに登録する（ステップ１４０７）。エラー等の応答に含まれる詳細情報については、後で詳細に説明する（図１５参照）。
【０１４５】
次に、スナップショット制御部１０４ｂは、ステップ１４０８から１４１０を順次実行する。これらのステップは、それぞれ、図１０のステップ１００８から１０１０と同様であるため、説明を省略する。
【０１４６】
一方、ステップ１４０６において、マイクロプログラム１１１からの応答が正常終了であった場合（すなわち、未割り当てエラー又はワーニングのいずれも受信していない場合）、読み込みコマンドの対象のブロックに物理ブロックが割り当てられている。すなわち、書き込み要求の対象ブロックに物理ブロックが割り当てられているこの場合、ステップ１４１１へ処理が移る。ステップ１４１１、１４１２及び１４１３の処理は、それぞれ、図１０のステップ１００４、１００６及び１００７と同様のため、説明を省略する。
【０１４７】
ステップ１４１０又は１４１３を実行した後、スナップショット制御部１０４ｂは、ステップ１４１４を実行する。ステップ１４１４は図１０のステップ１０１１と同様であるため、説明を省略する。
【０１４８】
以上で、スナップショット処理が終了する（ステップ１４１５）。
【０１４９】
図１５は、本発明の第２の実施の形態のＩ／Ｏコマンド制御部１１２ｂが読み込みコマンドを受信したときに実行する読み込みコマンド処理を示すフローチャートである。
【０１５０】
Ｉ／Ｏコマンド制御部１１２ｂは、読み込みコマンド処理を開始すると（ステップ１５０１）、最初に、読み込みコマンドによって指定された対象ボリュームが自動拡張可能仮想ボリュームであるか否かを判定する（ステップ１５０２）。
【０１５１】
ステップ１５０２において、読み込みコマンドの対象ボリュームが自動拡張可能仮想ボリュームでないと判定された場合、その対象ボリュームの全ブロックに必ず物理ブロックが割り当てられている。この場合、Ｉ／Ｏコマンド制御部１１２ｂは、自動拡張不可仮想ボリューム管理制御部１１３に、読み込みコマンドの対象ブロックの読み込み処理を指示する（ステップ１５０３）。その後、ステップ１５０６へ処理が移る。
【０１５２】
一方、ステップ１５０２において、読み込みコマンドの対象ボリュームが自動拡張可能仮想ボリュームであると判定された場合、読み込みコマンドの対象ブロックに物理ブロックが割り当てられていない可能性がある。この場合、Ｉ／Ｏコマンド制御部１１２ｂは、自動拡張可能仮想ボリューム管理制御部１１４ｂに対象ブロックの読み込み処理を指示する（ステップ１５０４）。
【０１５３】
次に、Ｉ／Ｏコマンド制御部１１２ｂは、その対象ブロックに物理ブロックが割り当てられているか否かを自動拡張可能仮想ボリューム割り当てテーブル１１５に基づいて判定する（ステップ１５０５）。
【０１５４】
ステップ１５０５において、物理ブロックが割り当てられていると判定された場合、Ｉ／Ｏコマンド制御部１１２ｂは、読み込みコマンドの対象ブロックに格納されているデータを読み込む（ステップ１５０６）。
【０１５５】
次に、Ｉ／Ｏコマンド制御部１１２ｂは、読み込んだデータをＩ／Ｏコマンド発行部１０５ｂへ応答する（ステップ１５０７）。
【０１５６】
Ｉ／Ｏコマンド制御部１１２ｂは、ステップ１５０７を実行した後、読み込みコマンド処理を正常終了する（ステップ１５０８）。
【０１５７】
一方、ステップ１５０５において、物理ブロックが割り当てられていないと判定された場合、読み込みコマンドの対象ブロックからデータを読み込むことができない。この場合、自動拡張可能仮想ボリューム管理制御部１１４ｂが、自動拡張可能仮想ボリューム割り当てテーブル１１５に基づいて、読み込みコマンドの対象ブロックの近傍のブロックに関する割り当てビットマップを作成する（ステップ１５０９）。近傍のブロックとは、読み込みコマンドの対象ブロックを識別するブロックアドレスに連続するブロックアドレスによって識別されるブロックを含む一つ以上のブロックである。
【０１５８】
例えば、読み込みコマンドの対象ブロックのブロックアドレスが「０ｘ０ｆａ０」（図１３参照）であった場合、近傍のブロックは、ブロックアドレスが「０ｘ０ｆａ１」であるブロックを含む一つ以上のブロック（例えば、「０ｘ０ｆａ１」から「０ｘ０ｆａｆ」までの１５ブロック）であってもよい。対象ブロック近傍の割り当てビットマップは、例えば、対象ブロックの前後の所定の数のブロックの割り当てビットマップであってもよく、対象ブロックを含む連続する未割り当てブロックの割り当てビットマップであってもよく、ボリューム全体の割り当てビットマップでもよい。
【０１５９】
次に、Ｉ／Ｏコマンド制御部１１２ｂは、読み込みコマンドをエラー又はワーニングとして、読み込みコマンドの対象ブロック近傍の割り当てビットマップをエラー詳細情報として応答する（ステップ１５１０）。エラーを応答する場合、Ｉ／Ｏコマンド制御部１１２ｂは、コマンド実行結果となる読み込みデータを応答しない。一方、ワーニングを応答する場合、Ｉ／Ｏコマンド制御部１１２ｂは、例えば「０」等のダミーのデータを応答する。
【０１６０】
Ｉ／Ｏコマンド制御部１１２ｂは、ステップ１５１０を実行した後、読み込みコマンド処理を異常終了する（ステップ１５１１）。
【０１６１】
以上の本発明の第２の実施の形態によれば、Ｉ／Ｏコマンドの対象ブロックに物理ブロックが割り当てられていない場合、その対象ブロックの近傍のブロックに関する割り当てビットマップが作成される。すなわち、運用ボリューム３０１を構成する全ブロックに関する自動拡張可能仮想ボリューム割り当てビットマップ１０６を作成しなくてもよいため、ＮＡＳ主記憶１５３の容量を節約することができる。また、シーケンシャルアクセスが実行される場合、アドレスが連続する複数のブロックを対象とした複数のＩ／Ｏコマンドが連続して発行される。この場合、対象ブロックの近傍のブロックに関する割り当てビットマップが作成されると、各Ｉ／Ｏコマンドごとに割り当てビットマップを作成する必要がないため、処理速度の低下を抑制することができる。
【０１６２】
次に、本発明の第３の実施の形態について説明する。
【０１６３】
第３の実施の形態は、第１の実施の形態及び第２の実施の形態におけるアプリケーションの領域割り当ての方式に関する。ここで、アプリケーションは、ファイルシステム又はデータベース等、任意の機能を実現するものであってよい。すなわち、任意のアプリケーションについて本実施の形態を適用することができるが、以下、ファイルシステムを例として本実施の形態を説明する。したがって、以下の説明における「ファイルシステム」を任意のアプリケーションによって置き換えても、本実施の形態を実現することができる。
【０１６４】
最初に、本実施の形態の概要を説明する。
【０１６５】
自動拡張可能仮想ボリュームを構成するブロックには、書き込み要求があったときに初めて物理ブロックが割り当てられる。このため、通常、物理ブロックが割り当てられたブロックは、ファイルシステムによって使用されている。しかし、その後ファイルが削除された場合、削除されたデータが格納されていたブロックは、依然として物理ブロックの割り当てが維持されているが、ファイルシステムによって使用されていない。このように、自動拡張可能仮想ボリュームには、物理ブロックが割り当てられているがファイルシステムによって使用されていないブロックが存在し得る。
【０１６６】
例えば、図４に示すブロック４０１ａから４０１ｄのうち、ブロック４０１ａはファイルシステムによって使用されているが、ブロック４０１ｄは使用されていないと仮定する。当然、物理ブロックが割り当てられていないブロック４０１ｂ及び４０１ｃも、ファイルシステムによって使用されていない。この場合において、ファイルシステムがいずれかのブロックを新たに使用する必要が生じたとき、どのブロックを選択して使用するかが問題となる。
【０１６７】
最初に、物理ブロックが割り当てられていないブロック（例えばブロック４０１ｂ）を選択する場合について述べる。この場合、最初にブロック４０１ｂを対象とする書き込み要求が発行されたとき、ブロック４０１ｂには物理ブロックが割り当てられていないため、データの退避が実行されない。このため、書き込み処理が高速に実行される。しかし、この場合、ブロック４０１ｄは、ファイルシステムによって使用されていないにも関らず、依然として物理ブロックが割り当てられているため、三つの物理ブロックが消費されている。したがって、ボリュームプール１２１内の記憶容量を有効に利用するためには、このような選択は望ましくないといえる。
【０１６８】
次に、物理ブロックが割り当てられているブロック４０１ｄを選択する場合について述べる。この場合、最初にブロック４０１ｄを対象とする書き込み要求が発行されたとき、ブロック４０１ｄには物理ブロックが割り当てられているため、データの退避が実行される。このため、書き込み処理が遅延する。しかし、この場合、ブロック４０１ａ及び４０１ｄに割り当てられる二つの物理ブロックのみが消費されているため、ボリュームプール１２１内の記憶容量が有効に利用される。
【０１６９】
このように、性能向上を重視する場合には、物理ブロックが割り当てられていないブロックを、容量節約を重視する場合には、物理ブロックが割り当てられているブロックを選択することが望ましい。本実施の形態によれば、性能と容量のいずれを重視するかを決定するポリシーが設定され、そのポリシーに従って、使用されるブロックが選択される。
【０１７０】
図１６は、本発明の第３の実施の形態のファイルシステム制御部１０３の説明図である。
【０１７１】
具体的には、図１６は、ファイルシステム制御部１０３を構成する部分のうち、新規ブロック割り当て処理ポリシーフラグ１６０１、ファイルシステム空きブロックビットマップ１６０２、新規ブロック割り当て処理ポリシー設定処理部１６０３及び新規ブロック割り当て処理部１６０４を示す。これらは、本発明に関連する処理部又は情報格納部である。ファイルシステム制御部１０３は、図１６に示した以外の処理部も含んでいるが、本発明とは直接関係しないため省略する。
【０１７２】
なお、新規ブロック割り当て処理ポリシー設定処理部１６０３及び新規ブロック割り当て処理部１６０４は、ファイルシステム制御部１０３のサブプログラムである。したがって、これらの処理部が実行する処理は、実際にはＣＰＵ１５１によって実行される。また、新規ブロック割り当て処理ポリシーフラグ１６０１及びファイルシステム空きブロックビットマップ１６０２は、ストレージ主記憶１５８に格納される。
【０１７３】
新規ブロック割り当て処理ポリシーフラグ１６０１は、新規ブロック割り当て処理（後述）が実行された際、どのようなポリシーでブロックの割り当てを実行するか、具体的には容量節約を重視するのかスナップショット性能向上を重視するのかを決定するためのフラグである。
【０１７４】
ファイルシステム空きブロックビットマップ１６０２は、ボリューム内のファイルシステムが使用しているブロックと未使用のブロックとを管理するためのビットマップである（図１７参照）。
【０１７５】
新規ブロック割り当て処理ポリシー設定処理部１６０３は、ＮＡＳ管理者が割り当てポリシーをシステムコール経由で変更する際に実行されるサブプログラムである。新規ブロック割り当て処理ポリシー設定処理部１６０３が実行する処理については、後で詳細に説明する（図１８参照）。
【０１７６】
新規ブロック割り当て処理部１６０４は、設定された割り当てポリシーに従って、ファイルシステムが使用するブロックを新たに割り当てる処理を実行するサブプログラムである。この処理については後で詳細に説明する（図１９参照）。
【０１７７】
図１７は、本発明の第３の実施の形態のファイルシステム空きブロックビットマップ１６０２の説明図である。
【０１７８】
ファイルシステム空きブロックビットマップ１６０２は、自動拡張可能仮想ボリューム割り当てビットマップ１０６（図６参照）と同様、ブロックアドレス毎に、「０」又は「１」のいずれかの値のビットを格納する領域を含む。各ブロックアドレスと各領域との対応関係は、図６と同様であるため、説明を省略する。
【０１７９】
ファイルシステム空きブロックビットマップ１６０２内のある領域に格納されている値が「０」である場合、その領域に対応するブロックがファイルシステムによって使用されていない（すなわち、そのブロックが空きブロックである）ことを示す。一方、その領域に格納されている値が「１」である場合、その領域に対応するブロックがファイルシステムによって使用されていることを示す。
【０１８０】
図１７は、自動拡張可能仮想ボリューム割り当てビットマップ１０６が図６に示す通りである場合のファイルシステム空きブロックビットマップ１６０２の例である。
【０１８１】
ファイルシステムによって使用されているブロックには、必ず物理ブロックが割り当てられている（例えば、ブロックアドレスが「０ｘ０００２」である領域１７０１参照）。
【０１８２】
一方、物理ブロックが割り当てられているにも関らず、ファイルシステムによって使用されていないブロックも存在する（例えば、ブロックアドレスが「０ｘ００４９」である領域１７０２参照）。
【０１８３】
図１８は、本発明の第３の実施の形態において実行される新規ブロック割り当て処理ポリシー設定処理のフローチャートである。
【０１８４】
図１８の処理は、新規ブロック割り当て処理ポリシー設定処理部１６０３によって実行される。
【０１８５】
最初に、システムコール経由で新規ブロック割り当て処理ポリシー設定処理が開始する（ステップ１８０１）。
【０１８６】
最初に、新規ブロック割り当て処理ポリシー設定処理部１６０３は、ＮＡＳ管理者から受信した要求が容量節約モードへのポリシー変更要求であるか否かを判定する（ステップ１８０２）。
【０１８７】
ステップ１８０２において、容量節約モードへの変更要求であると判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、新規ブロック割り当て処理ポリシーフラグ１６０１を「１」に設定し（ステップ１８０３）、処理を終了する（ステップ１８０８）。
【０１８８】
一方、ステップ１８０２において、容量節約モードへの変更要求でないと判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、受信した要求がスナップショット性能向上モードへのポリシー変更要求であるか否かを判定する（ステップ１８０４）。
【０１８９】
ステップ１８０４において、スナップショット性能向上モードへのポリシー変更要求であると判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、新規ブロック割り当て処理ポリシーフラグ１６０１を「２」に設定し（ステップ１８０５）、処理を終了する（ステップ１８０８）。
【０１９０】
一方、ステップ１８０４にて、スナップショット性能向上モードへのポリシー変更要求でないと判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、受信した要求が従来モードへのポリシー変更要求であるか否かを判定する（ステップ１８０６）。
【０１９１】
ステップ１８０６において、従来モードへのポリシー変更要求であると判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、新規ブロック割り当て処理ポリシーフラグ１６０１を「０」に設定し（ステップ１８０７）、処理を終了する（ステップ１８０８）。
【０１９２】
一方、ステップ１８０６において、従来モードへのポリシー変更要求でないと判定された場合、新規ブロック割り当て処理ポリシー設定処理部１６０３は、受信した要求を不正なモード変更とみなし、エラー終了する。
【０１９３】
図１９は、本発明の第３の実施の形態において実行される新規ブロック割り当て処理のフローチャートである。
【０１９４】
図１９の処理は、新規ブロック割り当て処理部１６０４によって実行される。
【０１９５】
ファイル新規領域ライト又はファイル作成などの延長によって、新規ブロック割り当て処理が開始する（ステップ１９０１）。
【０１９６】
最初に、新規ブロック割り当て処理部１６０４は、新規ブロック割り当て処理ポリシーフラグ１６０１が「１」であるか否かを判定する（ステップ１９０２）。
【０１９７】
ステップ１９０２において、新規ブロック割り当て処理ポリシーフラグ１６０１が「１」であると判定された場合、容量節約モードが選択されている。この場合、新規ブロック割り当て処理部１６０４は、ファイルシステム空きブロックビットマップ１６０２が空きを示している領域のうち、自動拡張可能仮想ボリューム割り当てビットマップ１０６が割り当て済みを示しているブロックを選択する（ステップ１９０３）。図６及び図１７の例では、例えば、領域１７０２に対応するブロックが選択される。
【０１９８】
次に、新規ブロック割り当て処理部１６０４は、新規ブロックの割り当てが成功したか否かを判定する。ステップ１９０３の条件に合致するブロックが存在しない場合、ステップ１９０６において失敗と判定される。
【０１９９】
ステップ１９０６において成功したと判定された場合、新規ブロック割り当て処理部１６０４は、ファイルシステム空きブロックビットマップ１６０２の選択されたブロックに対応する値を「１」（すなわち、使用済み）に更新し（ステップ１９０８）、処理を終了する（ステップ１９０９）。
【０２００】
一方、ステップ１９０６において失敗したと判定された場合、新規ブロック割り当て処理部１６０４は、物理ブロックが割り当てられているか否かに関らず、ファイルシステム空きブロックビットマップ１６０２が空きを示している領域を選択し（ステップ１９０７）、その後ステップ１９０８を実行して、処理を終了する（ステップ１９０９）。
【０２０１】
ステップ１９０２において、新規ブロック割り当て処理ポリシーフラグ１６０１が「１」でないと判定された場合、新規ブロック割り当て処理部１６０４は、新規ブロック割り当て処理ポリシーポリシーフラグ１６０１が「２」であるか否かを判定する（ステップ１９０４）。
【０２０２】
ステップ１９０４において、新規ブロック割り当て処理ポリシーフラグ１６０１が「２」であると判定された場合、性能向上モードが選択されている。この場合、新規ブロック割り当て処理部１６０４は、ファイルシステム空きブロックビットマップ１６０２が空きを示している領域のうち、自動拡張可能仮想ボリューム割り当てビットマップ１０６が未割り当てを示しているブロックを選択する（ステップ１９０５）。図６及び図１７の例では、例えば、ブロックアドレスが「０ｘ００００」であるブロックが選択される。その後に実行される処理は、ステップ１９０３の後に実行されるものと同様である。ただし、ステップ１９０６では、ステップ１９０５の条件に合致するブロックが存在しない場合に失敗と判定される。
【０２０３】
ステップ１９０４において、新規ブロック割り当て処理ポリシーフラグ１６０１が「２」でないと判定された場合、ステップ１９０７及び１９０８が順次実行され、処理が終了する（ステップ１９０９）。
【０２０４】
なお、上記の説明は、ファイルシステム全体に一つのポリシーが適用される例を示したが、ファイルごとにポリシーを設定できるようにしてもよい。
【０２０５】
上記の本発明の第３の実施の形態によれば、ＮＡＳ管理者は、少なくとも、ボリュームプールの容量を節約するモード又はスナップショットの性能を向上するモードのいずれかを選択することができる。ストレージ装置１１０のマイクロプログラム１１１は、選択されたモードに従って、アプリケーションが新たに使用するブロックを選択する。その結果、容量節約又は性能向上が実現される。
【０２０６】
次に、本発明の第４の実施の形態について説明する。
【０２０７】
上記の本発明の第１から第３の実施の形態は、ファイルシステム制御部１０３を備えるＮＡＳ１０１と、ストレージ装置１１０と、によって構成され、ＮＡＳ１０１が外部ネットワーク１６０を介してクライアント計算機と接続されたストレージシステムである。ＮＡＳ１０１内のスナップショット制御部１０４は、ファイルシステム制御部１０３からブロックＩ／Ｏ要求を受信すると、要求の対象のブロックに格納されているデータを退避するか否かを判定する。しかし、スナップショット制御部１０４は、ブロックＩ／Ｏ要求を受信することができる限り、ＮＡＳ１０１以外の部分において実行されてもよい。
【０２０８】
本発明の第４の実施の形態において、スナップショット制御部１０４は、ストレージ装置１０１内のマイクロプログラム１１１内に含まれ、ディスクコントローラ１５７によって実行される。
【０２０９】
図２０は、本発明の第４の実施の形態のストレージシステムの機能ブロック図である。
【０２１０】
本実施の形態のストレージシステムは、ブロックＩ／Ｏコマンドを受信するストレージ装置１１０によって構成される。ストレージ装置１１０のハードウェア構成は、図１に示す通りである。マイクロプログラム１１１内の自動拡張可能仮想ボリューム管理制御部１１４は、スナップショット制御部１０４を含む。スナップショット制御部１０４が実行する処理については、後で詳細に説明する（図２１参照）。その他の部分については、本発明の第１から第３の実施の形態と同様であるため、説明を省略する。
【０２１１】
図２１は、本発明の第４の実施の形態のスナップショット制御部１０４が実行するスナップショット処理を示すフローチャートである。
【０２１２】
第４の実施の形態のスナップショット処理は、第１の実施の形態のスナップショット処理とほぼ同様である。ただし、第４の実施の形態のスナップショット制御部１０４は、自動拡張可能仮想ボリューム割り当てテーブル１１５を直接参照することができる。このため、初期化処理において自動拡張可能仮想ボリューム割り当てビットマップ１０６を作成する必要がない。また、Ｉ／Ｏコマンドに応じて自動拡張可能仮想ボリューム割り当て部分ビットマップ１０６ｂを作成する必要もない。
【０２１３】
最初に、スナップショット制御部１０４は、スナップショット処理を開始する（ステップ２１０１）。
【０２１４】
次に、スナップショット制御部１０４は、書き込み要求の対象ブロックのデータが既に差分ボリューム３０２に退避済みか否かを判定する（ステップ２１０２）。
【０２１５】
ステップ２１０２において、退避済みであると判定された場合、ステップ２１１１へ処理が移る。
【０２１６】
一方、ステップ２１０２において、まだ退避していないと判定された場合、スナップショット制御部１０４は、自動拡張可能仮想ボリューム割り当てテーブル１１５を参照して、書き込み要求の対象ブロックに物理ブロックが割り当て済みか否かを判定する（ステップ２１０３）。
【０２１７】
ステップ２１０３において、物理ブロックが割り当て済みであると判定された場合、ステップ２１０４へ処理が移る。ステップ２１０４から２１０７までの処理は、第１の実施の形態において説明した内容と同等であるため、説明を省略する（図１０のステップ１００４から１００７参照）。
【０２１８】
一方、ステップ２１０３において、物理ブロックがまだ割り当てられていない場合、スナップショット制御部１０４は、書き込み要求の対象ブロックに対して物理ブロックの割り当てを実行する（ステップ２１０８）。
【０２１９】
次に、スナップショット制御部１０４は、自動拡張可能仮想ボリューム割り当てテーブル１１５を更新する（ステップ１４０９）。具体的には、書き込み要求の対象ブロックに物理ブロックが割り当てられたことを示す情報、及び、割り当てられた物理ブロックを識別する情報が、自動拡張可能仮想ボリューム割り当てテーブル１１５に新たに登録される。
【０２２０】
次に、スナップショット制御部１０４は、書き込み要求の対象ブロックに格納されていたデータをダミーデータブロック３０５へ退避したことを示す情報をスナップショット管理テーブル３０４に書き込む（ステップ２１１０）。第１の実施の形態と同様、ダミーデータブロック３０５を物理的に確保せずとも、退避先のブロックアドレスのフィールドに０などのデータを格納することによって、ダミーデータであることを論理的に示してもよい。ステップ１４０８、１４０９及び１４１０は、どのような順序で実行されてもよい。
【０２２１】
次に、スナップショット制御部１０４は、書き込み要求の対象データを書き込み要求の対象ブロックへ書き込み（ステップ２１１１）、スナップショット処理を終了する（ステップ２１１３）。
【０２２２】
上記の本発明の第４の実施の形態によれば、ブロックＩ／Ｏ要求を受信するストレージシステムにおいても本発明を実施することができる。例えば、ＳＣＳＩインターフェースを介してクライアント計算機と直接接続されるストレージシステムにおいても本発明を実施することができる。
【０２２３】
次に、本発明の第５の実施の形態について説明する。
【０２２４】
第５の実施の形態は、Ｉ／Ｏコマンドを処理するマイクロプログラム１１１を改善することを目的とする。
【０２２５】
本発明の第１から第４の実施の形態によれば、図４に示すように、運用ボリューム３０１内のブロックを対象とする書き込み要求を受信したＮＡＳ１０１は、書き込み要求の対象ブロックのデータを読み込み（ステップ（３Ａ））、そのデータを差分ボリューム３０２の差分データ格納領域３０３に書き込み（ステップ（３Ｂ））、その書き込み先を識別する情報をスナップショット管理テーブル３０４に書き込み（ステップ（４））、その後、書き込み要求の対象データを対象ブロックに書き込む（ステップ（５））。ステップ（３Ａ）、（３Ｂ）、（４）及び（５）は、それぞれ、図１０のステップ１００５、１００６、１００７及び１０１１に対応する。結局、ＮＡＳは、書き込み要求の対象ブロックごとに、一つの読み込みコマンド及び三つの書き込みコマンドを、ストレージ装置１１０に対して順次発行する。
【０２２６】
このような一連のコマンドの組を一つのコマンドにまとめることによって、ＮＡＳ１０１とストレージ装置１１０との間のデータ転送量を削減することができる。
【０２２７】
具体的には、ＮＡＳ１０１は、ステップ（３Ａ）及び（３Ｂ）の読み込みコマンド及び書き込みコマンドの代わりに、コピー（ＣＯＰＹ）コマンドを発行してもよい。この場合、ＮＡＳ１０１の代わりにマイクロプログラム１１１が、運用ブロック３０１からデータを読み込み、そのデータを差分ボリューム３０２の差分データ格納領域３０３に書き込む。
【０２２８】
あるいは、ＮＡＳ１０１は、ステップ（３Ａ）、（３Ｂ）及び（４）の読み込みコマンド及び二つの書き込みコマンドの代わりに、コピー・アンド・ライト（ＣＯＰＹ＆ＷＲＩＴＥ）コマンドを発行してもよい。この場合、ＮＡＳ１０１の代わりにマイクロプログラム１１１が、運用ブロック３０１からデータを読み込み、そのデータを差分ボリューム３０２の差分データ格納領域３０３に書き込み、その書き込み先を識別する情報をスナップショット管理テーブル３０４に書き込む。
【０２２９】
あるいは、ＮＡＳ１０１は、ステップ（３Ａ）、（３Ｂ）、（４）及び（５）の読み込みコマンド及び三つの書き込みコマンドの代わりに、コピー・アンド・ライト・アンド・ライト（ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥ）コマンドを発行してもよい。この場合、ＮＡＳ１０１の代わりにマイクロプログラム１１１が、運用ブロック３０１からデータを読み込み、そのデータを差分ボリューム３０２の差分データ格納領域３０３に書き込み、その書き込み先を識別する情報をスナップショット管理テーブル３０４に書き込み、書き込み要求の対象データを対象ブロックに書き込む。
【０２３０】
本発明の第５の実施の形態は、上記のように、一連のコマンドの組を一つのコマンドにまとめた場合に本発明を適用することを目的とする。そのため、図４のステップ（３）に相当するコピーの無効化は、マイクロプログラム１１１によって実行される。
【０２３１】
最初に、ＮＡＳ１０１がＣＯＰＹコマンドを発行する場合について説明する。
【０２３２】
図２２は、本発明の第５の実施の形態の自動拡張可能仮想ボリューム管理制御部１１４が実行するＣＯＰＹコマンド処理を示すフローチャートである。
【０２３３】
自動拡張可能仮想ボリューム管理制御部１１４は、ＮＡＳ１０１からＣＯＰＹコマンドを受信すると、ＣＯＰＹコマンド処理を開始する（ステップ２２０１）。
【０２３４】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、コピー元ブロックに対応する自動拡張可能仮想ボリューム割り当てテーブル１１５を参照する（ステップ２２０２）。コピー元ブロックとは、Ｉ／Ｏコマンドによって指定された運用ボリューム３０１内の書き込み対象ブロックである。
【０２３５】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、コピー元ブロックに物理ブロックが割り当てられているか否かを判定する（ステップ２２０３）。
【０２３６】
ステップ２２０３において、物理ブロックが割り当てられていると判定された場合、自動拡張可能仮想ボリューム管理制御部１１４は、コピー処理を実行して、正常終了をＩ／Ｏコマンド制御部１１２に応答する（ステップ２２０５）。ステップ２２０５において実行されるコピー処理は、図１０のステップ１００５及び１００６においてスナップショット制御部１０４が実行する処理と同様の処理である。すなわち、自動拡張可能仮想ボリューム管理制御部１１４は、コピー元ブロックからデータを読み込み、そのデータを差分ボリューム３０２の差分データ格納領域３０３に書き込む。
【０２３７】
一方、ステップ２２０３において、物理ブロックが割り当てられていないと判定された場合、自動拡張可能仮想ボリューム管理制御部１１４は、ステップ２２０５のコピー処理を実行せず、エラー又はワーニングをＩ／Ｏコマンド制御部１１２に応答する（ステップ２２０４）。このときに応答されるエラー又はワーニングは、要求されたコピー処理が実行されなかったことを示す情報を含む。
【０２３８】
自動拡張可能仮想ボリューム管理制御部１１４は、ステップ２２０４又は２２０５を実行すると、ＣＯＰＹコマンド処理を終了する（ステップ２２０６）。
【０２３９】
上記のＣＯＰＹコマンド処理は、ＣＯＷ処理の際に発行されるＣＯＰＹコマンドだけでなく、二つのボリューム３００間でデータをコピーするために発行される全てのＣＯＰＹコマンドに適用することができる。さらに、上記のＣＯＰＹコマンド処理は、同一のボリューム３００内の二つのブロック間でデータがコピーされる場合にも適用することができる（図４参照）。
【０２４０】
次に、ＮＡＳ１０１がＣＯＰＹ＆ＷＲＩＴＥコマンドを発行する場合について説明する。
【０２４１】
図２３は、本発明の第５の実施の形態において自動拡張不可仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【０２４２】
前述のように、ＮＡＳ１０１からＣＯＰＹ＆ＷＲＩＴＥコマンドを受信したマイクロプログラム１１１は、運用ボリューム３０１のブロックからデータを読み込む。この読み込み対象を、図２３の説明において、「コピー元」と記載する。
【０２４３】
マイクロプログラム１１１は、読み込まれたデータを、差分ボリューム３０２の差分データ格納領域３０３に書き込む。この書き込み対象を、図２３の説明において、「コピー先」と記載する。
【０２４４】
マイクロプログラム１１１は、そのコピー先を識別する情報をスナップショット管理テーブル３０４に書き込む。この書き込み対象を、図２３の説明において、「書き込み先」と記載する。
【０２４５】
ＣＯＰＹ＆ＷＲＩＴＥコマンドは、コピー元、コピー先及び書き込み先を識別する情報を含む。
【０２４６】
ＣＯＰＹ＆ＷＲＩＴＥコマンドは、先頭から、ＣＯＰＹ＆ＷＲＩＴＥコマンド２３０１、コピー元ディスクドライブ２３０２、コピー元ブロックアドレス２３０３、コピーするブロック数２３０４、コピー先ディスクドライブ２３０５、コピー先ブロックアドレス２３０６、書き込み先ディスクドライブ２３０７、書き込み先ブロックアドレス２３０８、書き込みするブロック数２３０９及び書き込みデータ保持メモリアドレス２３１０の各フィールドを含む。
【０２４７】
ＣＯＰＹ＆ＷＲＩＴＥコマンド２３０１は、コマンドを区別するために使用される識別子（すなわち、そのコマンドがＣＯＰＹ＆ＷＲＩＴＥコマンドであることを示す情報）である。
【０２４８】
コピー元ディスクドライブ２３０２は、コピー元ブロックを格納しているディスクドライブ１５９の識別子である。
【０２４９】
コピー元ブロックアドレス２３０３は、コピー元ブロックを識別するブロックアドレスである。コピー元ブロックが複数の連続したブロックである場合、コピー元ブロックアドレス２３０３は、コピー元ブロックの先頭を識別するブロックアドレスである。
【０２５０】
コピーするブロック数２３０４は、コピーの対象のブロックの数である。すなわち、コピーするブロック数２３０４は、コピーされるデータ量を表す。
【０２５１】
コピー先ディスクドライブ２３０５は、コピー先のブロックを格納しているディスクドライブ１５９の識別子である。
【０２５２】
コピー先ブロックアドレス２３０６は、コピー先のブロックを識別するブロックアドレスである。コピー先ブロックが複数の連続したブロックである場合、コピー先ブロックアドレス２３０６は、コピー先ブロックの先頭を識別するブロックアドレスである。
【０２５３】
書き込み先ディスクドライブ２３０７は、書き込み先のブロックを格納しているディスクドライブ１５９の識別子である。
【０２５４】
書き込み先ブロックアドレス２３０８は、書き込み先のブロックの先頭を識別するブロックアドレスである。
【０２５５】
書き込みするブロック数２３０９は、書き込みの対象のブロックの数である。
【０２５６】
書き込みデータ保持メモリアドレス２６１０は、書き込みの対象のデータが格納されているＮＡＳ主記憶１５３のアドレスである。これらのデータを指定してコマンドを発行することによって、ＣＯＰＹ＆ＷＲＩＴＥコマンドが実行される。
【０２５７】
図２４は、本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥコマンドが自動拡張不可仮想ボリューム管理制御部１１３によって実行される場合のフローチャートである。
【０２５８】
自動拡張不可仮想ボリューム管理制御部１１３は、ＣＯＰＹ＆ＷＲＩＴＥコマンドを開始すると（ステップ２４０１）、ＣＯＰＹ＆ＷＲＩＴＥコマンドのフィールド２３０２から２３０６の情報に基づいて、ＣＯＰＹ処理を実行する（ステップ２４０２）。具体的には、運用ボリューム３０１からデータを読み込み、そのデータを差分ボリューム３０２に書き込む処理が実行される。
【０２５９】
次に、自動拡張不可仮想ボリューム管理制御部１１３は、ＣＯＰＹ＆ＷＲＩＴＥコマンドのフィールド２３０７から２３１０の情報に基づいて、ＷＲＩＴＥ処理を実行する（ステップ２４０３）。具体的には、コピー先を示す情報がスナップショット管理テーブル３０４に書き込まれる。
【０２６０】
次に、自動拡張不可仮想ボリューム管理制御部１１３は、正常終了したことをＩ／Ｏコマンド制御部１１２に応答し（ステップ２４０４）、ＣＯＰＹ＆ＷＲＩＴＥコマンドを終了する（ステップ２４０５）。
【０２６１】
図２５は、本発明の第５の実施の形態において自動拡張可能仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【０２６２】
図２５に示すＣＯＰＹ＆ＷＲＩＴＥコマンドを構成する各フィールドのうち、フィールド２５０１から２５０９までは、図２３に示すフィールド２３０１から２３０９までと同様であるため、説明を省略する。
【０２６３】
図２５のＣＯＰＹ＆ＷＲＩＴＥコマンドには、書き込みデータ保持メモリアドレスを指定するフィールドが二つ用意されている。すなわち、書き込み第１データ保持メモリアドレス２５１０及び書き込み第２データ保持メモリアドレス２５１１である。
【０２６４】
書き込み第１データ保持メモリアドレス２５１０は、コピー元のブロックに物理ブロックが割り当てられている場合にスナップショット管理テーブル３０４に書き込まれるべきデータ（すなわち、ＷＲＩＴＥデータ１）を格納しているＮＡＳ主記憶１５３のアドレスである。ＷＲＩＴＥデータ１は、具体的には、コピー先を示す情報を含む。
【０２６５】
書き込み第２データ保持メモリアドレス２５１１は、コピー元のブロックに物理ブロックが割り当てられていない場合にスナップショット管理テーブル３０４に書き込まれるべきデータ（すなわち、ＷＲＩＴＥデータ２）を格納しているＮＡＳ主記憶１５３のアドレスである。ＷＲＩＴＥデータ２は、具体的には、ダミーデータブロックを示す情報を含む。
【０２６６】
図２５のフォーマットは、自動拡張不可ボリュームに適用されてもよい。この場合、フィールド２８１１に示される書き込みデータは無視される。
【０２６７】
図２６は、本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥコマンドが自動拡張可能仮想ボリューム管理制御部１１４によって実行される場合のフローチャートである。
【０２６８】
自動拡張可能仮想ボリューム管理制御部１１４は、ＮＡＳ１０１からＣＯＰＹコマンドを受信すると、ＣＯＰＹ＆ＷＲＩＴＥコマンド処理を開始する（ステップ２６０１）。
【０２６９】
ステップ２６０２及び２６０３において実行される処理は、図２２のステップ２２０２及び２２０３において実行されるものと同じであるので、説明を省略する。
【０２７０】
ステップ２６０３において、物理ブロックが割り当てられていると判定された場合、自動拡張可能仮想ボリューム管理制御部１１４は、コピー処理を実行する（ステップ２６０４）。
【０２７１】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、書き込みデータ第１データ保持メモリアドレス２５１０に基づくＷＲＩＴＥデータ１を、書き込み先ディスクドライブ２５０７及び書き込み先ブロックアドレス２５０８によって指定されたブロックへ書き込む（ステップ２６０５）。スナップショット機能においてこのコマンドが使用される場合、ＷＲＩＴＥデータ１とは、スナップショット管理テーブル３０４に書き込まれるデータである。すなわち、ＷＲＩＴＥデータ１は、差分データ格納領域３０３中にあるコピー先のブロックと、運用ボリューム３０１中にあるコピー元のブロックとの対応を示す情報を含む。
【０２７２】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、正常終了したことをＩ／Ｏコマンド制御部１１２に応答し（ステップ２６０６）、コマンド処理を終了する（ステップ２６０９）。
【０２７３】
一方、ステップ２６０３において、物理ブロックが割り当てられていないと判定された場合、自動拡張可能仮想ボリューム管理制御部１１４は、書き込み第２データ保持メモリアドレス２５１１に基づくＷＲＩＴＥデータ２を、書き込み先ディスクドライブ２５０７及び書き込み先ブロックアドレス２５０８によって指定されたブロックへ書き込む（ステップ２６０７）。スナップショット機能においてこのコマンドが使用される場合、ＷＲＩＴＥデータ２とは、スナップショット管理テーブルに書き込むデータである。すなわち、ＷＲＩＴＥデータ２は、ダミーデータブロック又はダミーブロック番号と、コピー元のブロックとの対応を示す情報を含む。
【０２７４】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、エラー、ワーニング又は正常終了をＩ／Ｏコマンド制御部１１２に応答する（ステップ２６０８）。この際、ステップ２６０６とは別のステータス値がＩ／Ｏコマンド制御部１１２に応答される。以上で、コマンド処理が終了する（ステップ２６０９）。
【０２７５】
図２７は、本発明の第５の実施の形態において自動拡張不可仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【０２７６】
前述のように、ＮＡＳ１０１からＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドを受信したマイクロプログラム１１１は、運用ボリューム３０１のブロックからデータを読み込む。この読み込み対象を、図２７の説明において、「コピー元」と記載する。
【０２７７】
マイクロプログラム１１１は、読み込まれたデータを、差分ボリューム３０２の差分データ格納領域３０３に書き込む。この書き込み対象を、図２７の説明において、「コピー先」と記載する。
【０２７８】
マイクロプログラム１１１は、そのコピー先を識別する情報をスナップショット管理テーブル３０４に書き込む。この書き込み対象を、図２７の説明において、「第１の書き込み先」と記載する。また、この書き込み処理を「第１の書き込み処理」と記載する。
【０２７９】
さらに、マイクロプログラム１１１は、運用ボリューム３０１に書き込まれるべきデータを、運用ボリューム３０１に書き込む。この書き込みの対象を、図２７の説明において、「第２の書き込み先」と記載する。また、この書き込み処理を「第２の書き込み処理」と記載する。
【０２８０】
ＣＯＰＹ＆ＷＲＩＴＥコマンドは、コピー元、コピー先、第１の書き込み先及び第２の書き込み先を識別する情報を含む。
【０２８１】
先頭のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンド２７０１は、そのコマンドがＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドであることを示す識別子である。
【０２８２】
コピー元ディスクドライブ２７０２からコピー先ブロックアドレス２７０６までは、ＣＯＰＹ＆ＷＲＩＴＥコマンド（図２３参照）と同様であるので、説明を省略する。
【０２８３】
第１の書き込み先ディスクドライブ２７０７は、第１の書き込み先のブロックを格納しているディスクドライブ１５９の識別子である。
【０２８４】
第１の書き込み先ブロックアドレス２７０８は、第１の書き込み先のブロックの先頭を識別するブロックアドレスである。
【０２８５】
第１の書き込みするブロック数２７０９は、第１の書き込み処理の対象のブロックの数である。
【０２８６】
第１の書き込みデータ保持メモリアドレス２７１０は、第１の書き込み処理の対象のデータが格納されているＮＡＳ１０１のメモリのアドレスである。
【０２８７】
第２の書き込み先ディスクドライブ２７１１は、第２の書き込み先のブロックを格納しているディスクドライブ１５９の識別子である。第２の書き込み先ブロックアドレス２７１２は、第２の書き込み先のブロックの先頭を識別するブロックアドレスである。第２の書き込みするブロック数２７１３は、第２の書き込み処理の対象のブロックの数である。第２の書き込みデータ保持メモリアドレス２７１４は、第２の書き込み処理の対象のデータが格納されているＮＡＳ１０１のメモリのアドレスである。これらのデータを指定してコマンドを発行することによって、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドが実行される。
【０２８８】
図２８は、本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドが自動拡張不可仮想ボリューム管理制御部１１３によって実行される場合のフローチャートである。
【０２８９】
自動拡張不可仮想ボリューム管理制御部１１３は、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドを開始すると（ステップ２８０１）、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフィールド２７０２から２７０６の情報に基づいてＣＯＰＹ処理を実行する（２８０２）。具体的には、運用ボリューム３０１からデータを読み込み、そのデータを差分ボリューム３０２に書き込む処理が実行される。
【０２９０】
次に、自動拡張不可仮想ボリューム管理制御部１１３は、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフィールド２７０７から２７１０の情報に基づいて、第１の書き込み（ＷＲＩＴＥ）処理を実行する（ステップ２８０３）。具体的には、コピー先を示す情報がスナップショット管理テーブル３０４に書き込まれる。
【０２９１】
次に、自動拡張不可仮想ボリューム管理制御部１１３は、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフィールド２７１１から２７１４の情報に基づいて、第２の書き込み（ＷＲＩＴＥ）処理を実行する（ステップ２８０４）。具体的には、ＮＡＳ１０１が運用ボリューム３０１に書き込むことを要求したデータを、運用ボリューム３０１に書き込む。
【０２９２】
次に、自動拡張不可仮想ボリューム管理制御部１１３は、正常終了したことをＩ／Ｏコマンド制御部１１２に応答し（ステップ２８０５）、ＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドを終了する（ステップ２８０６）。
【０２９３】
図２９は、本発明の第５の実施の形態において自動拡張可能仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【０２９４】
図２９に示すＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドを構成する各フィールドのうち、フィールド２９０１から２９０９までは、それぞれ、図２７に示すフィールド２７０１から２７０９までと同様である。また、フィールド２９１２から２９１５までは、それぞれ、フィールド２７１１から２７１４までと同様である。このため、これらのフィールドについての説明を省略する。
【０２９５】
図２９のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドには、第１の書き込みデータ保持メモリアドレスを指定するフィールドが二つ用意されている。すなわち、第１の書き込み第１データ保持メモリアドレス２９１０及び第１の書き込みデータ第２データ保持メモリアドレス２９１１である。これらのフィールド２９１０及び２９１１は、それぞれ、図２５のフィールド２５１０及び２５１１と同様であるため、説明を省略する。
【０２９６】
図２９のフォーマットは、第１の書き込み第２データ保持メモリアドレス２９１１をコマンドの最後に配置すること等によって、自動拡張不可ボリュームに適用されてもよい。この場合、フィールド２９１１に示される書き込みデータは無視される。
【０２９７】
図３０は、本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドが自動拡張可能仮想ボリューム管理制御部１１４によって実行される場合のフローチャートである。
【０２９８】
図３０において、ステップ３００１から３００４までは、それぞれ図２６のステップ２６０１から２６０４までと同様であるため、説明を省略する。
【０２９９】
ステップ３００４を実行した後、自動拡張可能仮想ボリューム管理制御部１１４は、第１の書き込み第１データ保持メモリアドレス２９１０の情報に基づいて、第１のＷＲＩＴＥコマンドの対象であるＷＲＩＴＥデータ１を、第１の書き込み先ディスクドライブ２９０７及び第１の書き込み先ブロックアドレス２９０８によって指定されたブロックへ書き込む（ステップ３００５）。
【０３００】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、第２の書き込み処理（第２のＷＲＩＴＥコマンド）を実行する（ステップ３００６）。その結果、ＮＡＳ１０１が運用ボリューム３０１に書き込むことを要求したデータ（すなわち、ＮＡＳクライアントがＮＡＳ１０１に発行した書き込み要求の対象データ）が、運用ボリューム３０１に書き込まれる。
【０３０１】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、正常終了したことをＩ／Ｏコマンド制御部１１２に応答し（ステップ３００７）、コマンド処理を終了する（ステップ３０１１）。
【０３０２】
一方、ステップ３００３において、物理ブロックが割り当てられていないと判定された場合、自動拡張可能仮想ボリューム管理制御部１１４は、第１の書き込み第２データ保持メモリアドレス２９１１の情報に基づいて、第１のＷＲＩＴＥコマンドの対象であるＷＲＩＴＥデータ２を、指定されたブロックへ書き込む（ステップ３００８）。この書き込み先のブロックは、書き込み先ディスクドライブ２５０７及び書き込み先ブロックアドレス２５０８によって指定されたものである。
【０３０３】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、ステップ３００６と同様に、第２のＷＲＩＴＥコマンドを実行する（ステップ３００９）。
【０３０４】
次に、自動拡張可能仮想ボリューム管理制御部１１４は、エラー、ワーニング又は正常終了をＩ／Ｏコマンド制御部１１２に応答する（ステップ３０１０）。この際、ステップ３００７とは別のステータス値がＩ／Ｏコマンド制御部１１２に応答される。以上で、コマンド処理が終了する（ステップ３０１１）。
【０３０５】
以上の本発明の第５の実施の形態によれば、差分スナップショットが運用される場合に、ＮＡＳ１０１は、ストレージ装置１１０に対して発行すべき複数のコマンドを一つのコマンドにまとめて発行する。ストレージ装置１１０のマイクロプログラム１１１は、その一つのコマンドに従って、複数の処理を順次実行する。その結果、ＮＡＳ１０１とストレージ装置１１０との間のデータ転送量が削減され、性能が向上する。この場合にも、データの書き込み先の運用ボリュームのブロックに物理ブロックが割り当てられていない場合、データを退避する必要がない。このため、マイクロプログラム１１１は、必要がない退避のためのコピーを省略する。その結果、データの処理性能が向上する。
【０３０６】
以上の本発明の第１から第５の実施の形態は、ストレージシステムに広く適用することができる。
【図面の簡単な説明】
【０３０７】
【図１】本発明の第１の実施の形態のストレージシステムのハードウェア構成を示すブロック図である。
【図２】本発明の第１の実施の形態のストレージシステムの機能ブロック図である。
【図３】本発明の第１の実施の形態のボリュームプールの構成の説明図である。
【図４】本発明の第１の実施の形態において実行される処理の概要の説明図である。
【図５】自動拡張可能仮想ボリュームを用いてスナップショット機能を提供するネットワーク接続ストレージ（ＮＡＳ）システムの従来の構成を説明する機能ブロック図である。
【図６】本発明の第１の実施の形態の自動拡張可能仮想ボリューム割り当てビットマップの説明図である。
【図７】本発明の第１の実施の形態のＩ／Ｏコマンド発行部が起動時に実行する処理を示すフローチャートである。
【図８】本発明の第１の実施の形態のＩ／Ｏコマンド制御部が割り当てビットマップ取得コマンドを受信した際に実行する割り当てビットマップ取得コマンド処理を示すフローチャートである。
【図９】従来のスナップショット処理を示すフローチャートである。
【図１０】本発明の第１の実施の形態のスナップショット制御部１０４が実行するスナップショット処理を示すフローチャートである。
【図１１】本発明の第１の実施の形態の変形例の機能ブロック図である。
【図１２】本発明の第２の実施の形態のストレージシステムの機能ブロック図である。
【図１３】本発明の第２の実施の形態の自動拡張可能仮想ボリューム割り当て部分ビットマップの説明図である。
【図１４】本発明の第２の実施の形態のスナップショット制御部が実行するスナップショット処理を示すフローチャートである。
【図１５】本発明の第２の実施の形態のＩ／Ｏコマンド制御部が読み込みコマンドを受信したときに実行する読み込みコマンド処理を示すフローチャートである。
【図１６】本発明の第３の実施の形態のファイルシステム制御部の説明図である。
【図１７】本発明の第３の実施の形態のファイルシステム空きブロックビットマップの説明図である。
【図１８】本発明の第３の実施の形態において実行される新規ブロック割り当て処理ポリシー設定処理のフローチャートである。
【図１９】本発明の第３の実施の形態において実行される新規ブロック割り当て処理のフローチャートである。
【図２０】本発明の第４の実施の形態のストレージシステムの機能ブロック図である。
【図２１】本発明の第４の実施の形態のスナップショット制御部が実行するスナップショット処理を示すフローチャートである。
【図２２】本発明の第５の実施の形態の自動拡張可能仮想ボリューム管理制御部が実行するＣＯＰＹコマンド処理を示すフローチャートである。
【図２３】本発明の第５の実施の形態において自動拡張不可仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【図２４】本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥコマンドが自動拡張不可仮想ボリューム管理制御部によって実行される場合のフローチャートである。
【図２５】本発明の第５の実施の形態において自動拡張可能仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【図２６】本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥコマンドが自動拡張可能仮想ボリューム管理制御部によって実行される場合のフローチャートである。
【図２７】本発明の第５の実施の形態において自動拡張不可仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【図２８】本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドが自動拡張不可仮想ボリューム管理制御部によって実行される場合のフローチャートである。
【図２９】本発明の第５の実施の形態において自動拡張可能仮想ボリュームを対象として発行されるＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドのフォーマットの一例を示す説明図である。
【図３０】本発明の第５の実施の形態のＣＯＰＹ＆ＷＲＩＴＥ＆ＷＲＩＴＥコマンドが自動拡張可能仮想ボリューム管理制御部によって実行される場合のフローチャートである。
【符号の説明】
【０３０８】
１０１  ネットワーク接続ストレージ（ＮＡＳ）
１０２  クライアント要求受付部
１０３、１０３ａ  ファイルシステム制御部
１０４、１０４ａ、１０４ｂ  スナップショット制御部
１０５、１０５ａ、１０５ｂ  Ｉ／Ｏコマンド発行部
１０６、１０６ｂ  自動拡張可能仮想ボリューム割り当てビットマップ
１１０、１１０ａ  ストレージ装置
１１１、１１１ａ  マイクロプログラム
１１２、１１２ａ、１１２ｂ  Ｉ／Ｏコマンド制御部
１１３  自動拡張不可仮想ボリューム管理制御部
１１４、１１４ａ、１１４ｂ  自動拡張可能仮想ボリューム管理制御部
１１５  自動拡張可能仮想ボリューム割り当てテーブル
１２０  ボリューム群
１２１  ボリュームプール
１５１  ＣＰＵ
１５２  メモリコントローラ
１５３  ＮＡＳ主記憶
１５４  Ｉ／Ｏコントローラ
１５５  ネットワークコントローラ
１５６  ストレージコントローラ
１５７  ディスクコントローラ
１５８  ストレージ装置主記憶
１５９  ディスクドライブ
１６０  外部ネットワーク
３００  ボリューム
３０１  運用ボリューム
３０２  差分ボリューム
【図１】
2007249573.tif 000003
【図２】
2007249573.tif 000004
【図３】
2007249573.tif 000005
【図４】
2007249573.tif 000006
【図５】
2007249573.tif 000007
【図６】
2007249573.tif 000008
【図７】
2007249573.tif 000009
【図８】
2007249573.tif 000010
【図９】
2007249573.tif 000011
【図１０】
2007249573.tif 000012
【図１１】
2007249573.tif 000013
【図１２】
2007249573.tif 000014
【図１３】
2007249573.tif 000015
【図１４】
2007249573.tif 000016
【図１５】
2007249573.tif 000017
【図１６】
2007249573.tif 000018
【図１７】
2007249573.tif 000019
【図１８】
2007249573.tif 000020
【図１９】
2007249573.tif 000021
【図２０】
2007249573.tif 000022
【図２１】
2007249573.tif 000023
【図２２】
2007249573.tif 000024
【図２３】
2007249573.tif 000025
【図２４】
2007249573.tif 000026
【図２５】
2007249573.tif 000027
【図２６】
2007249573.tif 000028
【図２７】
2007249573.tif 000029
【図２８】
2007249573.tif 000030
【図２９】
2007249573.tif 000031
【図３０】
2007249573.tif 000032