(57)【特許請求の範囲】
【請求項１】
記憶装置が有する第一及び第二の論理ボリュームのうちの第一の論理ボリュームを上位装置に提供し前記第一の論理ボリュームのスナップショットを管理する記憶制御装置であって、
スナップショット取得時点以降に、ライト対象に対応したデータ要素を前記第一の論理ボリューム内の第一の記憶領域に書き込むことになる場合、前記第一の記憶領域に記憶されている更新前のデータ要素を、前記第二の論理ボリュームに退避し、前記第一の記憶領域に、前記ライト対象に対応したデータ要素を書き込むライト処理部と、
前記第一の論理ボリュームのスナップショットにおける第二の記憶領域からデータ要素を読み出すことになる場合、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていれば、前記第二の論理ボリューム内の前記記憶領域からデータ要素を読出し、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていなければ、前記第二の記憶領域に対応する、前記第一の論理ボリューム内の記憶領域からデータ要素を読み出すリード処理部と
を備え、
前記ライト処理部は、抹消に対応したライトリクエストを受けて、前記抹消に対応したライトリクエストに応答して、前記スナップショット取得時点以降に、前記第一の論理ボリューム内の第三の記憶領域に記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記第三の記憶領域と前記第三の記憶領域に記憶されている前記抹消対応データ要素に対応する暗号化データ要素が記憶されている第四の記憶領域とを対応付け、
前記リード処理部は、第一のリードリクエストを受け、前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第五の記憶領域からデータ要素を読み出すことになる場合、前記第五の記憶領域が、前記第四の記憶領域に対応しているならば、以下の（１）乃至（３）のうちのいずれか、
（１）前記第四の記憶領域に記憶されている前記暗号化データ要素を、前記第一のリードリクエストの送信元に送信する、
（２）前記暗号化データ要素を復号化することにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信する、
（３）アクセスエラーを、前記第一のリードリクエストの送信元に送信する、
を実行する、
記憶制御装置。
【請求項２】
前記第四の記憶領域は、前記第二の論理ボリューム内の記憶領域であり、
前記第二の論理ボリュームの記憶領域毎に、保護の要否が設定され、
前記ライト処理部が、前記第三の記憶領域に記憶されていた前記抹消対応データの前記暗号データ要素の書込み先である前記第四の記憶領域について、保護が必要との設定を行い、
前記第四の記憶領域に記憶された前記暗号化データ要素は、前記第三の記憶領域に記憶されていた前記抹消対応データ要素が可逆変換形式で暗号化されたデータ要素である、
請求項１記載の記憶制御装置。
【請求項３】
前記リード処理部は、以下の（１）及び（２）の処理、
（１）前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける前記第五の記憶領域からデータ要素を読み出すことになる場合、前記第四の記憶領域について保護が必要との設定になっていることを検出し、且つ、復号化が許可されているならば、前記第四の記憶領域から前記暗号化データ要素を読み出して復号化し、それにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信し、
（２）第二のリードリクエストを受けて、前記第二のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第六の記憶領域からデータ要素を読み出すことになる場合、前記第六の記憶領域に対応する、前記第二の論理ボリューム内の第七の記憶領域について、保護が不要との設定になっていることを検出したならば、前記第七の記憶領域からデータ要素を読み出し、前記データ要素を復号化することなく前記第ニのリードリクエストの送信元に送信する、
を実行する、
請求項２記載の記憶制御装置。
【請求項４】
前記暗号化データ要素は、前記抹消対応データ要素に復号化することが不可能なデータ要素である、
請求項１記載の記憶制御装置。
【請求項５】
前記暗号化データ要素は、前記抹消対応データ要素と異なる特定のデータ要素であり、
前記第四の記憶領域は、複数の前記抹消対応データが記憶される、前記第一の論理ボリューム内の複数の記憶領域に共通の記憶領域であって、前記特定のデータ要素が予め記憶されている所定の記憶領域であり、
前記ライト処理部が、前記第一の論理ボリューム内のどの記憶領域に前記抹消データ要素を書き込むことになっても、前記抹消データ要素の書込み先の記憶領域に対して、前記第四の記憶領域を対応付ける、
請求項４記載の記憶制御装置。
【請求項６】
前記第一の論理ボリュームのスナップショットを構成する複数の記憶領域のうち、暗号化データ要素が記憶されている記憶領域に対応付けられている記憶領域の数が、第一の数よりも多ければ、前記第一の論理ボリュームのスナップショットを構成する各記憶領域のアドレスに対応付けられた各記憶領域アドレスを含んだスナップショット管理情報における、前記各記憶領域アドレスを、暗号化するアドレス暗号化部、
を更に備える、
請求項１乃至５のうちのいずれか一項に記載の記憶制御装置。
【請求項７】
前記第一の論理ボリュームのスナップショットを構成する複数の記憶領域のうち、暗号化データ要素が記憶されている記憶領域に対応付けられている記憶領域の数が、第一の数よりも多ければ、前記スナップショットを暗号化対象に設定する暗号化設定部、
を更に備え、
前記ライト処理部が、前記スナップショットが暗号化対象に設定されていることを検出した場合、前記第一の論理ボリュームのスナップショットを構成する記憶領域のアドレスに対応付けられる記憶領域アドレスを含むスナップショット管理情報において、前記第一の記憶領域に対応する、前記第一の論理ボリュームのスナップショットにおける記憶領域のアドレスに、前記第二の論理ボリューム内の退避先の記憶領域の暗号化されたアドレスを対応付ける、
請求項１乃至６のうちのいずれか一項に記載の記憶制御装置。
【請求項８】
前記スナップショット管理情報は、前記第一の論理ボリュームのスナップショットの世代毎に、記第一の論理ボリュームのスナップショットにおける記憶領域のアドレスに対応する、前記第二の論理ボリューム内の記憶領域のアドレス、を含み、
暗号化データ要素が記憶されている記憶領域の数が前記第一の値よりも多い世代のスナップショットにおける記憶領域のアドレスに対応付けられるアドレスが暗号化される、
請求項６又は７記載の記憶制御装置。
【請求項９】
前記ライト処理部は、前記抹消データ要素を書き込むことになる時点が、どのスナップショット取得時点以降であるかに応じて、前記抹消対応データ要素の暗号化データ要素を、前記抹消対応データを可逆変換形式で暗号化したデータ要素とするか、前記抹消対応データに復号化することが不可能な形式のデータ要素とするかを違える、
請求項１乃至８のうちのいずれか一項に記載の記憶制御装置。
【請求項１０】
前記ライト処理部及びリード処理部が、前記第一の論理ボリュームのスナップショットを管理するスナップショット管理部に含まれており、
前記スナップショット管理部の上位に、前記上位装置から受け付けたファイル単位のＩ／Ｏリクエストをブロック単位のＩ／Ｏリクエストに変換して下位に出力する上位処理部が備えられ、
前記ライト対象及び前記抹消対象は、ファイルであり、
前記データ要素は、ブロックデータであり、
前記ライト処理部は、ブロック単位のライトリクエストに応答して、ライト対象ファイルに対応したデータ要素を書き込み、
前記リード処理部は、ブロック単位のリードリクエストに応答して、リード対象ファイルに対応したデータ要素を読み出し、読み出したデータ要素を、前記ブロック単位のリードリクエストの送信元である前記上位処理部に送信し、
前記上位処理部が、前記上位装置から抹消対象ファイルを指定した抹消リクエストを受けた場合に、前記抹消対象ファイルに対応した前記抹消対応データ要素を前記抹消データ要素で上書きすることのライトリクエストを抹消の明示に関連付けて、前記スナップショット管理部に送り、
前記抹消に対応したライトリクエストは、前記抹消の明示に関連した前記ライトリクエストである、
請求項１乃至９のうちのいずれか一項に記載の記憶制御装置。
【請求項１１】
前記暗号化データ要素は、ダミーのデータ要素であるダミーデータ要素である、
請求項１乃至１０のうちのいずれか一項に記載の記憶制御装置。
【請求項１２】
第一及び第二の論理ボリュームのうちの前記第一の論理ボリュームを上位装置に提供し前記第一の論理ボリュームのスナップショットを管理するストレージシステムであって、
前記第一及び第二の論理ボリュームの基になっている複数の物理記憶装置と、
スナップショット取得時点以降に、ライト対象に対応したデータ要素を前記第一の論理ボリューム内の第一の記憶領域に書き込むことになる場合、前記第一の記憶領域に記憶されている更新前のデータ要素を、前記第二の論理ボリュームに退避し、前記第一の記憶領域に、前記ライト対象に対応したデータ要素を書き込むライト処理部と、
前記第一の論理ボリュームのスナップショットにおける第二の記憶領域からデータ要素を読み出すことになる場合、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていれば、前記第二の論理ボリューム内の前記記憶領域からデータ要素を読出し、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていなければ、前記第二の記憶領域に対応する、前記第一の論理ボリューム内の記憶領域からデータ要素を読み出すリード処理部と
を備え、
前記ライト処理部は、抹消に対応したライトリクエストを受けて、前記抹消に対応したライトリクエストに応答して、前記スナップショット取得時点以降に、前記第一の論理ボリューム内の第三の記憶領域に記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記第三の記憶領域と前記第三の記憶領域に記憶されている前記抹消対応データ要素に対応する暗号化データ要素が記憶されている第四の記憶領域とを対応付け、
前記リード処理部は、第一のリードリクエストを受け、前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第五の記憶領域からデータ要素を読み出すことになる場合、前記第五の記憶領域が、前記第四の記憶領域に対応しているならば、以下の（１）乃至（３）のうちのいずれか、
（１）前記第四の記憶領域に記憶されている前記暗号化データ要素を、前記第一のリードリクエストの送信元に送信する、
（２）前記暗号化データ要素を復号化することにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信する、
（３）アクセスエラーを、前記第一のリードリクエストの送信元に送信する、
を実行する、
ストレージシステム。
【請求項１３】
以下の（Ａ）及び（Ｂ）、
（Ａ）記憶装置が有する第一及び第二の論理ボリュームのうちの第一の論理ボリュームを上位装置に提供し前記第一の論理ボリュームのスナップショットを管理する記憶制御装置が、スナップショット取得時点以降に、ライト対象に対応したデータ要素を、上位装置に提供された第一の論理ボリューム内の第一の記憶領域に書き込むことになる場合、前記第一の記憶領域に記憶されている更新前のデータ要素を、前記上位装置に非提供の第二の論理ボリュームに退避し、前記第一の記憶領域に、前記ライト対象に対応したデータ要素を書き込み、
（Ｂ）前記記憶制御装置が、前記第一の論理ボリュームのスナップショットにおける第二の記憶領域からデータ要素を読み出すことになる場合、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていれば、前記第二の論理ボリューム内の前記記憶領域からデータ要素を読出し、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていなければ、前記第二の記憶領域に対応する、前記第一の論理ボリューム内の記憶領域からデータ要素を読み出す、
を行うことになるスナップショット管理の方法であって、
前記記憶制御装置が、抹消の明示に関連したライトリクエストを受けて、
前記記憶制御装置が、前記抹消の明示に関連したライトリクエストに応答して、前記スナップショット取得時点以降に、前記第一の論理ボリューム内の第三の記憶領域に記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記第三の記憶領域と前記第三の記憶領域に記憶されている前記抹消対応データ要素に対応する暗号化データ要素が記憶されている第四の記憶領域とを対応付け、
前記記憶制御装置は、第一のリードリクエストを受け、前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第五の記憶領域からデータ要素を読み出すことになる場合、前記第五の記憶領域が、前記第四の記憶領域に対応しているならば、以下の（１）乃至（３）のうちのいずれか、
（１）前記第四の記憶領域に記憶されている前記暗号化データ要素を、前記第一のリードリクエストの送信元に送信する、
（２）前記暗号化データ要素を復号化することにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信する、
（３）アクセスエラーを、前記第一のリードリクエストの送信元に送信する、
を実行する、
方法。
【請求項１４】
以下の（Ａ）及び（Ｂ）、
（Ａ）スナップショット取得時点以降に、ライト対象に対応したデータ要素を、上位装置に提供された第一の論理ボリューム内の第一の記憶領域に書き込むことになる場合、前記第一の記憶領域に記憶されている更新前のデータ要素を、前記上位装置に非提供の第二の論理ボリュームに退避し、前記第一の記憶領域に、前記ライト対象に対応したデータ要素を書き込み、
（Ｂ）前記第一の論理ボリュームのスナップショットにおける第二の記憶領域からデータ要素を読み出すことになる場合、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていれば、前記第二の論理ボリューム内の前記記憶領域からデータ要素を読出し、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていなければ、前記第二の記憶領域に対応する、前記第一の論理ボリューム内の記憶領域からデータ要素を読み出す、
をコンピュータに実行させることになるコンピュータプログラムであって、
抹消の明示に関連したライトリクエストを受けて、
前記抹消の明示に関連したライトリクエストに応答して、前記スナップショット取得時点以降に、前記第一の論理ボリューム内の第三の記憶領域に記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記第三の記憶領域と前記第三の記憶領域に記憶されている前記抹消対応データ要素に対応する暗号化データ要素が記憶されている第四の記憶領域とを対応付け、
第一のリードリクエストを受け、前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第五の記憶領域からデータ要素を読み出すことになる場合、前記第五の記憶領域が、前記第四の記憶領域に対応しているならば、以下の（１）乃至（３）のうちのいずれか、
（１）前記第四の記憶領域に記憶されている前記暗号化データ要素を、前記第一のリードリクエストの送信元に送信する、
（２）前記暗号化データ要素を復号化することにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信する、
（３）アクセスエラーを、前記第一のリードリクエストの送信元に送信する、
を実行する、
ことをコンピュータに実行させるコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、スナップショットの管理に関する。
【背景技術】
【０００２】
スナップショットを管理する技術が知られている。この技術は、例えば、ファイルサーバ、具体例として、ＮＡＳ（Network Attached Storage）装置などのネットワークストレージで扱われる。ＮＡＳ装置で扱われた場合、ファイルの更新等によりファイルシステムの最新の状態を保持しつつ、或る時点でのファイルシステムのスタティック（静的）なイメージが保持される。スナップショットは、複数世代取得することも可能であり、このことは、例えば特許文献１に開示されている。
【０００３】
【特許文献１】特開２００４−３４２０５０号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
例えば、第一の論理ボリュームのスナップショットの管理では、スナップショット取得時点以降に、ライト対象に対応したデータ要素が第一の論理ボリュームに書き込まれることになる場合、そのデータ要素の書き込みによる更新前のデータ要素が、第二の論理ボリュームに退避される。
【０００５】
このようなスナップショット管理では、例えば、上記スナップショット取得時点以降に、第一の論理ボリュームに記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素（例えば“０”で表されるデータ要素）を上書きすることで、抹消対象を第一の論理ボリュームから抹消することになる場合であっても、抹消対応データ要素が第二の論理ボリュームに退避される。このため、抹消対応データ要素は、第二の論理ボリュームに残存することになり、故に、抹消対応データが漏洩してしまうおそれがある。これは、抹消対象が、個人情報などの機密性の高い情報である場合には、一層問題である。
【０００６】
従って、本発明の目的は、第一の論理ボリュームから第二の論理ボリュームに退避された抹消対応データ要素が漏洩してしまうおそれを無くすことにある。
【０００７】
本発明の他の目的は、後述の説明から明らかになるであろう。
【課題を解決するための手段】
【０００８】
抹消の明示に関連したライトリクエストを受け付ける。抹消の明示に関連したライトリクエストに応答して、スナップショット取得時点以降に、第一の論理ボリューム内の記憶領域Ａに記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記記憶領域Ａと前記記憶領域Ａに記憶されている抹消対応データ要素に対応する暗号化データ要素が記憶されている記憶領域Ｂとを対応付ける。
【発明を実施するための最良の形態】
【０００９】
実施形態１では、記憶装置が有する第一及び第二の論理ボリュームのうちの第一の論理ボリュームを上位装置に提供し前記第一の論理ボリュームのスナップショットを管理する記憶制御装置に、ライト処理部及びリード処理部が備えられる。ライト処理部は、スナップショット取得時点以降に、ライト対象に対応したデータ要素を前記第一の論理ボリューム内の第一の記憶領域に書き込むことになる場合、前記第一の記憶領域に記憶されている更新前のデータ要素を、前記第二の論理ボリュームに退避し、前記第一の記憶領域に、前記ライト対象に対応したデータ要素を書き込む。リード処理部が、前記第一の論理ボリュームのスナップショットにおける第二の記憶領域からデータ要素を読み出すことになる場合、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていれば、前記第二の論理ボリューム内の前記記憶領域からデータ要素を読出し、前記第二の記憶領域に、前記第二の論理ボリューム内の記憶領域が対応付けられていなければ、前記第二の記憶領域に対応する、前記第一の論理ボリューム内の記憶領域からデータ要素を読み出す。前記ライト処理部は、抹消に対応したライトリクエストを受けて、前記抹消に対応したライトリクエストに応答して、前記スナップショット取得時点以降に、前記第一の論理ボリューム内の第三の記憶領域に記憶されている、抹消対象に対応したデータ要素である抹消対応データ要素に、抹消を意味するデータ要素である抹消データ要素を上書きすることになる場合、前記第三の記憶領域と前記第三の記憶領域に記憶されている前記抹消対応データ要素に対応する暗号化データ要素が記憶されている第四の記憶領域とを対応付ける。
【００１０】
実施形態２では、実施形態１において、リード処理部は、第一のリードリクエストを受け、前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第五の記憶領域からデータ要素を読み出すことになる場合、前記第五の記憶領域が、前記第四の記憶領域に対応しているならば、以下の（１）乃至（３）のうちのいずれか、
（１）前記第四の記憶領域に記憶されている前記暗号化データ要素を、前記第一のリードリクエストの送信元に送信する、
（２）前記暗号化データ要素を復号化することにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信する、
（３）アクセスエラーを、前記第一のリードリクエストの送信元に送信する、
を実行する。ここで、第一のリードリクエストの送信元は、上位装置であっても良いし、本記憶制御装置における、リード処理部の上位に存在する別の処理部であっても良い。
【００１１】
実施形態３では、実施形態１又は２において、前記第四の記憶領域は、前記第二の論理ボリューム内の記憶領域である。前記第二の論理ボリュームの記憶領域毎に、保護の要否が設定される。前記ライト処理部が、前記第三の記憶領域に記憶されていた前記抹消対応データの前記暗号データ要素の書込み先である前記第四の記憶領域について、保護が必要との設定を行う。前記第四の記憶領域に記憶された前記暗号化データ要素は、前記第三の記憶領域に記憶されていた前記抹消対応データ要素が可逆変換形式で暗号化されたデータ要素である。
【００１２】
実施形態４では、実施形態３において、前記リード処理部は、以下の（１）及び（２）の処理、
（１）前記第一のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける前記第五の記憶領域からデータ要素を読み出すことになる場合、前記第四の記憶領域について保護が必要との設定になっていることを検出し、且つ、復号化が許可されているならば、前記第四の記憶領域から前記暗号化データ要素を読み出して復号化し、それにより得られた前記抹消対応データ要素を、前記第一のリードリクエストの送信元に送信し、
（２）第二のリードリクエストを受けて、前記第二のリードリクエストに応答して、前記第一の論理ボリュームのスナップショットにおける第六の記憶領域からデータ要素を読み出すことになる場合、前記第六の記憶領域に対応する、前記第二の論理ボリューム内の第七の記憶領域について、保護が不要との設定になっていることを検出したならば、前記第七の記憶領域からデータ要素を読み出し、前記データ要素を復号化することなく前記第ニのリードリクエストの送信元に送信する、
を実行する。
【００１３】
実施形態５では、実施形態１又は２において、前記暗号化データ要素は、前記抹消対応データ要素と異なる特定のデータ要素であり、且つ、前記抹消対応データ要素に復号化することが不可能なデータ要素である。
【００１４】
実施形態６では、実施形態５において、前記第四の記憶領域は、複数の前記抹消対応データが記憶される、前記第一の論理ボリューム内の複数の記憶領域に共通の記憶領域であって、前記特定のデータ要素が予め記憶されている所定の記憶領域である。前記ライト処理部が、前記第一の論理ボリューム内のどの記憶領域に前記抹消データ要素を書き込むことになっても、前記抹消データ要素の書込み先の記憶領域に対して、前記第四の記憶領域を対応付ける。
【００１５】
実施形態７では、実施形態１乃至６のうちのいずれかにおいて、記憶制御装置に、アドレス暗号化部が備えられる。アドレス暗号化部は、前記第一の論理ボリュームのスナップショットを構成する複数の記憶領域のうち、暗号化データ要素が記憶されている記憶領域に対応付けられている記憶領域の数が、第一の数よりも多ければ、前記第一の論理ボリュームのスナップショットを構成する各記憶領域のアドレスに対応付けられた各記憶領域アドレスを含んだスナップショット管理情報における、前記各記憶領域アドレスを、暗号化する。実施形態７では、記憶領域アドレスは、可逆変換形式で暗号化されるので、暗号化された記憶領域アドレスは、例えばリードリクエストに応答したリード処理の際に、復号化されて、復号化により得られた記憶領域アドレスから特定される記憶領域から、データ要素が読み出される。
【００１６】
実施形態８では、実施形態１乃至７のうちのいずれかにおいて、記憶制御装置に、暗号化設定部が更に備えられる。暗号化設定部は、前記第一の論理ボリュームのスナップショットを構成する複数の記憶領域のうち、暗号化データ要素が記憶されている記憶領域に対応付けられている記憶領域の数が、第一の数よりも多ければ、前記スナップショットを暗号化対象に設定する。前記ライト処理部が、前記スナップショットが暗号化対象に設定されていることを検出した場合、前記第一の論理ボリュームのスナップショットを構成する記憶領域のアドレスに対応付けられる記憶領域アドレスを含むスナップショット管理情報において、前記第一の記憶領域に対応する、前記第一の論理ボリュームのスナップショットにおける記憶領域のアドレスに、前記第二の論理ボリューム内の退避先の記憶領域の暗号化されたアドレスを対応付ける。
【００１７】
実施形態９では、実施形態７又は８において、前記スナップショット管理情報は、前記第一の論理ボリュームのスナップショットの世代毎に、記第一の論理ボリュームのスナップショットにおける記憶領域のアドレスに対応する、前記第二の論理ボリューム内の記憶領域のアドレス、を含む。暗号化データ要素が記憶されている記憶領域の数が前記第一の値よりも多い世代のスナップショットにおける記憶領域のアドレスに対応付けられるアドレスが暗号化される。
【００１８】
実施形態１０では、実施形態１乃至９のうちのいずれかにおいて、前記ライト処理部は、前記抹消データ要素を書き込むことになる時点が、どのスナップショット取得時点以降であるかに応じて、前記抹消対応データ要素の暗号化データ要素を、前記抹消対応データを可逆変換形式で暗号化したデータ要素とするか、前記抹消対応データに復号化することが不可能な形式のデータ要素とするかを違える。
【００１９】
実施形態１１では、実施形態１乃至１０のうちのいずれかにおいて、前記ライト処理部及びリード処理部が、前記第一の論理ボリュームのスナップショットを管理するスナップショット管理部に含まれている。前記スナップショット管理部の上位に、前記上位装置から受け付けたファイル単位のＩ／Ｏリクエストをブロック単位のＩ／Ｏリクエストに変換して下位に出力する上位処理部が、記憶制御装置に備えられる。前記ライト対象及び前記抹消対象は、ファイルである。前記データ要素は、ブロックデータである。前記ライト処理部は、ブロック単位のライトリクエストに応答して、ライト対象ファイルに対応したデータ要素を書き込む。前記リード処理部は、ブロック単位のリードリクエストに応答して、リード対象ファイルに対応したデータ要素を読み出し、読み出したデータ要素を、前記ブロック単位のリードリクエストの送信元である前記上位処理部に送信する。前記上位処理部が、前記上位装置から抹消対象ファイルを指定した抹消リクエストを受けた場合に、前記抹消対象ファイルに対応した前記抹消対応データ要素を前記抹消データ要素で上書きすることのライトリクエストを抹消の明示に関連付けて、前記スナップショット管理部に送る。前記抹消に対応したライトリクエストは、前記抹消の明示に関連した前記ライトリクエストである。
【００２０】
記憶制御装置は、例えばファイルサーバ、具体例としてＮＡＳ装置である。また、記憶制御装置は、例えば、回路基板で実現されて、ストレージシステムに、クライアントとの間のインタフェースの一つとして内蔵されても良い。
【００２１】
上述したライト処理部、リード処理部、アドレス暗号化部、暗号化設定部、スナップショット管理部及び上位処理部のうちの少なくとも一つは、ハードウェア、コンピュータプログラム又はそれらの組み合わせ（例えば一部をコンピュータプログラムにより実現し残りをハードウェアで実現すること）により構築することができる。コンピュータプログラムは、所定のプロセッサに読み込まれて実行される。また、コンピュータプログラムがプロセッサに読み込まれて行われる情報処理の際、適宜に、メモリ等のハードウェア資源上に存在する記憶域が使用されてもよい。また、コンピュータプログラムは、ＣＤ−ＲＯＭ等の記録媒体から計算機にインストールされてもよいし、通信ネットワークを介して計算機にダウンロードされてもよい。また、ストレージデバイスは、物理的であっても論理的であっても良い。物理的なストレージデバイスとしては、例えば、ハードディスク、磁気ディスク、光ディスク、磁気テープ、或いは半導体メモリであっても良い。論理的なストレージデバイスとしては、論理ボリュームとすることができる。
【００２２】
以下、図面を参照して、本発明の幾つかの実施例を詳細に説明する。その際、論理ボリュームの構成要素である各記憶領域を、「ブロック」と言い、一ブロックに記憶されるデータを、「ブロックデータ」と言う。
【実施例１】
【００２３】
図１は、本発明の第一の実施例に係るコンピュータシステムの構成例を示す。
【００２４】
通信ネットワーク（例えばＬＡＮ（Local Area Network））１０２に、複数（又は一つ）のクライアント装置１０３と、ＮＡＳ装置１０９とが接続されている。ＮＡＳ装置１０９に、ＳＡＮ（Storage Area Network）等の通信ネットワーク１８５、或いは、専用線を介して、ストレージシステム１１１が接続される。ストレージシステム１１１が有する記憶資源（例えば一以上の論理ボリューム）が、ファイルシステムとしてＮＡＳ装置１０９にマウントされる。
【００２５】
ストレージシステム１１１には、複数の物理的な記憶装置（例えば、ハードディスクドライブ或いはフラッシュメモリデバイス等）３０８と、複数の物理的な記憶装置３０８へのアクセスを制御するコントローラ３０７とが備えられている。複数の物理的な記憶装置３０８が提供する記憶空間を基に、複数の論理ボリューム（論理的な記憶装置）が形成されている。コントローラ３０７は、ＣＰＵ３０７１やメモリ３０７２（例えば、ＣＰＵ３０７１の処理結果を一時的に記憶するキャッシュメモリ）等を備えた装置である。コントローラ３０７は、ＮＡＳ装置１０９（例えばその装置１０９における後述のデバイスドライバ）からブロック単位のＩ／Ｏリクエストを受信し、そのＩ／Ｏリクエストに従う論理ボリュームに対して、そのＩ／Ｏリクエストに従うデータの書込み、或いはデータの読出しを行う。
【００２６】
ＮＡＳ装置１０９は、ＣＰＵ１７３と、記憶資源１７７と、Ｉ／Ｆ（インタフェース装置）１８１と、ＮＩＣ（Network Interface Card）１８３とを備える。Ｉ／Ｆ１８１を通じて、ストレージシステム１１１との通信が行われる。ＮＩＣ１８３を通じて、クライアント装置１０３との通信が行われる。記憶資源１７７は、例えば、メモリ及びディスク装置の少なくとも一方で構成することができるが、それに限らず、他種の記憶媒体により構成されても良い。
【００２７】
記憶資源１７７には、複数のコンピュータプログラムが記憶されており、ＣＰＵ１７３で、それらのコンピュータプログラムが実行される。以下、コンピュータプログラムが主語になる場合は、実際にはそのコンピュータプログラムを実行するＣＰＵによって処理が行われるものとする。
【００２８】
図２は、ＮＡＳ装置１０９で実行されるコンピュータプログラム、ストレージシステム１１１が有する論理ボリューム、及びクライアント装置１０３に提供される論理ボリュームを示す。
【００２９】
ストレージシステム１１１に存在する論理ボリュームとして、プライマリボリューム（以下、「Ｐ−Ｖｏｌ」と言う）と、差分ボリューム（以下、「Ｄ−Ｖｏｌ」と言う）とがある。Ｐ−Ｖｏｌ及びＤ−Ｖｏｌのうち、Ｐ−Ｖｏｌは、クライアント装置１０３に提供されるが、Ｄ−Ｖｏｌは、クライアント装置１０３に提供されない。
【００３０】
Ｐ−Ｖｏｌは、クライアント装置１０３からＩ／Ｏ先として指定される論理ボリュームである。Ｐ−Ｖｏｌには、クライアント装置１０３からのファイル単位のライトリクエストに応答してＮＡＳ装置１０９から送信されたブロック単位のライトリクエストに従うブロックデータが書込まれる。また、クライアント装置１０３からのファイル単位のリードリクエストに応答してＮＡＳ装置１０９から送信されたブロック単位のリードリクエストに従うブロックデータがＰ−Ｖｏｌから読み出される。
【００３１】
Ｄ−Ｖｏｌは、ブロックデータによって上書きされる前のブロックデータ（更新前ブロックデータ）のＰ−Ｖｏｌからの退避先となる論理ボリュームである。
【００３２】
クライアント装置１０３には、Ｐ−Ｖｏｌの他に、一又は複数の仮想ボリューム（以下、「Ｖ−ＶＯＬ」と言う）が提供される。仮想ボリュームは、Ｐ−Ｖｏｌの或るスナップショット取得時点に対応した、Ｐ−Ｖｏｌのスナップショットである。以下、本実施例の説明では、第一乃至第三のスナップショット取得時点に対応した３つのスナップショットＶ−ＶＯＬ１〜３を作成可能であるとする。
【００３３】
ＮＡＳ装置１０９では、ファイル共有プログラム２０１、ファイルシステムプログラム２０５、スナップショットプログラム２０７及びデバイスドライバ２０９が実行される。
【００３４】
例えば、ファイルシステムプログラム２０５、スナップショットプログラム２０７及びデバイスドライバ２０９により、ＯＳ層（ＯＳはOperating Systemの略）が構成される。ファイルシステムプログラム２０５は、マウントされたファイルシステムを制御するプログラムであり、上位層に対して、マウントされているファイルシステム、すなわち、階層構造化された論理ビュー（例えば、ディレクトリやファイルなどの階層構造を表すビュー）を提供することができる。また、ファイルシステムプログラム２０５は、これらのビューにおける論理的なデータ構造（例えばファイルやファイルへのパス）を物理的なデータ構造（例えば、ブロック単位のデータやブロック単位のアドレス）へ変換して、下位層とのＩ／Ｏ処理を実行する（例えば、ブロックデータのＩ／Ｏを要求する）ことができる。つまり、ファイルシステムプログラム２０５は、ファイル共有プログラム２０１からのファイル単位のＩ／Ｏリクエストをブロック単位のＩ／Ｏリクエストに変換してスナップショットプログラム２０７に送信することができる。また、ファイルシステムプログラム２０５は、ブロック単位のリードリクエストに従うブロックデータをスナップショットプログラム２０７から受けた場合、そのブロックデータを含んだリード対象ファイルを、ファイル共有プログラム２０１を通じてクライアント装置１０３に提供することができる。ファイルシステムプログラム２０５から送信されたブロック単位のＩ／Ｏリクエストは、スナップショットプログラム２０７を通じてデバイスドライバ２０９に入力される。デバイスドライバ２０９は、入力されたブロック単位のＩ／Ｏリクエストを実行するプログラムである。スナップショットプログラム２０７は、ファイルシステムの或る時点でのスタティックなイメージ（つまりスナップショット）を保持したり、そのイメージをリストアしたりすることができる。
【００３５】
ファイル共有プログラム２０１は、通信ネットワーク１０２に接続されるクライアント装置１０３にファイル共有プロトコル（例えば、NFS（Network File System）或いはCIFS（Common Internet File System））を提供し、複数のクライアント装置１０３の間でファイル共有機能を提供するものである。ファイル共有プログラム２０１は、クライアント装置１０３からファイル単位のＩ／Ｏリクエストを受付け、ファイルシステムプログラム２０５に対して、ファイル単位のＩ／Ｏリクエストをスナップショットプログラム２０７に入力する。
【００３６】
スナップショットプログラム２０７は、ライト処理プログラム２０７１と、リード処理プログラム２０７２とを有する。ライト処理プログラム２０７１は、ファイルシステムプログラム２０５から入力されたブロック単位のライトリクエストに応答して、スナップショット取得時点以降にＰ−Ｖｏｌにブロックデータを書き込むことになる場合、そのブロックデータの更新前ブロックデータをＰ−ＶｏｌからＤ−Ｖｏｌに退避し、Ｐ−Ｖｏｌに、ブロックデータを書き込む。リード処理プログラム２０７２は、ファイルシステムプログラム２０５から入力されたブロック単位のリードリクエストに応答して、Ｖ−ＶＯＬ１における或る記憶領域からブロックデータを読み出すことになる場合、その或る記憶領域に対応する、Ｐ−Ｖｏｌ及びＤ−Ｖｏｌのいずれかにおける記憶領域から、ブロックデータを読み出し、読み出したブロックデータを、ファイルシステムプログラム２０５に送信する。
【００３７】
以下、スナップショットプログラム２０７によるスナップショット取得のためのＣＯＷ（Copy On Write）を説明する。
【００３８】
図３は、スナップショット取得のためのＣＯＷの一例を示す図である。
【００３９】
Ｐ−Ｖｏｌに、例えば、９個のブロック＃１〜＃９があり、スナップショット取得時点である時刻（ｔ１）において、それら９個のブロック＃１〜＃９に、ブロックデータ“Ａ”〜“Ｉ”が格納されているとする。
【００４０】
この後の時刻（ｔ２）において、ブロック＃１〜＃５に、新たにブロックデータ“ａ”〜“ｅ”が書かれる場合、スナップショットプログラム２０７Ｂにより、ブロック＃１〜＃５にある既存のブロックデータ“Ａ”〜“Ｅ”が、Ｄ−Ｖｏｌに退避される。この動作が、一般にＣＯＷ（Copy On Write）と呼ばれる動作である。
【００４１】
時刻（ｔ２）の後に、スナップショットプログラム２０７は、時刻（ｔ１）のスナップショットのリストア（マウント）が要求された場合、時刻（ｔ１）に対応したＰ−ＶｏｌのイメージであるＶ−Ｖｏｌ１（スナップショット）を作成し、Ｖ−ＶＯＬ１をファイルシステム２０５に見せることができる。スナップショットプログラム２０７は、デバイスドライバ２０９経由でＰ−ＶｏｌとＤ−Ｖｏｌにアクセスし、これらを合成した仮想ボリューム（仮想的な論理ボリューム）を作成することができる。図３の例によれば、Ｖ−ＶＯＬ１におけるブロック＃１〜＃５には、Ｄ−Ｖｏｌにおけるブロック＃１〜＃５（時刻（ｔ２）でのブロックデータＡ〜Ｅの退避先）に記憶されているブロックデータ“Ａ”〜“Ｅ”が存在し、Ｖ−ＶＯＬ１におけるブロック＃６〜＃９には、時刻（ｔ１）以降にＰ−Ｖｏｌから退避されていないブロックデータ“Ｆ”〜“Ｉ”（Ｐ−Ｖｏｌにおけるブロック＃６〜９に記憶されているブロックデータ）が存在する。
【００４２】
クライアント装置１０３は、ファイル共有プログラム２０１及びファイルシステムプログラム２０５経由で、Ｖ−ＶＯＬ１にアクセスすることができる。
【００４３】
さて、ファイルシステムプログラム２０５は、ファイル共有プログラム２０１を介して、クライアント装置１０３から、ファイルの抹消リクエストを受けることがある。この場合、本実施例では、ファイルシステムプログラム２０５は、その抹消リクエストで指定されているファイル（以下、「抹消対象ファイル」と言う）に対応する各抹消対応ブロックデータに、各抹消ブロックデータ（例えば“０”を表すブロックデータ）を上書きすることのライトリクエストを、スナップショットプログラム２０７に出す。抹消対象ファイルを構成する全ての抹消対応ブロックデータに抹消ブロックデータが上書きされれば、ファイルシステムプログラム２０５にとって、抹消対象ファイルがＰ−Ｖｏｌから抹消されたことになる。
【００４４】
ＣＯＷが行われるスナップショット管理では、通常、スナップショット取得時点以降に抹消ブロックデータを抹消対応ブロックデータに上書きすることに伴うＣＯＷによって、抹消対応ブロックデータ（上書きされるブロックデータ）がＤ−Ｖｏｌに退避される。
【００４５】
本実施例では、Ｄ−Ｖｏｌに退避された抹消対応ブロックデータの漏洩を防ぐための工夫が施されている。具体的には、ファイルシステムプログラム２０５は、抹消リクエストに伴ってブロック単位のライトリクエストをスナップショットプログラム２０７に出す際、抹消のためのライトリクエストであることをスナップショットプログラム２０７に明示する（例えば、抹消を意味するコードをライトリクエストに含めて送信する）。そして、スナップショットプログラム２０７は、抹消が明示されたライトリクエスト（ブロック単位のライトリクエスト）を受けた場合、抹消対応ブロックデータをそのままＤ−Ｖｏｌに退避することに代えて、抹消対応ブロックデータが記憶されていたブロック（Ｐ−Ｖｏｌ内のブロック）のアドレスと、その抹消対応ブロックデータに対応する暗号化ブロックデータが記憶される記憶領域のアドレスとを対応付ける。このため、Ｖ−ＶＯＬ（Ｐ−Ｖｏｌのスナップショット）における読出し元ブロックのアドレスが、暗号化ブロックデータが記憶されている記憶領域のアドレスに対応付けられていれば、抹消対応ブロックデータに代えて、暗号化ブロックデータが読み出される。これにより、抹消対応ブロックデータの漏洩を防止することができる。
【００４６】
図４Ａ乃至図８を参照して、本実施例で行われる処理の概要を説明する。なお、以下の説明では、説明を理解し易くするために、Ｐ−Ｖｏｌを構成するブロックの数及びＤ−Ｖｏｌを構成するブロックの数は、それぞれ、８個とする（Ｄ−Ｖｏｌについては、８個のブロックのうち６個のブロックが図示される）。また、Ｐ−Ｖｏｌのスナップショットの数は、前述したように３個（Ｖ−ＶＯＬ１〜３）とする。また、Ｐ−Ｖｏｌを構成するブロックを、「Ｐ−Ｖｏｌブロック」と言い、Ｄ−Ｖｏｌを構成するブロックを、「Ｄ−Ｖｏｌブロック」と言い、Ｖ−ＶＯＬを構成するブロックを「Ｖ−ＶＯＬブロック」と言う。また、Ｐ−Ｖｏｌブロック、Ｄ−Ｖｏｌブロック及びＶ−ＶＯＬブロックの全てについて、ブロックアドレスｎに対応したブロックを、「ブロック＃ｎ」と言う（ｎは０以上の整数）。また、抹消の明示に関連付けられたライトコマンドを、「抹消ライトコマンド」と言い、抹消ライトコマンドに対して、抹消の明示が関連付けられていない通常のライトコマンドを、「通常ライトコマンド」と言う。
【００４７】
図４Ａに示すように、初期状態として、Ｐ−Ｖｏｌを構成する８個のＰ−Ｖｏｌブロックには、ブロックデータ“Ａ”〜“Ｈ”が記憶されているとする。また、Ｄ−Ｖｏｌの８個のＤ−Ｖｏｌブロックのいずれにも、ブロックデータが記憶されていないとする。
【００４８】
Ｄ−Ｖｏｌには、Ｄ−Ｖｏｌブロック毎に、保護ビットが記憶される領域が存在する。ここで、「保護ビット」とは、その保護ビットに対応するＤ−Ｖｏｌブロックが、保護すべきブロックデータが記憶されるＤ−Ｖｏｌブロックであるかどうかを判別するためのビットである。本実施例では、保護ビットは、保護不要であることを意味する場合には“１”であり、保護すべきことを意味する場合には“０”である。図４Ａに示す初期状態では、全てのＤ−Ｖｏｌブロックに対応した全ての保護ビットは“１”である。
【００４９】
スナップショット管理テーブルが用意されている。スナップショット管理テーブルは、ＮＡＳ装置１０９内の記憶資源１７７など、任意の記憶資源に記憶されても良いが、本実施例では、Ｄ−Ｖｏｌ内の特定の領域（Ｄ−Ｖｏｌブロック１〜８以外の領域）に記憶される。スナップショット管理テーブルには、どのＶ−ＶＯＬのどのＶ−ＶＯＬブロックがアクセス先となった場合にＰ−ＶｏｌとＤ−Ｖｏｌのうちのどちらの論理ボリュームのどのブロックにアクセスすべきかが記録されている。具体的には、スナップショット管理テーブルには、Ｖ−ＶＯＬ毎に、各Ｖ−ＶＯＬブロックのアドレスと、Ｖ−ＶＯＬブロックがＣＯＷ済みのブロックであるか否かを表すビット（以下、「ＣＯＷビット」と言う）と、Ｖ−ＶＯＬブロックに対応付けられているブロック（以下、「対応ブロック」と言う）のアドレスとが記録される。より具体的には、スナップショット管理テーブルは、ブロックアドレスカラムと、ＣＯＷカラムと、３個のＶ−ＶＯＬカラムとで構成される。ブロックアドレスカラムには、Ｖ−ＶＯＬの各Ｖ−ＶＯＬブロックのアドレスが記録されている。ＣＯＷカラムには、Ｖ−ＶＯＬブロックアドレス毎に、Ｖ−ＶＯＬ１〜３に対応した３個のＣＯＷビットが並んでいる。３個のＶ−ＶＯＬカラムは、Ｖ−ＶＯＬ１〜３に対応している。つまり、一つのＤ−Ｖｏｌを利用して、複数世代（ここでは３世代）のスナップショットを管理することが可能である。
【００５０】
３個の連続したＣＯＷビットにおいて、一番左のＣＯＷビットは、Ｖ−ＶＯＬ１に対応しており、真ん中のＣＯＷビットは、Ｖ−ＶＯＬ２に対応しており、一番右のＣＯＷビットは、Ｖ−ＶＯＬ３に対応している。ＣＯＷビットは、“１”であれば、未だＣＯＷが行われていないことを意味し、“０”であれば、ＣＯＷ済みであることを意味する。
【００５１】
Ｖ−ＶＯＬブロックカラムには、Ｖ−ＶＯＬブロックの対応ブロックのアドレスが記録される。対応ブロックのアドレスとしては、対応ブロックがＤ−Ｖｏｌブロックであれば、そのＤ−Ｖｏｌブロックのアドレスが記録され、対応ブロックがＰ−Ｖｏｌブロックであれば、そのことを意味する値（例えば“なし”）が記録される。対応ブロックのアドレスが“なし”の場合、Ｖ−ＶＯＬブロックのアドレスと同じアドレスのＰ−Ｖｏｌブロックにアクセスされる。なぜなら、Ｖ−ＶＯＬ１〜３は、いずれも、Ｐ−Ｖｏｌのスナップショットであるため、Ｖ−ＶＯＬブロックのアドレスは、Ｐ−Ｖｏｌブロックのアドレスと一致するからである。初期状態では、どのＶ−ＶＯＬカラムでも、全てのＶ−ＶＯＬブロックについて、対応ブロックのアドレスは“なし”である。ＣＯＷによるブロックデータの退避が行われていないためである。
【００５２】
図４Ａに示した初期状態において、ライト処理プログラム２０７１が、第一のスナップショット取得要求を受けたとする。第一のスナップショット取得要求を受けた時点が、第一のスナップショット取得時点である。ライト処理プログラム２０７１は、図４Ｂに示すように、第一のスナップショット取得要求に応答して、スナップショット管理テーブルのＣＯＷカラムにおける、一番左のＣＯＷビット列（Ｖ−ＶＯＬ１に対応したＣＯＷビット列）を構成する全てのＣＯＷビットを、“１”に更新する。
【００５３】
次に、ライト処理プログラム２０７１が、Ｐ−Ｖｏｌブロック＃０及び＃１に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを受けたとする。この場合、図５Ａに示すように、ライト処理プログラム２０７１が、抹消ライトコマンドに応答して、Ｐ−Ｖｏｌブロック＃０及び＃１に記憶されている抹消対応ブロックデータ“Ａ”及び“Ｂ”をＤ−Ｖｏｌブロック＃０及び＃１に退避するＣＯＷを実行し、Ｐ−Ｖｏｌブロック＃０及び＃１に、抹消ブロックデータ“０”を書き込む。
【００５４】
また、図５Ａに示すように、ライト処理プログラム２０７１は、一番左のＣＯＷビット列における、Ｖ−ＶＯＬブロックのアドレス０及び１に対応したＣＯＷビットを、“１”から“０”に更新する。これにより、Ｖ−ＶＯＬ１におけるＶ−ＶＯＬブロック＃０及び＃１は、ＣＯＷ済みであることがわかる。一旦ＣＯＷ済みとなったＶ−ＶＯＬブロック＃０及び＃１に対応するＰ−Ｖｏｌブロック＃０及び＃１は、次のスナップショット取得時点までは、ＣＯＷは不要のため、行われない。
【００５５】
また、図５Ａに示すように、ライト処理プログラム２０７１は、Ｖ−ＶＯＬ１のＶ−ＶＯＬカラムにおける、Ｖ−ＶＯＬブロック＃０及び＃１に対応したセルに、Ｖ−ＶＯＬブロック＃０及び＃１の対応ブロックである、Ｄ−ＶＯＬブロック＃０及び＃１のアドレス“ＤＶＯＬ−０”及び“ＤＶＯＬ−１”を書き込む。
【００５６】
また、図５Ａに示すように、ライト処理プログラム２０７１は、Ｄ−Ｖｏｌブロック＃０及び＃１に対応する２つの保護ビットを、それぞれ、“１”から“０”に更新する。これにより、Ｄ−Ｖｏｌブロック＃０及び＃１に記憶されているブロックデータ“Ａ”及び“Ｂ”は保護が必要であることの設定が完了する。
【００５７】
次に、図５Ｂに示すように、ライト処理プログラム２０７１は、保護ビット“０”に対応したＤ−Ｖｏｌブロック＃０及び＃１に、抹消対応ブロックデータ“Ａ”及び“Ｂ”に代えて、暗号化ブロックデータ“＊”を書き込む。なぜなら、Ｄ−Ｖｏｌブロック＃０及び＃１に記憶されているブロックデータ“Ａ”及び“Ｂ”は、本来抹消されていなければならないブロックデータであり、容易に参照されないように保護する必要があるためである。暗号化ブロックデータ“＊”は、抹消対応ブロックデータに復号化することが可能なデータ（つまり、抹消対応ブロックデータを可逆変換方式で暗号化されたデータ）であっても良いし、抹消対応ブロックデータに復号化することが不可能なデータであっても良い。いずれにしても、暗号化ブロックデータ“＊”からは、その暗号化ブロックデータ“＊”に対応する抹消対応ブロックデータは特定することができない。
【００５８】
なお、抹消対応ブロックデータ“Ａ”及び“Ｂ”をＤ−Ｖｏｌブロック＃０及び＃１に退避すること無しに、暗号化ブロックデータ“＊”をＤ−Ｖｏｌブロック＃０及び＃１に書き込む処理が行われても良い。
【００５９】
さて、次に、ライト処理プログラム２０７１が、Ｐ−Ｖｏｌブロック＃２にブロックデータ“Ｉ”を書き込むことの通常ライトコマンドを受けたとする。この場合、図６Ａに示すように、ライト処理プログラム２０７１が、その通常ライトコマンドに応答して、Ｐ−Ｖｏｌブロック＃２に記憶されている更新前ブロックデータ“Ｃ”を、Ｄ−Ｖｏｌブロック＃２に退避し、Ｐ−Ｖｏｌブロック＃２に、ブロックデータ“Ｉ”を書き込む。
【００６０】
また、図６Ａに示すように、ライト処理プログラム２０７１は、一番左のＣＯＷビット列における、Ｖ−ＶＯＬブロックのアドレス２に対応したＣＯＷビットを、“１”から“０”に更新する。
【００６１】
また、図６Ａに示すように、ライト処理プログラム２０７１は、Ｖ−ＶＯＬ１のＶ−ＶＯＬカラムにおける、Ｖ−ＶＯＬブロック＃２に対応したセルに、Ｖ−ＶＯＬブロック＃２の対応ブロックである、Ｄ−ＶＯＬブロック＃２のアドレス“ＤＶＯＬ−２”を書き込む。
【００６２】
また、図６Ａに示すように、ライト処理プログラム２０７１は、抹消ライトリクエストを受けた場合と違って、Ｄ−Ｖｏｌブロック＃２に対応する保護ビットを、“１”から“０”に更新することはしない。
【００６３】
次に、ライト処理プログラム２０７１が、第二のスナップショット取得要求を受けたとする。第二のスナップショット取得要求を受けた時点が、第二のスナップショット取得時点であって、第一のスナップショット取得時点の次のスナップショット取得時点である。ライト処理プログラム２０７１は、図６Ｂに示すように、第二のスナップショット取得要求に応答して、スナップショット管理テーブルのＣＯＷカラムにおける、真ん中のＣＯＷビット列（Ｖ−ＶＯＬ２に対応したＣＯＷビット列）を構成する全てのＣＯＷビットを、“１”に更新する。
【００６４】
次に、ライト処理プログラム２０７１が、Ｐ−Ｖｏｌブロック＃４及び＃５に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを受けたとする。この場合、図７Ａに示すように、ライト処理プログラム２０７１が、抹消ライトコマンドに応答して、Ｐ−Ｖｏｌブロック＃４及び＃５に記憶されている抹消対応ブロックデータ“Ｅ”及び“Ｆ”を、Ｄ−Ｖｏｌブロック＃３及び＃４に退避し、Ｐ−Ｖｏｌブロック＃４及び＃５に、抹消ブロックデータ“０”を書き込む。
【００６５】
また、図７Ａに示すように、ライト処理プログラム２０７１は、一番左のＣＯＷビット列における、Ｖ−ＶＯＬブロックのアドレス４及び５に対応したＣＯＷビットを、“１”から“０”に更新する。
【００６６】
また、図７Ａに示すように、ライト処理プログラム２０７１は、Ｖ−ＶＯＬ１及びＶ−ＶＯＬ２のそれぞれのＶ−ＶＯＬカラムにおける、Ｖ−ＶＯＬブロック＃４及び＃５に対応したセルに、Ｖ−ＶＯＬブロック＃４及び＃５の対応ブロックである、Ｄ−ＶＯＬブロック＃３及び＃４のアドレス“ＤＶＯＬ−３”及び“ＤＶＯＬ−４”を書き込む。
【００６７】
また、図７Ａに示すように、ライト処理プログラム２０７１は、Ｄ−Ｖｏｌブロック＃４及び＃５に対応する２つの保護ビットを、それぞれ、“１”から“０”に更新する。
【００６８】
次に、図７Ｂに示すように、ライト処理プログラム２０７１は、保護ビット“０”に対応したＤ−Ｖｏｌブロック＃４及び＃５に、抹消対応ブロックデータ“Ｅ”及び“Ｆ”に代えて、暗号化ブロックデータ“＊”を書き込む。
【００６９】
この後、例えば、Ｖ−ＶＯＬ１を指定したリードリクエストを受けた場合、リード処理プログラム２０７２が、リードリクエストに含まれるブロックアドレスに対応する、スナップショット管理テーブルにおけるＣＯＷビットを参照することで、リード対象のブロックデータがＰ−ＶｏｌにあるのかＤ−Ｖｏｌにあるのかを判断する。ＣＯＷビットが“１”の場合は、リード処理プログラム２０７２は、指定されたブロックアドレスに対応したＰ−Ｖｏｌブロックからブロックデータを読み出し、ＣＯＷビットが“０”の場合は、指定されたブロックアドレスに対応付けられているＤ−Ｖｏｌブロックアドレスに対応したＤ−Ｖｏｌブロックからブロックデータを読み出す。Ｄ−Ｖｏｌブロックからブロックデータを読み出す場合、Ｄ−Ｖｏｌブロックに対応する保護ビットが“０”の場合は、そのＤ−Ｖｏｌブロックには暗号化ブロックデータ“＊”が記憶されているため、暗号化ブロックデータ“＊”がクライアント装置１０３に提供された場合、クライアント装置１０３は、暗号化ブロックデータ“＊”に対応する抹消対応ブロックデータを特定することはできない。
【００７０】
具体例を、図８に示す。すなわち、リード処理プログラム２０７２が、上位プログラム（本実施例ではファイルシステムプログラム２０５）から、Ｖ−ＶＯＬ１内の全ブロックデータを要求された場合、Ｖ−ＶＯＬ１を構成する各Ｖ−ＶＯＬブロックに対応する各ＣＯＷビットを基に、Ｐ−ＶｏｌブロックとＤ−Ｖｏｌブロックのどちらからブロックデータを読み出すのかを判別する。この例によれば、Ｖ−ＶＯＬ１におけるＶ−ＶＯＬブロック＃０、＃１、＃２、＃４及び＃５については、Ｄ−Ｖｏｌブロック＃０、＃１、＃２、＃３及び＃４からブロックデータが読み出され、Ｖ−ＶＯＬ１における残りのＶ−ＶＯＬブロック＃３、＃６及び＃７については、対応するＰ−Ｖｏｌブロック＃３、＃６及び＃７からブロックデータが読み出される。ここでは、Ｖ−ＶＯＬブロック＃０、＃１、＃４及び＃５（Ｄ−Ｖｏｌブロック＃０、＃１、＃３及び＃４）については、暗号化ブロックデータ“＊”が読み出されることになる。暗号化ブロックデータ“＊”が上位プログラムを通じてクライアント装置１０３に返されても、クライアント装置１０３は、暗号化ブロックデータ“＊”に対応する抹消対応ブロックデータを知ることはできない。
【００７１】
なお、リード処理プログラム２０７２は、保護ビット“０”に対応したＤ−Ｖｏｌブロックから暗号化ブロックデータ“＊”を読み出すことになる場合には、暗号化ブロックデータ“＊”を読み出して上位プログラムに送信することに代えて、アクセスエラーを上位プログラムに返しても良い。
【００７２】
さて、前述したように、暗号化ブロックデータ“＊”は、抹消対応ブロックデータに復号化することが不可能なデータであっても良いし、抹消対応ブロックデータに復号化することが可能なブロックデータであっても良い。前者のケースを、「不可逆的保護ケース」と言い、後者のケースを、「可逆的保護ケース」と言う。以下、それぞれのケースについて、スナップショット管理の具体例を説明する。
【００７３】
＜Ａ：不可逆的保護ケース＞。
【００７４】
ＣＯＷで退避される抹消対応ブロックデータをダミーのブロックデータ（以下、「ダミーデータ」と言う）で置換する方法が考えられる。具体例として、以下の（具体例Ａ１）及び（具体例Ａ２）が考えられる。
【００７５】
（具体例Ａ１）図４Ｂに示した状態において、ライト処理プログラム２０７１は、Ｐ−Ｖｏｌブロック＃０及び＃１に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを受けた場合、図９Ａに示すように、Ｐ−Ｖｏｌブロック＃０及び＃１に記憶されている抹消対応ブロックデータ“Ａ”及び“Ｂ”の退避先とするＤ−Ｖｏｌブロック＃０及び＃１に、抹消対応ブロックデータ“Ａ”及び“Ｂ”に代えて、所定のダミーデータ“−”を書き込む。また、ライト処理プログラム２０７１は、Ｖ−Ｖｏｌブロックアドレス０及び１に、Ｄ−Ｖｏｌブロック＃０及び＃１のアドレス“ＤＶＯＬ−０”及び“ＤＶＯＬ−１”を対応付ける。その後、上位プログラムからのリードリクエストに応答して、Ｖ−ＶＯＬ１のＶ−ＶＯＬブロック＃０及び＃１が読出し元になる場合には、リード処理プログラム２０７２は、スナップショット管理テーブルを参照することにより、Ｖ−ＶＯＬブロック＃０及び＃１が、保護ビット“０”に対応したＤ−Ｖｏｌブロック＃０及び＃１に対応していることを検出する。この場合、リード処理プログラム２０７２は、Ｄ−Ｖｏｌブロック＃０及び＃１に記憶されているダミーデータ“−”を上位プログラムに返しても良いし、それに代えて、アクセスエラーを上位プログラムに返しても良い。
【００７６】
（具体例Ａ２）ダミーデータ“−”が記憶されている所定の記憶領域が予め設けられている。所定の記憶領域は、ＮＡＳ装置１０９及びストレージシステム１１１のうちのいずかれの記憶資源における記憶領域とすることができる。本具体例では、所定の記憶領域は、Ｄ−Ｖｏｌ内の特定のブロック（以下、便宜上、「ダミーブロック」と言う）である。本具体例では、ライト処理プログラム２０７１が、Ｐ−Ｖｏｌブロック＃０及び＃１に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを受けた場合、（具体例１）と異なり、図９Ｂに示すように、所定のダミーデータ“−”をＤ−Ｖｏｌに書き込むことを行わない。この場合、本具体例では、ライト処理プログラム２０７１は、Ｖ−Ｖｏｌブロックアドレス０及び１に、所定のダミーブロックのアドレス“ＤＶＯＬ−ＦＦ”を対応付ける。その後、上位プログラムからのリードリクエストに応答して、Ｖ−ＶＯＬ１のＶ−ＶＯＬブロック＃０及び＃１が読出し元になる場合には、リード処理プログラム２０７２は、スナップショット管理テーブルを参照することにより、Ｖ−ＶＯＬブロック＃０及び＃１に、ダミーブロックが対応していることを検出する。この場合、リード処理プログラム２０７２は、ダミーブロックに記憶されているダミーデータ“−”を上位プログラムに返しても良いし、それに代えて、アクセスエラーを上位プログラムに返しても良い。本具体例によれば、Ｄ−Ｖｏｌ内でダミーデータ“−”が増加しないのため、Ｄ−Ｖｏｌで消費される記憶容量を低減することができる。
【００７７】
なお、不可逆的保護ケースでは、暗号化ブロックデータは、ダミーデータに代えて、抹消対応ブロックデータのハッシュ値など、抹消対応ブロックデータが不可逆変換方式で暗号化されたデータであっても良い。
【００７８】
＜Ｂ：可逆的保護ケース＞。
【００７９】
ＣＯＷで退避される抹消対応ブロックデータを可逆変換形式で暗号化する方法が考えられる。以下の（具体例Ｂ１）及び（具体例Ｂ２）が考えられる。
【００８０】
（具体例Ｂ１）暗号鍵を使用した暗号化による保護
抹消対応ブロックデータが、暗号鍵を使用して特定の暗号アルゴリズムで暗号化されることで、その抹消対応ブロックデータに対応した暗号化ブロックデータが生成される。暗号化を行うタイミングとして、抹消ライトリクエストを受けた場合に暗号化を行う場合と、抹消ライトリクエストを受けたタイミングと異なるタイミングで（つまり、抹消ライトリクエストを受けたタイミングと関係なく非同期で）行う場合との二通りが考えられる。これは、上述したダミーデータの置換についても同様である。
【００８１】
（具体例Ｂ２）ビットマスクを使用した暗号化による保護
任意のビットパターンを用いた、Ｄ−Ｖｏｌに退避された抹消対応ブロックデータの論理演算（例えばＸＯＲ）が行われ、論理演算によって算出されたデータが、Ｄ−Ｖｏｌに書き込まれる。そのデータがリード対象のブロックデータとなった場合には、論理演算に使用したビットパターンと同じビットパターンを使用した、そのデータの論理演算が行われ、それによって、元の抹消対応ブロックデータが復元される。
【００８２】
以下、本実施例で行われる処理について説明する。
【００８３】
スナップショットプログラム２０７に、ブロック単位のＩ／Ｏリクエストが入力された場合、図１０Ａに示す判断が実行される。図１０Ａに示す判断は、入力されたＩ／Ｏリクエストがライトリクエストであれば、ライト処理プログラム２０７１によって行われ、入力されたＩ／Ｏリクエストがリードリクエストであれば、リード処理プログラム２０７２によって行われる。図１０Ａに示す判断は、対象となるＶ−ＶＯＬが可逆的保護と不可逆的保護のどちらに対応しているかの判断である。この判断は、例えば、図１０Ｂに例示するテーブルに基づいて行われる。入力されたＩ／Ｏリクエストがライトリクエストであり且つ対象となるＶ−ＶＯＬが不可逆的保護に対応しているならば、図１１に示す処理が行われ、入力されたＩ／Ｏリクエストがライトリクエストであり且つ対象となるＶ−ＶＯＬが可逆的保護に対応しているならば、図１２に示す処理が行われる。一方、入力されたＩ／Ｏリクエストがリードリクエストであり且つ対象となるＶ−ＶＯＬが不可逆的保護に対応しているならば、図１３に示す処理が行われ、入力されたＩ／Ｏリクエストがリードリクエストであり且つ対象となるＶ−ＶＯＬが可逆的保護に対応しているならば、図１４に示す処理が行われる。この段落において、「対象となるＶ−ＶＯＬ」とは、入力されたＩ／Ｏリクエストがライトリクエストの場合には、スナップショット取得時点に対応するＶ−ＶＯＬである。例えば、ライトリクエストの入力が第一のスナップショット取得時点と第二のスナップショット取得時点との間である場合には、「対象となるＶ−ＶＯＬ」は、Ｖ−ＶＯＬ１である。一方、入力されたＩ／Ｏリクエストがリードリクエストの場合には、「対象となるＶ−ＶＯＬ」とは、そのリードリクエストで指定されているＶ−ＶＯＬである。
【００８４】
図１１は、不可逆的保護ケースでライト処理プログラム２０７１が行う処理のフローチャートである。なお、図１１に示す処理は、前述した（具体例Ａ１）及び（具体例Ａ２）のうちの（具体例Ａ２）での処理（図９Ｂ参照）に対応する。
【００８５】
ライトリクエストが、例えば、第一のスナップショット取得時点と第二のスナップショット取得時点の間に入力されたとする。
【００８６】
ライト処理プログラム２０７１は、ライトリクエストで指定されているライト先Ｐ−Ｖｏｌブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、ライト先Ｐ−ＶｏｌブロックがＣＯＷ済みであるか否かを判断する（Ｓ１０１）。ＣＯＷ済みであるとの判断になれば（Ｓ１０１でＹＥＳ）、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに、ライトリクエストに従うブロックデータを書き込む（Ｓ１０２）。
【００８７】
Ｓ１０１で、ＣＯＷ済みではないとの判断になれば（Ｓ１０１でＮＯ）、ライト処理プログラム２０７１は、上位プログラム（ファイルシステムプログラム２０５）からのライトリクエストが抹消ライトリクエストか通常ライトリクエストかを判断する（Ｓ１０３）。通常ライトリクエストとの判断になれば（Ｓ１０３でＮＯ）、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに記憶されているブロックデータをＤ−Ｖｏｌに退避するＣＯＷを実行して（Ｓ１０４）、ライト先Ｐ−Ｖｏｌブロックに、ライトリクエストに従うブロックデータを書き込む（Ｓ１０５）。そして、ライト処理プログラム２０７１は、スナップショット管理テーブルを更新する（Ｓ１０６）。具体的には、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに対応するＶ−ＶＯＬブロック（Ｖ−ＶＯＬ１内のブロック）のアドレスに、退避先のＤ−Ｖｏｌブロックのアドレスを対応付け、且つ、そのＶ−ＶＯＬブロックに対応するＣＯＷビットを、“０”（ＣＯＷ済）に更新する。
【００８８】
Ｓ１０３で、抹消ライトリクエストとの判断になれば（Ｓ１０３でＹＥＳ）、ライト処理プログラム２０７は、ライト先Ｐ−Ｖｏｌブロックに、抹消ブロックデータを書き込む（Ｓ１０７）。また、ライト処理プログラム２０７は、スナップショット管理テーブルにおいて、ライト先Ｐ−Ｖｏｌブロックに対応するＶ−ＶＯＬブロック（Ｖ−ＶＯＬ１内のブロック）のアドレスに、ダミーブロックアドレスを対応付ける（Ｓ１０８）。また、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を、“０”（ＣＯＷ済）に更新する（Ｓ１０６）。
【００８９】
Ｓ１０２、Ｓ１０６及びＳ１０９の後、ライトの完了が、上位プログラムに報告される。
【００９０】
図１２は、可逆的保護ケースでライト処理プログラム２０７１が行う処理のフローチャートである。
【００９１】
ライトリクエストが、例えば、第一のスナップショット取得時点と第二のスナップショット取得時点の間に入力されたとする。
【００９２】
ライト処理プログラム２０７１は、ライトリクエストで指定されているライト先Ｐ−Ｖｏｌブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、ライト先Ｐ−ＶｏｌブロックがＣＯＷ済みであるか否かを判断する（Ｓ１１１）。ＣＯＷ済みであるとの判断になれば（Ｓ１１１でＹＥＳ）、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに、ライトリクエストに従うブロックデータを書き込む（Ｓ１１２）。
【００９３】
Ｓ１１１で、ＣＯＷ済みではないとの判断になれば（Ｓ１１１でＮＯ）、ライト処理プログラム２０７１は、上位プログラム（ファイルシステムプログラム２０５）からのライトリクエストが抹消ライトリクエストか通常ライトリクエストかを判断する（Ｓ１１３）。通常ライトリクエストとの判断になれば（Ｓ１１３でＮＯ）、ライト処理プログラム２０７１は、図１１のＳ１０４乃至Ｓ１０６を実行する。
【００９４】
Ｓ１１３で、抹消ライトリクエストとの判断になれば（Ｓ１１３でＹＥＳ）、ライト処理プログラム２０７は、ライト先Ｐ−Ｖｏｌブロックに記憶されている抹消対応データを可逆変換形式で暗号化し（Ｓ１１４）、暗号化されたデータ（暗号化ブロックデータ）を、退避先Ｄ−Ｖｏｌブロックに書き込む（Ｓ１１５）。そして、ライト処理プログラム２０７１は、スナップショット管理テーブルを更新する（Ｓ１１６）。具体的には、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに対応するＶ−ＶＯＬブロック（Ｖ−ＶＯＬ１内のブロック）のアドレスに、退避先Ｄ−Ｖｏｌブロックのアドレスを対応付け、そのＶ−ＶＯＬブロックに対応するＣＯＷビットを、“０”（ＣＯＷ済）に更新し、且つ、退避先Ｄ−Ｖｏｌブロックに対応する保護ビットを“０”に更新する。ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに、抹消ブロックデータを書き込む（Ｓ１１７）。
【００９５】
Ｓ１０２、Ｓ１０６及びＳ１１７の後、ライトの完了が、上位プログラムに報告される。
【００９６】
図１３は、不可逆的保護ケースでリード処理プログラム２０７２が行う処理のフローチャートである。なお、図１３に示す処理は、前述した（具体例Ａ１）及び（具体例Ａ２）のうちの（具体例Ａ２）での処理（図９Ｂ参照）に対応する。
【００９７】
リードリクエストで、例えば、Ｖ−ＶＯＬ１におけるＶ−ＶＯＬブロックが指定されているとする。
【００９８】
リード処理プログラム２０７２は、リードリクエストで指定されているリード元Ｖ−ＶＯＬブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、リード元Ｖ−ＶＯＬブロックがＣＯＷ済みに対応するか否かを判断する（Ｓ１２１）。ＣＯＷ済みであるとの判断になれば（Ｓ１２１でＹＥＳ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックに対応するＰ−Ｖｏｌブロックからブロックデータを読み出す（Ｓ１２２）。
【００９９】
Ｓ１２１で、ＣＯＷ済みではないとの判断になれば（Ｓ１２１でＮＯ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックに対応するダミーブロック（スナップショット管理テーブルを参照することにより特定されるダミーブロックアドレスに対応するダミーブロック）からダミーデータを読み出す（Ｓ１２３）。
【０１００】
リード処理プログラム２０７２は、Ｓ１２２又はＳ１２３で読み出したデータを、上位プログラムに送信する。Ｓ１２３で読み出されたデータは、ダミーデータであるため、抹消対応ブロックデータの漏洩が防止される。なお、Ｓ１２３の実行に代えて、アクセスエラーが上位プログラムに返されても良い。また、図示の点線枠内のステップ群は、リードリクエストで指定されている各Ｖ−ＶＯＬブロックについて行われる。
【０１０１】
図１４は、可逆的保護ケースでリード処理プログラム２０７２が行う処理のフローチャートである。
【０１０２】
リードリクエストで、例えば、Ｖ−ＶＯＬ１におけるＶ−ＶＯＬブロックが指定されているとする。
【０１０３】
リード処理プログラム２０７２は、リードリクエストで指定されているリード元Ｖ−ＶＯＬブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、リード元Ｖ−ＶＯＬブロックがＣＯＷ済みに対応するか否かを判断する（Ｓ１３１）。ＣＯＷ済みであるとの判断になれば（Ｓ１３１でＹＥＳ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックに対応するＰ−Ｖｏｌブロックからブロックデータを読み出す（Ｓ１３２）。
【０１０４】
Ｓ１３１で、ＣＯＷ済みではないとの判断になれば（Ｓ１３１でＮＯ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックのアドレスに対応するＤ−Ｖｏｌブロックのアドレスと、そのＤ−Ｖｏｌブロックに対応する保護ビットとを参照する（Ｓ１３３）。
【０１０５】
リード処理プログラム２０７２は、Ｓ１３３で参照した保護ビットが“１”であれば（Ｓ１３４でＮＯ）、リード元Ｖ−ＶＯＬブロックに対応するＤ−Ｖｏｌブロックからブロックデータを読み出す（Ｓ１３６）。
【０１０６】
リード処理プログラム２０７２は、Ｓ１３３で参照した保護ビットが“０”であれば（Ｓ１３４でＹＥＳ）、リード元Ｖ−ＶＯＬブロックに対応するＤ−Ｖｏｌブロックから暗号化ブロックデータを読み出し、復号が許可されていれば、その暗号化ブロックデータを復号化する（Ｓ１３５）。もし、復号が許可されていなければ、リード処理プログラム２０７２は、暗号化ブロックデータを読み出すが復号化しないか、或いは、アクセスエラーを上位プログラムに返す。復号が許可されているか否かは、例えば、クライアント装置１０３のユーザのＩＤと、ユーザＩＤ毎に復号を許可するか否かが記録されているテーブルとに基づいて判定することができる。
【０１０７】
リード処理プログラム２０７２は、Ｓ１３２又はＳ１３６で読み出したデータ、或いは、Ｓ１３５での復号化により得られた抹消対応データ（或いは復号化されなかった暗号化ブロックデータ）を、上位プログラムに送信する。図示の点線枠内のステップ群は、リードリクエストで指定されている各Ｖ−ＶＯＬブロックについて行われる。
【０１０８】
以上が、本発明の第一実施例についての説明である。
【実施例２】
【０１０９】
以下、本発明の第二実施例を説明する。その際、第一実施例との相違点を主に説明し、第一実施例との共通点については説明を省略或いは簡略する。
【０１１０】
本実施例では、抹消対応ブロックデータの漏洩防止の強度を高める工夫が施されている。具体的には、スナップショット管理テーブルにおいて、Ｖ−ＶＯＬブロックアドレスに対応付けられたＤ−Ｖｏｌブロックアドレスが暗号化される。暗号化されるＤ−Ｖｏｌブロックアドレスは、対応付けられているＤ−Ｖｏｌブロックのうち保護ビット“０”に対応したＤ−Ｖｏｌブロックの数が所定の閾値（以下、「保護ブロック閾値」と言う）よりも多いＶ−ＶＯＬ（以下、「アドレス暗号化対象Ｖ−ＶＯＬ」と言う）に対応付けられているＤ−Ｖｏｌブロックアドレスである。
【０１１１】
図１５Ａ及び図１５Ｂを参照して、暗号化されるＤ−Ｖｏｌブロックアドレスについて説明する。この例において、保護ブロック閾値が、３であるとする。
【０１１２】
図１５Ａによれば、Ｖ−ＶＯＬ１に対応付けられているＤ−Ｖｏｌブロックは、５個であり、そのうち、保護ビット“０”に対応したＤ−Ｖｏｌブロックは、４個である。それに対し、Ｖ−ＶＯＬ２に対応付けられているＤ−Ｖｏｌブロックは、２個であり、そのうち、保護ビット“０”に対応したＤ−Ｖｏｌブロックも、２個である。
【０１１３】
従って、図１５Ａによれば、アドレス暗号化対象Ｖ−ＶＯＬは、Ｖ−ＶＯＬ１となる。なぜなら、保護ビット“０”に対応したＤ−Ｖｏｌブロックが４個であり、保護ブロック閾値である３よりも多いからである。
【０１１４】
このため、図１５Ｂに示すように、Ｖ−ＶＯＬ１に対応したＶ−ＶＯＬカラムに存在する全てのＤ−Ｖｏｌブロックアドレスが、暗号化される（図１５Ｂでは、暗号化されたＤ−Ｖｏｌブロックアドレスが、“＊＊＊”と示されている）。言い換えれば、保護ビット“０”に対応するＤ−Ｖｏｌブロックアドレスのみならず、保護ビット“１”に対応するＤ−Ｖｏｌブロックアドレスも暗号化される。なぜなら、保護ビット“０”に対応したＤ−ＶＯＬブロックが多いＶ−ＶＯＬに存在するデータは、抹消対応ブロックデータではないブロックデータであっても、漏洩してはならない秘密性の高い可能性が高いためである。しかし、必ずしも、保護ビット“１”に対応するＤ−Ｖｏｌブロックアドレスを暗号化しなければならないわけでなく、保護ビット“０”に対応するＤ−Ｖｏｌブロックアドレスのみが暗号化されても良い。
【０１１５】
図１６は、本発明の第二実施例におけるスナップショット管理テーブルの構成例を示す。なお、図１５Ａ及び図１５Ｂには、紙面の都合上、図１６に示す構成のスナップショット管理テーブルを示していない。
【０１１６】
第二実施例では、スナップショット管理テーブルに、一点鎖線の楕円内に示すカラムや行が追加される。
【０１１７】
すなわち、カラムとして、暗号化カラムが追加される。暗号化カラムには、Ｖ−ＶＯＬブロックアドレス毎に、Ｖ−ＶＯＬ１〜３に対応する３個の暗号化ビットが存在する。暗号化ビット“１”は、その暗号化ビット“１”に対応したＶ−ＶＯＬブロックアドレスに対応付けられているＤ−Ｖｏｌブロックアドレスが暗号化されていないことを示す。暗号化ビット“０”は、その暗号化ビット“０”に対応したＶ−ＶＯＬブロックアドレスに対応付けられているＤ−Ｖｏｌブロックアドレスが暗号化されていることを示す。
【０１１８】
行として、暗号化要否行と、作成日時行とが追加される。暗号化要否行には、Ｖ−ＶＯＬ毎に、暗号化の要否を表す値が記録される。その値が“Ｙｅｓ”なら、暗号化が必要であるということであり、その値が“Ｎｏ”なら、暗号化が不要であるということである。作成日時行には、Ｖ−ＶＯＬ毎に、スナップショット取得時点の日時が記録される。例えば、第一のスナップショット取得要求を受けた時点に、その日時が、ライト処理プログラム２０７１によって、Ｖ−ＶＯＬ１に対応したスナップショット取得時点として、作成日時行における、Ｖ−ＶＯＬ１に対応したセルに、書き込まれる。
【０１１９】
スナップショットプログラム２０７には、ライト処理プログラム２０７１及びリード処理プログラム２０７２に加えて、アドレス暗号制御プログラム２０７３が備えられる。アドレス暗号制御プログラム２０７３は、どのＶ−ＶＯＬに対応付けられているＤ−Ｖｏｌブロックアドレス（及びダミーブロックアドレス）を暗号化するかを制御する。
【０１２０】
図１７は、アドレス暗号制御プログラム２０７３が行う処理のフローチャートである。
【０１２１】
アドレス暗号制御プログラム２０７３は、Ｖ−ＶＯＬ１〜３の全てについて、以下のＳ１４２以降の処理を行う。以下、Ｖ−ＶＯＬ１〜３のうちＶ−ＶＯＬ１を例に採り、Ｓ１４２以降の処理を説明する。
【０１２２】
アドレス暗号制御プログラム２０７３は、Ｖ−ＶＯＬ１に対応したスナップショット取得時点の日時をスナップショット管理テーブルから特定し、特定された日時から現在日時までの経過時間を算出する（Ｓ１４２）。
【０１２３】
次に、アドレス暗号制御プログラム２０７３は、Ｖ−ＶＯＬ１に対応付けられているＤ−Ｖｏｌブロックのうちの保護ビット“０”に対応したＤ−Ｖｏｌブロックの個数をカウントする（Ｓ１４３）。
【０１２４】
次に、アドレス暗号制御プログラム２０７３は、Ｓ１４２で算出された経過時間及びＳ１４３でカウントされた個数を基に、Ｖ−ＶＯＬ１についてＤ−Ｖｏｌブロックアドレスの暗号化が必要か否かを判断する（Ｓ１４４）。ここでは、例えば、経過時間が所定の時間長を超えており、且つ、カウントされた個数が保護ブロック閾値を超えている場合に、暗号化が必要と判断される。経過時間が所定の時間長を超えているかどうかが参酌される理由は、秘密性の高い可能性のあるデータが存在するブロックのアドレスが、暗号化されないままになっている時間長を一定時間内に抑えるためである。
【０１２５】
Ｓ１４４の判断で、暗号化が必要と判断された場合（Ｓ１４５でＹＥＳ）、アドレス暗号制御プログラム２０７３は、Ｖ−ＶＯＬ１に対応した、暗号化要否行におけるセルに、“Ｙｅｓ”という値を設定する（Ｓ１４６）。つまり、アドレス暗号制御プログラム２０７３は、Ｖ−ＶＯＬ１がアドレス暗号化対象のＶ−ＶＯＬであるという設定を行う。
【０１２６】
なお、Ｓ１４６では、暗号化要否が“Ｙｅｓ”と設定されることに加えて、アドレス暗号化プログラム２０７３が、Ｖ−ＶＯＬ１に対応するＶ−ＶＯＬカラムに既に存在している全てのＤ−Ｖｏｌブロックアドレス（又は、保護ビット“０”に対応したＤ−Ｖｏｌブロックアドレス）を暗号化しても良い。
【０１２７】
図１８は、本発明の第二実施例における、可逆的保護ケースでライト処理プログラム２０７１が行う処理のフローチャートである。
【０１２８】
ライトリクエストが、例えば、第一のスナップショット取得時点と第二のスナップショット取得時点の間に入力されたとする。
【０１２９】
ライト処理プログラム２０７１は、ライトリクエストで指定されているライト先Ｐ−Ｖｏｌブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、ライト先Ｐ−ＶｏｌブロックがＣＯＷ済みであるか否かを判断する（Ｓ１５１）。ＣＯＷ済みであるとの判断になれば（Ｓ１５１でＹＥＳ）、ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに、ライトリクエストに従うブロックデータを書き込む（Ｓ１５２）。
【０１３０】
Ｓ１５１で、ＣＯＷ済みではないとの判断になれば（Ｓ１５１でＮＯ）、ライト処理プログラム２０７１は、上位プログラム（ファイルシステムプログラム２０５）からのライトリクエストが抹消ライトリクエストか通常ライトリクエストかを判断する（Ｓ１５３）。通常ライトリクエストとの判断になれば（Ｓ１１３でＮＯ）、ライト処理プログラム２０７１は、図１１のＳ１０４乃至Ｓ１０６を実行する。その際、スナップショット管理テーブルの更新では、Ｖ−ＶＯＬ１に対応した暗号化要否が“Ｙｅｓ”であり、且つ、ライト先Ｐ−Ｖｏｌブロックに対応するＶ−ＶＯＬブロックアドレスに対応した暗号化ビットが“１”ならば、ライト処理プログラム２０７１は、スナップショット管理テーブルにおいて、ライト先Ｐ−Ｖｏｌブロックに対応したＶ−ＶＯＬブロックのアドレスに、暗号化した退避先Ｄ−Ｖｏｌブロックアドレスを対応付け、且つ、そのＶ−ＶＯＬブロックアドレスに対応する暗号化ビットを“０”に更新する。
【０１３１】
Ｓ１５３で、抹消ライトリクエストとの判断になれば（Ｓ１５３でＹＥＳ）、ライト処理プログラム２０７は、ライト先Ｐ−Ｖｏｌブロックに記憶されている抹消対応データを可逆変換形式で暗号化し（Ｓ１５４）、暗号化されたデータ（暗号化ブロックデータ）を、退避先Ｄ−Ｖｏｌブロックに書き込む（Ｓ１５５）。そして、ライト処理プログラム２０７１は、スナップショット管理テーブルを更新する（Ｓ１１６）。具体的には、ライト処理プログラム２０７１は、Ｖ−ＶＯＬ１に対応した暗号化要否が“Ｙｅｓ”であり、且つ、ライト先Ｐ−Ｖｏｌブロックに対応するＶ−ＶＯＬブロックアドレスに対応した暗号化ビットが“１”ならば、ライト先Ｐ−Ｖｏｌブロックに対応したＶ−ＶＯＬブロックのアドレスに、暗号化した退避先Ｄ−Ｖｏｌブロックアドレスを対応付け、且つ、そのＶ−ＶＯＬブロックアドレスに対応する暗号化ビットを“０”に更新する。また、ライト処理プログラム２０７１は、Ｖ−ＶＯＬブロックに対応するＣＯＷビットを、“０”（ＣＯＷ済）に更新し、且つ、退避先Ｄ−Ｖｏｌブロックに対応する保護ビットを“０”に更新する。ライト処理プログラム２０７１は、ライト先Ｐ−Ｖｏｌブロックに、抹消ブロックデータを書き込む（Ｓ１５７）。
【０１３２】
図１９は、本発明の第二実施例における、可逆的保護ケースでリード処理プログラム２０７２が行う処理のフローチャートである。
【０１３３】
リードリクエストで、例えば、Ｖ−ＶＯＬ１におけるＶ−ＶＯＬブロックが指定されているとする。
【０１３４】
リード処理プログラム２０７２は、リードリクエストで指定されているリード元Ｖ−ＶＯＬブロックに対応するＣＯＷビット（Ｖ−ＶＯＬ１に対応したＣＯＷビット）を参照することにより、リード元Ｖ−ＶＯＬブロックがＣＯＷ済みに対応するか否かを判断する（Ｓ１６１）。ＣＯＷ済みであるとの判断になれば（Ｓ１６１でＹＥＳ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックに対応するＰ−Ｖｏｌブロックからブロックデータを読み出す（Ｓ１６２）。
【０１３５】
Ｓ１６１で、ＣＯＷ済みではないとの判断になれば（Ｓ１６１でＮＯ）、リード処理プログラム２０７２は、リード元Ｖ−ＶＯＬブロックのアドレスに対応するＤ−Ｖｏｌブロックのアドレスと、そのＤ−Ｖｏｌブロックに対応する保護ビットとを参照する（Ｓ１６３）。その際、リード処理プログラム２０７２は、アドレスの復号化が許可されている場合（例えば、ユーザＩＤに対応する設定が“復号化許可”である場合）、Ｖ−ＶＯＬ１に対応した暗号化要否が“Ｙｅｓ”であり、且つ、リード元Ｖ−ＶＯＬブロックに対応する暗号化ビットが“０”であれば、暗号化されているＤ−Ｖｏｌブロックアドレスを復号化し、復号化されたＤ−Ｖｏｌブロックアドレスを参照する。
【０１３６】
リード処理プログラム２０７２は、Ｓ１６３で参照した保護ビットが“１”であれば（Ｓ１６４でＮＯ）、リード元Ｖ−ＶＯＬブロックに対応するＤ−Ｖｏｌブロックからブロックデータを読み出す（Ｓ１６６）。
【０１３７】
リード処理プログラム２０７２は、Ｓ１６３で参照した保護ビットが“０”であれば（Ｓ１６４でＹＥＳ）、リード元Ｖ−ＶＯＬブロックに対応するＤ−Ｖｏｌブロックから暗号化ブロックデータを読み出し、復号が許可されていれば、その暗号化ブロックデータを復号化する（Ｓ１６５）。
【０１３８】
以上、本発明の幾つかの好適な実施例を説明したが、これらは本発明の説明のための例示であって、本発明の範囲をこれらの実施例にのみ限定する趣旨ではない。本発明は、他の種々の形態でも実施することが可能である。
【０１３９】
例えば、抹消対応ブロックデータの暗号化は、ＮＡＳ装置１０９に代えて、ストレージシステム１１１が行っても良い。具体的には、例えば、ストレージシステム１１１のＣＰＵ３０７１が、退避先Ｄ−Ｖｏｌブロックに対応した保護ビットを監視し、保護ビットが“０”に更新されたことを検出した場合に、更新後の保護ビット“０”に対応した退避先Ｄ−Ｖｏｌブロックに記憶されたブロックデータを可逆変換形式或いは不可逆変換形式で暗号化しても良い。
【０１４０】
また、例えば、ＮＡＳ装置１０９とストレージシステム１１１が一体であっても良い。具体的には、例えば、ＮＡＳ装置１０９が、クライアント装置１０３に対するインタフェース回路基板としてストレージシステム１１１に組み込まれても良い。
【図面の簡単な説明】
【０１４１】
【図１】図１は、本発明の第一の実施例に係るコンピュータシステムの構成例を示す。
【図２】図２は、ＮＡＳ装置で実行されるコンピュータプログラム、ストレージシステムが有する論理ボリューム、及びクライアント装置に提供される論理ボリュームを示す。
【図３】図３は、スナップショット取得のためのＣＯＷ（Copy On Write）の一例を示す図である。
【図４】図４Ａは、第一のスナップショット取得時点前の初期状態におけるＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。図４Ｂは、第一のスナップショット取得時点でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。
【図５】図５Ａは、Ｐ−Ｖｏｌブロック＃０及び＃１に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを第一のスナップショット取得時点後にライト処理プログラムが受けた場合でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。図５Ｂは、保護ビット“０”に対応した退避先Ｄ−Ｖｏｌブロック＃０及び＃１に暗号化ブロックデータ“＊”が格納されたことを示す。
【図６】図６Ａは、Ｐ−Ｖｏｌブロック＃２にブロックデータ“Ｉ”を書き込むことの通常ライトコマンドを第一のスナップショット取得時点後にライト処理プログラムが受けた場合でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。図６Ｂは、第二のスナップショット取得時点でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。
【図７】図７Ａは、Ｐ−Ｖｏｌブロック＃４及び＃５に抹消ブロックデータ“０”を書き込むことの抹消ライトコマンドを第二のスナップショット取得時点後にライト処理プログラムが受けた場合でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。図７Ｂは、保護ビット“０”に対応した退避先Ｄ−Ｖｏｌブロック＃４及び＃５に暗号化ブロックデータ“＊”が格納されたことを示す。
【図８】図８は、第一のスナップショット取得時点に対応するスナップショットＶ−ＶＯＬ１の作成を示す。
【図９】図９Ａは、不可逆的保護ケースでのスナップショット管理の第一の具体例を示す。図９Ｂは、不可逆的保護ケースでのスナップショット管理の第二の具体例を示す。
【図１０】図１０Ａは、ブロック単位のＩ／Ｏリクエストが入力されたスナップショットプログラムで行われる判断を示す。図１０Ｂは、図１０Ａに示す判断で参照されるテーブルを示す。
【図１１】図１１は、不可逆的保護ケースでライト処理プログラムが行う処理のフローチャートである。
【図１２】図１２は、可逆的保護ケースでライト処理プログラムが行う処理のフローチャートである。
【図１３】図１３は、不可逆的保護ケースでリード処理プログラムが行う処理のフローチャートである。
【図１４】図１４は、可逆的保護ケースでリード処理プログラムが行う処理のフローチャートである。
【図１５】図１５Ａは、本発明の第二実施例における或る時点でのＰ−Ｖｏｌ、Ｄ−Ｖｏｌ及びスナップショット管理テーブルを示す。図１５Ｂは、スナップショット管理テーブルにおける、Ｖ−ＶＯＬ１に対応付けられているＤ−Ｖｏｌブロックアドレスが、暗号化されたことを示す。
【図１６】図１６は、本発明の第二実施例におけるスナップショット管理テーブルの構成例を示す。
【図１７】図１７は、アドレス暗号制御プログラムが行う処理のフローチャートである。
【図１８】図１８は、本発明の第二実施例における、可逆的保護ケースでライト処理プログラムが行う処理のフローチャートである。
【図１９】図１９は、本発明の第二実施例における、可逆的保護ケースでリード処理プログラムが行う処理のフローチャートである。
【符号の説明】
【０１４２】
１０３…クライアント装置  １０９…ＮＡＳ装置  １１１…ストレージシステム  ２０１…ファイル共有プログラム  ２０５…ファイルシステムプログラム  ２０７…スナップショットプログラム  ２０９…デバイスドライバ  ２０７１…ライト処理プログラム  ２０７２…リード処理プログラム
【図１】
0005007248.tif 000002
【図２】
0005007248.tif 000003
【図３】
0005007248.tif 000004
【図４】
0005007248.tif 000005
【図５】
0005007248.tif 000006
【図６】
0005007248.tif 000007
【図７】
0005007248.tif 000008
【図８】
0005007248.tif 000009
【図９】
0005007248.tif 000010
【図１０】
0005007248.tif 000011
【図１１】
0005007248.tif 000012
【図１２】
0005007248.tif 000013
【図１３】
0005007248.tif 000014
【図１４】
0005007248.tif 000015
【図１５】
0005007248.tif 000016
【図１６】
0005007248.tif 000017
【図１７】
0005007248.tif 000018
【図１８】
0005007248.tif 000019
【図１９】
0005007248.tif 000020