(57)【特許請求の範囲】
【請求項１】
クライアントコンピュータからアクセス可能なデータを格納する運用ボリュームと、前記運用ボリュームと仮想スナップショットボリュームの差分データを格納する差分ボリュームと、を備えたストレージ装置が前記仮想スナップショットボリュームの差分データを前記運用ボリュームに上書きしてリストア処理を行うスナップショットのリストア方法において、
前記ストレージ装置は、管理コンピュータからリストア元の仮想スナップショットボリュームの識別子を含むリストア開始指令を受け付ける手順と、
前記リストア開始指令を受け付けると、リストアの完了を前記管理コンピュータに応答してリストア処理の完了に見せかける手順と、
前記リストア開始指令の受付に基づいて、前記リストア元の仮想スナップショットボリュームのデータブロックが前記差分ボリュームと運用ボリュームのいずれのデータブロックにあるかを仮想スナップショットボリュームの識別子毎に予め設定した差分ブロック管理部を参照して、前記リストア対象のデータブロックについて実際のデータを格納したボリュームが前記運用ボリュームと差分ボリュームのいずれであるかを特定し、前記リストア対象のデータブロックが差分ボリュームにある場合には、前記差分ブロック管理部が指し示す差分ボリュームのデータブロックに格納されたデータを前記運用ボリュームの前記データブロックにコピーしてリストアを実行する手順と、
リストア処理の期間中に前記クライアントコンピュータから前記運用ボリュームに対するアクセス要求を受け付ける手順と、
前記リストア処理の期間中に前記アクセス要求を受け付けたときには、前記リストア処理の進行状況に基づいて運用ボリュームのデータと差分ボリュームのデータとを組み合わせたリストア後の仮想的な運用ボリュームである仮想運用ボリュームへのアクセスに切り換えて、仮想運用ボリュームに対して前記クライアントコンピュータからのアクセス要求を実施する手順と、を含み、
前記リストアを実行する手順は、
前記リストア先の運用ボリュームの前記データブロック毎にリストアによるアクセスの履歴を保持するアクセス管理部を参照して、該当するデータブロックについてアクセスの履歴の有無を判定する手順と、
前記データブロックについてアクセスの履歴が無い場合には、当該データブロックのリストアを実行し、前記データブロックについてアクセスの履歴がある場合には、当該データブロックのリストアを終了する手順と、
前記アクセス管理部の当該データブロックについてアクセスの履歴を設定する手順と、を含み、
前記仮想運用ボリュームに対して前記クライアントコンピュータからのアクセス要求を実施する手順は、
前記アクセス要求が読み込みである場合には、前記アクセス管理部を参照して読み込み対象のデータブロックについてアクセスの履歴があれば、前記運用ボリュームの当該データブロックからデータを読み込む手順と、
前記アクセス要求が読み込みである場合には、前記アクセス管理部を参照して読み込み対象のデータブロックについてアクセスの履歴が無い場合には、前記差分ブロック管理部を参照してリストア元のスナップショットボリュームの識別子のデータブロックに対応する差分ボリュームまたは運用ボリュームの何れかよりデータを読み込む手順と、
を含むことを特徴とするスナップショットのリストア方法。
【請求項２】
前記リストア元の仮想スナップショットボリュームの識別子を含むリストア開始指令を受け付ける手順は、
リストア中の仮想スナップショットボリュームの識別子と運用ボリューム及びリストアの進行状況を管理するリストア管理テーブルを参照して、前記仮想スナップショットボリュームの識別子に対応する運用ボリュームが前記リストア管理テーブルに登録されているか否かを判定する手順と、
前記仮想スナップショットボリュームの識別子に対応する運用ボリュームが前記リストア管理テーブルに登録されていなければ、前記リストア管理テーブルに当該仮想スナップショットボリュームをリストア元として設定し、前記運用ボリュームをリストア先として設定する手順と、
前記仮想スナップショットボリュームに対応する運用ボリュームが前記リストア管理テーブルに登録されていた場合には、当該リストア処理を終了する手順と、
を含むことを特徴とする請求項１に記載のスナップショットのリストア方法。
【請求項３】
前記アクセス管理部にアクセスの履歴を設定する手順は、
前記リストア対象のデータブロックが差分ボリュームにある場合には、前記コピーを行った後に前記アクセス管理部の該当するデータブロックにアクセスした履歴を設定し、前記リストア対象のデータブロックが差分ボリュームにない場合には、前記アクセス管理部の該当するデータブロックにアクセスした履歴を設定することを特徴とする請求項１に記載のスナップショットのリストア方法。
【請求項４】
前記リストア元の仮想スナップショットボリュームの識別子のデータブロックに対応する差分ボリュームまたは運用ボリュームの何れかよりデータを読み出す手順は、
前記差分ブロック管理部を参照して、前記読み込み対象のデータブロックが運用ボリュームにあれば、当該運用ボリュームの当該データブロックからデータを読み出し、前記読み込み対象のデータブロックが差分ボリュームにあれば、前記差分ブロック管理部が指し示す差分ボリュームのデータブロックからデータを読み出すことを特徴とする請求項１に記載のスナップショットのリストア方法。
【請求項５】
前記仮想運用ボリュームに対して前記クライアントコンピュータからのアクセス要求を実施する手順は、
前記アクセス要求が書き込みである場合には、前記アクセス管理部を参照して書き込み対象のデータブロックについてアクセスの履歴があれば、前記運用ボリュームの当該データブロックにデータを書き込む手順と、
前記アクセス要求が書き込みである場合には、前記アクセス管理部を参照して書き込み対象のデータブロックについてアクセスの履歴が無い場合には、前記差分ブロック管理部を参照して当該データブロックのリストアを実行する手順と、
前記リストアが完了した後に、新たなデータを前記運用ボリュームの前記書き込み対象のデータブロックに書き込む手順と、
を含むことを特徴とする請求項４に記載のスナップショットのリストア方法。
【請求項６】
前記差分ブロック管理部を参照して当該データブロックのリストアを実行する手順は、
前記差分ブロック管理部を参照して、前記リストア対象のデータブロックについて実際のデータを格納したボリュームが前記運用ボリュームと差分ボリュームのいずれであるかを特定する手順と、
前記リストア対象のデータブロックが差分ボリュームにある場合には、前記差分ブロック管理部が指し示す差分ボリュームのデータブロックに格納されたデータを、前記運用ボリュームの前記データブロックにコピーしてリストアを実行する手順と、
を含むことを特徴とする請求項５に記載のスナップショットのリストア方法。
【請求項７】
クライアントコンピュータからアクセス可能なデータを格納する運用ボリュームと、
前記運用ボリュームのスナップショットを作成し、前記運用ボリュームとこのスナップショットとの差分データを差分ボリュームに格納し、前記スナップショットを仮想スナップショットボリュームの識別子で管理するスナップショット管理部と、
リストア開始指令を受け付けたときには、前記差分ボリュームの内容を運用ボリュームへ書き込むリストア制御部と、を備えたストレージ装置において、
前記スナップショット管理部は、
前記運用ボリュームの更新差分データを前記差分ボリュームに格納するスナップショット作成部と、
前記更新差分データを格納した差分ボリュームのデータブロックと、前記更新差分データのあった運用ボリュームのデータブロックと、前記仮想スナップショットボリュームの識別子のデータブロックの対応関係を設定する差分ブロック管理部と、を有し、
前記リストア制御部は、
前記リストア開始指令を受け付けると、リストアの完了を前記管理コンピュータに応答してリストア処理の完了に見せかけた後、前記リストア開始指令で指定されたリストア元の仮想スナップショットボリュームの識別子から前記差分ブロック管理部を参照して、差分ブロック管理部が指し示す差分ボリュームのデータブロックをリストア先の運用ボリュームのデータブロックに書き込んでリストアを行うリストア実行部と、
リストア中の仮想スナップショットボリュームと運用ボリューム及びリストアの進行状況を管理するリストア管理テーブルと、前記リストア先の運用ボリュームの前記データブロック毎にリストアによるアクセスの履歴を保持するアクセス管理部と、を含んで前記リストアの進行状況を管理するリストア状況管理部と、を有し、
前記リストアの期間中にクライアントコンピュータからのアクセス要求を受け付けて、前記リストア状況管理部の進行状況に応じて前記運用ボリュームと差分ボリュームとを組み合わせたリストア後の仮想運用ボリュームに対して前記アクセス要求を実行するリストア中アクセス制御部と、を備え、
前記リストア実行部は、
前記差分ブロック管理部を参照して、リストア対象の仮想スナップショットボリュームの識別子のデータブロックについて実際のデータを格納したボリュームが前記運用ボリュームと差分ボリュームのいずれであるかを特定するリストア対象特定部と、
前記リストア対象のデータブロックが差分ボリュームにある場合には、前記差分ブロック管理部が指し示す差分ボリュームのデータブロックに格納されたデータを、前記運用ボリュームの前記データブロックにコピーしてリストアを実行するリストアデータ転送部と、を有し、
前記リストアデータ転送部は、
前記リストア対象のデータブロックについて前記アクセス管理部を参照し、アクセスの履歴が無い場合には、当該データブロックのリストアを実行し、前記アクセス管理部の当該データブロックについてアクセスの履歴を設定し、
前記リストア中アクセス制御部は、
前記アクセス要求が読み込みである場合には、前記アクセス管理部を参照して読み込み対象のデータブロックについてアクセスの履歴があれば、前記運用ボリュームの当該データブロックからデータを読み込む一方、前記アクセスの履歴が無い場合には、前記差分ブロック管理部を参照してリストア元の仮想スナップショットボリュームの識別子のデータブロックに対応する差分ボリュームまたは運用ボリュームの何れかよりデータを読み込むことを特徴とするストレージ装置。
【請求項８】
前記リストア中アクセス制御部は、
前記アクセス要求が書き込みである場合には、前記アクセス管理部を参照して書き込み対象のデータブロックについてアクセスの履歴があれば、前記運用ボリュームの当該データブロックにデータを書き込む一方、前記アクセスの履歴が無い場合には、前記運用ボリュームの当該データブロックに対してリストアを実行した後に、新たなデータを前記運用ボリュームの前記書き込み対象のデータブロックに書き込むことを特徴とする請求項７に記載のストレージ装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ストレージ装置のデータのスナップショット及びそのリストア方法に関する。
【背景技術】
【０００２】
企業のデータを格納するストレージとして、ＬＡＮ（Local Area Network）に接続し安価且つ容易にファイルを管理できるＮＡＳ（Network Attached Storage）が多く使われている。ＮＡＳの主要サービスとしてファイル共有サービスとスナップショットサービスがある。ファイル共有サービスとは、ＬＡＮに接続された複数のＮＡＳに対してＮＡＳのファイルシステムを公開し、ファイルの作成及びファイルの読み書きを可能とするサービスである。スナップショットサービスとは、運用中のファイルシステム（運用ファイルシステム）のある時点の静止化イメージであるスナップショットをＮＡＳクライアントに提供するサービスである。運用ファイルシステムのファイルが人為ミスやアプリケーションの障害等によって消失または破壊された場合、スナップショットに残されたファイルを運用ファイルシステムに書き戻すことによってスナップショット生成時点のデータに復旧することができる。
【０００３】
近年、ＮＡＳは企業の基幹システムや大規模なＷｅｂシステムなどにも多く使用されている。このようなシステムではデータの可用性が重要となるため、運用中のファイルシステムのデータが消失又は破壊された場合、これまで運用してきたファイルシステムを一貫性を保ったデータセットで、可能な限り早くに復旧したいという要求が高まっている。
【０００４】
ＮＡＳにおいて、上記の要求を満たすには、一貫性を保ったデータセットであるスナップショットのデータを運用ファイルシステムに瞬時に反映させる機能が必要である。以下ではこの機能を瞬間リストアと呼ぶ。瞬間リストアを実現する技術として、例えば、特許文献１に記載の技術が知られている。この技術は、運用中のファイルシステム（運用ファイルファイルシステム）を親とした書き込み可能なスナップショットを瞬時に作成する技術である。これによって運用ファイルシステムのデータが破壊されても、書き込み可能なスナップショットを運用ファイルシステムにマウントしなおすことによって、スナップショット作成時点の一貫性のあるデータで運用を瞬時に再開することができる。また、非特許文献１に記載されている親ボリュームとスナップショットボリュームを物理的に引き離すスプリット処理を使用することによって、スナップショットボリュームを元の運用ボリュームと同じボリュームに昇格させることができる。この二つの機能によって、瞬間リストアを実現している。
【０００５】
次に特許文献１と非特許文献１に記載の技術を用いて瞬間リストアを実現するために、管理者が必要とする手順を説明する。まず管理者は、ＮＡＳの運用中に通常の読み取り専用のスナップショットの場合と同様に、運用ファイルシステムのデータを格納している運用ボリュームの複製であるスナップショットボリュームを定期的に作成しておく。そして何らかの障害によって運用ボリュームのデータが破壊された場合、復旧したいデータセットを持つスナップショットボリュームを選択し、運用ファイルシステムをスナップショットボリュームにマウントしなおす。
【０００６】
これによって運用ファイルシステムが過去のスナップショットによって、瞬時に復旧された様に見える。その後、管理者は明示的にスプリット処理を起動する。スプリット処理は親ボリュームとスナップショットが共有している親ボリューム内のデータを、スナップショットボリュームへコピーする。この処理が完了した後、運用ファイルシステムをマウントしているスナップショットボリュームは、障害発生前の運用ボリュームと同様の状態で使用できるようになる。
【特許文献１】米国特許第６，７７１，８４３号
【非特許文献１】「Flex Cloneボリュームの概説」、第４頁〜第６頁、[online]、「平成１７年９月１７日検索」、インターネット＜http://www-jp.netapp.com/tech_library/ftp/3347.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記のような特許文献１の書き込み可能なスナップショット作成技術において、スナップショットボリュームは作成後にそのボリュームに対して書かれたデータのみを格納しており、そのほかのデータは親ボリュームである運用ボリュームに格納されているデータを運用ボリュームと共有している。また、前記非特許文献１に記載のスプリット処理は、親ボリュームとクローンボリュームが共有している親ボリューム内のデータをクローンボリュームへコピーする処理である。そのため、運用ボリュームに格納されているデータが多ければ多いほど、また、クローン作成から運用ボリュームに対するデータ更新量が少なければ少ないほど、スプリット処理は大量の共有データを運用ボリュームからクローンボリュームへコピーすることになる。
【０００８】
その結果、長期間にわたってＮＡＳ全体は高負荷の状態が継続することになる。このため、瞬時に運用を復旧したにもかかわらず、長時間に渡ってサービスレベルが低下した状態が続く。また、スプリット処理はデータのコピーであるため、リストア処理中にＮＡＳ全体のディスク容量が足りなくなり、途中で処理が失敗する場合も出てくる。すなわち、前記非特許文献１では、親ボリュームのクローンを定期的に作成し、リストアする際にはクローンを選択して、親ボリュームと選択したクローンが共有しているデータをクローンボリュームにコピーする。この場合では、親ボリュームから消失したデータが少ないほど（親ボリュームとクローンの共有データが多いほど）、バックグラウンドのコピー処理の負荷が高くなる。そして、親ボリュームコピー先のクローンボリュームが同一容量であっても、選択したクローンのデータが多ければ、コピー先のクローンボリュームが容量不足となってリストアが停止することになる。
【０００９】
そこで本発明は、上記問題点に鑑みてなされたもので、ストレージ装置のスナップショットの瞬間リストアにおいて、サービス復旧後のサービスレベルが長時間に渡って低下する問題の防止と、運用ボリューム復旧時のディスク容量不足による失敗を防止することを目的とする。
【課題を解決するための手段】
【００１０】
本発明は、クライアントコンピュータからアクセス可能なデータを格納する運用ボリュームと、前記運用ボリュームと仮想スナップショットボリュームの差分データを格納する差分ボリュームと、を備えたストレージ装置が前記仮想スナップショットボリュームの差分データを前記運用ボリュームに上書きしてリストア処理を行うスナップショットのリストア方法において、前記ストレージ装置は、管理コンピュータからリストア元の仮想スナップショットボリュームの識別子を含むリストア開始指令を受け付ける手順と、前記リストア開始指令を受け付けると、リストアの完了を前記管理コンピュータに応答してリストア処理の完了に見せかける手順と、前記リストア開始指令の受付に基づいて、前記リストア元の仮想スナップショットボリュームのデータブロックが前記差分ボリュームと運用ボリュームのいずれのデータブロックにあるかを仮想スナップショットボリュームの識別子毎に予め設定した差分ブロック管理部を参照して、前記リストア対象のデータブロックについて実際のデータを格納したボリュームが前記運用ボリュームと差分ボリュームのいずれであるかを特定し、前記リストア対象のデータブロックが差分ボリュームにある場合には、前記差分ブロック管理部が指し示す差分ボリュームのデータブロックに格納されたデータを前記運用ボリュームの前記データブロックにコピーしてリストアを実行する手順と、リストア処理の期間中に前記クライアントコンピュータから前記運用ボリュームに対するアクセス要求を受け付ける手順と、前記リストア処理の期間中に前記アクセス要求を受け付けたときには、前記リストア処理の進行状況に基づいて運用ボリュームのデータと差分ボリュームのデータとを組み合わせたリストア後の仮想的な運用ボリュームである仮想運用ボリュームへのアクセスに切り換えて、仮想運用ボリュームに対して前記クライアントコンピュータからのアクセス要求を実施する手順と、を含み、前記リストアを実行する手順は、前記リストア先の運用ボリュームの前記データブロック毎にリストアによるアクセスの履歴を保持するアクセス管理部を参照して、該当するデータブロックについてアクセスの履歴の有無を判定する手順と、前記データブロックについてアクセスの履歴が無い場合には、当該データブロックのリストアを実行し、前記データブロックについてアクセスの履歴がある場合には、当該データブロックのリストアを終了する手順と、前記アクセス管理部の当該データブロックについてアクセスの履歴を設定する手順と、を含み、前記仮想運用ボリュームに対して前記クライアントコンピュータからのアクセス要求を実施する手順は、前記アクセス要求が読み込みである場合には、前記アクセス管理部を参照して読み込み対象のデータブロックについてアクセスの履歴があれば、前記運用ボリュームの当該データブロックからデータを読み込む手順と、前記アクセス要求が読み込みである場合には、前記アクセス管理部を参照して読み込み対象のデータブロックについてアクセスの履歴が無い場合には、前記差分ブロック管理部を参照してリストア元のスナップショットボリュームの識別子のデータブロックに対応する差分ボリュームまたは運用ボリュームの何れかよりデータを読み込む手順と、を含む。
【発明の効果】
【００１１】
したがって、本発明によれば、リストア開始直後からクライアントコンピュータはリストア完了後の状態でストレージ装置にアクセスを行うことができる。そして、リストア処理は差分ボリュームから更新差分のデータのみについて運用ボリュームへコピーすればよいので、転送するデータ量を削減してリストア中のストレージ装置の負荷を低減することができ、前記従来例のようにストレージ装置の高負荷によりアクセス性能が低下するのを防止することができる。また、差分ボリュームから運用ボリュームにリストアするデータは過去の運用ボリュームの更新差分であるので、前記従来例のようにリストア中に、運用ボリュームのディスク容量が不足するのを確実に回避できる。
【発明を実施するための最良の形態】
【００１２】
以下、本発明の一実施形態を添付図面に基づいて説明する。
【００１３】
（システムの全体構成）
図１は本発明の第１実施形態を含む情報システムの全体構成を示すブロック図である。ＮＡＳクライアント１０１はネットワーク１０３を介してＮＡＳ統合装置１０４に接続されている。ここでネットワーク１０３はＬＡＮでも良いし、インターネットやＷＡＮでも良い。また、ＮＡＳ統合装置１０４を制御するＮＡＳ管理端末１０２がネットワーク１０３が接続される。
【００１４】
ＮＡＳ統合装置１０４はＮＡＳクライアント１０１に対して、公知の技術によって実現されるファイル共有サービスとスナップショットサービス、及び本発明によって実現される瞬間リストアを提供する。以下では、これらのサービスを総称してＮＡＳサービスと呼ぶ。
【００１５】
ＮＡＳ統合装置１０４は、複数のディスクドライブを備えたディスク装置１２０と、ディスク装置１２０を制御するコントローラ１０を含んで構成されている。なお、コントローラ１０は後述するＮＡＳサーバ装置１１０を構成する。
【００１６】
ＮＡＳ統合装置１０４のコントローラ１０には、ＣＰＵ１１、メモリ１２、データ転送コントローラ１３、ネットワークインターフェース１４及びストレージ用のインターフェース１５が設けられている。なお、メモリ１２にデータキャッシュ（図示省略）を設けても良く、あるいは、データキャッシュをデータ転送コントローラ１３側に設けても良い。
【００１７】
メモリ１２には後述する制御プログラム（図２参照）がロードされており、ＣＰＵ１１が制御プログラムを呼び出して実行することによって後述する各種処理が行われる。
【００１８】
データ転送コントローラ１３は、ＣＰＵ１１、ネットワークインターフェース１４、ストレージインターフェース１５及びメモリ１２の間でデータを転送する。
【００１９】
ディスク装置１２０には、ＮＡＳクライアント１０１がデータの読み書きを行う運用ボリューム（Primary Volume）１４１と、運用ボリューム（主ボリューム）１４１とスナップショットボリューム（仮想スナップショットボリューム）の更新差分データを格納する差分ボリューム１４２が設定される。なお、差分ボリューム（Differential Volume）１４２には、図２で示すように、運用ボリューム１４１のスナップショット（スナップショットボリューム）を管理する差分ブロック管理テーブル（Copy On Write TABLE）２０３が格納される。また、図示はしないが、ＮＡＳクライアント１０１がアクセスを行う運用ボリューム１４１と差分ボリューム１４２は複数存在するものとする。
【００２０】
図２は、ＮＡＳ統合装置１０４の機能を示すブロック図である。ＮＡＳ統合装置１０４は、ＮＡＳサービスのための処理を実行するＮＡＳサーバプログラム群１１５を搭載するＮＡＳサーバ装置１１０、実データを格納するボリューム１２１を搭載したディスク装置１２０、及びこれらの構成要素を接続する内部ネットワーク１３０から構成される。ここで内部ネットワーク１３０は、システム内に内蔵した専用バスでも良いし、ＳＡＮやＬＡＮなどの汎用ネットワークでも良い。
【００２１】
ＮＡＳサーバプログラム群１１５は、公知の技術であるＮＡＳサーバプログラム１１１、ファイルシステム処理プログラム１１２、スナップショット管理プログラム（スナップショット管理部）１１３、及び本発明の瞬間リストア管理プログラム１１４から構成される。このプログラム群１１５は、ネットワーク１０３を介してＮＡＳ管理端末１０２からのコマンドを受け付けて、サービスを提供するための処理を行う。
【００２２】
ＮＡＳサーバプログラム１１１は、ＮＡＳクライアント１０１が要求するファイルのアクセス要求に応じて、ファイルシステム処理プログラム１１２に対してファイルやディレクトリの読み出し及び書き込み処理を実行し、その結果を要求元であるクライアント１０１に送り返す。
【００２３】
ファイルシステム処理プログラム１１２は、ＮＡＳサーバプログラム１１１が発行するファイルやディレクトリの読み出し及び書き込み処理の要求に応じて、ファイルやディレクトリを格納しているボリュームと、アクセスするブロック（データブロック）位置、サイズを指定した、データの読み出しや、書き込み処理をスナップショット管理プログラム１１３に対して発行する。
【００２４】
スナップショット管理プログラム１１３は、ディスク装置１２０のディスク領域をボリュームという論理的な領域で管理し、スナップショットの処理を行う。図３に物理的なボリュームとスナップショット管理プログラム１１３が提供する仮想的なボリューム群の関係を示す。このスナップショット管理プログラム１１３は、運用ファイルシステムを格納するボリュームである運用ボリューム１４１に加え、スナップショットの維持に必要な差分データを格納するボリュームである差分ボリューム１４２を管理する。そして運用ボリューム１４１と差分ボリューム１４２のデータを合成することにより、運用ボリューム１４１の過去の静止化イメージを提供する仮想的なボリュームである仮想スナップショットボリューム１５２を構成する。
【００２５】
このため、スナップショット管理プログラム１１３は、差分ボリューム１４２に格納した差分ブロック管理テーブル（差分ブロック管理部）２０３を管理し、運用ボリューム１４１と差分ボリューム１４２に格納されたデータのうち、差分ブロック管理テーブル２０３が指し示すブロックのデータを読み込むことで仮想スナップショットボリューム（Virtual Volume）１５２を生成する。このスナップショット管理プログラム１１３は、ファイルシステムから各ボリュームへの書き込み／読み出し要求を受け、それに応じた処理を行う。
【００２６】
また、スナップショット管理プログラム１１３は、定期的（例えば、１時間毎）にスナップショットを取得して、図３で示すように、仮想スナップショットボリューム１５２としてＶＶＯＬ（No1）〜(Non)の複数の仮想スナップショットボリュームを生成する。なお、これら仮想スナップショットボリューム１５２の実体は、物理的なボリュームではなく差分ブロック管理テーブル（図中COW  TABLE）２０３で管理される仮想的なボリュームである。
【００２７】
瞬間リストア管理プログラム１１４は、差分ブロック管理テーブル２０３に基づいて差分ボリューム１４２から運用ボリューム１４１へのデータのリストアを行うと共に、スナップショットから運用ボリューム１４１へのリストアが瞬時に完了したと見せかけるため、運用ボリューム１４１とスナップショットボリューム１５２を合成したイメージである書き込み可能な仮想ボリューム（仮想運用ボリューム１５１）を構成する。瞬間リストア管理プログラム１１４の実行時、メモリ１２上にあるリストアプロセス数カウンタ２１６の値を変える事によって、運用ボリューム１４１から仮想運用ボリューム１５１の移行をファイルシステムから見て透過的に行う。
【００２８】
（スナップショット管理プログラムの構成）
図４は公知の技術であるスナップショット管理プログラム１１３を示した図である。スナップショット管理プログラム１１３は、ファイルシステム処理プログラム１１２が発行する処理要求に応じて書き込み処理サブプログラム２０１、読み出し処理サブプログラム２０２の何れかを呼び出す。これらのサブプログラムは仮想スナップショットボリューム１５２と、運用ボリューム１４１または差分ボリューム１４２の何れかに存在する実データの配置の対応関係を示したテーブルである差分ブロック管理テーブル２０３を参照・更新することによって、スナップショットを提供する。
【００２９】
スナップショット管理プログラム１１３は、運用ボリューム１４１に対して書き込み（更新）があると、図５で示すようにコピーオンライト処理により、更新前のデータを差分ボリューム１４２に退避させ、その後、運用ボリューム１４１に新たなデータを書き込む。図５は、データＢを運用ボリューム１４１に書き込む場合を示している。そして、更新差分の情報を差分ブロック管理テーブル２０３に書き込んで、差分スナップショットを仮想スナップショットボリュームとして管理する。この場合、書き込み処理サブプログラム２０１が次のように機能する。
【００３０】
データＢを書き込む運用ボリューム１４１のブロック＃１２３にある古いデータＡを退避させるため、差分ボリューム１４２に退避用のブロック＃４５６を確保する。運用ボリューム１４１のブロック＃１２３のデータＡを、差分ボリューム１４２のブロック＃４５６に書き込んで退避させる。古いデータＡの退避が完了した後に、新たなデータＢを運用ボリューム１４１のブロック＃１２３に書き込む。さらに、書き込み処理サブプログラム２０１は、差分ブロック管理テーブル２０３に現在のスナップショットの位置に、差分ボリューム１４２のブロック＃４５６を書き込んで、処理を終了する。
【００３１】
差分ブロック管理テーブル２０３は、図６で示すように、スナップショットボリューム１５２の世代を示すＶＶＯＬ番号２０３１と、各スナップショットボリューム１５２のブロック位置を示すブロックアドレス２０３２と、ＶＶＯＬ番号２０３１とブロックアドレス２０３２が示す位置のデータ状態２０３３から構成される。また、差分ブロック管理テーブル２０３は、各ＶＶＯＬ番号２０３１毎に、運用ボリューム１４１と差分ボリューム１４２の識別子を保持する。
【００３２】
データ状態２０３３は、値が０の場合は運用ボリューム（ＰＶＯＬ）１４１の同一ブロックアドレスのデータを指し示し、値が０でない場合には差分ボリューム１４２のブロックアドレスを示す。例えば、上記図５のように、データＢの更新をスナップショットボリュームＮｏ．３で取得した場合には、ＶＶＯＬ番号２０３１がＮｏ．３でブロックアドレス２０３２が１２３のデータ状態２０３３に差分ボリューム１４２のブロックアドレスとして４５６が書き込まれる。したがって、スナップショットボリュームＶＶＯＬ  Ｎｏ．３のデータを読み込むと、ブロックアドレスが１〜１２２、１２４〜ｎは運用ボリューム１４１の同一ブロックアドレスのデータを読み込み、ブロックアドレス１２３のデータは差分ボリューム１４２のブロックアドレス４５６から読み込むことになる。このように、差分ブロック管理テーブル２０３は、更新差分データを格納した差分ボリューム１４２のデータブロックと、更新差分データのあった運用ボリューム１２１のデータブロックと、スナップショットボリューム１５２のデータブロックの対応関係を設定するものである。
【００３３】
（瞬間リストア管理プログラムの構成）
図７は本発明の瞬間リストア管理プログラム１１４の構成を示したブロック図である。瞬間リストア管理プログラム１１４は、瞬間リストア制御サブプログラム２１１、バックグラウンドリストアサブプログラム２１２、オンデマンドサブリストアプログラム２１３、ブロックアドレス変換サブプログラム２１４、リストア管理情報２１５から構成される。
【００３４】
瞬間リストア制御サブプログラム２１１は、管理者がＮＡＳ管理端末１０２から指令した瞬間リストアの要求を受け付け、瞬間リストアの処理全体の流れを制御するサブプログラムである。
【００３５】
バックグラウンドサブプログラム２１２は、リストア元として指示された仮想スナップショットボリューム１５２の中から差分ボリューム１４２に格納されているブロックのデータを、指定された運用ボリュームへ定められた順番に従ってリストアしていくサブプログラムである。
【００３６】
ここで、リストアするブロックの順序は、ブロック番号の昇順、降順でも良いし、アクセス頻度などの統計値の大小の順であっても良い。またリストア対象のブロックが他のサブプログラムによって既にリストアされている場合は、選択したブロックのリストアを行わずに次のブロックのリストアに移る。
【００３７】
オンデマンドリストアサブプログラム２１３は、仮想運用ボリューム１５１への書き込みを実現するめに、バックグラウンドリストアサブプログラム２１２の稼動中に書き込み処理サブプログラム２０１によって呼び出されるサブプログラムである。オンデマンドリストアサブプログラム２１３は、後述するように、書き込むデータがリストアが完了していないブロック上にある場合に、そのブロックに対してオンデマンドでリストアを実行する。これによって書き込み処理後の最新のデータがバックグラウンドで実行されるリストアによって書きつぶされることを防ぐ。尚、このオンデマンドのリストアは書き込み対象のデータとブロックが一致している場合は不要であるが、本実施形態では制御を簡便化するため、データとブロックの一致／不一致に関わらずオンデマンドのリストアを行う。
【００３８】
ブロックアドレス変換サブプログラム２１４は、仮想運用ボリューム１５１からの読み出しを実現するために、バックグラウンドのリストア稼動中に読み出し処理サブプログラム２０２によって呼び出されるサブプログラムである。仮想運用ボリューム１５１において、既にリストアが完了したブロックの実体は運用ボリューム１４１の同ブロック番号内に格納されており、未だリストアが完了していないブロックの実体はリストア元のスナップショットボリューム１５２の同ブロック番号に格納されている。このため、ブロックアドレス変換サブプログラム２１４は、読み出し対象のブロックが未だリストアが完了していないものである場合、読み出し対象のボリュームを運用ボリューム１４１からリストア元のスナップショットボリューム１５２へ変更し、読み出し処理サブプログラムに渡す。
【００３９】
リストア管理情報２１５は、瞬間リストアを管理するために瞬間リストア制御サブプログラム２１１内のサブプログラム群が使用する情報であり、リストア処理の進行状況を示すものである。通常はＮＡＳサーバ装置１１０のメモリ１２上に格納される情報であるが、信頼性のことを考慮してディスク装置１２０のボリューム上に配置する場合もある。
【００４０】
（瞬間リストア管理プログラムが扱うデータ構造）
図８は瞬間リストア管理情報２１５の構成を示したブロック図である。瞬間リストア管理情報２１５は、リストアプロセス数カウンタ２１６、リストア管理テーブル２１７、及びアクセス済みブロックビットマップ２１８から構成される。
【００４１】
リストアプロセス数カウンタ２１６は、バックグラウンドリストアサブプログラム２１２が起動している数を示す。このリストアプロセス数カウンタ２１６はバックラウンドリストアサブプログラム２１２の開始／終了によってインクリメント／デクリメントされる。このカウンタ２１６は、書き込み処理サブプログラム２０１、読み出し処理サブプログラム２０２が、それぞれオンデマンドリストアサブプログラム２１３、ブロックアドレス変換サブプログラム２１４を呼び出す必要があるかを判定するために使用される。
【００４２】
リストア管理テーブル２１７は、複数のバックラウンドリストアがそれぞれ異なる運用ボリューム１４１に対してリストアすることを管理するために使用される。このリストア管理テーブル２１７は、バックグラウンドリストアの番号を示す列３０１、リストア先の運用ボリュームの識別子を示す列３０２、リストア元のスナップショットボリュームの識別子を示す列３０３、リストア中のリストア元ボリューム（スナップショットボリューム１５２）のブロック番号を示す列３０４、及びアクセス済みブロックビットマップ２１８（後述）のポインタから構成される。リストア管理テーブル２１７を参照することにより、バックグラウンドリストア番号３０１で示されるリストア処理が、現在どのブロックについて処理を実行しているのかを把握することができる。
【００４３】
アクセス済みブロックビットマップ２１８は、バックグラウンドリストア番号３０１毎に設定されるもので、運用ボリューム１４１（リストア先ボリューム）のどのブロックがリストア済みであり、どのブロックが未だリストアされていないかを管理するためのアクセス済みブロックビットマップ２１８（アクセス管理部）であり、メモリ１２上に配置される管理マップまたは管理表である。すなわち、アクセス済みブロックビットマップ２１８は、リストア先の運用ボリュームのデータブロック単位でリストアの履歴（リストアによるアクセスの履歴）を保持する。アクセス済みブロックビットマップ２１８の１ビットが運用ボリューム１４１の１ブロックに対応する。そのため本ビットマップ２１８は、ボリュームを構成するブロック数に相当するビット幅を持つ。本実施形態ではビットの値が１であるときに対応するブロックがリストア済みであることを示し、逆にビットの値が０のときに対応するブロックがリストアされていないことを示す。
【００４４】
（瞬間リストア制御サブプログラムの処理フロー）
図９は瞬間リストア制御サブプログラム２１１が実施する瞬間リストアの処理全体のフローチャートである。瞬間リストア制御サブプログラム２１１は、ＮＡＳ管理端末１０２から瞬間リストアの開始指示を受けると、まずリストア元の仮想スナップショットボリューム１５２とリストア先の運用ボリューム１４１が共に正常かを調べる（５０１）。なお、リストア元の仮想スナップショットボリューム１５２は、ＮＡＳ管理端末１０２から管理者が指示するものであり、リストア先ボリュームは、仮想スナップショットボリューム１５２が指し示す運用ボリューム１４１となる。
【００４５】
どちらか一つのボリューム、又は両方のボリュームが異常な場合は以降の処理を行わず瞬間リストアを終了する。どちらのボリュームも正常の場合は、リストア先ボリューム１４１がリストア管理テーブル２１７に未登録かどうかを調べる（５０２）。リストア先ボリューム１４１が未登録ではなく、既にリストア管理テーブル２１７に登録されている場合、他の瞬間リストアがリストア先の運用ボリュームをバックグラウンドでリストア中であるため、以降の処理を行わず瞬間リストアを終了する。一方、リストア先ボリュームがリストア管理テーブル２１７に未登録である場合、リストア先の運用ボリュームのブロック数以上のビット数を持つアクセス済みブロックビットマップ２１８をメモリ１２上に確保し、全てのビットを‘０’に初期化する（５０３）。
【００４６】
アクセス済みブロックビットマップ２１８の全てのビットを初期化し終わると、このサブプログラム２１１は、リストア管理テーブル２１７に、リストア先の運用ボリューム１４１の識別子を図８に示すリストア管理テーブル２１７の列３０２へ設定し、リストア元の仮想スナップショットボリューム１５２の識別子を同じくテーブル２１７の列３０３に設定し、アクセス済みブロックビットマップ２１８のポインタを列３０５に登録する。そして最後にバックグラウンドリストアサブプログラム２１２を起動し（５０５）、処理を終了する（５０５）。
【００４７】
（バックグラウンドリストアサブプログラムの処理フロー）
図１０はバックグラウンドリストアサブプログラム２１２の処理全体のフローチャートである。バックグラウンドリストアサブプログラム２１２は、瞬間リストア制御サブプログラム２１１より起動されると、まず、リストアプロセス数カウンタ２１６をインクリメントする（５１１）。このカウンタ２１６が１以上であるとき、オンデマンドリストアサブプログラム２１３やブロックアドレス変換サブプログラム２１４は有効化されており、これらを書き込み処理サブプログラム２０１や読み出し処理サブプログラム２０２が呼び出す。次に自サブプログラム２１２をバックラウンド処理化する（５１２）。このステップ５１２の完了後、瞬間リストア制御サブプログラム２１１の応答がＮＡＳ管理端末１０２に対して返る。そのため、管理者から見ると、コマンド投入後直ぐにリストアが完了した様に見える。
【００４８】
次に、バックグラウンドリストアサブプログラム２１２は、リストア対象のブロック番号を決定する（５１３）。ブロック番号の決定方法はボリュームの先頭から番号をインクリメントしても良いし、ボリュームの最後からデクリメントしても良い。あるいは、ブロックへのアクセス頻度の統計をとり、アクセス頻度の低いブロック番号から決めていってもよい。
【００４９】
次に、決定したブロック番号をリストア管理テーブル２１７のリストア中ブロック番号３０４に登録する（５１４）。次にアクセス済みブロックビットマップ２１８の中でリストア対象ブロックのブロック番号に対応するビットが０かをチェックする（５１５）。対応するビットが１の場合（０ではない場合）、選択したブロックは自サブプログラム又はオンデマンドリストアサブプログラム２１３によって既にアクセスされているため以降の処理は行わずに、次のリストア対象ブロック番号を決定するステップ（５１３）に戻る。一方、バックグラウンドリストアサブプログラム２１２の対応するビットが０の場合、選択したブロックは自サブプログラム２１２又はオンデマンドリストアサブプログラム２１３によってまだ一度もアクセスされていないため、リストア実行のための処理を継続する。
【００５０】
次に差分ブロック管理テーブル２０３からリストア対象ブロックに対応するエントリを読みだし（５１６）、エントリ内にあるリストア対象ブロックの配置アドレスを参照することによって、リストア元スナップショットのリストア対象ブロックの実データが差分ボリューム１４２にあるか否かを調べる（５１７）。リストア対象ブロックの実データが差分ボリューム４１２に格納されている場合、このサブプログラム２１２は実データを差分ボリューム１４２の格納先ブロックから運用ボリューム１４１のリストア対象ブロックへコピーする（５１８）。リストア対象ブロックの実データが差分ボリューム１４２に格納されていなかった場合、実データは運用ボリューム１４１上にあるためステップ５１８をスキップする。これでリストア又はリストアのチェックが完了したため、アクセス済みブロックビットマップ２１８のリストア対象ブロックに対応するビットを１にする。
【００５１】
次に全てのブロックに対してリストアが完了したかを判定する（５２０）。つまり、アクセス済みブロックビットマップ２１８の全ビットが１になったかを判定し、０のビットがあれば全てのブロックに対してリストアが完了していないので、ステップ５１３に戻り、データブロックのリストアを続行する。全てのブロックに対してリストアが完了した場合、リストア管理テーブル２１７の自プロセスのエントリを初期化し（５２１）、アクセス済みブロックビットマップ２１８をメモリ１２から解放し（５２２）、最後にリストア中プロセス数カウンタをデクリメントして、処理を終了する。
【００５２】
以上の図９、図１０の処理により、ＮＡＳ統合装置１０４はリストアの指令を受けると、リストア済みブロックビットマップ２０８と、差分ブロック管理テーブル２０３及びリストア管理テーブル２１７を用いて、指定された仮想スナップショットボリューム１５２の内容となるように、差分ボリューム１４２から運用ボリューム１４１にデータの複写を実行する。そして、本発明のリストアでは、仮想スナップショットボリューム１５２と運用ボリューム１４１の差分データのみを転送すればよいので、差分ボリューム１４２から運用ボリューム１４１へのデータ転送量を大幅に低減することができ、リストア処理に要する負荷を低減できる。
【００５３】
前記非特許文献１では、親ボリュームのクローンを定期的に作成し、リストアする際には選択したクローンと親ボリュームが共有しているデータをクローンボリュームにコピーする場合では、親ボリュームから消失したデータが少ないほど（親ボリュームとクローンの共有データが多いほど）、バックグラウンドのコピー処理の負荷が高くなる。
【００５４】
これに対して、本願発明では、スナップショットボリューム１５２と運用ボリューム１４１の差分データのみをコピーするので、前記従来例に比して低負荷でリストア処理を実現できるのである。
【００５５】
また、前記非特許文献１では、親ボリュームと選択したクローンのデータをクローンボリュームへコピーするため、クローンの容量が大きい場合には、コピー先のクローンボリュームの容量が不足してリストアが中断する場合がある。
【００５６】
これに対して、本願発明では、仮想スナップショットボリューム１５２に基づいて、差分ボリューム１４２から更新差分のブロックを運用ボリューム１４１に戻すだけであるので、運用ボリューム１４１のデータ量はスナップショットボリューム１５２が示すブロックのデータ量と同一であり、運用ボリューム１４１より大きくなることはない。このため、前記従来例のようにリストア処理によって容量が不足するような事態を確実に回避でき、リストア処理の信頼性を高めることができるのである。
【００５７】
（書き込み処理サブプログラムとオンデマンドリストア処理プログラムの処理フロー）
図１１は書き込み処理サブプログラム２０１の処理フローを示す図である。書き込み処理サブプログラム２０１は、運用ボリューム１４１に対する書き込み要求を受けると、まず初めにリストア中プロセス数カウンタ２１６の値が１以上であるかを調べる（５３１）。カウンタの値が１以上でない（０である）場合、リストアが行われていないので通常のデータ書き込みを行い（５３３）、処理を終了する。カウンタの値が１以上の場合、リストア中であるためオンデマンドリストアサブプログラム２１３を実行した後（５３２）、通常のデータ書き込みを行い（５３３）、処理を終了する。
【００５８】
図１２はオンデマンドリストアサブプログラム２１３の処理フローを示す図である。オンデマンドリストアサブプログラム２１３は、書き込み処理サブプログラム２０１に呼び出されると、まず、書き込み対象のボリュームがリストア管理テーブル２１７に登録されているかを調べる（５４１）。登録されていない場合、その運用ボリューム１４１はリストア元ではないため、何も行わずにサブプログラムを終了する。登録されている場合、その運用ボリュームはリストア元としてバックグラウンドでリストアされている最中であることがわかる。この場合、オンデマンドリストアサブプログラム２１３は、書き込み要求のデータを含むデータブロックのアドレスを求め、リストア対象ブロックとする（５４２）。次にリストア管理テーブル２１７に登録されているポインタからアクセス済みビットマップ２１８を参照し（５４４）、同ビットマップ２１８のリストア対象ブロックに対応するビットが０か１かをチェックする（５４５）。リストア対象ブロックに対応するビットマップ２１８のビットが１の場合、そのブロックはもうすでにリストア済みであるため、以降の処理を行わずにそのまま処理を終了する。リストア対象ブロックに対応するビットマップ２１８のビットが０の場合、差分ブロック管理テーブル２０３からリストア対象ブロックのエントリを読み出す（５４５）。そして、読み出したエントリからリストア対象ブロックのデータが差分管理ボリューム１４２に退避されているかを調べる（５４６）。リストア対象データブロックの実データが差分管理ボリューム１４２に格納されている場合、その実データを差分ボリューム１４２から運用ボリューム１４１のリストア対象データブロックへコピーする（５４７）。リストア対象データブロックの実データが差分管理ボリューム１４２に格納されていない場合、実データは運用ボリュームにあるためステップ５４７は行わずその次のステップに移る。その次のステップ５４８ではアクセス済みブロックビットマップ２１８のリストア対象ブロックに対応するビットを１にセットする（５４８）。次にリストア管理テーブル２１７の該当エントリのリストア中ブロック番号３０４とリストア対象ブロックが一致しないかを調べる（５４９）。両ブロック番号が一致した場合、リストア中ブロック番号３０４が別の値になるまでウェイトする（５５０）。これは、このオンデマンドリストアサブプログラム２１３の次に控えている通常の書き込みが、ステップ５４９でバックラウンドリストアサブプログラム２１３が実行中のデータブロックへのリストアを追い越してしまい、その後、通常書き込みによって書いたデータが古いリストアデータによって上書きされてしまうことを防止するためである。そして、ステップ５５０のウェイトが終わると、オンデマンドリストア処理が終了する。
【００５９】
以上の図１１、図１２の処理により、リストア中にＮＡＳクライアント１０１から書き込み要求があると、ＮＡＳ統合装置１０４のスナップショット管理プログラム１１３は、リストア元の仮想スナップショットボリューム１５２から、運用ボリューム１４１と差分ボリューム１４２の内容をリストア処理の進行状況に応じて組み合わせてリストア後の仮想的な運用ボリューム１５１に見せかけてアクセスを行う。このため、リストア開始と同時に、ＮＡＳクライアント１０１からはリストア完了後の状態でアクセスを受け付けることができる。
【００６０】
すなわち、書き込み対象のブロックが、リストア完了であれば運用ボリューム１４１に書き込みを行う。一方、書き込み対象のブロックリストア前であれば差分ボリューム１４２からスナップショットボリューム１５２が指し示すデータを運用ボリューム１４１へ書き込んでから書き込み要求のデータを運用ボリューム１４１に書き込む。この場合、一旦、差分ボリューム１４２の古いデータで運用ボリューム１４１を更新してから新たなデータを書き込むのは、リストアの単位が１ブロック単位ではないためである。このため、オンデマンドリストアサブプログラム２１３は、新たな書き込みを行うブロックを含む位置をリストアし、その後、新たなデータを運用ボリューム１４１に書き込む。これにより、複数ブロック単位でリストアを行ってリストア処理の速度を向上させながら、新たなデータがリストア処理により上書きされるのを確実に防ぐことができる。
【００６１】
（読み出し処理サブプログラムとブロックアドレス変換サブプログラムの処理フロー）
図１３は読み出し処理サブプログラム２０２の処理を示すフローチャートである。読み出し処理サブプログラム２０２は、運用ボリューム１４１に対する読み出し要求を受けると、まず初めにリストア中プロセス数カウンタ２１６の値が１以上であるかを調べる（５５１）。カウンタの値が１以上でない（０である）場合、リストア処理は行われていないので、通常のデータ読み出しを行い（５５３）、処理を終了する。カウンタの値が１以上の場合、リストア中であるので、ブロックアドレス変換サブプログラム２１４を実行した後（５３２）、通常のデータ読み出しを行い（５５３）、処理を終了する。
【００６２】
図１４はブロックアドレス変換サブプログラム２１４の処理を示すフローチャートである。ブロックアドレス変換サブプログラム２１４は、読み出し処理サブプログラム２０２に呼び出されると、まず、読み出し対象ボリュームがリストア管理テーブル２１７に登録されているかを調べる（５６１）。登録されていない場合は、該当ボリュームはリストア中でないので、ブロックアドレス変換サブプログラム２１４は何もせずに終了する。登録されている場合、該当ボリュームがリストア中であるため、読み出し対象データを含むブロックのアドレスを求める。そしてリストア管理テーブル２１７から読み出し対象ボリュームに対応するアクセス済みブロックビットマップ２１８のポインタを読み出す（５６３）。そしてアクセス済みブロックビットマップ２１８の読み出し対象ブロックに対応するビットが０か否かを調べる。ビットが０でない場合（１の場合）、もうそのブロックはリストア済みであり、運用ボリューム１４１にマッピングされているため、ブロックアドレス変換は行わず処理を終了する。一方、対応するビットが１の場合、読み出し対象ボリュームを、リストア管理テーブル２１７の該当エントリのリストア元ボリュームの欄に登録されている仮想スナップショットボリューム１５２とする（５６５）。
【００６３】
以上の図１３、図１４の処理により、リストア中にＮＡＳクライアント１０１から参照要求があると、ＮＡＳ統合装置１０４のスナップショット管理プログラム１１３は、リストア元の仮想スナップショットボリューム１５２に基づいて、運用ボリューム１４１と差分ボリューム１４２の内容をリストア処理の進行状況に応じて組み合わせた仮想的な運用ボリューム１５１に見せかけてアクセスを受け付ける。したがって、リストア開始と同時にＮＡＳクライアント１０１からはリストア完了後の状態でアクセスを受け付けることができる。
【００６４】
（全体的な作用）
図１５は、リストア処理の開始後にＮＡＳクライアント１０１から書き込み要求があった場合の処理の流れを示す説明図である。この例では、複数の世代のスナップショット（９時、１０時、１１時）のうち、時刻１１：００の時点の仮想スナップショットボリューム１５２（ＶＶＯＬ３）を用いて運用ボリューム１４１をリストアする場合を示している。
【００６５】
ＮＡＳ管理端末１０２が仮想スナップショットボリューム１５２（ＶＶＯＬ３）を指定して、ＮＡＳ統合装置１０４にリストア開始を指定する。ＮＡＳ統合装置１０４のＮＡＳサーバ装置１１０は瞬間リストア管理プログラム１１４を起動し、アクセス済みブロックビットマップ２１８を確保して、リストア管理テーブル２１７に対象ボリュームの設定を行う。
【００６６】
瞬間リストア管理プログラム１１４は、差分ブロック管理テーブル２０３を参照して、リストア元の仮想スナップショットボリューム１５２の識別子（この例では、０００５）と、運用ボリューム１４１の識別子（この例では、０００１）を上述のように設定して、差分ボリューム１４２から運用ボリューム１４１へのリストアを開始する。
【００６７】
リストア処理では、上述したように、リストア管理テーブル２１７のリストア中ブロック番号３０４に対応するリストア済みブロックビットマップ２１８を参照し（Ｓ１）、リストアが必要であれば差分ブロック管理テーブル２０３を参照して（Ｓ２）このブロックに対応するデータを差分ボリューム１４２から取得する。そして、取得したデータをブロック番号３０４に対応する運用ボリューム１４１のブロック番号にコピーする（Ｓ３）。なお、リストア中ブロック番号３０４で指示されたブロックが、差分ブロック管理テーブル２０３で０であれば、運用ボリューム１４１のデータがリストアするデータであるので、コピーは行わずに次の処理に進む。この処理を運用ボリューム１４１の所定の位置（例えば、先頭）から実施して、リストア済みブロックビットマップ２１８の全ビットが１になるまで繰り返す。
【００６８】
上記リストア中にＮＡＳクライアント１０１からデータＣを運用ボリューム１４１に書き込む指令をＮＡＳサーバ装置１１０が受信すると、スナップショット管理プログラム１１３を起動する。スナップショット管理プログラム１１３は、オンデマンドリストアサブプログラム２１３により差分ボリューム１４２から時刻１１：００の時点の仮想スナップショットボリューム１５２（ＶＶＯＬ３）に対応するデータＡを差分ボリューム１４２のブロック４５６から運用ボリューム１４１のブロック１２３にコピーする（Ｓ３）。
【００６９】
書き込むブロックのリストアが完了すると、スナップショット管理プログラム１１３は運用ボリューム１４１のブロック１２３にデータＣを書き込んで、処理を終了する。なお、上述したように、参照する場合もリストア済みブロックビットマップ２１８と差分ブロック管理テーブル２０３から、対象ブロックのデータを差分ボリューム１４２または運用ボリューム１４１の何れかより読み出すことができる。
【００７０】
以上のように、本発明によればリストア開始直後からＮＡＳクライアント１０１はリストア完了後の状態でアクセスを行うことができる。そして、リストア処理は差分ボリューム１４２から更新差分のデータのみについて運用ボリューム１４１へコピーすればよいので、転送するデータ量を削減してリストア中のＮＡＳ統合装置１０４の負荷を低減することができ、前記従来例のようにＮＡＳの高負荷によりアクセス性能が低下するのを防止することができる。特に更新差分データが少ないときには、差分ボリューム１４２から運用ボリュームに転送するデータ量も少なくなり、見かけ上リストアが完了した後のＮＡＳ統合装置１０４の負荷を低減できる。
【００７１】
以上のように、本発明によれば、ＮＡＳのスナップショットの瞬間リストアにおいて、スナップショット取得後の運用ボリュームのデータ更新量が少ないにもかかわらずサービス復旧後のサービスレベルが長時間に渡って低下する問題を防止するとともに、運用ボリューム復旧（リストア）中のディスク容量不足による失敗を防止することができる。
【００７２】
なお、上記実施形態においては、ＮＡＳ統合装置１０４に本発明を適用した例を示したが、ＳＡＮに接続されるストレージ装置に適用しても良い。
【００７３】
また、上記実施形態では運用ボリューム１４１と差分ボリューム１４２が同一のストレージ装置内に配置された例を示したが、運用ボリューム１４１と差分ボリューム１４２が異なるストレージ装置に配置される場合も、本発明を適用することができる。
【産業上の利用可能性】
【００７４】
以上のように、本発明は差分スナップショットを利用する機能とリストア機能を備えたを備えたストレージ装置に適用することができる。
【図面の簡単な説明】
【００７５】
【図１】本発明の実施形態を示す情報システムの全体構成を示すブロック図。
【図２】ＮＡＳ統合装置の機能を示すブロック図。
【図３】物理的なボリュームとスナップショット管理プログラムが提供する仮想的なボリューム群の関係を示す説明図。
【図４】スナップショット管理プログラムの構成を示すブロック図。
【図５】差分スナップショットの例を示す説明図。
【図６】差分ブロック管理テーブルの一例を示す説明図。
【図７】瞬間リストア管理プログラムの構成を示すブロック図。
【図８】瞬間リストア管理情報２１５の構成を示したブロック図。
【図９】瞬間リストア制御サブプログラムの一例を示す瞬間リストア処理のフロー。
【図１０】バックグラウンドリストアサブプログラムの処理を示すフローチャート。
【図１１】書き込み処理サブプログラムの処理を示すフローチャート。
【図１２】オンデマンドリストアサブプログラムの処理を示すフローチャート。
【図１３】読み出し処理サブプログラムの処理を示すフローチャート。
【図１４】ブロックアドレス変換サブプログラムの処理を示すフローチャート。
【図１５】リストア処理の開始後にＮＡＳクライアントから書き込み要求があった場合の処理の流れを示す説明図。
【符号の説明】
【００７６】
１０３  ネットワーク
１０４  ＮＡＳ統合装置
１１３  スナップショット管理プログラム
１１４  瞬間リストア管理プログラム
１２０  ディスク装置
１４１  運用ボリューム
１４２  差分ボリューム
１５１  仮想スナップショットボリューム
２０３  差分ブロック管理テーブル
２１６  リストアプロセス数カウンタ
２１７  リストア管理テーブル
２１８  リストア済みブロックビットマップ
【図１】
0004809040.tif 000002
【図２】
0004809040.tif 000003
【図３】
0004809040.tif 000004
【図４】
0004809040.tif 000005
【図５】
0004809040.tif 000006
【図６】
0004809040.tif 000007
【図７】
0004809040.tif 000008
【図８】
0004809040.tif 000009
【図９】
0004809040.tif 000010
【図１０】
0004809040.tif 000011
【図１１】
0004809040.tif 000012
【図１２】
0004809040.tif 000013
【図１３】
0004809040.tif 000014
【図１４】
0004809040.tif 000015
【図１５】
0004809040.tif 000016