(57)【要約】  初期化処理の途中でデータアクセスを許容するシステムの処理効率を改善する。  ストレージシステムは、記憶領域の初期化状況をブロック単位で管理する。初期化されていないブロック（２３）内の一部分である記憶領域＃１へのデータの書き込みを示すアクセス要求（３１）を受け付けることを許容する。アクセス要求（３１）を受け付けると、ブロック（２３）内のうち指定された記憶領域＃１に対して初期化せずにデータを書き込み、また、指定されなかった記憶領域＃２を初期化する。記憶領域＃１へのデータの書き込みと記憶領域＃２の初期化とによって、ブロック（２３）の初期化が完了したと判断する。
2013140492.tif 000002
【特許請求の範囲】
【請求項１】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法であって、
初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付けることを許容し、
前記アクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域に対して初期化せずにデータを書き込み、また、前記ブロック内のうち前記アクセス要求で指定されなかった第２の記憶領域を初期化し、
前記第１の記憶領域へのデータの書き込みと前記第２の記憶領域の初期化とによって、前記ブロックの初期化が完了したと判断する、データアクセス方法。
【請求項２】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法であって、
初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付けることを許容し、
前記アクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域と前記アクセス要求で指定されなかった第２の記憶領域とを初期化し、初期化後の前記第１の記憶領域に相当するデータをアクセス結果として出力し、
前記アクセス要求に応じて行った前記第１および第２の記憶領域の初期化によって、前記ブロックの初期化が完了したと判断する、データアクセス方法。
【請求項３】
初期化されていない複数のブロックについて前記アクセス要求が許容されるとき、前記複数のブロックそれぞれの排他制御に用いる排他情報を用意し、
前記排他情報を用いて、前記アクセス要求に応じて初期化を行う第１のプロセスと前記アクセス要求によらずに前記複数のブロックの初期化を進める第２のプロセスとの間で、ブロック単位で排他制御を行う、請求の範囲第１項または第２項記載のデータアクセス方法。
【請求項４】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、
初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付け、
前記アクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域に対して初期化せずにデータを書き込み、また、前記ブロック内のうち前記アクセス要求で指定されなかった第２の記憶領域を初期化し、
前記第１の記憶領域へのデータの書き込みと前記第２の記憶領域の初期化とによって、前記ブロックの初期化が完了したと判断する、処理を実行させるプログラム。
【請求項５】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、
初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付け、
前記アクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域と前記アクセス要求で指定されなかった第２の記憶領域とを初期化し、初期化後の前記第１の記憶領域に相当するデータをアクセス結果として出力し、
前記アクセス要求に応じて行った前記第１および第２の記憶領域の初期化によって、前記ブロックの初期化が完了したと判断する、処理を実行させるプログラム。
【請求項６】
初期化されていない複数のブロックについて前記アクセス要求が許容されるとき、前記複数のブロックそれぞれの排他制御に用いる排他情報を用意し、
前記排他情報を用いて、前記アクセス要求に応じて初期化を行う第１のプロセスと前記アクセス要求によらずに前記複数のブロックの初期化を進める第２のプロセスとの間で、ブロック単位で排他制御を行う、請求の範囲第４項または第５項記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデータアクセス方法およびプログラムに関する。
【背景技術】
【０００２】
現在、データセンタなどの拠点に設置されたコンピュータのハードウェア資源を、ユーザに割り当てて使用させるサービスが提供されている。このようなサービスは、クラウドコンピューティングの技術を用いて実現されることがあり、ＩａａＳ（Infrastructure as a Service）と呼ばれることがある。ユーザに割り当てられるハードウェア資源には、ハードディスク装置などの記憶装置の記憶領域が含まれ得る。例えば、コンピュータは、ユーザの仮想マシンを作成するとき、プールされている未割り当ての記憶領域の中から選択して当該仮想マシンに記憶領域を使用させる。また、例えば、コンピュータは、ユーザの仮想マシンを削除するとき、当該仮想マシンの記憶領域を解放してプールに戻す。【０００３】
上記のように動的に記憶領域を割り当てる方法では、あるユーザが過去に使用していた記憶領域を、他のユーザに再割り当てすることが起こり得る。このとき、前のユーザの情報が後のユーザに漏洩しないよう、セキュリティの観点から再割り当てする記憶領域を初期化（フォーマット）することが好ましい。例えば、コンピュータは、記憶領域に所定のビット列を書き込むことで、当該記憶領域を初期化する。記憶領域の初期化は、再割り当てによって当該記憶領域がアクセス可能となる前に完了することが好ましい。【０００４】
ただし、初期化処理は長い時間を要することがあるため、ハードウェア資源の割り当て段階でユーザを待たせないよう、初期化が完了していない記憶領域をユーザに割り当てることを許容し、バックグラウンドで初期化処理を進めることも考えられる。もし、ユーザからアクセス要求があった時点でもまだアクセス先の記憶領域の初期化が完了していないときは、データアクセスと初期化処理とを調整することになる。【０００５】
例えば、ホストからアクセス要求があると、ディスク上の要求された領域がフォーマット済か判定し、未フォーマットの場合にはディスクアクセスの前に当該領域を論理フォーマットするストレージ制御装置が提案されている。また、記録媒体に対するバックグラウンドフォーマットを開始した後に、ホストコンピュータからデータ記録要求があると、バックグラウンドフォーマットを中断して記録媒体にデータを記録する記録再生装置が提案されている。また、未初期化エリアを指定した読み出し要求があると、所定のナルデータを返送し、未初期化エリアを指定した書き込み要求があると、指定されたエリアの初期化が完了するまで書き込み処理を待機させるストレージシステムが提案されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開２００３−２９９３４号公報
【特許文献２】特開２００３−４５１１７号公報
【特許文献３】特開２００５−１１３１７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかし、データアクセスと初期化処理との調整に関して、上記のような従来技術には改善の余地がある。例えば、書き込み要求があったときに、単に初期化処理を中断して指定された記憶領域にデータを書き込む方法では、初期化すべき記憶領域が細分化されてしまい、初期化処理の制御が煩雑になって非効率になるおそれがある。【０００８】
一側面では、本発明は、初期化処理の途中でデータアクセスを許容するシステムの処理効率を改善したデータアクセス方法およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００９】
一側面では、１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法が提供される。データアクセス方法では、初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付けることを許容する。アクセス要求を受け付けたとき、ブロック内のうちアクセス要求で指定された第１の記憶領域に対して初期化せずにデータを書き込み、また、ブロック内のうちアクセス要求で指定されなかった第２の記憶領域を初期化する。第１の記憶領域へのデータの書き込みと第２の記憶領域の初期化とによって、ブロックの初期化が完了したと判断する。【００１０】
また、一側面では、１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法が提供される。データアクセス方法では、初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付けることを許容する。アクセス要求を受け付けたとき、ブロック内のうちアクセス要求で指定された第１の記憶領域とアクセス要求で指定されなかった第２の記憶領域とを初期化し、初期化後の第１の記憶領域に相当するデータをアクセス結果として出力する。アクセス要求に応じて行った第１および第２の記憶領域の初期化によって、ブロックの初期化が完了したと判断する。【００１１】
また、一側面では、１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、以下の処理を実行させるプログラムが提供される。初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付ける。アクセス要求を受け付けたとき、ブロック内のうちアクセス要求で指定された第１の記憶領域に対して初期化せずにデータを書き込み、また、ブロック内のうちアクセス要求で指定されなかった第２の記憶領域を初期化する。第１の記憶領域へのデータの書き込みと第２の記憶領域の初期化とによって、ブロックの初期化が完了したと判断する。【００１２】
また、一側面では、１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、以下の処理を実行させるプログラムが提供される。初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付ける。アクセス要求を受け付けたとき、ブロック内のうちアクセス要求で指定された第１の記憶領域とアクセス要求で指定されなかった第２の記憶領域とを初期化し、初期化後の第１の記憶領域に相当するデータをアクセス結果として出力する。アクセス要求に応じて行った第１および第２の記憶領域の初期化によって、ブロックの初期化が完了したと判断する。
【発明の効果】
【００１３】
一側面では、初期化処理の途中でデータアクセスを許容するシステムの処理効率が改善される。
本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態のストレージシステムを示す図である。
【図２】第２の実施の形態のストレージシステムを示す図である。
【図３】サーバが備えるハードウェア例を示すブロック図である。
【図４】論理ディスクの構造例を示す図である。
【図５】セグメントの状態遷移を示す図である。
【図６】サーバで動作するソフトウェア例を示すブロック図である。
【図７】セグメントテーブルの例を示す図である。
【図８】ＶＤＩＳＫ管理テーブルの例を示す図である。
【図９】セグメント状態テーブルの例を示す図である。
【図１０】チャンク管理ビットマップの例を示す図である。
【図１１】ＶＤＩＳＫ作成の手順例を示すフローチャートである。
【図１２】ＶＤＩＳＫ接続の手順例を示すフローチャートである。
【図１３】アクセス処理の手順例を示すフローチャートである。
【図１４】ライト変換の手順例を示すフローチャートである。
【図１５】ストレージ装置に対するライト処理の例を示す図である。
【図１６】リード変換の手順例を示すフローチャートである。
【図１７】ストレージ装置に対するリード処理の例を示す図である。
【図１８】初期化処理の手順例を示すフローチャートである。
【図１９】チャンク初期化の手順例を示すフローチャートである。
【図２０】論理ディスクの状態の変化例を示す図である。
【発明を実施するための形態】
【００１５】
以下、本実施の形態を図面を参照して説明する。
［第１の実施の形態］
図１は、第１の実施の形態のストレージシステムを示す図である。第１の実施の形態のストレージシステムは、コンピュータ１０および記憶装置２１，２２を有する。
【００１６】
コンピュータ１０は、ネットワークを介して記憶装置２１，２２と接続されている。記憶装置２１，２２は、例えば、ハードディスクなどの不揮発性の記録媒体を備える装置である。コンピュータ１０は、クライアント３０からのアクセス要求に応じて、記憶装置２１，２２へデータアクセスを行い、アクセス結果をクライアント３０に応答する。クライアント３０は、コンピュータ１０以外の他のコンピュータでもよいし、コンピュータ１０上で動作するソフトウェア（例えば、仮想マシン）でもよい。前者の場合、コンピュータ１０は、ネットワークを介してクライアント３０からアクセス要求を受信する。
【００１７】
また、コンピュータ１０は、記憶装置２１，２２が備える記憶領域を初期化する。初期化では、例えば、記憶領域に初期値として所定のビット列を書き込むことで、前に記憶されていたデータを消去して読み出せないようにする。コンピュータ１０は、記憶装置２１，２２が備える記憶領域を複数のブロックに区分し、ブロック単位で初期化状況を管理する。ブロックは、固定サイズ（例えば、１Ｍバイト）の記憶領域でもよい。コンピュータ１０は、例えば、各ブロックが初期化済か否かを示すビットマップを保持する。
【００１８】
コンピュータ１０は、ＣＰＵ（Central Processing Unit）などのプロセッサ１１と、ＲＡＭ（Random Access Memory）などのメモリ１２を有する。メモリ１２は、データアクセスおよび初期化処理のためのプログラムを記憶し、プロセッサ１１は、メモリ１２に記憶されたプログラムを実行する。ただし、コンピュータ１０は、プロセッサ１１に代えてまたはプロセッサ１１と共に、ＡＳＩＣ（Application Specific Integrated Circuit）やＦＰＧＡ（Field Programmable Gate Array）などの電子回路を備えてもよい。また、プロセッサ１１は、プログラムの命令を実行する汎用的な演算器に代えてまたは汎用的な演算器と共に、データアクセスや初期化処理のための専用の回路を備えてもよい。
【００１９】
ここで、第１の実施の形態のストレージシステムは、バックグラウンドの初期化処理の途中でも、クライアント３０からアクセス要求を受け付けることを許容する。そこで、コンピュータ１０は、以下に説明するように、初期化処理とデータアクセスとを調整する。
【００２０】
コンピュータ１０は、クライアント３０から、初期化されていないブロック２３内の一部分である記憶領域＃１へのデータの書き込みを示すアクセス要求３１を受け付ける。コンピュータ１０は、アクセス要求３１を受け付けたとき、ブロック２３内のうちアクセス要求３１で指定された記憶領域＃１に対して、初期化せずにデータを書き込む。また、コンピュータ１０は、アクセス要求３１を受け付けたとき、ブロック２３内のうちアクセス要求３１で指定されなかった記憶領域＃２を初期化する。記憶領域＃２は、好ましくは、ブロック２３内のうち指定された記憶領域＃１以外の全ての記憶領域である。
【００２１】
コンピュータ１０は、アクセス要求３１に対するアクセス結果（例えば、書き込みの成否）を、クライアント３０に返信する。また、コンピュータ１０は、アクセス要求３１に応じて行った記憶領域＃１へのデータの書き込みと記憶領域＃２の初期化とによって、ブロック２３の初期化が完了したと判断する。これによって、バックグラウンドで継続している初期化処理では、ブロック２３が初期化対象から除外される。例えば、コンピュータ１０は、ビットマップにおいて、ブロック２３を示すビットを初期化済に設定する。
【００２２】
また、コンピュータ１０は、クライアント３０から、初期化されていないブロック２４内の一部分である記憶領域＃１からのデータの読み出しを示すアクセス要求３２を受け付ける。コンピュータ１０は、アクセス要求３２を受け付けたとき、ブロック２４内のうちアクセス要求３２で指定された記憶領域＃１と指定されなかった記憶領域＃２とを初期化する。記憶領域＃１と記憶領域＃２の和は、好ましくは、ブロック２４の全体である。
【００２３】
コンピュータ１０は、初期化後の記憶領域＃１に相当するデータを、アクセス要求３２に対するアクセス結果としてクライアント３０に出力する。このとき、コンピュータ１０は、初期化後の記憶領域＃１からデータを読み出してアクセス結果として出力してもよいし、記憶領域＃１に書き込んだ初期値をメモリ１２に保存しておき当該初期値をアクセス結果として出力してもよい。また、コンピュータ１０は、アクセス要求３２に応じて行った記憶領域＃１，＃２の初期化によって、ブロック２４の初期化が完了したと判断する。これによって、その後はブロック２４が初期化対象から除外される。
【００２４】
なお、コンピュータ１０は、バックグラウンドで複数のブロックを順次初期化する第１のプロセスと、アクセス要求３１，３２に応じてデータアクセスを行う第２のプロセスとの間で、ブロック単位に排他制御を行ってもよい。例えば、コンピュータ１０は、各ブロックが現在操作されているか否かを示すビットマップを保持し、各ブロックが第１のプロセスと第２のプロセスの何れか一方のみによって初期化されるよう制御する。
【００２５】
例えば、ブロック２３，２４が第１のプロセスによって初期化中のときは、コンピュータ１０は、当該初期化が終了するまでアクセス要求３１，３２に応じたデータの書き込みまたは読み出しを保留する。一方、例えば、ブロック２３，２４に対して第２のプロセスによって初期化を伴うデータアクセスが行われていることを検知すると、コンピュータ１０は、第１のプロセスによる初期化の対象からブロック２３，２４を除外する。
【００２６】
第１の実施の形態のストレージシステムによれば、初期化されていないブロック２３，２４をクライアント３０に割り当てることが可能となり、クライアント３０が記憶領域の割り当てを待つ時間を減らすことができる。また、ブロック２３への書き込みを示すアクセス要求３１があったとき、指定された記憶領域＃１については初期化が省略されて直接データが書き込まれるため、記憶領域＃１を初期化してからデータを書き込む場合よりも応答遅延を減らすことができる。また、ブロック２３の指定されていない記憶領域＃２についても併せて初期化が行われるため、ブロック２３全体を初期化済として扱うことができ、バックグラウンドで行う初期化処理の制御が簡潔となる。
【００２７】
また、ブロック２４からの読み出しを示すアクセス要求３２があったとき、ブロック２４が初期化されるため、初期化せずに初期値を応答する場合よりも、ブロック２４が複数回アクセスされたときの負荷が軽減される。また、指定された記憶領域＃１に加えて指定されなかった記憶領域＃２についても初期化が行われるため、ブロック２４全体を初期化済として扱うことができ、バックグラウンドで行う初期化処理の制御が簡潔となる。このように、第１の実施の形態のストレージシステムでは、データアクセスと初期化処理の効率を両立させることができ、ストレージシステムの処理効率が改善する。
【００２８】
なお、上記の説明では、コンピュータ１０が、書き込み要求に応じてブロック２３を初期化された状態にする処理と、読み出し要求に応じてブロック２４を初期化された状態にする処理の両方を行うこととした。しかし、コンピュータ１０は、上記で説明した書き込み要求時の処理と読み出し要求時の処理の何れか一方のみを行うようにしてもよい。
【００２９】
［第２の実施の形態］
図２は、第２の実施の形態のストレージシステムを示す図である。第２の実施の形態のストレージシステムは、ＩＯ（Input/Output）サーバ１００，１００ａ、ストレージ装置２００，２００ａ、アクセスサーバ３００，３００ａおよび管理サーバ４００を有する。ＩＯサーバ１００，１００ａとストレージ装置２００，２００ａとは、ネットワーク４１を介して通信できる。ＩＯサーバ１００，１００ａとアクセスサーバ３００，３００ａおよび管理サーバ４００とは、ネットワーク４２を介して通信できる。
【００３０】
ＩＯサーバ１００，１００ａは、ストレージ装置２００，２００ａへのアクセスを行うサーバコンピュータである。ＩＯサーバ１００，１００ａは、アクセスサーバ３００，３００ａから論理アドレスを指定したアクセス要求を受け付けると、論理アドレスを物理アドレスに変換してストレージ装置２００，２００ａにアクセスする。アクセス要求には、書き込み要求と読み出し要求とが含まれる。また、ＩＯサーバ１００，１００ａは、管理サーバ４００からの指示に応じて、ストレージ装置２００，２００ａが備える記憶領域をバックグラウンドで初期化する。記憶領域の初期化は、アクセス要求に応じてストレージ装置２００，２００ａにアクセスする際に併せて行われることもある。
【００３１】
ストレージ装置２００，２００ａは、ハードディスクなどの不揮発性の記憶装置を備えており、記憶装置に記憶されるデータを管理するサーバコンピュータである。ストレージ装置２００，２００ａは、ＩＯサーバ１００からのアクセスに応じて、記憶装置へのデータの書き込みおよび記憶装置からのデータの読み出しを実行する。
【００３２】
アクセスサーバ３００，３００ａは、１またはそれ以上の仮想マシンが動作するサーバコンピュータである。各仮想マシンは、ユーザからの要求に応じて作成され、それぞれ他の仮想マシンとは独立にＯＳ（Operating System）やアプリケーションソフトウェアを実行する。アクセスサーバ３００，３００ａでは、仮想マシンを制御するための仮想化ソフトウェア（例えば、ハイパーバイザ）が動作している。仮想化ソフトウェアは、ユーザからの要求に応じて、仮想マシンにＣＰＵやＲＡＭなどのハードウェア資源を割り当てて、仮想マシンを起動する。また、仮想化ソフトウェアは、各仮想マシンが、管理サーバ４００によって割り当てられたストレージ装置２００，２００ａの記憶領域に、ＩＯサーバ１００，１００ａを介してアクセスできるようにする。
【００３３】
管理サーバ４００は、ストレージ装置２００，２００ａの記憶領域を管理する。管理サーバ４００は、ユーザまたは管理者からの要求に応じて（例えば、コマンドの入力に応じて）、ストレージ装置２００，２００ａの記憶領域の一部を、論理ディスクとして仮想マシンに割り当てる。そして、管理サーバ４００は、仮想マシンがアクセスに使用するＩＯサーバを指定し、仮想マシンから論理ディスクにアクセスできるようにする。ＩＯサーバの指定は、例えば、ＩＯサーバ１００，１００ａの負荷が偏らないように行う。
【００３４】
また、管理サーバ４００は、ユーザまたは管理者からの要求に応じて、仮想マシンに論理ディスクとして割り当てていた記憶領域を解放する。管理サーバ４００は、セキュリティのため、解放した記憶領域を、他の仮想マシンに再割り当てする前または再割り当てした後、初期化するようＩＯサーバ１００，１００ａに指示する（バックグラウンドの初期化処理）。ストレージ装置２００，２００ａの記憶領域は、後述するように、セグメントと呼ばれる固定サイズの領域単位で仮想マシンに割り当てられる。
【００３５】
なお、第２の実施の形態のストレージシステムは、例えば、データセンタに設置され、クラウドコンピューティングに利用される。図２の例では、ネットワーク４１とネットワーク４２を分離しているが、両者を同一のネットワークとしてもよい。また、第２の実施の形態では、ＩＯサーバ１００，１００ａとアクセスサーバ３００，３００ａを分離しているが、ＩＯサーバ１００，１００ａの機能をアクセスサーバ３００，３００ａの仮想化ソフトウェアに実装してもよい。ＩＯサーバ１００，１００ａは前述のコンピュータ１０の一例であり、ストレージ装置２００，２００ａは前述の記憶装置２１，２２の一例であり、アクセスサーバ３００，３００ａは前述のクライアント３０の一例である。
【００３６】
図３は、サーバが備えるハードウェア例を示すブロック図である。ＩＯサーバ１００は、ＣＰＵ１０１、ＲＡＭ１０２、ＨＤＤ（Hard Disk Drive）１０３、画像信号処理部１０４、入力信号処理部１０５、ディスクドライブ１０６および通信インタフェース１０７，１０８を有する。上記の各ユニットは、バスに接続されている。ＩＯサーバ１００ａ、ストレージ装置２００，２００ａ、アクセスサーバ３００，３００ａおよび管理サーバ４００も、ＩＯサーバ１００と同様のハードウェアを用いて実現できる。なお、ＣＰＵ１０１は前述のプロセッサ１１の一例であり、ＲＡＭ１０２は前述のメモリ１２の一例である。
【００３７】
ＣＰＵ１０１は、プログラムの命令を実行する演算器を含むプロセッサである。ＣＰＵ１０１は、ＨＤＤ１０３に記憶されているプログラムやデータの少なくとも一部を読み出し、ＲＡＭ１０２に配置してプログラムを実行する。なお、ＩＯサーバ１００は、複数個のプロセッサを用いて、複数のプロセスを並列に実行してもよい。
【００３８】
ＲＡＭ１０２は、ＣＰＵ１０１が実行するプログラムや情報処理に用いられるデータを一時的に記憶する揮発性メモリである。なお、ＩＯサーバ１００は、ＲＡＭ以外の種類のメモリを備えてもよく、複数個のメモリを備えていてもよい。
【００３９】
ＨＤＤ１０３は、ＯＳプログラムやアプリケーションプログラムなどのプログラムおよびデータを記憶する不揮発性の記憶装置である。ＨＤＤ１０３は、ＣＰＵ１０１からの命令に従って、内蔵の磁気ディスクに対してデータの読み書きを行う。なお、ＩＯサーバ１００は、ＨＤＤ以外の種類の不揮発性の記憶装置（例えば、ＳＳＤ（Solid State Drive）など）を備えてもよく、複数個の記憶装置を備えていてもよい。
【００４０】
画像信号処理部１０４は、ＣＰＵ１０１からの命令に従って、ＩＯサーバ１００に接続されたディスプレイ５１に画像を出力する。ディスプレイ５１としては、例えば、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイを用いることができる。
【００４１】
入力信号処理部１０５は、ＩＯサーバ１００に接続された入力デバイス５２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス５２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００４２】
ディスクドライブ１０６は、記録媒体５３に記録されたプログラムやデータを読み取る駆動装置である。記録媒体５３として、例えば、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤなどの磁気ディスク、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）などの光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）を使用できる。ディスクドライブ１０６は、例えば、ＣＰＵ１０１からの命令に従って、記録媒体５３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００４３】
通信インタフェース１０７は、ネットワーク４１を介してストレージ装置２００，２００ａと通信を行うことが可能なインタフェースである。通信インタフェース１０８は、ネットワーク４２を介してアクセスサーバ３００，３００ａや管理サーバ４００と通信を行うことが可能なインタフェースである。通信インタフェース１０７，１０８は、有線インタフェースでもよいし、無線インタフェースでもよい。
【００４４】
図４は、論理ディスクの構造例を示す図である。前述のように、ＩＯサーバ１００，１００ａや管理サーバ４００は、ストレージ装置２００，２００ａの記憶領域を、複数のセグメントに分割して管理する。各セグメントは、固定サイズ（例えば、２５６Ｍバイト）の記憶領域である。例えば、ストレージ装置２００の物理ディスク（例えば、ＨＤＤ）の記憶領域がセグメント＃１０，＃１１，＃１２を含み、ストレージ装置２００ａの物理ディスクの記憶領域がセグメント＃２０，＃２１，＃２２を含む。
【００４５】
管理サーバ４００は、プールしてある複数のセグメントの中から、ユーザが要求したサイズに相当する１またはそれ以上のセグメントを選択し、論理ディスク（ＶＤＩＳＫ）としてまとめて仮想マシンに割り当てる。例えば、管理サーバ４００は、ストレージ装置２００のセグメント＃１０およびストレージ装置２００ａのセグメント＃２１，＃２２の３個のセグメントをまとめて、１つの論理ディスクを作成する。仮想マシンからは、割り当てられた論理ディスクが物理ディスクであるように見え、また、論理ディスクが複数のセグメントを含む場合には、これら複数のセグメントが連続した記憶領域であるように見える。仮想マシンは、論理ディスク上の記憶領域を、論理アドレスを用いて指定する。
【００４６】
管理サーバ４００は、記憶領域の初期化状況を、セグメント単位で管理する。一方で、ＩＯサーバ１００，１００ａは、記憶領域の初期化状況を、セグメント単位に加えて、セグメントより細かいチャンク単位でも管理する。各セグメントは、固定サイズ（例えば、１Ｍバイト）のチャンクを複数（例えば、２５６個）含む。ＩＯサーバ１００，１００ａは、あるセグメントをバックグラウンドで初期化するよう管理サーバ４００から指示されたとき、初期化の進行をチャンク単位で管理し、仮想マシンからのアクセス要求の処理とバックグラウンドの初期化処理との間で、チャンク単位で排他制御を行う。なお、チャンクは、第１の実施の形態のブロック２３，２４の一例である。
【００４７】
図５は、セグメントの状態遷移を示す図である。ストレージ装置２００，２００ａ上の各セグメントは、「ＦＲＥＥ」，「ＶＡＬＩＤ」，「ＴＺＥＲＯ」，「ＴＺＥＲＯ＋」の４つの状態の何れかを取る。セグメントの状態は、管理サーバ４００で管理される。
【００４８】
「ＦＲＥＥ」は、セグメント内の全てのチャンクが初期化済で、何れの論理ディスクにも使用されていないことを示す。「ＶＡＬＩＤ」は、セグメント内の全てのチャンクが初期化済で、何れかの論理ディスクに使用されていることを示す。「ＴＺＥＲＯ」は、セグメント内の少なくとも１つのチャンクの未初期化で、何れの論理ディスクにも使用されていないことを示す。「ＴＺＥＲＯ＋」は、セグメント内の少なくとも１つのチャンクの未初期化で、何れかの論理ディスクに使用されていることを示す。
【００４９】
ＦＲＥＥのセグメントを用いて論理ディスクが作成されると、当該セグメントの状態はＦＲＥＥからＶＡＬＩＤに遷移する。ＶＡＬＩＤのセグメントを含む論理ディスクが削除されると、当該セグメントの状態はＶＡＬＩＤからＴＺＥＲＯに遷移する。ＴＺＥＲＯのセグメント内の全てのチャンクが初期化されると、当該セグメントの状態がＴＺＥＲＯからＦＲＥＥに遷移する。このように、管理サーバ４００が新たに論理ディスクを作成するときは、原則として、初期化が完了しているＦＲＥＥのセグメントが選択される。
【００５０】
ただし、論理ディスクの作成と削除が頻繁に行われて、バックグラウンドの初期化処理が間に合わずにＦＲＥＥのセグメントが不足すると、ＴＺＥＲＯのセグメントを使用して論理ディスクが作成されることもある。初期化が完了していないＴＺＥＲＯのセグメントを用いて論理ディスクが作成されると、当該セグメントの状態はＴＺＥＲＯからＴＺＥＲＯ＋に遷移する。ＴＺＥＲＯ＋のセグメント内の全てのチャンクが初期化されると、当該セグメントの状態がＴＺＥＲＯ＋からＶＡＬＩＤに遷移する。ＴＺＥＲＯ＋のセグメント内の各チャンクは、バックグラウンドの初期化処理によって初期化されることもあるし、仮想マシンからのアクセス要求を契機として初期化されることもある。
【００５１】
図６は、サーバで動作するソフトウェア例を示すブロック図である。第２の実施の形態の以下の説明では、アクセスサーバ３００で動作する仮想マシンが、ＩＯサーバ１００を介してストレージ装置２００，２００ａにアクセスする場合を考える。
【００５２】
ＩＯサーバ１００は、テーブル記憶部１１０、ＩＯ変換部１２０および初期化実行部１３０を有する。テーブル記憶部１１０は、例えば、ＲＡＭ１０２上の記憶領域として実現される。ＩＯ変換部１２０および初期化実行部１３０は、例えば、プログラムのモジュールとして実現される。ＩＯサーバ１００ａも、同様のブロック構成により実現できる。
【００５３】
テーブル記憶部１１０は、アクセスに使用するＩＯサーバとしてＩＯサーバ１００が指定された論理ディスクについて、セグメント毎の初期化状況を示すセグメント状態テーブルを記憶する。また、テーブル記憶部１１０は、初期化が完了していないセグメントについて、チャンク毎の初期化状況を示す初期化ビットマップと、チャンク毎の排他フラグを示す排他ビットマップと、を含むチャンク管理ビットマップを記憶する。
【００５４】
ＩＯ変換部１２０は、アクセスサーバ３００からアクセス要求を受け付け、アクセス要求で指定された論理アドレスを物理アドレスに変換し、ストレージ装置２００，２００ａにデータの書き込みまたは読み出しのコマンドを送信する。このとき、ＩＯ変換部１２０は、テーブル記憶部１１０に記憶されたセグメント状態テーブルやチャンク管理ビットマップを参照して、アクセスする記憶領域が未初期化のチャンクを含むか判断する。アクセスする記憶領域が未初期化のチャンクを含む場合、ＩＯ変換部１２０は、アクセス要求の処理に伴ってアクセス先のチャンクが初期化済になるよう制御する。
【００５５】
初期化実行部１３０は、管理サーバ４００から初期化要求を受け付け、初期化要求で指定されたセグメントについて、チャンク単位でバックグラウンドの初期化処理を進める。チャンクの初期化では、初期化実行部１３０は、初期値である所定のビット列をチャンク全体に書き込むコマンドを、ストレージ装置２００，２００ａに送信する。このとき、初期化実行部１３０は、テーブル記憶部１１０に記憶されたセグメント状態テーブルやチャンク管理ビットマップを参照して、未初期化でありＩＯ変換部１２０でアクセス中ではないチャンクを検索し、次に初期化するチャンクとして選択する。
【００５６】
ストレージ装置２００の物理ディスク（例えば、ＨＤＤ）上には、データ領域２１０が形成される。ストレージ装置２００ａの物理ディスク上には、データ領域２１０ａおよび管理領域２２０が形成される。データ領域２１０，２１０ａはそれぞれ複数のセグメントを含み、各セグメントは複数のチャンクを含む。ＩＯサーバ１００から物理アドレスを指定したアクセスがあると、データ領域２１０，２１０ａに対してデータの書き込みまたは読み出しが行われる。管理領域２２０には、ＩＯサーバ１００が障害によりテーブル記憶部１１０に記憶された情報を失う場合に備えて、少なくともテーブル記憶部１１０に記憶された初期化ビットマップが、ＩＯサーバ１００によってバックアップされる。
【００５７】
アクセスサーバ３００は、アクセス部３１０を有する。アクセス部３１０は、例えば、プログラムのモジュールとして実現できる。アクセス部３１０は、仮想マシンがアクセス要求を発行すると、当該仮想マシンに割り当てられた論理ディスクを担当するＩＯサーバ（ここでは、ＩＯサーバ１００）に、アクセス要求を転送する。論理ディスクとＩＯサーバとの対応関係は、論理ディスクを仮想マシンから認識可能にする（論理ディスクを仮想マシンに接続する）ときに、管理サーバ４００から通知される。
【００５８】
管理サーバ４００は、テーブル記憶部４１０、ＶＤＩＳＫ管理部４２０および初期化制御部４３０を有する。テーブル記憶部４１０は、例えば、ＲＡＭまたはＨＤＤ上の記憶領域として実現できる。ＶＤＩＳＫ管理部４２０および初期化制御部４３０は、例えば、プログラムのモジュールとして実現できる。
【００５９】
テーブル記憶部４１０は、セグメントの状態と論理ディスクとしてのセグメントの使用状況とを示すセグメントテーブルを記憶する。また、テーブル記憶部１１０は、論理ディスクとＩＯサーバとの対応関係を示すＶＤＩＳＫ管理テーブルを記憶する。
【００６０】
ＶＤＩＳＫ管理部４２０は、ユーザまたは管理者によって管理サーバ４００に入力されたコマンドに応じて、テーブル記憶部４１０に記憶されたセグメントテーブルを参照して論理ディスクを作成する。また、ＶＤＩＳＫ管理部４２０は、コマンドに応じて、作成した論理ディスクを仮想マシンに接続する。このとき、ＶＤＩＳＫ管理部４２０は、当該論理ディスクを担当するＩＯサーバ（ここでは、ＩＯサーバ１００）を選択し、選択したＩＯサーバとアクセスサーバ３００とにその旨を通知する。また、ＶＤＩＳＫ管理部４２０は、コマンドに応じて、論理ディスクを削除してセグメントの割り当てを解放する。
【００６１】
初期化制御部４３０は、バックグラウンドの初期化処理を制御する。初期化制御部４３０は、テーブル記憶部４１０に記憶されたセグメントテーブルを監視して、未初期化であるＴＺＥＲＯまたはＴＺＥＲＯ＋のセグメントを選択し、ＩＯサーバ１００，１００ａに初期化要求を送信する。このとき、初期化制御部４３０は、未割り当てのＴＺＥＲＯのセグメントよりも割り当て済のＴＺＥＲＯ＋を優先的に選択する。ＴＺＥＲＯのセグメントの初期化は、任意のＩＯサーバに要求してもよい。一方、ＴＺＥＲＯ＋のセグメントの初期化は、当該セグメントの属する論理ディスクを担当するＩＯサーバに要求する。
【００６２】
図７は、セグメントテーブルの例を示す図である。図７に示すセグメントテーブル４１１は、管理サーバ４００のテーブル記憶部４１０に記憶されている。セグメントテーブル４１１は、セグメントＩＤ、ストレージ、状態およびＶＤＩＳＫの項目を含む。
【００６３】
セグメントＩＤは、セグメントを識別するための識別子である。ストレージの項目は、セグメントの属する物理ディスクを示し、物理ディスクの識別子が設定される。状態の項目は、セグメントの状態を示し、ＦＲＥＥ，ＶＡＬＩＤ，ＴＺＥＲＯ，ＴＺＥＲＯ＋の何れかが設定される。ＶＤＩＳＫの項目は、セグメントの属する論理ディスクを示し、論理ディスクを識別するための識別子が設定される。論理ディスクの識別子は、ＦＲＥＥおよびＴＺＥＲＯのセグメントには設定されない。ＶＤＩＳＫ管理部４２０により状態の項目とＶＤＩＳＫの項目が更新され、初期化制御部４３０により状態の項目が更新される。
【００６４】
図８は、ＶＤＩＳＫ管理テーブルの例を示す図である。図８に示すＶＤＩＳＫ管理テーブル４１２は、管理サーバ４００のテーブル記憶部４１０に記憶されている。ＶＤＩＳＫ管理テーブル４１２は、ＶＤＩＳＫ−ＩＤおよびＩＯサーバの項目を含む。
【００６５】
ＶＤＩＳＫ−ＩＤは、論理ディスクの識別子である。ＩＯサーバの項目は、論理ディスクを担当するＩＯサーバを示し、ＩＯサーバを識別するための識別子（例えば、ＩＯサーバのホスト名やＩＰ（Internet Protocol）アドレスなど）が設定される。論理ディスクが仮想マシンに接続されるときや論理ディスクが削除されるときに、ＶＤＩＳＫ管理部４２０により、ＶＤＩＳＫ−ＩＤの項目とＩＯサーバの項目が更新される。
【００６６】
図９は、セグメント状態テーブルの例を示す図である。図９に示すセグメント状態テーブル１１１は、ＩＯサーバ１００のテーブル記憶部１１０に記憶されている。１つのセグメント状態テーブルは、１つの論理ディスクに対応する。セグメント状態テーブル１１１は、ある論理ディスクが仮想マシンに接続されたときに、管理サーバ４００からの指示でＩＯサーバ１００のテーブル記憶部１１０に作成される。セグメント状態テーブル１１１は、インデックスおよび初期化フラグの項目を含む。
【００６７】
インデックスは、論理ディスク内においてセグメントを識別するための識別子である。例えば、論理ディスク内のセグメントには、論理アドレスが小さい順に０，１，２，…と非負整数のインデックスが付与される。初期化フラグの項目は、セグメントの初期化が完了しているか否かを示す。例えば、初期化フラグ＝０は初期化が完了していないことを示し、初期化フラグ＝１は初期化が完了していることを示す。初期化が完了したときに、初期化実行部１３０により、初期化フラグの項目が更新される。
【００６８】
なお、図９に示したセグメント状態テーブル１１１は、初期化済のセグメントと未初期化のセグメントの両方を表現しているが、セグメント状態テーブルは、初期化が完了していないセグメントのみのリストまたは完了したセグメントのみのリストであってもよい。
【００６９】
図１０は、チャンク管理ビットマップの例を示す図である。図１０に示すチャンク管理ビットマップ１１２は、ＩＯサーバ１００のテーブル記憶部１１０に記憶されている。１つのチャンク管理ビットマップは、初期化が完了していないセグメント１つに対応する。チャンク管理ビットマップ１１２は、論理ディスクが仮想マシンに接続されたとき、管理サーバ４００からの指示でＩＯサーバ１００のテーブル記憶部１１０に作成される。チャンク管理ビットマップ１１２は、排他ビットマップと初期化ビットマップとを含む。
【００７０】
排他ビットマップは、１つのチャンクにつき１つの排他ビットを含む。複数の排他ビットは、セグメント内でチャンクを識別するための識別子であるチャンクＩＤの昇順に並んでいる。例えば、１つのセグメントが２５６個のチャンクを含むとき、排他ビットマップは２５６ビットで表現される。排他ビット＝０は操作中でないことを示し、排他ビット＝１は操作中であることを示す。アクセス要求に応じてアクセスするときに、ＩＯ変換部１２０により排他ビット＝１が設定される。また、アクセス要求によらずバックグラウンドで初期化するとき、初期化実行部１３０により排他ビット＝１が設定される。
【００７１】
初期化ビットマップは、１つのチャンクにつき１つの初期化ビットを含む。複数の初期化ビットは、チャンクＩＤの昇順に並んでいる。例えば、１つのセグメントが２５６個のチャンクを含むとき、初期化ビットマップは２５６ビットで表現される。初期化ビット＝０は未初期化を示し、初期化ビット＝１は初期化済を示す。初期化されたときに、ＩＯ変換部１２０または初期化実行部１３０により、初期化ビットが更新される。
【００７２】
なお、初期化ビットマップは、ストレージ装置２００ａの管理領域２２０にバックアップされる。また、あるセグメント内の全てのチャンクが初期化されて（例えば、全ての初期化ビットが１になって）当該セグメントの初期化が完了したときは、そのセグメントに対応する排他ビットマップおよび初期化ビットマップは消去してもよい。また、チャンク管理ビットマップ１１２は、テーブル形式で作成されてもよい。
【００７３】
図１１は、ＶＤＩＳＫ作成の手順例を示すフローチャートである。図１１の処理は、管理サーバ４００がＶＤＩＳＫ作成のコマンドを受け付けたときに実行される。
（ステップＳ１１）ＶＤＩＳＫ管理部４２０は、仮想マシンのユーザまたはストレージシステムの管理者が入力したＶＤＩＳＫ作成のコマンドを受け付ける。ＶＤＩＳＫ作成のコマンドでは、ユーザが割り当てを希望するセグメントの数が指定される。ＶＤＩＳＫ管理部４２０は、新たに作成する論理ディスクに識別子（ＶＤＩＳＫ−ＩＤ）を付与する。
【００７４】
（ステップＳ１２）ＶＤＩＳＫ管理部４２０は、テーブル記憶部４１０に記憶されたセグメントテーブル４１１を検索し、ＦＲＥＥ（未割り当てかつ初期化済）のセグメントがあるか判断する。ＦＲＥＥのセグメントがある場合は処理をステップＳ１３に進め、ＦＲＥＥのセグメントがない場合は処理をステップＳ１４に進める。
【００７５】
（ステップＳ１３）ＶＤＩＳＫ管理部４２０は、仮想マシンのためにＦＲＥＥのセグメントを１つ確保し、セグメントテーブル４１１に登録された当該セグメントの状態をＦＲＥＥからＶＡＬＩＤに更新する。また、ＶＤＩＳＫ管理部４２０は、セグメントテーブル４１１に論理ディスクの識別子を登録する。そして、処理をステップＳ１６に進める。
【００７６】
（ステップＳ１４）ＶＤＩＳＫ管理部４２０は、テーブル記憶部４１０に記憶されたセグメントテーブル４１１を検索し、ＴＺＥＲＯ（未割り当てかつ未初期化）のセグメントがあるか判断する。ＴＺＥＲＯのセグメントがある場合は処理をステップＳ１５に進め、ＴＺＥＲＯのセグメントがない場合は処理をステップＳ１７に進める。
【００７７】
（ステップＳ１５）ＶＤＩＳＫ管理部４２０は、仮想マシンのためにＴＺＥＲＯのセグメントを１つ確保し、セグメントテーブル４１１に登録された当該セグメントの状態をＴＺＥＲＯからＴＺＥＲＯ＋に更新する。また、ＶＤＩＳＫ管理部４２０は、セグメントテーブル４１１に論理ディスクの識別子を登録する。
【００７８】
（ステップＳ１６）ＶＤＩＳＫ管理部４２０は、ＶＤＩＳＫ作成のコマンドで指定された数のセグメントを確保したか判断する。必要数のセグメントを確保した場合は処理を終了し、必要数のセグメントを確保していない場合は処理をステップＳ１２に進める。
【００７９】
（ステップＳ１７）ＶＤＩＳＫ管理部４２０は、ステップＳ１３，Ｓ１５で確保したセグメントの状態を元に戻すことで、これまで行った処理をロールバックする。このとき、ＶＤＩＳＫ管理部４２０は、セグメントテーブル４１１に登録された状態を更新し、ステップＳ１１で定義した論理ディスクの識別子をセグメントテーブル４１１から削除する。なお、ＶＤＩＳＫ管理部４２０は、ロールバックのため、例えば、セグメントテーブル４１１の状態の更新履歴を論理ディスクに属するセグメントが確定するまで保持する。
【００８０】
図１２は、ＶＤＩＳＫ接続の手順例を示すフローチャートである。図１２の処理は、管理サーバ４００がＶＤＩＳＫ接続のコマンドを受け付けたときに実行される。
（ステップＳ２１）ＶＤＩＳＫ管理部４２０は、仮想マシンのユーザまたはストレージシステムの管理者が入力したＶＤＩＳＫ接続のコマンドを受け付ける。ＶＤＩＳＫ接続のコマンドでは、作成済の論理ディスクの識別子が指定される。
【００８１】
（ステップＳ２２）ＶＤＩＳＫ管理部４２０は、ＩＯサーバ１００，１００ａから、指定された論理ディスクを担当するＩＯサーバを選択する。ＩＯサーバの選択では、好ましくは、ＩＯサーバ１００，１００ａの負荷が偏らないようにする。例えば、ラウンドロビン方式で前回と異なるＩＯサーバを選択する、ＶＤＩＳＫ管理テーブル４１２を参照して現在担当している論理ディスクの数が最も少ないＩＯサーバを選択する、ＩＯサーバ１００，１００ａに現在の負荷を問い合わせて選択するなどの方法が考えられる。なお、以下の説明では、ここでＩＯサーバ１００が選択されたものとする。
【００８２】
（ステップＳ２３）ＶＤＩＳＫ管理部４２０は、ステップＳ２２で選択したＩＯサーバ１００のＩＯ変換部１２０に、論理アドレスと物理アドレスの対応関係を設定する。論理ディスクの先頭には所定の論理アドレス（例えば、０番）が付与され、論理ディスク内の先頭のセグメントから末尾のセグメントに向かって論理アドレスが増加する。１つの論理ディスク内では、論理アドレスと物理アドレスが１対１に対応する。論理アドレスと物理アドレスの対応関係は、例えば、セグメントの順序を指定することで特定できる。
【００８３】
（ステップＳ２４）ＶＤＩＳＫ管理部４２０は、論理ディスクに属する各セグメントの初期化が完了しているか否かをＩＯサーバ１００に通知する。ＩＯサーバ１００は、通知に基づいてセグメント状態テーブル１１１を生成し、テーブル記憶部１１０に格納する。また、ＩＯサーバ１００は、初期化が完了していないセグメント毎にチャンク管理ビットマップ１１２を生成し、テーブル記憶部１１０に格納する。このとき、排他ビットマップの全ビットと初期化ビットマップの全ビットは、０に設定されている。
【００８４】
（ステップＳ２５）ＩＯサーバ１００は、ステップＳ２４で生成したチャンク管理ビットマップ１１２に含まれる初期化ビットマップを、ストレージ装置２００ａの管理領域２２０にコピーすることでバックアップする。なお、ＩＯサーバ１００は、初期化ビットマップに加えてセグメント状態テーブル１１１をバックアップしてもよく、また、チャンク管理ビットマップ１１２全体をバックアップしてもよい。ＩＯサーバ１００は、ステップＳ２３〜Ｓ２５の処理が成功したか否かを管理サーバ４００に報告する。
【００８５】
（ステップＳ２６）ＶＤＩＳＫ管理部４２０は、ステップＳ２２で選択したＩＯサーバ１００の設定が成功したかを、ＩＯサーバ１００からの応答によって判断する。設定が成功した場合は、ＶＤＩＳＫ管理部４２０は、テーブル記憶部４１０に記憶されたＶＤＩＳＫ管理テーブル４１２に論理ディスクとＩＯサーバ１００との対応を登録し、ＩＯサーバ１００を割り当てたことをアクセスサーバ３００に通知する。そして、処理を終了する。設定が失敗した場合は、処理をステップＳ２７に進める。
【００８６】
（ステップＳ２７）ＶＤＩＳＫ管理部４２０は、ステップＳ２３〜Ｓ２５の処理をロールバックする。このとき、ＶＤＩＳＫ管理部４２０は、例えば、論理アドレスと物理アドレスの対応関係をＩＯ変換部１２０から抹消し、セグメント状態テーブル１１１およびチャンク管理ビットマップ１１２の削除をＩＯサーバ１００に指示する。
【００８７】
なお、作成された論理ディスクは、仮想マシンからの切断および再接続を繰り返すこともできる。これにより、仮想マシンから論理ディスクを認識できる状態と認識できない状態とを切り替えることができる。また、図１１，１２の手順例では、ＩＯサーバの割り当てとセグメント状態テーブル１１１およびチャンク管理ビットマップ１１２の作成を、論理ディスクの接続時に行っているが、論理ディスクの作成時に行うようにしてもよい。
【００８８】
図１３は、アクセス処理の手順例を示すフローチャートである。図１３の処理は、ＩＯサーバ１００がアクセスサーバ３００からアクセス要求を受け付けたときに実行される。ＩＯサーバ１００ａでも、ＩＯサーバ１００と同様の処理が実行され得る。なお、ここでは、ストレージ装置２００上のセグメントにアクセスする場合を考える。
【００８９】
（ステップＳ３１）ＩＯ変換部１２０は、仮想マシンが発行したアクセス要求をアクセスサーバ３００から受信する。アクセス要求には、データの書き込みを示す書き込み要求とデータの読み出しを示す読み出し要求とがある。アクセス要求では、アクセスする記憶領域を、例えば、先頭の論理アドレスと記憶領域の長さとを用いて指定する。
【００９０】
（ステップＳ３２）ＩＯ変換部１２０は、アクセス要求で指定された記憶領域の属するセグメントを特定し、テーブル記憶部１１０に記憶されたセグメント状態テーブル１１１を参照し、セグメントの状態がＴＺＥＲＯ＋であるか判断する。ＴＺＥＲＯ＋である場合は、処理をステップＳ３３に進める。ＴＺＥＲＯ＋でない場合（ＶＡＬＩＤである場合）は、ＩＯ変換部１２０は、論理アドレスを物理アドレスに変換し、アクセス要求に従った通常のコマンドをストレージ装置２００に送信して、処理をステップＳ４１に進める。
【００９１】
（ステップＳ３３）ＩＯ変換部１２０は、アクセス要求で指定された記憶領域の少なくとも一部を含む１またはそれ以上のチャンクを特定する。そして、ＩＯ変換部１２０は、テーブル記憶部１１０に記憶されたチャンク管理ビットマップ１１２を参照し、先頭のチャンクから末尾のチャンクまでの全ての排他ビットが０であるか（操作中のチャンクがないか）判断する。操作中のチャンクがない場合は処理をステップＳ３５に進め、操作中のチャンクが少なくとも１つある場合は処理をステップＳ３４に進める。
【００９２】
（ステップＳ３４）ＩＯ変換部１２０は、ステップＳ３１で受け付けたアクセス要求をデータアクセス用のキューに入れて、アクセスする全てのチャンクの排他ビットが０になる（アクセス禁止が解除される）のを待つ。そして、処理をステップＳ３３に進める。なお、データアクセス用のキューは、例えば、ＲＡＭ１０２上に作成されている。
【００９３】
（ステップＳ３５）ＩＯ変換部１２０は、チャンク管理ビットマップ１１２において、アクセスする先頭から末尾までの各チャンクの排他ビットを１に設定する。
（ステップＳ３６）ＩＯ変換部１２０は、ステップＳ３１で受け付けたアクセス要求が書き込み要求であるかを判断する。書き込み要求である場合は処理をステップＳ３７に進め、書き込み要求でない（読み出し要求である）場合は処理をステップＳ３８に進める。
【００９４】
（ステップＳ３７）ＩＯ変換部１２０は、論理アドレスを物理アドレスに変換して、アクセス要求で指定された記憶領域にデータを書き込むためのライトコマンドをストレージ装置２００に送信する。このとき、ＩＯ変換部１２０は、アクセスするチャンクの全体が初期化済になるように、データを書き込む記憶領域以外の領域を併せて初期化することがある。アクセス要求からライトコマンドへの変換については、後でより詳細に説明する。
【００９５】
（ステップＳ３８）ＩＯ変換部１２０は、論理アドレスを物理アドレスに変換して、アクセス要求で指定された記憶領域からデータを読み出すためのリードコマンドをストレージ装置２００に送信する。このとき、ＩＯ変換部１２０は、アクセスするチャンクの全体が初期化済になるように、そのチャンクの記憶領域を併せて初期化する。アクセス要求からリードコマンドへの変換については、後でより詳細に説明する。
【００９６】
（ステップＳ３９）ＩＯ変換部１２０は、チャンク管理ビットマップ１１２において、アクセスが完了した先頭から末尾までの各チャンクの排他ビットを０に戻す。
（ステップＳ４０）ＩＯ変換部１２０は、データアクセス用のキューに対して、排他ビットが１から０になった（アクセス禁止が解除された）チャンクがあることを通知する。これにより、キューに格納されている処理待ちのアクセス要求が処理され得る。
【００９７】
（ステップＳ４１）ＩＯ変換部１２０は、ステップＳ３７の書き込み処理またはステップＳ３８の読み出し処理が成功したか判断する。成功した場合、ＩＯ変換部１２０は、書き込みが成功した旨または読み出したデータを、アクセス要求を発行したアクセスサーバ３００に返信し、処理を終了する。失敗した場合、処理をステップＳ４２に進める。
【００９８】
（ステップＳ４２）ＩＯ変換部１２０は、書き込みまたは読み出しが失敗した旨を、アクセス要求を発行したアクセスサーバ３００に返信し、処理を終了する。このとき、ＩＯ変換部１２０は、アクセスが失敗した原因をアクセスサーバ３００に通知してもよい。
【００９９】
図１４は、ライト変換の手順例を示すフローチャートである。図１４に示す処理は、図１３に示したフローチャートのステップＳ３７において実行される。
（ステップＳ３７１）ＩＯ変換部１２０は、テーブル記憶部１１０に記憶されたチャンク管理ビットマップ１１２を参照し、先頭のチャンクの初期化ビットが０であるか（先頭のチャンクが未初期化であるか）判断する。未初期化の場合は処理をステップＳ３７２に進め、初期化済の場合は処理をステップＳ３７４に進める。
【０１００】
（ステップＳ３７２）ＩＯ変換部１２０は、先頭のチャンクの記憶領域のうち、データを書き込む領域として指定されていない記憶領域（非ライト領域）を算出し、算出した記憶領域を初期化する。例えば、ＩＯ変換部１２０は、算出した記憶領域に所定のビット列（例えば、オール０）を書き込むためのコマンドを、ストレージ装置２００に送信する。このとき、データを書き込む記憶領域（ライト領域）については、初期化しなくてよい。
【０１０１】
（ステップＳ３７３）ＩＯ変換部１２０は、ステップＳ３７２の初期化が成功したか判断する。成功した場合（例えば、ストレージ装置２００から成功応答を受信した場合）は処理をステップＳ３７４に進め、失敗した場合（例えば、ストレージ装置２００からエラー応答を受信した場合）はアクセス要求からライトコマンドへの変換を中止する。
【０１０２】
（ステップＳ３７４）ＩＯ変換部１２０は、テーブル記憶部１１０に記憶されたチャンク管理ビットマップ１１２を参照し、末尾のチャンクの初期化ビットが０であるか（末尾のチャンクが未初期化であるか）判断する。未初期化の場合は処理をステップＳ３７５に進め、初期化済の場合は処理をステップＳ３７７に進める。
【０１０３】
（ステップＳ３７５）ＩＯ変換部１２０は、末尾のチャンクの記憶領域のうち、データを書き込む領域として指定されていない記憶領域（非ライト領域）を算出し、算出した記憶領域を初期化する。例えば、ＩＯ変換部１２０は、算出した記憶領域に所定のビット列（例えば、オール０）を書き込むためのコマンドを、ストレージ装置２００に送信する。このとき、データを書き込む記憶領域（ライト領域）については、初期化しなくてよい。
【０１０４】
（ステップＳ３７６）ＩＯ変換部１２０は、ステップＳ３７５の初期化が成功したか判断する。成功した場合（例えば、ストレージ装置２００から成功応答を受信した場合）は処理をステップＳ３７７に進め、失敗した場合（例えば、ストレージ装置２００からエラー応答を受信した場合）はアクセス要求からライトコマンドへの変換を中止する。
【０１０５】
（ステップＳ３７７）ＩＯ変換部１２０は、論理アドレスを物理アドレスに変換して、アクセス要求に従ったライトコマンドをストレージ装置２００に送信する。なお、上記のステップＳ３７１の前に論理アドレスから物理アドレスへの変換を行い、物理アドレスに基づいてチャンクの特定および初期化する記憶領域の算出を行ってもよい。
【０１０６】
（ステップＳ３７８）ＩＯ変換部１２０は、ステップＳ３７７のライトコマンドに対して、ストレージ装置２００から書き込み成功の応答を受信したか判断する。書き込み成功の場合は処理をステップＳ３７９に進め、書き込み失敗の場合は処理を終了する。
【０１０７】
（ステップＳ３７９）ＩＯ変換部１２０は、チャンク管理ビットマップ１１２において、アクセスが完了した先頭から末尾までの各チャンクの初期化ビットを１に設定する。また、ＩＯ変換部１２０は、ストレージ装置２００ａの管理領域２２０にバックアップしていた初期化ビットマップを更新する。これにより、当該チャンクはバックグラウンドの初期化処理によって初期化しなくて済む。なお、上記のステップＳ３７１〜Ｓ３７３の処理とステップＳ３７４〜Ｓ３７６の処理とステップＳ３７７，Ｓ３７８の処理は、任意の順序で実行してもよいし並列に実行することも可能である。
【０１０８】
図１５は、ストレージ装置に対するライト処理の例を示す図である。ここでは、データを書き込むライト領域が４つのチャンク（チャンク＃１〜＃４）に跨がっており、チャンク＃１，＃２，＃４が未初期化で、チャンク＃３が初期化済であるとする。このとき、アクセスする先頭のチャンク＃１の中のデータを書き込まない非ライト領域が初期化され、アクセスする末尾のチャンク＃４の中のデータを書き込まない非ライト領域が初期化される。データを書き込むライト領域については、初期化せず直接データを書き込めばよい。ライトコマンドでは、例えば、アクセス要求で指定された先頭の論理アドレスに対応する物理アドレスと、アクセス要求で指定された長さとが、ストレージ装置２００に通知される。以上により、未初期化であったチャンク＃１，＃２，＃４が初期化済となる。
【０１０９】
ここで、先頭のチャンクの非ライト領域は、例えば、以下の手順によって算出できる。セグメントの先頭アドレス（オフセット）をｓ、チャンク１つの長さをｃ、ライト領域の先頭アドレスをｐ、ライト領域の長さをｌｅｎとする。まず、先頭のチャンクの先頭アドレスｐ１を、ｐ１＝ｓ＋（ｐ−ｓ）／ｃ＊ｃによって算出する。除算は小数点以下を切り捨てるものとする。そして、先頭側の非ライト領域の長さｌｅｎ１を、ｌｅｎ１＝ｐ−ｐ１によって算出する。先頭側の非ライト領域の初期化では、例えば、算出したｐ１，ｌｅｎ１を含むコマンドが、ＩＯサーバ１００からストレージ装置２００に送信される。
【０１１０】
また、末尾のチャンクの非ライト領域は、例えば、以下の手順によって算出できる。まず、末尾側の非ライト領域の先頭アドレス（ライト領域の末尾の次を示すアドレス）ｐ２を、ｐ２＝ｐ＋ｌｅｎによって算出する。そして、末尾側の非ライト領域の長さｌｅｎ２を、ｌｅｎ２＝ｓ＋｛ｐ２＋（ｃ−１）−ｓ｝／ｃ＊ｃ−ｐ２によって算出する。末尾側の非ライト領域の初期化では、例えば、算出したｐ２，ｌｅｎ２を含むコマンドが、ＩＯサーバ１００からストレージ装置２００に送信される。
【０１１１】
図１６は、リード変換の手順例を示すフローチャートである。図１６に示す処理は、図１３に示したフローチャートのステップＳ３８において実行される。
（ステップＳ３８１）ＩＯ変換部１２０は、テーブル記憶部１１０に記憶されたチャンク管理ビットマップ１１２を参照して、アクセスするチャンクの中から初期化ビットが０であるチャンク（未初期化のチャンク）を検索する。
【０１１２】
（ステップＳ３８２）ＩＯ変換部１２０は、ステップＳ３８１で検索した各チャンクの全体を初期化する。例えば、ＩＯ変換部１２０は、検索した各チャンクに所定のビット列（例えば、オール０）を書き込むためのコマンドを、ストレージ装置２００に送信する。当該コマンドでは、例えば、各チャンクの先頭アドレスとチャンクサイズが指定される。
【０１１３】
（ステップＳ３８３）ＩＯ変換部１２０は、チャンク管理ビットマップ１１２において、初期化した各チャンクの初期化ビットを１に設定し、また、ストレージ装置２００ａの管理領域２２０にバックアップしていた初期化ビットマップを更新する。これにより、当該チャンクはバックグラウンドの初期化処理によって初期化しなくて済む。
【０１１４】
（ステップＳ３８４）ＩＯ変換部１２０は、論理アドレスを物理アドレスに変換して、アクセス要求に従ったリードコマンドをストレージ装置２００に送信する。なお、上記のステップＳ３８１の前に論理アドレスから物理アドレスへの変換を行い、物理アドレスに基づいてチャンクの特定および初期化する記憶領域の算出を行ってもよい。
【０１１５】
（ステップＳ３８５）ＩＯ変換部１２０は、ステップＳ３８４のリードコマンドに対して、読み出されたデータをストレージ装置２００から正常に受信したか判断する。読み出し成功の場合は処理をステップＳ３８６に進め、読み出し失敗の場合は処理を終了する。
【０１１６】
（ステップＳ３８６）ＩＯ変換部１２０は、ステップＳ３８２の初期化が全て成功したか判断する。全てのチャンクについて初期化が成功した場合は処理を終了し、少なくとも１つのチャンクについて初期化が失敗した場合は処理をステップＳ３８７に進める。
【０１１７】
（ステップＳ３８７）ＩＯ変換部１２０は、初期化が失敗したチャンクから読み出されたデータを破棄し、初期値としての所定のビット列（例えば、オール０）に置き換える。データの置き換えは、例えば、アクセスサーバ３００に返信するためのデータを格納するＲＡＭ１０２上の領域を初期値で上書きすることによって実現される。これにより、初期化前のデータが誤ってアクセスサーバ３００に送信されることを抑制できる。なお、図１６の手順例では、未初期化のチャンクについて、初期化してからデータの読み出しを行っているが、読み出しを行わずに、アクセスサーバ３００に送信するデータとして、初期化直後のチャンクに格納されている初期値をＲＡＭ１０２上に用意してもよい。
【０１１８】
図１７は、ストレージ装置に対するリード処理の例を示す図である。ここでは、データを読み出す記憶領域（リード領域）が４つのチャンク（チャンク＃１〜＃４）に跨がっており、図１５の場合と同様に、チャンク＃１，＃２，＃４が未初期化で、チャンク＃３が初期化済であるとする。このとき、リード領域の一部であるか否かにかかわらず、アクセスする未初期化のチャンク＃１，＃２，＃４全体が初期化される。リードコマンドでは、例えば、アクセス要求で指定された先頭の論理アドレスに対応する物理アドレスと、アクセス要求で指定された長さとが、ストレージ装置２００に通知される。以上により、未初期化であったチャンク＃１，＃２，＃４が初期化済となる。
【０１１９】
図１８は、初期化処理の手順例を示すフローチャートである。図１８の処理は、ＩＯサーバ１００において定期または不定期に繰り返し実行される。ＩＯサーバ１００ａでも、ＩＯサーバ１００と同様の処理が実行され得る。なお、ここでは、ストレージ装置２００上のセグメントをバックグラウンドで初期化する場合を考える。
【０１２０】
（ステップＳ５１）管理サーバ４００から受信した初期化要求は、ＩＯサーバ１００が備える管理用のキューに格納されている。管理用のキューは、例えば、ＲＡＭ１０２上に作成されている。初期化実行部１３０は、キューから初期化要求を１つ抽出する。各初期化要求では、初期化すべきセグメントが１つ指定されている。
【０１２１】
（ステップＳ５２）初期化実行部１３０は、テーブル記憶部１１０に記憶されたセグメント状態テーブル１１１を参照し、初期化要求で指定されたセグメントの初期化フラグが１であるか（セグメントの状態が既にＶＡＬＩＤか）判断する。ＶＡＬＩＤの場合は処理をステップＳ５９に進め、ＴＺＥＲＯ＋の場合は処理をステップＳ５３に進める。
【０１２２】
（ステップＳ５３）初期化実行部１３０は、指定されたセグメントに含まれるチャンクを１つ選択する。例えば、初期化実行部１３０は、チャンクＩＤが小さい順に選択する。
（ステップＳ５４）初期化実行部１３０は、ステップＳ５３で選択したチャンクが初期化済になるようにする。チャンクの初期化については、後でより詳細に説明する。
【０１２３】
（ステップＳ５５）初期化実行部１３０は、指定されたセグメントにステップＳ５３で選択していないチャンクがあるか判断する。未選択のチャンクがある場合は処理をステップＳ５３に進め、全てのチャンクを選択済の場合は処理をステップＳ５６に進める。
【０１２４】
（ステップＳ５６）初期化実行部１３０は、セグメント状態テーブル１１１において、指定されたセグメントの初期化フラグを１（ＶＡＬＩＤ）に設定する。また、初期化実行部１３０は、指定されたセグメントの初期化が完了したことを管理サーバ４００に通知する。これにより、テーブル記憶部４１０に記憶されたセグメントテーブル４１１においても、当該セグメントの状態がＶＡＬＩＤに設定される。
【０１２５】
（ステップＳ５７）初期化実行部１３０は、初期化が完了したセグメントについてのチャンク管理ビットマップ１１２を、テーブル記憶部１１０から削除する。
（ステップＳ５８）初期化実行部１３０は、ストレージ装置２００ａの管理領域２２０にバックアップしてある初期化ビットマップを削除する。なお、ステップＳ５６〜Ｓ５８の処理は、任意の順序で実行してもよいし、並列に実行することも可能である。
【０１２６】
（ステップＳ５９）初期化実行部１３０は、管理用のキューが空であるか判断する。管理要のキューが空の場合は処理を終了し、管理用のキューに初期化要求が残っている場合は処理をステップＳ５１に進めて、次の初期化要求を処理する。
【０１２７】
図１９は、チャンク初期化の手順例を示すフローチャートである。図１９に示す処理は、図１８に示したフローチャートのステップＳ５４において実行される。
（ステップＳ５４１）初期化実行部１３０は、テーブル記憶部１１０に記憶されたチャンク管理ビットマップ１１２を参照し、選択したチャンクの排他ビットが０であるか（アクセスが禁止されていないか）判断する。排他ビットが０の場合は処理をステップＳ５４２に進め、排他ビットが１の場合は処理を終了する。なお、このとき排他ビットが１であるチャンクは、ＩＯ変換部１２０によって初期化されることになる。
【０１２８】
（ステップＳ５４２）初期化実行部１３０は、チャンク管理ビットマップ１１２を参照し、選択したチャンクの初期化ビットが０であるか（チャンクが未初期化か）判断する。初期化ビットが０の場合は、処理をステップＳ５４３に進める。初期化ビットが１の場合は、選択したチャンクは初期化済であるため、処理を終了する。
【０１２９】
（ステップＳ５４３）初期化実行部１３０は、チャンク管理ビットマップ１１２において、チャンクの排他ビットを１に設定し、ＩＯ変換部１２０によるアクセスを禁止する。
（ステップＳ５４４）初期化実行部１３０は、選択したチャンクの全体を初期化する。例えば、初期化実行部１３０は、当該チャンクの先頭から末尾まで所定のビット列（例えば、オール０）を書き込むためのコマンドを、ストレージ装置２００に送信する。当該コマンドでは、例えば、チャンクの先頭アドレスとチャンクサイズが指定される。
【０１３０】
（ステップＳ５４５）初期化実行部１３０は、チャンク管理ビットマップ１１２において、初期化したチャンクの初期化ビットを１に設定し、また、ストレージ装置２００ａの管理領域２２０にバックアップしていた初期化ビットマップを更新する。
【０１３１】
（ステップＳ５４６）初期化実行部１３０は、ステップＳ５４４の初期化が成功したか判断する。成功した場合（例えば、ストレージ装置２００から成功応答を受信した場合）は処理をステップＳ５４８に進め、失敗した場合（例えば、ストレージ装置２００からエラー応答を受信した場合）は処理をステップＳ５４７に進める。
【０１３２】
（ステップＳ５４７）初期化実行部１３０は、管理サーバ４００にエラーを報告する。
（ステップＳ５４８）初期化実行部１３０は、チャンク管理ビットマップ１１２において、チャンクの排他ビットを１に設定し、ＩＯ変換部１２０によるアクセスを解禁する。
【０１３３】
（ステップＳ５４９）初期化実行部１３０は、データアクセス用のキューに対して、排他ビットが１から０になった（アクセス禁止が解除された）チャンクがあることを通知する。これにより、キューに格納されている処理待ちのアクセス要求が処理され得る。
【０１３４】
図２０は、論理ディスクの状態の変化例を示す図である。図２０の例では、ＦＲＥＥのセグメント＃１０とＴＺＥＲＯのセグメント＃２１，＃２２を用いて、論理ディスクが作成される。セグメント＃１０は、論理ディスクの１番目（インデックス＝０）に位置付けされて、状態がＦＲＥＥからＶＡＬＩＤに遷移する。セグメント＃２１は、論理ディスクの２番目（インデックス＝１）に位置付けされて、状態がＴＺＥＲＯからＴＺＥＲＯ＋に遷移する。セグメント＃２２は、論理ディスクの３番目（インデックス＝２）に位置付けされて、状態がＴＺＥＲＯからＴＺＥＲＯ＋に遷移する。
【０１３５】
この論理ディスクが仮想マシンに接続されると、初期化フラグの列が“１００”であるセグメント状態テーブル１１１が、ＩＯサーバ１００に生成される。また、初期化が完了していない２番目および３番目のセグメントに対応して、初期化ビットが全て０である２つの初期化ビットマップが、ＩＯサーバ１００に生成される。
【０１３６】
その後、管理サーバ４００がセグメント＃２１の初期化を指示すると、例えば、論理ディスクの２番目のセグメントの先頭のチャンクから順に初期化されていく。先頭のチャンクが初期化済になると、２番目のセグメントに対応する初期化ビットマップでは、先頭の初期化ビットが０から１に更新される。また、アクセスサーバ３００が３番目のセグメントのチャンク＃１〜＃４に跨がる記憶領域を指定したアクセス要求を発行すると、チャンク＃１〜＃４が初期化される。このとき、３番目のセグメントに対応する初期化ビットマップでは、２番目から５番目の初期化ビットが０から１に更新される。
【０１３７】
その後、セグメント＃２１の全てのチャンクが初期化されて、セグメント＃２１の状態がＴＺＥＲＯ＋からＶＡＬＩＤに遷移すると、セグメント状態テーブル１１１の初期化フラグの列が“１１０”に更新される。また、論理ディスクの２番目のセグメントに対応する初期化ビットマップが、ＩＯサーバ１００から削除される。
【０１３８】
第２の実施の形態のストレージシステムによれば、初期化が完了していないセグメントを用いて論理ディスクを作成して仮想マシンに割り当てることが可能となり、ユーザがストレージ装置２００，２００ａの記憶領域の割り当てを待つ時間を減らすことができる。また、セグメントを細分化したチャンク単位で排他制御が行われるため、バックグラウンドで初期化中であるためにアクセス待ちとなる確率を減らすことができる。また、第２の実施の形態のストレージシステムでは、データアクセスと初期化処理の効率を両立させることができ、ストレージシステムの処理効率が改善する。
【０１３９】
例えば、あるチャンクへのデータの書き込みを示すアクセス要求を仮想マシンが発行したとき、指定された記憶領域については初期化せずに直接データが書き込まれるため、仮想マシンへの応答の遅延を減らすことができる。また、データを書き込むチャンク内の指定されていない記憶領域についても併せて初期化するため、チャンク全体を初期化済として扱うことができ、バックグラウンドで行う初期化処理の制御が簡潔となる。
【０１４０】
また、あるチャンクからのデータの読み出しを示すアクセス要求を仮想マシンが発行したとき、そのチャンク全体が初期化されるため、例えば、そのチャンクが複数回アクセスされるときの負荷が軽減される。また、データを読み出すチャンク内の指定されなかった記憶領域についても初期化が行われるため、チャンク全体を初期化済として扱うことができ、バックグラウンドで行う初期化処理の制御が簡潔となる。
【０１４１】
なお、前述のように、第１の実施の形態のデータアクセス方法は、コンピュータ１０にプログラムを実行させることで実現できる。また、第２の実施の形態のデータアクセス方法は、コンピュータとしてのＩＯサーバ１００，１００ａ、ストレージ装置２００，２００ａ、アクセスサーバ３００，３００ａおよび管理サーバ４００に、それぞれ、プログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、記録媒体５３）に記録しておくことができる。記録媒体としては、例えば、磁気ディスク、光ディスク、光磁気ディスク、半導体メモリなどを使用できる。磁気ディスクには、ＦＤおよびＨＤＤが含まれる。光ディスクには、ＣＤ、ＣＤ−Ｒ（Recordable）／ＲＷ（Rewritable）、ＤＶＤおよびＤＶＤ−Ｒ／ＲＷが含まれる。
【０１４２】
プログラムを流通させる場合、例えば、当該プログラムを記録した可搬記録媒体が提供される。また、プログラムを他のコンピュータの記憶装置に格納しておき、ネットワーク経由でプログラムを配布することもできる。コンピュータは、例えば、可搬記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、記憶装置（例えば、ＨＤＤ１０３）に格納し、当該記憶装置からプログラムを読み込んで実行する。ただし、可搬記録媒体から読み込んだプログラムを直接実行してもよく、他のコンピュータからネットワークを介して受信したプログラムを直接実行してもよい。
【０１４３】
上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１４４】
１０  コンピュータ
１１  プロセッサ
１２  メモリ
２１，２２  記憶装置
２３，２４  ブロック
３０  クライアント
３１，３２  アクセス要求
【図１】
2013140492.tif 000003
【図２】
2013140492.tif 000004
【図３】
2013140492.tif 000005
【図４】
2013140492.tif 000006
【図５】
2013140492.tif 000007
【図６】
2013140492.tif 000008
【図７】
2013140492.tif 000009
【図８】
2013140492.tif 000010
【図９】
2013140492.tif 000011
【図１０】
2013140492.tif 000012
【図１１】
2013140492.tif 000013
【図１２】
2013140492.tif 000014
【図１３】
2013140492.tif 000015
【図１４】
2013140492.tif 000016
【図１５】
2013140492.tif 000017
【図１６】
2013140492.tif 000018
【図１７】
2013140492.tif 000019
【図１８】
2013140492.tif 000020
【図１９】
2013140492.tif 000021
【図２０】
2013140492.tif 000022
【手続補正書】
【提出日】平成26年9月17日(2014.9.17)
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００１
【補正方法】変更
【補正の内容】
【０００１】
本発明はデータアクセス方法、プログラムおよびデータアクセス装置に関する。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】０００８
【補正方法】変更
【補正の内容】
【０００８】
一側面では、本発明は、初期化処理の途中でデータアクセスを許容するシステムの処理効率を改善したデータアクセス方法、プログラムおよびデータアクセス装置を提供することを目的とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００３１
【補正方法】変更
【補正の内容】
【００３１】
ストレージ装置２００，２００ａは、ハードディスクなどの不揮発性の記憶装置を備えており、記憶装置に記憶されるデータを管理するサーバコンピュータである。ストレージ装置２００，２００ａは、ＩＯサーバ１００，１００ａからのアクセスに応じて、記憶装置へのデータの書き込みおよび記憶装置からのデータの読み出しを実行する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】００５９
【補正方法】変更
【補正の内容】
【００５９】
テーブル記憶部４１０は、セグメントの状態と論理ディスクとしてのセグメントの使用状況とを示すセグメントテーブルを記憶する。また、テーブル記憶部４１０は、論理ディスクとＩＯサーバとの対応関係を示すＶＤＩＳＫ管理テーブルを記憶する。
【手続補正６】
【補正対象書類名】明細書
【補正対象項目名】０１２６
【補正方法】変更
【補正の内容】
【０１２６】
（ステップＳ５９）初期化実行部１３０は、管理用のキューが空であるか判断する。管理用のキューが空の場合は処理を終了し、管理用のキューに初期化要求が残っている場合は処理をステップＳ５１に進めて、次の初期化要求を処理する。
【手続補正７】
【補正対象書類名】明細書
【補正対象項目名】０１３２
【補正方法】変更
【補正の内容】
【０１３２】
（ステップＳ５４７）初期化実行部１３０は、管理サーバ４００にエラーを報告する。
（ステップＳ５４８）初期化実行部１３０は、チャンク管理ビットマップ１１２において、チャンクの排他ビットを０に設定し、ＩＯ変換部１２０によるアクセスを解禁する。
【手続補正８】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法であって、
初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域に対して初期化せずにデータを書き込むとともに、前記ブロック内のうち前記アクセス要求で指定されなかった残りの第２の記憶領域を初期化するように前記記憶装置に指示して、
前記ブロック内の記憶領域全体の初期化を完了させる、データアクセス方法。
【請求項２】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムが実行するデータアクセス方法であって、
初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域と前記アクセス要求で指定されなかった残りの第２の記憶領域とを初期化するように前記記憶装置に指示して、前記ブロック内の記憶領域全体の初期化を完了させるとともに、
前記アクセス要求に対して初期化後の前記第１の記憶領域に相当するデータをアクセス結果として応答する、
データアクセス方法。
【請求項３】
初期化されていない複数のブロックについて前記アクセス要求が許容されるとき、前記複数のブロックそれぞれの排他制御に用いる排他情報を用いて、前記アクセス要求に応じて初期化を行う第１のプロセスと前記アクセス要求によらずに前記複数のブロックの初期化を進める第２のプロセスとの間で、ブロック単位で排他制御を行う、請求項１または２記載のデータアクセス方法。
【請求項４】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、
初期化されていないブロック内の一部分である第１の記憶領域へのデータの書き込みを示すアクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域に対して初期化せずにデータを書き込むとともに、前記ブロック内のうち前記アクセス要求で指定されなかった残りの第２の記憶領域を初期化するように前記記憶装置に指示して、
前記ブロック内の記憶領域全体の初期化を完了させる、
処理を実行させるプログラム。
【請求項５】
１またはそれ以上の記憶装置が備える記憶領域の初期化状況をブロック単位で管理することが可能なストレージシステムに用いられるコンピュータに、
初期化されていないブロック内の一部分である第１の記憶領域からのデータの読み出しを示すアクセス要求を受け付けたとき、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域と前記アクセス要求で指定されなかった残りの第２の記憶領域とを初期化するように前記記憶装置に指示して、前記ブロック内の記憶領域全体の初期化を完了させるとともに、
前記アクセス要求に対して初期化後の前記第１の記憶領域に相当するデータをアクセス結果として応答する、
処理を実行させるプログラム。
【請求項６】
初期化されていない複数のブロックについて前記アクセス要求が許容されるとき、前記複数のブロックそれぞれの排他制御に用いる排他情報を用いて、前記アクセス要求に応じて初期化を行う第１のプロセスと前記アクセス要求によらずに前記複数のブロックの初期化を進める第２のプロセスとの間で、ブロック単位で排他制御を行う、請求項４または５記載のプログラム。
【請求項７】
１またはそれ以上の記憶装置が備える記憶領域に対してデータのアクセスを行うデータアクセス装置であって、
前記記憶装置に対してアクセス要求に従った指示を行う制御部を備え、
前記制御部は、初期化されていないブロック内の一部分である第１の記憶領域へのアクセス要求を受け付けたとき、
前記アクセス要求が前記第１の記憶領域へのデータの書き込み要求である場合、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域に対して初期化せずにデータを書き込むとともに、前記ブロック内のうち前記アクセス要求で指定されなかった残りの第２の記憶領域を初期化するように前記記憶装置に指示して、前記ブロック内の記憶領域全体の初期化を完了させ、
前記アクセス要求が前記第１の記憶領域からのデータの読み出し要求である場合、前記ブロック内のうち前記アクセス要求で指定された前記第１の記憶領域と前記アクセス要求で指定されなかった残りの第２の記憶領域とを初期化するように前記記憶装置に指示して、前記ブロック内の記憶領域全体の初期化を完了させるとともに、前記アクセス要求に対して初期化後の前記第１の記憶領域に相当するデータをアクセス結果として応答する、
データアクセス装置。
【国際調査報告】
2013140492.tif 000023
2013140492.tif 000024
2013140492.tif 000025
2013140492.tif 000026