(57)【特許請求の範囲】
【請求項１】
装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、前記複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報に基づいて、復元の起点の状態からそれ以外の他の状態へ前記装置を復元する最短手順を他の状態毎に算出し、
何れの最短手順にも用いられないスナップショットを削除対象と決定する、
処理をコンピュータに実行させる状態復元プログラム。
【請求項２】
前記決定では、何れの最短手順にも用いられないスナップショットのうち、何れかの最短手順に用いられるスナップショットにより依存されるスナップショットを削除対象から外す、請求項１記載の状態復元プログラム。
【請求項３】
前記決定では、前記起点の状態よりも前に取得されたスナップショットのうち、最新のスナップショットを削除対象から外す、請求項１または２記載の状態復元プログラム。
【請求項４】
前記複数の命令それぞれを前記装置に実行させる際に、各命令の実行に要する時間を計測し、前記装置の状態と各命令の内容と各命令の実行に要する時間とを対応付けて記録する、請求項１乃至３の何れか１項に記載の状態復元プログラム。
【請求項５】
前記記録では、前記装置に実行させた第１の命令により発生した状態の遷移とは逆の遷移を発生させる第２の命令のユーザによる入力を許容し、前記第２の命令を前記第１の命令に対応付けて記録する、請求項４記載の状態復元プログラム。
【請求項６】
前記記録では、前記第２の命令の実行に要する時間を前記第１の命令と同じ時間として記録する、または、前記第２の命令の実行に要する時間を実測して記録する、請求項５記載の状態復元プログラム。
【請求項７】
前記記録では、前記複数の命令それぞれを前記装置に実行させる前後の状態と、前記装置に対して取得されたスナップショットとの対応関係を記録する、請求項４乃至６の何れか１項に記載の状態復元プログラム。
【請求項８】
装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、前記複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報を記憶する記憶部と、
前記情報に基づいて、復元の起点の状態からそれ以外の他の状態へ前記装置を復元する最短手順を他の状態毎に算出し、何れの最短手順にも用いられないスナップショットを削除対象と決定する演算部と、
を有する状態復元装置。
【請求項９】
コンピュータが、
装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、前記複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報に基づいて、復元の起点の状態からそれ以外の他の状態へ前記装置を復元する最短手順を他の状態毎に算出し、
何れの最短手順にも用いられないスナップショットを削除対象と決定する、
状態復元支援方法。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は状態復元プログラム、状態復元装置および状態復元支援方法に関する。
【背景技術】
【０００２】  現在、種々の装置（コンピュータ、ネットワーク機器およびストレージ装置など）を含む情報処理システムが利用されている。情報処理システムでは、装置が保持するデータのバックアップを取得することがある。バックアップを取得しておけば、各装置をバックアップの取得時点の状態へ復元できる。例えば、システム運用中の定期的なタイミングやシステム環境のリリース作業（ソフトウェアの更新、設定パラメータの更新、扱うデータの更新など）前のタイミングなどにバックアップを取得することが考えられる。【０００３】  バックアップには種々の方法が考えられている。例えば、スナップショットと呼ばれるデータを定期的に取得することがある。スナップショットは記憶装置内の所定領域のある時点におけるイメージを記録したものである。例えば、コンピュータ、コンピュータ上で動作する仮想マシン、データベースなどの内容をスナップショットにより記録し得る。【０００４】  例えば、スナップショットの取得と論理ボリュームへの書き込み履歴であるジャーナルの取得とを切替えて、バックアップを行う提案がある。また、スナップショット数が最大数に達した後は、新たなスナップショットを作成する毎に最古のスナップショットを廃棄することも考えられている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−８０１３１号公報
【特許文献２】特開２００７−２８０３２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】  設定変更（例えば、通信用のパラメータの変更など）用の複数の命令を装置に順次与えることで装置の設定変更を行うことがある。変更を戻したい場合は、各命令と逆の設定変更を行う命令を順次与えることで元の設定を復元し得る。この復元方法とスナップショットによる復元方法とを併用することが考えられる。例えば、ある時点の状態をスナップショットで復元し、その時点から設定変更用の命令を適用して所望の状態を復元し得る。【０００７】  ところで、スナップショットのデータサイズは比較的大きい。このため、スナップショットの数が増えると記憶装置の容量を圧迫する。スナップショットを削除すれば記憶容量を節約し得る。しかし、削除されたスナップショットを復元に利用できなくなる。すると、ある状態へ復元するまでの所要時間が長くなるおそれがある。理由は次の通りである。【０００８】  スナップショットによる復元は、所定時間内に終了することが多い。一方、装置の設定変更用（設定を戻す場合も含む）の命令には所要時間が短いものや長いもの（例えば、装置の再起動を伴うもの）など様々である。削除されたスナップショットの代わりに長時間を要する命令（または命令の組）を、ある状態への復元に実行することになると、復元の所要時間が削除前よりも長くなり得る。そこで、復元の所要時間を考慮しながら、削除対象のスナップショットをどのように決定するかが問題となる。【０００９】  １つの側面では、本発明は、復元の高速化を図りながら記憶容量を節約できる状態復元プログラム、状態復元装置および状態復元支援方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】  １つの態様では、コンピュータによって実行される状態復元プログラムが提供される。この状態復元プログラムは、装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報に基づいて、復元の起点の状態からそれ以外の他の状態へ装置を復元する最短手順を他の状態毎に算出し、何れの最短手順にも用いられないスナップショットを削除対象と決定する、処理をコンピュータに実行させる。【００１１】  また、１つの態様では、状態復元装置が提供される。この状態復元装置は、記憶部と演算部とを有する。記憶部は、装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報を記憶する。演算部は、記憶部に記憶された情報に基づいて、復元の起点の状態からそれ以外の他の状態へ装置を復元する最短手順を他の状態毎に算出し、何れの最短手順にも用いられないスナップショットを削除対象と決定する。【００１２】  また、１つの態様では、状態復元支援方法が提供される。この状態復元支援方法では、コンピュータが、装置の複数の状態の発生順序と、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間と、複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間とを示す情報に基づいて、復元の起点の状態からそれ以外の他の状態へ装置を復元する最短手順を他の状態毎に算出し、何れの最短手順にも用いられないスナップショットを削除対象と決定する。
【発明の効果】
【００１３】  １つの側面では、復元の高速化を図りながら記憶容量を節約できる。  本発明の上記および他の目的、特徴および利点は本発明の例として好ましい実施の形態を表す添付の図面と関連した以下の説明により明らかになるであろう。
【図面の簡単な説明】
【００１４】
【図１】第１の実施の形態の状態復元装置を示す図である。
【図２】第２の実施の形態の情報処理システムを示す図である。
【図３】第２の実施の形態の状態復元装置のハードウェア例を示す図である。
【図４】第２の実施の形態の状態復元装置の機能例を示す図である。
【図５】第２の実施の形態の状態記録テーブルの例を示す図である。
【図６】第２の実施の形態の手順実行記録テーブルの例を示す図である。
【図７】第２の実施の形態のスナップショット記録テーブルの例を示す図である。
【図８】第２の実施の形態の手順情報テーブルの例を示す図である。
【図９】第２の実施の形態の手順データの例を示す図である。
【図１０】第２の実施の形態のＧＵＩの例を示す図である。
【図１１】第２の実施の形態の手順実行の例を示すフローチャートである。
【図１２】第２の実施の形態の状態復元の例を示すフローチャートである。
【図１３】第２の実施の形態の状態遷移グラフの例を示す図である。
【図１４】第２の実施の形態の削除対象の決定例を示すフローチャートである。
【図１５】第２の実施の形態の削除対象の決定例を示す図である。
【図１６】第２の実施の形態のＧＵＩの他の例を示す図である。
【図１７】第３の実施の形態のスナップショット記録テーブルの例を示す図である。
【図１８】第３の実施の形態のＧＵＩの例を示す図である。
【図１９】第３の実施の形態の削除対象の決定例を示すフローチャートである。
【図２０】第３の実施の形態の状態遷移グラフの例（その１）を示す図である。
【図２１】第３の実施の形態の削除対象の決定例（その１）を示す図である。
【図２２】第３の実施の形態の状態遷移グラフの例（その２）を示す図である。
【図２３】第３の実施の形態の削除対象の決定例（その２）を示す図である。
【発明を実施するための形態】
【００１５】  以下、本実施の形態を図面を参照して説明する。  ［第１の実施の形態］  図１は、第１の実施の形態の状態復元装置を示す図である。状態復元装置１は、記憶装置２に記憶された設定変更用の命令およびスナップショットを用いて情報処理装置３の状態を復元する。状態復元装置１は、記憶部１ａおよび演算部１ｂを有する。記憶部１ａは、ＲＡＭ（Random Access Memory）などの揮発性記憶装置でもよいし、ＨＤＤ（Hard Disk Drive）やフラッシュメモリなどの不揮発性記憶装置でもよい。演算部１ｂは、ＣＰＵ（Central Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。演算部１ｂはプログラムを実行するプロセッサであってもよい。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１６】  記憶部１ａは、復元対象の装置の複数の状態の発生順序を示す情報を記憶する。例えば、情報処理装置３は設定変更に伴って、その状態が状態ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４，ＳＴ５と順番に遷移している。例えば、記憶部１ａは、状態ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４，ＳＴ５の当該発生順序を示す情報を記憶する。
【００１７】  ここで、状態遷移図４は当該状態遷移を例示している。状態遷移図４では丸印の内部に状態を示す符号（ＳＴ１など）が示されている。丸印を繋ぐ右向き矢印が順方向の遷移を示す。丸印を繋ぐ左向き矢印が逆方向の遷移を示す。各矢印に付された符号（Ｃ１など）は、当該矢印に対応する遷移を発生させる命令を示す符号である。
【００１８】  すなわち、順方向の遷移を発生させる命令は、命令Ｃ１（状態ＳＴ１から状態ＳＴ２）、命令Ｃ２（状態ＳＴ２から状態ＳＴ３）、命令Ｃ３（状態ＳＴ３から状態ＳＴ４）、命令Ｃ４（状態ＳＴ４から状態ＳＴ５）である。
【００１９】
一方、逆方向の遷移を発生させる命令は、命令Ｃ４’（状態ＳＴ５から状態ＳＴ４）、命令Ｃ３’（状態ＳＴ４から状態ＳＴ３）、命令Ｃ２’（状態ＳＴ３から状態ＳＴ２）、命令Ｃ１’（状態ＳＴ２から状態ＳＴ１）である。
【００２０】  例えば、これらの各命令は記憶装置２の命令リスト２ａに格納されている。ただし、状態復元装置１が命令リスト２ａを記憶してもよい。例えば、各命令は、所定のシェルスクリプト、プログラミング言語およびＳＱＬなどのコマンド文で記述される。
【００２１】  記憶部１ａは、状態間の順方向または逆方向の遷移を発生させる複数の命令それぞれの実行に要する時間を示す情報を記憶する。例えば、上記各命令の実行に要する時間は次の通りである。命令Ｃ１は１である。命令Ｃ２は３である。命令Ｃ３は１である。命令Ｃ４は１である。命令Ｃ４’は１である。命令Ｃ３’は１である。命令Ｃ２’は３である。命令Ｃ１’は１である。状態遷移図４では、右向き矢印の上側の数値が状態間の順方向の遷移を発生させる命令の実行に要する時間を示している。また、左向き矢印の下側の数値が状態間の逆方向の遷移を発生させる命令の実行に要する時間を示している。
【００２２】  記憶部１ａは、複数の状態のうちスナップショットが取得されている状態への当該スナップショットを用いた復元に要する時間を示す情報を記憶する。例えば、状態ＳＴ１ではスナップショット２ｂが取得されている。状態ＳＴ３ではスナップショット２ｃが取得されている。例えば、スナップショット２ｂを用いた状態ＳＴ１への復元に要する時間は３である。スナップショット２ｃを用いた状態ＳＴ３への復元に要する時間は３である。
【００２３】  状態遷移図４では、スナップショット２ｂ，２ｃを用いた復元による状態遷移を曲線の矢印で表記している。曲線の矢印の上側の数値は、該当のスナップショットを用いた復元に要する時間を示している。例えば、スナップショット２ｂ，２ｃは記憶装置２に格納されている。ただし、状態復元装置１がスナップショット２ｂ，２ｃを記憶してもよい。
【００２４】  演算部１ｂは、記憶部１ａに記憶された情報に基づいて、復元の起点の状態からそれ以外の他の状態へ装置を復元する最短手順を他の状態毎に算出する。例えば、情報処理装置３の復元の起点の状態として、任意の状態の選択を許容し得る。復元の起点の状態を情報処理装置３の現在の状態としてもよい。
【００２５】  例えば、状態ＳＴ５を復元の起点の状態とするなら、演算部１ｂは、状態ＳＴ５から、状態ＳＴ５よりも前の時点の状態ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４へ情報処理装置３を復元する最短手順を、状態ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４毎に算出する。具体的には次の通りである。なお、以下では、無限に存在する手順のうち同じ状態を２回以上経由しない手順のみを候補として列挙する。
【００２６】  状態ＳＴ５から状態ＳＴ１への復元手順の候補は次の通りである。（ａ１）命令Ｃ４’，Ｃ３’，Ｃ２’，Ｃ１’を用いる手順（所要時間６）。（ａ２）スナップショット２ｃおよび命令Ｃ２’，Ｃ１’を用いる手順（所要時間７）。（ａ３）スナップショット２ｂを用いる手順（所要時間３）。よって、（ａ３）の手順が状態ＳＴ５から状態ＳＴ１への最短手順である。
【００２７】  状態ＳＴ５から状態ＳＴ２への復元手順の候補は次の通りである。（ｂ１）命令Ｃ４’，Ｃ３’，Ｃ２’を用いる手順（所要時間５）。（ｂ２）スナップショット２ｃおよび命令Ｃ２’を用いる手順（所要時間６）。（ｂ３）スナップショット２ｂおよび命令Ｃ１を用いる手順（所要時間４）。よって、（ｂ３）の手順が状態ＳＴ５から状態ＳＴ２への最短手順である。
【００２８】  状態ＳＴ５から状態ＳＴ３への復元手順の候補は次の通りである。（ｃ１）命令Ｃ４’，Ｃ３’を用いる手順（所要時間２）。（ｃ２）スナップショット２ｃを用いる手順（所要時間３）。（ｃ３）スナップショット２ｂおよび命令Ｃ１，Ｃ２を用いる手順（所要時間７）。よって、（ｃ１）の手順が状態ＳＴ５から状態ＳＴ３への最短手順である。
【００２９】  状態ＳＴ５から状態ＳＴ４への復元手順の候補は次の通りである。（ｄ１）命令Ｃ４’を用いる手順（所要時間１）。（ｄ２）スナップショット２ｃおよび命令Ｃ３を用いる手順（所要時間４）。（ｄ３）スナップショット２ｂおよび命令Ｃ１，Ｃ２，Ｃ３を用いる手順（所要時間８）。よって、（ｄ１）の手順が状態ＳＴ５から状態ＳＴ４への最短手順である。
【００３０】  演算部１ｂは、最短手順の探索をダイクストラ法（Dijkstra's Algorithm）などを用いて行ってもよい。例えば、状態遷移図４は状態をノード、状態間の遷移を示す矢印をエッジとしたグラフで表され得る。演算部１ｂは、復元の起点の状態ＳＴ５から、当該状態ＳＴ５より前の時点の各状態に至る最短手順を、当該グラフにダイクストラ法を適用することで算出し得る。
【００３１】  演算部１ｂは、何れの最短手順にも用いられないスナップショットを削除対象と決定する。復元の起点の状態を状態ＳＴ５とした場合の上記最短手順の例において、スナップショット２ｂは状態ＳＴ１，ＳＴ２への復元の最短手順に用いられる。一方、スナップショット２ｃは何れの最短手順にも用いられていない。したがって、演算部１ｂは、スナップショット２ｃを削除対象と決定する。その後、演算部１ｂがスナップショット２ｃを記憶装置２から削除するように制御してもよい。
【００３２】  状態復元装置１によれば、演算部１ｂにより、記憶部１ａに記憶された情報に基づいて、復元の起点の状態からそれ以外の他の状態へ情報処理装置３を復元する最短手順が他の状態毎に算出される。演算部１ｂにより、何れの最短手順にも用いられないスナップショットが削除対象として決定される。
【００３３】  これにより、復元の高速化を図りながら記憶容量を節約できる。ここで、スナップショットは、ある時点における情報処理装置３内の所定の単位（例えば、仮想マシンやデータベースなど）について取得されるものである。このため、スナップショットのデータサイズは命令リスト２ａのデータサイズに比べて大きい。したがって、スナップショットの数が増えると記憶装置２の容量を圧迫する。スナップショットを削除すれば、記憶容量を節約し得るが、削除されたスナップショットを復元に利用できなくなる。すると、ある状態へ復元するまでの所要時間が長くなるおそれがある。
【００３４】  状態遷移図４の例でいえば、スナップショット２ｂ，２ｃによる復元は、イメージの適用であるため、所定時間内に終了することが多い。他方、命令Ｃ１〜Ｃ４，Ｃ１’〜Ｃ４’には実行の所要時間が比較的短い命令Ｃ１，Ｃ３，Ｃ４，Ｃ１’，Ｃ３’，Ｃ４’や実行の所要時間が比較的長い命令Ｃ２，Ｃ２’など様々である。仮にスナップショット２ｂを削除してしまうと、復元の起点の状態ＳＴ５から状態ＳＴ１や状態ＳＴ２への復元を行う際に、最短手順（上記の（ａ３）および（ｂ３）の手順）を採れなくなる。このように、例えば、最古のスナップショットを削除するといった方法で削除対象を決定してしまうと、復元の所要時間が削除前よりも長くなるおそれがある。
【００３５】  そこで、演算部１ｂは、各命令や各スナップショットによる各状態への復元の所要時間の情報に基づいて、復元の起点とした状態から他の各状態へ復元する際の最短手順に用いられないスナップショットを削除対象と決定する。復元の高速化に寄与しないスナップショットを保持しておくのは余計だからである。すなわち、最短手順に用いられるスナップショット２ｂを削除せずに残し、かつ、最短手順に用いられないスナップショット２ｃを削除できる。これにより、復元の高速化を図りながら記憶容量を節約できる。
【００３６】  なお、演算部１ｂは、各命令や各スナップショットによる各状態への復元の所要時間を、記憶装置２に記憶された命令リスト２ａやスナップショット２ｂ，２ｃを用いて予め計測し、記憶部１ａに格納してもよい。または、各命令や各スナップショットによる各状態への復元の所要時間のユーザによる入力を許容してもよい。また、１つの命令は複数のサブ命令の順列でもよい。例えば、命令Ｃ１は複数のサブ命令を順番に実行する命令群でもよい。
【００３７】  ［第２の実施の形態］  図２は、第２の実施の形態の情報処理システムを示す図である。第２の実施の形態の情報処理システムは、装置群２０、状態復元装置１００、ストレージ２００および端末装置３００を含む。装置群２０、状態復元装置１００、ストレージ２００および端末装置３００は、ネットワーク１０に接続されている。ネットワーク１０は、ＬＡＮ（Local Area Network）でもよいし、ＷＡＮ（Wide Area Network）やインターネットなどの広域ネットワークでもよい。装置群２０は、サーバ２１、ストレージ２２およびルータ２３を含む。
【００３８】  サーバ２１は、ＶＭＭ（Virtual Machine Monitor）２１ａを実行し、仮想マシン２１ｂを動作させる物理的なコンピュータである。サーバ２１のような物理的なコンピュータを、物理マシンと呼ぶことがある。サーバ２１は、仮想マシン２１ｂを複数動作させることができる。
【００３９】  ＶＭＭ２１ａは仮想マシンを管理するためのソフトウェアである。ＶＭＭ２１ａは、サーバ２１のＣＰＵの処理能力やＲＡＭの記憶領域を、演算のリソースとして仮想マシン２１ｂに割り振る。ＶＭＭ２１ａは、ハイパーバイザと呼ばれることもある。仮想マシン２１ｂは、サーバ２１上で動作する仮想的なコンピュータである。仮想マシン２１ｂでは、ＯＳ（Operating System）や所定のアプリケーションなどのソフトウェアを実行できる。以下の説明では、単に「装置」というとき物理マシンおよび仮想マシンの両方を含む。
【００４０】  ストレージ２２は、仮想マシン２１ｂで実行されるソフトウェアの処理に用いられる各種のデータを記憶する記憶装置である。ルータ２３は、装置群２０に含まれる各種の装置を接続して通信を中継する中継装置である。
【００４１】  例えば、第２の実施の形態の情報処理システムでは、データセンタに装置群２０を設置し、装置群２０によって実現される機能や演算のリソースを外部ユーザに提供する。このようなコンピュータの利用形態をクラウドコンピューティングと呼ぶことがある。装置群２０の各装置の設定は、外部ユーザに提供するリソースなどの内容の変化に応じて変わり得る。例えば、装置や仮想マシンの増減に伴って通信用の設定が変更されたり、ソフトウェアの動作環境が変更されたりする。その場合、情報処理システムを管理するユーザにより、当該変更のための更新作業（リリース作業ということもある）が行われる。リリース作業に伴って、装置群２０の各装置の状態は変化する。
【００４２】  状態復元装置１００は、装置群２０に含まれる装置の状態を過去の所定の時点の状態に復元する機能を提供するサーバコンピュータである。状態復元装置１００は、装置単位の状態を時間などに対応付けて管理し、装置単位に、ある時点の状態を復元する。ここで、仮想マシン２１ｂはサーバ２１上で動作するから、仮想マシン２１ｂの状態をサーバ２１の状態と考えることができる。また、仮想マシン２１ｂの状態の変化をサーバ２１の状態の変化と考えることができる。
【００４３】  ストレージ２００は、装置群２０に含まれる装置毎のバックアップデータを記憶する。バックアップデータを取得しておけば、装置群２０の全部または一部の装置をバックアップデータが取得された時点の状態へ復元できる。バックアップデータには、サーバ２１や仮想マシン２１ｂのスナップショット、ストレージ２２やルータ２３のコンフィグデータ（例えば、設定内容をテキストで記述したもの）などが含まれる。
【００４４】  例えば、サーバ２１のＯＳや所定のアプリケーションは、サーバ２１が有する所定の記憶領域のスナップショットを所定のタイミングで取得してストレージ２００に格納する。また、例えば、ＶＭＭ２１ａは仮想マシン２１ｂのメモリ／ディスクイメージをスナップショットとして所定のタイミングで取得し、ストレージ２００に格納する。所定のタイミングとしては、定期的なタイミングやユーザにより指定されたタイミングが考えられる。
【００４５】  端末装置３００は、ユーザによって操作されるクライアントコンピュータである。端末装置３００は、ユーザに所定のＧＵＩ（Graphical User Interface）を提供する。端末装置３００は、当該ＧＵＩに対する操作に応じた要求を状態復元装置１００に送信する。例えば、端末装置３００は、装置群２０の装置毎（または装置の集合毎）に復元させたい状態を状態復元装置１００に指定し、復元を実行させる。
【００４６】  図３は、第２の実施の形態の状態復元装置のハードウェア例を示す図である。状態復元装置１００は、プロセッサ１０１、ＲＡＭ１０２、ＨＤＤ１０３、通信部１０４、画像信号処理部１０５、入力信号処理部１０６、ディスクドライブ１０７および機器接続部１０８を有する。各ユニットが状態復元装置１００のバスに接続されている。サーバ２１や端末装置３００も状態復元装置１００と同様のユニットを用いて実現できる。
【００４７】  プロセッサ１０１は、状態復元装置１００の情報処理を制御する。プロセッサ１０１は、マルチプロセッサであってもよい。プロセッサ１０１は、例えばＣＰＵ、ＤＳＰ、ＡＳＩＣまたはＦＰＧＡなどである。プロセッサ１０１は、ＣＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡのうちの２以上の要素の組み合わせであってもよい。
【００４８】  ＲＡＭ１０２は、状態復元装置１００の主記憶装置である。ＲＡＭ１０２は、プロセッサ１０１に実行させるＯＳのプログラムやアプリケーションプログラムの少なくとも一部を一時的に記憶する。また、ＲＡＭ１０２は、プロセッサ１０１による処理に用いる各種データを記憶する。
【００４９】  ＨＤＤ１０３は、状態復元装置１００の補助記憶装置である。ＨＤＤ１０３は、内蔵した磁気ディスクに対して、磁気的にデータの書き込みおよび読み出しを行う。ＨＤＤ１０３には、ＯＳのプログラム、アプリケーションプログラム、および各種データが格納される。状態復元装置１００は、フラッシュメモリやＳＳＤ（Solid State Drive）などの他の種類の補助記憶装置を備えてもよく、複数の補助記憶装置を備えてもよい。なお、ストレージ２００もＨＤＤやＳＤＤなどの複数の記憶装置を備えている。
【００５０】  通信部１０４は、ネットワーク１０を介して他のコンピュータと通信を行えるインタフェースである。通信部１０４は、有線インタフェースでもよいし、無線インタフェースでもよい。
【００５１】  画像信号処理部１０５は、プロセッサ１０１からの命令に従って、状態復元装置１００に接続されたディスプレイ１１に画像を出力する。ディスプレイ１１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイや液晶ディスプレイなどを用いることができる。
【００５２】  入力信号処理部１０６は、状態復元装置１００に接続された入力デバイス１２から入力信号を取得し、プロセッサ１０１に出力する。入力デバイス１２としては、例えば、マウスやタッチパネルなどのポインティングデバイス、キーボードなどを用いることができる。
【００５３】  ディスクドライブ１０７は、レーザ光などを利用して、光ディスク１３に記録されたプログラムやデータを読み取る駆動装置である。光ディスク１３として、例えば、ＤＶＤ（Digital Versatile Disc）、ＤＶＤ−ＲＡＭ、ＣＤ−ＲＯＭ（Compact Disc Read Only Memory）、ＣＤ−Ｒ（Recordable）／ＲＷ（ReWritable）などを使用できる。ディスクドライブ１０７は、例えば、プロセッサ１０１からの命令に従って、光ディスク１３から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００５４】  機器接続部１０８は、状態復元装置１００に周辺機器を接続するための通信インタフェースである。例えば、機器接続部１０８にはメモリ装置１４やリーダライタ装置１５を接続できる。メモリ装置１４は、機器接続部１０８との通信機能を搭載した記録媒体である。リーダライタ装置１５は、メモリカード１６へのデータの書き込み、またはメモリカード１６からのデータの読み出しを行う装置である。メモリカード１６は、カード型の記録媒体である。機器接続部１０８は、例えば、プロセッサ１０１からの命令に従って、メモリ装置１４またはメモリカード１６から読み取ったプログラムやデータをＲＡＭ１０２またはＨＤＤ１０３に格納する。
【００５５】  図４は、第２の実施の形態の状態復元装置の機能例を示す図である。状態復元装置１００は、ＵＩ（User Interface）部１１０、状態登録部１２０、手順実行部１３０、手順実行結果登録部１４０、最短手順リスト作成部１５０、スナップショット削除判定部１６０および記憶部１７０を有する。ＵＩ部１１０、状態登録部１２０、手順実行部１３０、手順実行結果登録部１４０、最短手順リスト作成部１５０およびスナップショット削除判定部１６０は、プロセッサ１０１が実行するソフトウェアのモジュールとして実現できる。記憶部１７０は、ＲＡＭ１０２またはＨＤＤ１０３に確保した記憶領域として実現できる。
【００５６】  ＵＩ部１１０は、端末装置３００にＧＵＩを提供する。ＵＩ部１１０は、当該ＧＵＩに対する操作入力を受け付ける。ＵＩ部１１０は、受け付けた操作入力に応じて、状態復元装置１００の各部に処理の実行を指示する。
【００５７】  状態登録部１２０は、各装置の状態を記録する。各装置の状態は、リリース作業に伴う設定変更に応じて変化し得る。状態登録部１２０は、ある時点における装置の状態を識別するための情報（例えば、時刻）を生成し、ストレージ２００に格納する。また、状態登録部１２０は、所定のタイミングで、サーバ２１にスナップショットを取得させる。
【００５８】  手順実行部１３０は、設定変更用の手順の実行を制御する。ここで、手順とは、設定変更用の命令の集合である。１つの命令が１つの手順に対応してもよいし、複数の命令が１つの手順（命令群）に対応してもよい。手順実行部１３０は、ストレージ２００からリリース作業に伴う１以上の手順を読み出し、作業対象の装置に順次実行させる。手順実行部１３０は、状態復元用の手順の実行制御も行う。
【００５９】  手順実行結果登録部１４０は、手順の実行に応じた装置の状態遷移を記録する。手順実行結果登録部１４０は、手順に応じた状態遷移を示す情報を装置毎に生成し、ストレージ２００に格納する。手順実行結果登録部１４０は、実行された手順の内容を示す手順データをストレージ２００に格納する。
【００６０】  最短手順リスト作成部１５０は、装置の状態復元を行うための手順（復元手順）を組み合わせて、復元元の状態から復元先の状態へ復元するための所要時間の最も短い復元手順の組（最短手順リスト）を作成する。ここで、復元手順は、手順実行部１３０により実行された手順および当該手順とは逆の設定を行う手順（切り戻し手順という）を用いた状態復元の手順を含む。また、復元手順はスナップショットを用いた状態復元の手順を含む。
【００６１】  スナップショット削除判定部１６０は、最短手順リスト作成部１５０により作成された最短手順リストに基づいて、ストレージ２００に格納されたスナップショットのうち、削除対象とするスナップショットを決定する。スナップショット削除判定部１６０は、削除対象としたスナップショットをストレージ２００から削除する。
【００６２】  記憶部１７０は、状態復元装置１００の各部の処理に用いられる各種の情報を記憶する。例えば、記憶部１７０は、ストレージ２００に記憶された各情報のうちの少なくとも一部の複製を記憶し、状態復元装置１００の各部に提供する。
【００６３】  ストレージ２００は、状態遷移記録ＤＢ（DataBase）２１０、スナップショットＤＢ２２０および手順ＤＢ２３０を記憶する。状態遷移記録ＤＢ２１０、スナップショットＤＢ２２０および手順ＤＢ２３０は、ストレージ２００が備える記憶装置に確保した記憶領域として実現できる。
【００６４】  状態遷移記録ＤＢ２１０は、状態登録部１２０により作成された装置の状態を示す情報および手順実行結果登録部１４０により作成された装置の状態遷移を示す情報を記憶する。スナップショットＤＢ２２０は、装置毎に取得されたスナップショットおよびスナップショットと各状態との対応関係を示す情報を記憶する。手順ＤＢ２３０は、手順実行部１３０により実行された手順の手順データを記憶する。なお、状態遷移記録ＤＢ２１０、スナップショットＤＢ２２０および手順ＤＢ２３０の少なくとも何れかを状態復元装置１００に格納してもよい。
【００６５】  図５は、第２の実施の形態の状態記録テーブルの例を示す図である。状態記録テーブル２１１は、装置毎の状態を記録した情報である。状態記録テーブル２１１は、状態遷移記録ＤＢ２１０に格納される。状態記録テーブル２１１は、状態ＩＤ（IDentifier）、機器ＩＤおよび時刻の項目を含む。
【００６６】  状態ＩＤの項目には、状態を識別する状態ＩＤが登録される。機器ＩＤの項目には、装置を識別する機器ＩＤが登録される。機器ＩＤが仮想マシンを示す場合、当該機器ＩＤは当該仮想マシンを動作させる物理マシンも識別できる。時刻の項目には、時刻が登録される。ここで、第２の実施の形態では、一例として、装置のある時点の状態を、当該時点を示す時刻で表す。ただし、他の方法で状態を記録してもよい。
【００６７】  例えば、状態記録テーブル２１１には、状態ＩＤが“ＳＴ１”、機器ＩＤが“Ｄ０１０”、時刻が“２０１２／１１／２１  １４：３０：００”という情報が登録される。これは、機器ＩＤ“Ｄ０１０”の装置の状態ＩＤ“ＳＴ１”で示される状態が２０１２年１１月２１日１４時３０分００秒の時点の状態であることを示す。ここで、機器ＩＤ“Ｄ０１０”は仮想マシン２１ｂの機器ＩＤである。“Ｄ０１０”のうち“Ｄ”の部分はサーバ２１を示し、“０１０”の部分は仮想マシン２１ｂを示す。なお、以下の説明では、ある状態ＩＤの状態を指して、状態ＳＴ１のように表記することがある。
【００６８】  図６は、第２の実施の形態の手順実行記録テーブルの例を示す図である。手順実行記録テーブル２１２は、実行された手順に応じた状態遷移を示す情報である。手順実行記録テーブル２１２は、状態遷移記録ＤＢ２１０に格納される。手順実行記録テーブル２１２は、記録ＩＤ、手順ＩＤ、前の状態ＩＤ、後の状態ＩＤ、実行機器ＩＤおよび所要時間の項目を含む。
【００６９】  記録ＩＤの項目には、レコードを識別するための記録ＩＤが登録される。手順ＩＤの項目には、手順を識別する手順ＩＤが登録される。前の状態ＩＤの項目には、手順実行前の状態ＩＤが登録される。後の状態ＩＤの項目には、手順実行後の状態ＩＤが登録される。実行機器ＩＤの項目には、手順を実行した装置のＩＤが登録される。所要時間の項目には、当該手順の実行に要した時間が登録される。ここで、一例として所要時間の単位を分とする（以下、同様）。
【００７０】  例えば、手順実行記録テーブル２１２には、記録ＩＤが“Ｒ１”、手順ＩＤが“ＯＰ１”、前の状態ＩＤが“ＳＴ１”、後の状態ＩＤが“ＳＴ２”、実行機器ＩＤが“Ｄ０１０”、所要時間が“１（分）”という情報が登録される。これは、機器ＩＤ“Ｄ０１０”の装置において、状態ＳＴ１で、手順ＩＤ“ＯＰ１”の手順を実行したことで、当該装置の状態が状態ＳＴ２に遷移したことを示す。また、当該手順の実行に要した時間が１分であったことを示す。更に、当該レコードは記録ＩＤ“Ｒ１”で識別されることを示す。なお、以下の説明では、ある手順ＩＤの手順を指して、手順ＯＰ１のように表記することがある。
【００７１】  図７は、第２の実施の形態のスナップショット記録テーブルの例を示す図である。スナップショット記録テーブル２２１は、スナップショットを管理するための情報である。スナップショット記録テーブル２２１は、スナップショットＤＢ２２０に格納される。スナップショット記録テーブル２２１は、スナップショットＩＤ、スナップショットパス、機器ＩＤ、状態ＩＤおよび所要時間の項目を含む。
【００７２】  スナップショットＩＤの項目には、スナップショットＩＤが登録される。スナップショットパスの項目には、スナップショットを示すポインタが登録される。機器ＩＤの項目には、スナップショットが取得された装置の機器ＩＤが登録される。状態ＩＤの項目には、スナップショットが取得された時点の状態に対応する状態ＩＤが登録される。所要時間の項目には、スナップショットを用いて当該状態を復元するための所要時間が登録される。
【００７３】  例えば、スナップショット記録テーブル２２１には、スナップショットＩＤが“ＳＳ１”、スナップショットパスが“／ｍｎｔ／ｓｎａｐｓｈｏｔ／２０１２１１２１−００１．ｄａｔ”、機器ＩＤが“Ｄ０１０”、状態ＩＤが“ＳＴ１”、所要時間が“４（分）”という情報が登録される。
【００７４】  これは、機器ＩＤ“Ｄ０１０”の装置に対して、スナップショットＩＤ“ＳＳ１”、パス“／ｍｎｔ／ｓｎａｐｓｈｏｔ／２０１２１１２１−００１．ｄａｔ”で示されるスナップショットが取得されていることを示す。また、当該スナップショットが当該装置の状態ＳＴ１に対応する記録であること、当該スナップショットによる状態復元に要する時間が４分であることを示す。なお、以下の説明では、あるスナップショットＩＤのスナップショットを指して、スナップショットＳＳ１のように表記することがある。
【００７５】  図８は、第２の実施の形態の手順情報テーブルの例を示す図である。手順情報テーブル２３１は、手順データを管理するための情報である。手順情報テーブル２３１は、手順ＤＢ２３０に格納される。手順情報テーブル２３１は、手順ＩＤ、手順、切り戻し手順ＩＤおよび所要時間の項目を含む。
【００７６】  手順ＩＤの項目には、手順ＩＤが登録される。手順の項目には、手順データが登録される。切り戻し手順ＩＤの項目には、当該手順に対応する切り戻し手順の手順ＩＤが登録される。所要時間の項目には、当該手順の実行に要する時間が登録される。
【００７７】  例えば、手順情報テーブル２３１には、手順ＩＤが“ＯＰ１”、手順が“ｅｄｉｔＨｏｓｔｓＦｉｌｅ．ｓｈ”、切り戻し手順ＩＤが“ＯＰ２”、所要時間が“１（分）”という情報が登録されている。これは、“ｅｄｉｔＨｏｓｔｓＦｉｌｅ．ｓｈ”というファイル名で示される手順の手順ＩＤが“ＯＰ１”であり、手順ＯＰ１による設定を元に戻すための切り戻し手順が手順ＯＰ２であることを示す。また、手順ＯＰ１を実行するための所要時間が１分であることを示す。
【００７８】  図９は、第２の実施の形態の手順データの例を示す図である。手順データｆ１，ｆ２では、シェルスクリプトで命令を記述する場合を例示している。手順データｆ１は、“ｈｏｓｔｓ”ファイルに、“ｘ．ｘ．ｘ．ｘ  ｎｅｗｈｏｓｔ”のレコードを追加する手順を例示している。手順データｆ１では、ｃｐコマンドにより変更前の“ｈｏｓｔｓ”ファイルを“ｅｔｃ−ｈｏｓｔｓ．ｂａｋ”というファイル名で複製する。その後、ｅｃｈｏコマンドにより上記レコードを追加する。すなわち、手順データｆ１は２つの命令を含む。
【００７９】
手順データｆ２は、ｃｐコマンドにより“ｅｔｃ−ｈｏｓｔｓ．ｂａｋ”ファイルの内容を、“ｈｏｓｔｓ”ファイルに上書きすることで、“ｈｏｓｔｓ”ファイルを変更前の状態に復元する手順を例示している。当該手順は、手順データｆ１で示される手順に対する切り戻し手順である。手順データｆ２は１つの命令を含んでいる。なお、手順データｆ１，ｆ２はシェルスクリプトの形式に限らず、種々の形式（例えば、所定のプログラミング言語で記述されたプログラムなど）を利用し得る。
【００８０】  図１０は、第２の実施の形態のＧＵＩの例を示す図である。ＧＵＩ１８０は、ユーザによる状態復元のための操作入力を支援するＵＩである。ＧＵＩ１８０は、ＵＩ部１１０により、ストレージ２００に記憶された情報に基づいて生成され、端末装置３００に提供される。ＧＵＩ１８０は、状態遷移図１８１、凡例１８２、所要時間表示フォーム１８３、選択状態表示フォーム１８４、キャンセルボタン１８５および復元ボタン１８６を含む。
【００８１】  状態遷移図１８１は、手順情報テーブル２３１、手順実行記録テーブル２１２およびスナップショット記録テーブル２２１に基づいて、機器ＩＤ“Ｄ０１０”の装置の状態遷移を画像により図示したものである。凡例１８２は、状態遷移図１８１で描画されているシンボルの説明が表示される。状態遷移図１８１では、凡例１８２で示される凡例に従って、各状態が図示される。
【００８２】  例えば、１つの丸印が１つの状態を示す。四角形で囲われた丸印は、スナップショットが取得されている状態を示す。他の丸印よりも濃い色で表示される丸印は、当該装置の現在の状態を示す。他の丸印よりも太い線で描画された丸印は、ユーザにより選択中の状態（復元先の候補とする状態）を示す。例えば、ユーザは端末装置３００が備える入力デバイスを用いてポインタＰ１を操作し、状態遷移図１８１に表示された何れかの丸印を選択することで、復元先の候補とする状態を選択できる。
【００８３】  所要時間表示フォーム１８３は、現在の状態から、選択中の状態へ復元するための目安となるおおよその時間を表示するフォームである。なお、後述するように、所要時間表示フォーム１８３には、最短の所要時間を表示してもよい。
【００８４】  選択状態表示フォーム１８４は、選択中の状態を表示するフォームである。例えば、状態ＳＴ２は、状態遷移図１８１では“２”という番号に対応付けて表示されている。当該状態に対応する丸印が選択されると、選択状態表示フォーム１８４には、“２”の状態が選択されていることが表示される。更に、選択状態表示フォーム１８４の下部には、選択中の状態に関する詳細の情報も表示されている。例えば、状態ＳＴ２は手順ＯＰ１の実行後の状態であるから、その旨が表示される。また、状態ＳＴ２は手順ＯＰ３の実行前の状態であるから、その旨が表示される。
【００８５】  キャンセルボタン１８５は、ＧＵＩ１８０の表示を終了するためのボタンである。復元ボタン１８６は、選択中の状態への復元を状態復元装置１００へ指示するためのボタンである。例えば、ユーザは端末装置３００が備える入力デバイスを用いてポインタＰ１を操作し、キャンセルボタン１８５または復元ボタン１８６の押下操作を行える。端末装置３００は、押下操作されたボタンに応じた指示を状態復元装置１００に送信する。
【００８６】  図１１は、第２の実施の形態の手順実行の例を示すフローチャートである。以下、図１１に示す処理をステップ番号に沿って説明する。なお、以下の説明では、リリース作業を行う対象として仮想マシン２１ｂを例示する。ただし、他の装置についてリリース作業を行う場合も同様の手順を適用できる。
【００８７】  （Ｓ１１）ＵＩ部１１０は、仮想マシン２１ｂに対するリリース作業の開始指示を受け付ける。例えば、ユーザは端末装置３００を操作して、当該リリース作業の開始指示を状態復元装置１００に入力できる。ＵＩ部１１０は、状態復元装置１００の各部に以降の処理を実行させる。まず、状態登録部１２０は、状態記録テーブル２１１に作業開始時の状態を示す情報（現時刻）を記録する。作業開始時の状態は、状態記録テーブル２１１の例では状態ＳＴ１に相当する。状態登録部１２０は、状態を示す変数Ｓａにサーバ２１の当該状態の状態ＩＤ（例えば、“ＳＴ１”）を代入する。
【００８８】  （Ｓ１２）状態登録部１２０は、仮想マシン２１ｂのスナップショットを取得するか否かを判定する。スナップショットを取得する場合、処理をステップＳ１３に進める。スナップショットを取得しない場合、処理をステップＳ１４に進める。スナップショットは、前述の通り、定期的なタイミングやユーザにより指定されたタイミングで取得される。例えば、状態登録部１２０は、一定時間が経過する毎に、または所定数の手順を実行する毎に、スナップショットを取得すると判定してもよい。それ以外の場合はスナップショットを取得しないと判定する。
【００８９】  （Ｓ１３）状態登録部１２０は、仮想マシン２１ｂのスナップショットの取得をＶＭＭ２１ａに指示する。ＶＭＭ２１ａは仮想マシン２１ｂのスナップショットを取得し、ストレージ２００に格納する。サーバ２１はスナップショットを取得した旨を状態復元装置１００に通知する。状態登録部１２０は、新たに作成されたスナップショットにスナップショットＩＤを付与する。状態登録部１２０は、スナップショットＩＤとスナップショットのパスとを、変数Ｓａで示される状態に対応付けてスナップショット記録テーブル２２１に登録する。なお、スナップショットによる復元の所要時間はおおよそ一定と考えられるので、所定の値または過去の実績から予測される値を登録する（スナップショット記録テーブル２２１の例では４分）。また、機器ＩＤとして仮想マシン２１ｂの機器ＩＤ（例えば、“Ｄ０１０”）を登録する。
【００９０】
（Ｓ１４）手順実行部１３０は、作業指示を受け付ける。例えば、ユーザは端末装置３００を操作して、新たなシェルスクリプトのファイル（例えば、ｅｄｉｔＨｏｓｔｓＦｉｌｅ．ｓｈ）を入力することで作業の続行を状態復元装置１００に指示できる。または、ユーザは、端末装置３００を操作して、作業終了（例えば、ｑｕｉｔ）を状態復元装置１００に指示することもできる。手順実行部１３０は、ＵＩ部１１０を介して当該指示を受け付ける。
【００９１】  （Ｓ１５）手順実行部１３０は、作業終了の指示を受け付けたか否かを判定する。作業終了の指示を受け付けた場合、処理を終了する。作業終了の指示ではなく、何れかの手順の入力を受け付けた場合、処理をステップＳ１６に進める。
【００９２】  （Ｓ１６）手順実行部１３０は、入力された手順を仮想マシン２１ｂに実行させる。手順実行部１３０は、当該手順の実行時間を計測し、記憶部１７０に記録する。  （Ｓ１７）状態登録部１２０は、手順の実行が完了すると、現在の状態を示す情報（現時刻）を状態記録テーブル２１１に記録する。例えば、状態ＳＴ１の次の状態であれば、状態ＳＴ２が新たに記録される。状態登録部１２０は、状態を示す変数Ｓｂに現在の状態の状態ＩＤを代入する。
【００９３】  （Ｓ１８）手順実行結果登録部１４０は、手順の実行結果を記録する。具体的には、変数Ｓａの値を前の状態ＩＤ、変数Ｓｂの値を後の状態ＩＤ、仮想マシン２１ｂのＩＤを実行機器ＩＤとし、実行した手順の手順ＩＤに対応付けて手順実行記録テーブル２１２に登録する。また、当該レコードに記録ＩＤを付与する。所要時間として、ステップＳ１６で計測した時間を登録する。ここで、次のように手順ＩＤを求める。まず、手順情報テーブル２３１を参照して入力された手順と同名（例えば、ｅｄｉｔＨｏｓｔｓＦｉｌｅ．ｓｈ）の手順が登録済かを検索する。登録済ならその手順ＩＤを抽出して今回の登録に用いる。未登録であれば、手順ＩＤを新たに付与して手順情報テーブル２３１に登録する（所要時間をステップＳ１６で計測した時間とする）。そして、新たに付与した手順ＩＤを手順実行記録テーブル２１２の登録に用いる。このとき、切り戻し手順ＩＤにはＮＵＬＬ値（切り戻し手順なし）を登録する。ただし、切り戻し手順ＩＤおよび切り戻し手順を記述した手順データをユーザに入力させてもよい。入力があれば、手順実行結果登録部１４０は、入力された切り戻し手順ＩＤおよび切り戻し手順の手順データを手順情報テーブル２３１に登録する。
【００９４】  （Ｓ１９）状態登録部１２０は、状態を示す変数Ｓｂの値を、変数Ｓａに代入する。そして、処理をステップＳ１２に進める。  このように、順次手順を実行することで、サーバ２１などに対するリリース作業が行われる。なお、上記の説明では、ユーザによる手順の指定を順次受け付けるものとしたが、このような方法に限られない。例えば、リリース作業として実行する複数の手順とその順番とを予めスケジューリングしておき、当該スケジューリングされた内容に沿って、順次手順を実行してもよい。
【００９５】  また、ステップＳ１２では、手順実行部１３０は、スナップショットを取得するか否かをユーザに確認してもよい。例えば、手順実行部１３０は、ユーザによりスナップショットを取得する旨の入力があればスナップショットを取得すると判定する。他方、スナップショットを取得しない旨の入力があればスナップショットを取得しないと判定する。
【００９６】  更に、手順情報テーブル２３１に登録された手順ＩＤに対する切り戻し手順ＩＤがステップＳ１８の段階で未登録であったとしても、当該切り戻し手順ＩＤのユーザによる事後登録を許容する。ステップＳ１８または事後的に切り戻し用の手順データが入力された場合、前述のように、手順実行結果登録部１４０は、当該手順データを手順情報テーブル２３１に記録する。そして、手順実行部１３０は当該手順データを用いてテスト環境などで予め切り戻し手順の所要時間を実測しておく。手順実行結果登録部１４０は、計測された切り戻し手順の所要時間を手順情報テーブル２３１に登録する。ただし、切り戻し手順の所要時間を、対応する順方向の手順の所要時間と同じ時間と見積もって手順情報テーブル２３１に登録してもよい。
【００９７】  次に、状態復元の方法を例示する。状態復元は任意のタイミングで行うことができる。  図１２は、第２の実施の形態の状態復元の例を示すフローチャートである。以下、図１２に示す処理をステップ番号に沿って説明する。以下の説明では状態復元を行う対象として仮想マシン２１ｂを例示する。ただし、他の装置について状態復元を行う場合も同様の手順を適用できる。
【００９８】  （Ｓ２１）ＵＩ部１１０は、仮想マシン２１ｂについて現在の状態から指定状態への復元指示を受け付ける。例えば、ユーザは、ＧＵＩ１８０を用いて復元先の状態を指定し、当該状態への復元指示を状態復元装置１００に入力できる。ＧＵＩ１８０以外の入力手段（例えばＣＬＩ（Command Line Interface））を用いてもよい。ＵＩ部１１０は、状態復元装置１００の各部に以降の処理を実行させる。
【００９９】  （Ｓ２２）最短手順リスト作成部１５０は、仮想マシン２１ｂの現在の状態の状態ＩＤを変数Ｓｃ（以下、変数Ｓｃなどで示される状態を指すときに状態Ｓｃなどと表記することがある）に代入する。また、変数Ｓｔに指定状態の状態ＩＤを代入する。更に、各状態をノード（node）とし各状態間の遷移をエッジ（edge）とした状態遷移グラフＧを作成する。エッジは手順データを用いた復元手順またはスナップショットを用いた復元手順に相当する。エッジの長さは、各復元手順の所要時間に相当する。例えば、状態遷移グラフＧは、各手順データの実行の所要時間またはスナップショットによる復元の所要時間で各エッジを重み付けした隣接行列で表すことができる。
【０１００】  （Ｓ２３）最短手順リスト作成部１５０は、状態遷移グラフＧおよび変数Ｓｃ，Ｓｔを変数とする最短経路探索用の関数ｆ（Ｇ，Ｓｃ，Ｓｔ）を用いて状態Ｓｃから状態Ｓｔへ至る最短手順リストｐ（Ｓｃ，Ｓｔ）を求める。最短手順リストｐには、スナップショットを用いた復元手順も含まれ得る。例えば、関数ｆはダイクストラ法を用いて、状態遷移グラフＧのうち、状態Ｓｃから状態Ｓｔへ至る最短手順リストｐを求める関数である。ダイクストラ法は、グラフ理論において最短経路問題を解くために用いられるアルゴリズムである。最短手順リスト作成部１５０は、最短手順リストｐを手順実行部１３０に提供する。
【０１０１】  （Ｓ２４）手順実行部１３０は、最短手順リストｐで指示される復元手順を、サーバ２１（および仮想マシン２１ｂ）により順番に実行させることで、仮想マシン２１ｂの状態を指定された状態Ｓｔへ復元する。手順実行部１３０は、スナップショットを用いた復元を行う場合には、スナップショットを指定した復元をＶＭＭ２１ａに指示する。手順実行部１３０は、シェルスクリプトなどを用いた復元を行う場合には、シェルスクリプトなどを指定した復元を仮想マシン２１ｂに指示する。
【０１０２】  （Ｓ２５）状態登録部１２０は、サーバ２１の現在の状態を復元後の状態Ｓｔとする。  このように、手順実行部１３０は最短の復元手順を用いて装置の状態を復元する。このため、復元を高速化できる。次に最短手順の算出の具体例を説明する。
【０１０３】
図１３は、第２の実施の形態の状態遷移グラフの例を示す図である。最短手順リスト作成部１５０は、手順実行記録テーブル２１２、スナップショット記録テーブル２２１および手順情報テーブル２３１に基づいて、状態遷移グラフＧ１を生成する。状態遷移グラフＧ１は、仮想マシン２１ｂの状態ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４，ＳＴ５，ＳＴ６，ＳＴ７，ＳＴ８をノードとし、状態間の遷移をエッジとした有向グラフである。状態遷移グラフＧ１の各エッジの上部の数値は、各エッジに対応する復元手順の所要時間を示している。
【０１０４】  最短手順リスト作成部１５０は、手順実行記録テーブル２１２の仮想マシン２１ｂに関するレコード毎の、前の状態ＩＤ、後の状態ＩＤおよび所要時間によりエッジを作成する。ここで、状態ＳＴ（ｉ）（ｉは１以上の整数）から状態ＳＴ（ｉ＋１）へ遷移させる復元手順を復元手順ａiとする。例えば、状態ＳＴ１から状態ＳＴ２へ遷移させる復元手順は復元手順ａ1（これは、手順ＯＰ１に相当する）である。
【０１０５】  このとき、復元手順ａiに対して、手順情報テーブル２３１に切り戻し手順ＩＤが登録されていれば、切り戻し手順に相当する逆方向のエッジを作成する。復元手順ａiに対する切り戻し手順が存在する場合、当該切り戻し手順を復元手順ａi’とする。例えば、状態ＳＴ２から状態ＳＴ１へ遷移させる復元手順（復元手順ａ1に対する切り戻し手順）は、復元手順ａ1’（これは、手順ＯＰ２に相当する）である。
【０１０６】  ここで、前の状態ＩＤから後の状態ＩＤへ向かう矢印で示されるエッジは順方向の状態遷移を示している。後の状態ＩＤから前の状態ＩＤへ向かう矢印で示されるエッジは逆方向の状態遷移を示している。また、状態遷移グラフＧ１では、説明を簡単にするために、順方向および逆方向の状態遷移とも同じ所要時間となる場合を例示している。これは一例であり、順方向および逆方向の状態遷移の所要時間は異なっていてもよい。また、状態遷移グラフＧ１の例では順方向の全てのエッジに対して逆方向のエッジが存在しているが、順方向のエッジに対して逆方向のエッジが存在しない場合もあり得る。
【０１０７】
一方、スナップショットを用いた復元は、現在の状態Ｓｃからスナップショットが取得された状態Ｓｓｓに復元することに対応する。このため、最短手順リスト作成部１５０は、状態Ｓｃから状態Ｓｓｓへ遷移するエッジを作成する。スナップショット記録テーブル２２１の例では、スナップショットＳＳ１は状態ＳＴ１に対応する。よって、状態ＳＴ８から状態ＳＴ１へ遷移するエッジを作成する。スナップショットＳＳ１を用いた復元手順をａss1とする。スナップショットＳＳ２は状態ＳＴ４に対応する。よって、状態ＳＴ８から状態ＳＴ４へ遷移するエッジを作成する。スナップショットＳＳ２を用いた復元手順をａss2とする。スナップショットＳＳ３は状態ＳＴ６に対応する。よって、状態ＳＴ８から状態ＳＴ６へ遷移するエッジを作成する。スナップショットＳＳ３を用いた復元手順をａss3とする。
【０１０８】  最短手順リスト作成部１５０は、状態遷移グラフＧ１に基づいて、現在の状態Ｓｃから指定状態Ｓｔに至る最短手順リストｐ（Ｓｃ，Ｓｔ）を求める。例えば、現在の状態Ｓｃが状態ＳＴ８、指定状態Ｓｔが状態ＳＴ２であれば、状態ＳＴ８，ＳＴ１，ＳＴ２の順に経由する経路が最短（所要時間５分）である。経路は他にも、状態ＳＴ８，ＳＴ７，・・・，ＳＴ２と順番に戻る経路（所要時間６．４分）や、状態ＳＴ８，ＳＴ４，ＳＴ３，ＳＴ２と戻る経路（所要時間１０分）などがあるが、最短のものは、上記所要時間５分のものである。この経路に対応する復元手順の組を最短手順リストｐとする。
【０１０９】  具体的には、状態ＳＴ８から状態ＳＴ１への復元手順は、ａss1である。状態ＳＴ１から状態ＳＴ２への復元手順はａ1である。よって、最短手順リストｐは［ａss1，ａ1］となる。なお、ある状態から他の状態への経路として、スナップショットを用いる復元手順と、スナップショットを用いない復元手順との両方が存在し、両方の復元手順の所要時間が同じである場合もある。この場合、最短手順リスト作成部１５０は、スナップショットを用いない復元手順を優先して選択して最短手順リストｐを作成する。余計なスナップショットはできるだけ削除対象とした方が、記憶容量を節約し得るからである。
【０１１０】  なお、最短手順リストｐの括弧記号内の記載順序は、復元手順の実行順序も表している。左側に記載される復元手順ほど先に実行され、右側に記載される復元手順ほど後に実行されることになる。すなわち、手順実行部１３０は、まず、ＶＭＭ２１ａにスナップショットＳＳ１による復元（復元手順ａss1）を実行させる。次に、仮想マシン２１ｂに手順ＯＰ１による復元（復元手順ａ1）を実行させる。これにより、仮想マシン２１ｂの状態は、状態ＳＴ８から状態ＳＴ２に復元される。
【０１１１】  次に、スナップショットの削除対象の決定方法を説明する。以下に示す処理は、例えば次に示す（１）〜（５）の何れかのタイミングで実行され得る。（１）定期的なタイミング（例えば、日次、週次、月次など）。（２）スナップショット取得後のタイミング（図１１のステップＳ１３の直後）。（３）手順実行後のタイミング（図１１のステップＳ１９の直後）。（４）状態復元の実行後のタイミング（図１２のステップＳ２５の直後）。（５）ユーザにより指定されたタイミング（ＵＩ部１１０がユーザによる指示を受けて、状態復元装置１００の各部に削除対象の決定を行わせる）。（２）〜（４）の場合は、作業対象または状態復元対象の装置に対してスナップショットの削除対象の決定が行われる。（１）および（５）の場合は、スケジュールまたはユーザにより、指定された装置に対して当該削除対象の決定が行われる。
【０１１２】  図１４は、第２の実施の形態の削除対象の決定例を示すフローチャートである。以下、図１４に示す処理をステップ番号に沿って説明する。以下では、仮想マシン２１ｂのスナップショットに対する処理を想定する。ただし、他の装置に対するスナップショットの削除対象を決定する場合も同様の手順を適用できる。
【０１１３】  （Ｓ３１）最短手順リスト作成部１５０は、スナップショットＤＢ２２０を参照して、格納されている仮想マシン２１ｂのスナップショットの数が１よりも大きいか否かを判定する。スナップショットの数が１よりも大きい場合、処理をステップＳ３２に進める。スナップショットの数が１以下の場合、処理を終了する。
【０１１４】  （Ｓ３２）最短手順リスト作成部１５０は、仮想マシン２１ｂの現在の状態の状態ＩＤを変数Ｓｃに代入する。また、現在の状態Ｓｃを除く仮想マシン２１ｂの全ての状態の状態ＩＤの集合を状態集合｛Ｓ｝とする。仮想マシン２１ｂの状態は、状態記録テーブル２１１から把握できる。状態記録テーブル２１１の例において、現在の状態を状態ＳＴ８とすれば、状態集合｛Ｓ｝＝｛ＳＴ１，ＳＴ２，ＳＴ３，ＳＴ４，ＳＴ５，ＳＴ６，ＳＴ７｝である。
【０１１５】  （Ｓ３３）最短手順リスト作成部１５０は、集合｛Ｓ｝の要素Ｓｉを１つ選択する。以下に示すステップＳ３４の処理を実行済の要素は選択の候補とならない。  （Ｓ３４）最短手順リスト作成部１５０は、状態Ｓｃから状態Ｓｉまでの最短手順リストｐ（Ｓｃ，Ｓｉ）を最短手順リストの集合｛ｐ｝に追加する。最短手順リストｐ（Ｓｃ，Ｓｉ）の算出方法は、図１２，１３で例示した通りである。
【０１１６】  （Ｓ３５）最短手順リスト作成部１５０は、集合｛Ｓ｝の全要素を処理済であるか（全要素について最短手順リストｐを取得済であるか）否かを判定する。全要素を処理済である場合、処理をステップＳ３６に進める。未処理の要素がある場合、処理をステップＳ３３に進める。
【０１１７】  （Ｓ３６）スナップショット削除判定部１６０は、仮想マシン２１ｂに関して、最新のスナップショットを除く全スナップショットの集合を集合｛ＳＳ｝とする。例えば、スナップショットＳＳ１，ＳＳ２，ＳＳ３のうち、最新のスナップショットはスナップショットＳＳ３である。したがって、集合｛ＳＳ｝＝｛ＳＳ１，ＳＳ２｝である。スナップショット削除判定部１６０は、集合｛ＳＳ｝の要素ＳＳｉを１つ選択する。以下に示すステップＳ３７（判定によってはステップＳ３８）の処理を実行済の要素は選択の候補とならない。
【０１１８】  （Ｓ３７）スナップショット削除判定部１６０は、スナップショットＳＳｉを用いた復元手順ａssiが最短手順リストの集合｛ｐ｝に含まれているか否かを判定する。含まれていない場合、処理をステップＳ３８に進める。含まれている場合、処理をステップＳ３９に進める。
【０１１９】  （Ｓ３８）スナップショット削除判定部１６０は、スナップショットの削除対象リスト｛ｄｓｓ｝にスナップショットＳＳｉを追加する。  （Ｓ３９）スナップショット削除判定部１６０は、集合｛ＳＳ｝の全要素を処理済であるか否かを判定する。全要素を処理済である場合、処理をステップＳ４０に進める。未処理の要素がある場合、処理をステップＳ３６に進める。
【０１２０】  （Ｓ４０）スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝に含まれるスナップショットの記録をスナップショット記録テーブル２２１から削除する。スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝に含まれるスナップショットのデータの削除をＶＭＭ２１ａに指示する。
【０１２１】  なお、ステップＳ３１の判定を行うのは、最新のスナップショットを残しておくためである。次のスナップショット取得までの間に、手順情報テーブル２３１に切り戻し手順の登録のない手順が実行される可能性がある。その場合でも、最新のスナップショットを残しておくことで、当該スナップショットにより状態を復元できるようにする。ステップＳ３６〜Ｓ３８で最新のスナップショットを除いて処理を行うのも同じ理由である。
【０１２２】  ただし、ステップＳ３１の判定を、「スナップショットが１以上あるか」の判定としてもよい。この場合、ステップＳ３６〜Ｓ３８の処理で最新のスナップショットも含めて削除対象を決定する。
【０１２３】  また、ステップＳ３２では、変数Ｓｃに現在の状態の状態ＩＤを代入するものとしたが、現在よりも前の状態の状態ＩＤを変数Ｓｃに代入してもよい。例えば、最短手順リスト作成部１５０は、ユーザによる任意の時点の状態ＩＤの入力を許容してもよい。その場合、集合｛Ｓ｝を変数Ｓｃに入力された状態の時点よりも前の時点の状態の集合とする。ステップＳ３６において、集合｛ＳＳ｝の要素となるスナップショットも、当該変数Ｓｃに入力された状態の時点よりも前の時点で取得されたスナップショットとする。このとき当該時点よりも前の時点で取得されたスナップショットのうち、最新のものは集合｛ＳＳ｝に含まれない。このようにすれば、ユーザにより指定された時点までにおいて、スナップショットを整理できる。例えば、過去のある時点までに取得されたスナップショットを整理したい場合に有用である。
【０１２４】  図１５は、第２の実施の形態の削除対象の決定例を示す図である。テーブル１７１は、手順実行記録テーブル２１２、スナップショット記録テーブル２２１および手順情報テーブル２３１に基づいて得られる集合｛Ｓ｝，｛ｐ｝，｛ｄｓｓ｝を例示している。スナップショット削除判定部１６０は、最短手順リスト作成部１５０により作成された集合｛ｐ｝の情報に基づいて、集合｛ｄｓｓ｝の要素を決定する。
【０１２５】  具体的には、最短手順リスト作成部１５０は、各状態に対する集合｛ｐ｝の要素として、次の最短手順リストを作成する。状態ＳＴ１に対してｐ＝［ａss1］。状態ＳＴ２に対してｐ＝［ａss1，ａ1］。状態ＳＴ３に対してｐ＝［ａ7’，ａ6’，ａ5’，ａ4’，ａ3’］。状態ＳＴ４に対してｐ＝［ａ7’，ａ6’，ａ5’，ａ4’］。状態ＳＴ５に対してｐ＝［ａ7’，ａ6’，ａ5’］。状態ＳＴ６に対してｐ＝［ａ7’，ａ6’］。状態ＳＴ７に対してｐ＝［ａ7’］。
【０１２６】  そして、集合ＳＳ＝｛ＳＳ１，ＳＳ２｝の要素のうち、集合｛ｐ｝の何れの要素にも用いられない要素は、スナップショットＳＳ２である（スナップショットＳＳ１は、復元手順ａss1に用いられている）。したがって、スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝＝｛ａss2｝とする。
【０１２７】  スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝に基づいて、スナップショットＳＳ２の記録をスナップショット記録テーブル２２１から削除する。また、スナップショット削除判定部１６０は、スナップショットＳＳ２のデータの削除をＶＭＭ２１ａに指示する。ＶＭＭ２１ａは当該指示に従って、スナップショットＤＢ２２０に格納されたスナップショットＳＳ２を削除する。
【０１２８】  なお、図１３で例示したように、仮想マシン２１ｂの状態を過去の状態（例えば、状態ＳＴ２）に復元すると、当該状態から既存の状態（例えば、状態ＳＴ３）とは異なる新たな状態へと遷移し得る。状態復元装置１００は、このように１つの状態から複数の状態への遷移を記録し得る。
【０１２９】  図１６は、第２の実施の形態のＧＵＩの他の例を示す図である。ＧＵＩ１８０ａは、ＧＵＩ１８０に代えて、ＵＩ部１１０により生成され、端末装置３００に提供される。ＧＵＩ１８０ａは、状態遷移図１８１ａを表示する点がＧＵＩ１８０と異なる。状態遷移図１８１ａでは、状態ＳＴ２から状態ＳＴ３，ＳＴ９，ＳＴ１２の３つの状態に遷移が分岐している。このように、１つの状態から複数の状態へ遷移する場合にも、上記と同様に、復元先の状態を指定できる。
【０１３０】  この場合も、最短手順リスト作成部１５０は、図１２，１３で例示した方法と同様にして最短手順リストを算出できる。更に、手順実行部１３０は、当該最短手順リストに含まれる復元手順をサーバ２１などに順次実行させることで、最短の所要時間で状態復元を行える。
【０１３１】  また、最短手順リスト作成部１５０は、図１４，１５で例示した方法と同様にして、現在の状態から他の状態への最短手順リストの集合｛ｐ｝を算出できる。更に、スナップショット削除判定部１６０は、当該集合｛ｐ｝の要素に含まれないスナップショットを削除対象と決定することができる。
【０１３２】  以上で説明したように、状態復元装置１００によれば、復元の高速化を図りながらスナップショットを格納するための記憶容量（第２の実施の形態の例ではストレージ２００の記憶容量）を節約できる。また、記憶容量を効率的に利用できるように、状態復元機能を支援できる。
【０１３３】  ここで、リリース作業において、ユーザは誤った手順をサーバ２１や仮想マシン２１ｂなどに実行させてしまうことがある。この場合、復元作業や再度リリース作業を行うことになり、リリース作業に時間がかかり得る。リリース作業の手順を予め作成しておく場合も同様である。例えば、作成者はテスト環境で試行錯誤しながら、手順を作成することがある。試行錯誤において、試作した手順により望まない結果が生じると、テスト環境の構築などからやり直すこともある。このため、システムの状態を迅速に戻したいという要求がある。特に、近年では市場の変化も速く、これまで以上に開発・運用サイクルの高速化が求められている。
【０１３４】  この点、前述のように、リリース作業に伴う手順に対して切り戻し手順を用意することで、システムの状態を設定変更前の状態に復元し得る。ところが、手順の所要時間は、手順（および切り戻し手順）毎に千差万別である。例えば、簡単な設定ファイルの編集では数秒から数分程度（例えば、３０秒など）で終わるものもある。一方、大規模なミドルウェアのインストールやＯＳの更新などでは数分から数時間（例えば、６０分など）かかるものもある。
【０１３５】  また、簡単な切り戻し手順がない場合もある。例えば、ＨＤＤやＳＳＤなどの記憶装置のフォーマットやＯＳのインストールからやり直すような場合である。更に、切り戻し手順が存在しない場合もある。このため、切り戻し手順などを順次実行して状態を復元する際、場合によっては膨大な時間がかかることがある。
【０１３６】  この点、スナップショットを利用することが考えられる。スナップショットの取得および復元は、手順による復元に比べて、ある程度一定時間で行えるという利点があるからである。スナップショットを利用することで、切り戻し手順などを順次実行して状態を復元するよりも、復元先の状態を高速に復元できる可能性もある。例えば、複数の手順データを順次実行するとき、その累積の実行時間よりもスナップショットからの復元の方が早いこともある。
【０１３７】  ところが、スナップショットを用いる場合、スナップショットのデータを記憶するために記憶装置の記憶容量が圧迫され得る。スナップショットのデータ量は、取得対象となる仮想マシンなどに割り当てられたメモリ量に比例するためである。手順実行と同等の頻度でスナップショットを取得すると、記憶容量が膨大となってしまう。他方、スナップショットの取得頻度を下げると、任意の時点の状態を復元するのが難しくなる。例えば、スナップショットとスナップショットとの間の時点の状態へ復元するのが難しい。
【０１３８】  これに対し、状態復元装置１００ではシェルスクリプトなどで記述された手順データとスナップショットとを組み合わせて状態復元を行うことで、任意の時点への状態復元を高速化する。ただし、この場合もスナップショットの取得頻度によっては記憶容量が圧迫され得る。そこで、状態復元装置１００は、あるスナップショットを用いた復元手順が、現在の状態から他の状態に復元するための何れの最短手順リストにも用いられないとき、当該スナップショットをスナップショットＤＢ２２０から削除するように制御する。復元の高速化に寄与しないスナップショットを保持しておくのは余計だからである。これにより、最短の復元手順を確保しつつ、記憶容量を節約できる。
【０１３９】  例えば、手順データのサイズは数キロバイト程度であるのに対し、スナップショットのサイズは数メガバイト〜数十ギガバイト程度にもなり得る。このため、余計なスナップショットの削減は、記憶容量の節約に大きく貢献する。また、手順の開発や手順の実行における誤操作時に、システムを高速に元の状態に復元できるので、ユーザの作業の省力化および工数の削減を図れる。
【０１４０】  ［第３の実施の形態］  以下、第３の実施の形態を説明する。前述の第２の実施の形態との相違する事項を主に説明し、共通する事項の説明を省略する。
【０１４１】  スナップショットの取得方式として、フルスナップショット方式と差分スナップショット方式との２種類を利用できることがある。フルスナップショット方式は、ある時点における仮想マシン２１ｂなどの状態を示す全ての情報をスナップショットとして取得する方式である。
【０１４２】  差分スナップショット方式は、ある時点における仮想マシン２１ｂなどの状態を示す全ての情報のうち、直前に取得されたスナップショットからの差分の情報のみをスナップショットとして取得する方式である。ここでいう「直前に取得されたスナップショット」は、フルスナップショット方式で取得されたスナップショットおよび差分スナップショット方式で取得されたスナップショットの何れかである。このような２種類の方式に区分した場合、第２の実施の形態の説明で用いられた「スナップショット」は、フルスナップショット方式で取得されたスナップショットと考えることができる。
【０１４３】  差分スナップショット方式で取得されたあるスナップショットを用いて装置の状態を復元する場合、当該装置の状態が直前に取得された別のスナップショットに対応する状態となっていることを要する。すなわち、差分スナップショット方式で取得されたスナップショットは、状態復元において、別のスナップショットに依存する。第３の実施の形態では、このようにスナップショット間に依存関係がある場合を考慮したスナップショット管理機能を提供する。
【０１４４】  ここで、第３の実施の形態の情報処理システムは、図２で説明した第２の実施の形態の情報処理システムと同様である。また、第３の実施の形態の状態復元装置のハードウェア例および機能例は、図３，４で説明した状態復元装置１００のハードウェア例および機能例と同様である。このため、第３の実施の形態でも第２の実施の形態と同様の名称および符号を用いて各装置などを表す。第３の実施の形態では、状態復元装置１００は、スナップショット間における上記の依存関係を管理する。
【０１４５】  図１７は、第３の実施の形態のスナップショット記録テーブルの例を示す図である。スナップショット記録テーブル２２２は、スナップショット記録テーブル２２１に代えて、スナップショットＤＢ２２０に格納される。スナップショット記録テーブル２２２は、スナップショットＩＤ、スナップショットパス、機器ＩＤ、状態ＩＤ、所要時間および依存ＩＤの項目を含む。
【０１４６】  ここで、スナップショットＩＤ、スナップショットパス、機器ＩＤ、状態ＩＤおよび所要時間の項目に登録される内容は、スナップショット記録テーブル２２１と同様である。スナップショット記録テーブル２２２では、依存ＩＤの項目を含む点が、スナップショット記録テーブル２２１と異なる。依存ＩＤの項目には、当該スナップショットが依存する相手のスナップショットのスナップショットＩＤが登録される。
【０１４７】  例えば、スナップショット記録テーブル２２２には、スナップショットＩＤが“ＳＳ１”、スナップショットパスが“／ｍｎｔ／ｓｎａｐｓｈｏｔ／２０１２１１２１−００１．ｄａｔ”、機器ＩＤが“Ｄ０１０”、状態ＩＤが“ＳＴ１”、所要時間が“４（分）”、依存ＩＤが“−”（ハイフン）という情報が登録される。
【０１４８】  依存ＩＤの項目以外の項目の設定例は、スナップショット記録テーブル２２１と同様である。依存ＩＤ“−”は、依存ＩＤの設定がＮＵＬＬ値であり、スナップショットＳＳ１が他のスナップショットに依存していないことを示す。すなわち、スナップショットＳＳ１はフルスナップショット方式で取得されたスナップショットである。
【０１４９】  また、例えば、スナップショット記録テーブル２２２には、スナップショットＩＤが“ＳＳ２”、スナップショットパスが“／ｍｎｔ／ｓｎａｐｓｈｏｔ／２０１２１１２１−００１−１．ｄａｔ”、機器ＩＤが“Ｄ０１０”、状態ＩＤが“ＳＴ３”、所要時間が“１（分）”、依存ＩＤが“ＳＳ１”という情報が登録される。
【０１５０】  これは、機器ＩＤ“Ｄ０１０”の装置に対して、スナップショットＩＤ“ＳＳ２”、パス“／ｍｎｔ／ｓｎａｐｓｈｏｔ／２０１２１１２１−００１−１．ｄａｔ”で示されるスナップショットＳＳ２が取得されていることを示す。また、スナップショットＳＳ２が当該装置の状態ＳＴ３に対応する記録であること、スナップショットＳＳ２による状態復元に要する時間が１分であることを示す。また、スナップショットＳＳ２は、スナップショットＳＳ１に依存することを示す。すなわち、スナップショットＳＳ２は、差分スナップショット方式で取得されたスナップショットである。
【０１５１】  以下の説明では、各スナップショットの取得方式を区別して、フルスナップショットＳＳ１や差分スナップショットＳＳ２のように表記する。単にスナップショットという場合は、フルスナップショットおよび差分スナップショットの何れの場合も含み得る。
【０１５２】  図１８は、第３の実施の形態のＧＵＩの例を示す図である。ＧＵＩ１８０ｂは、ＧＵＩ１８０，１８０ａに代えて、ＵＩ部１１０により生成され、端末装置３００に提供される。ＧＵＩ１８０ｂは、状態遷移図１８１ｂを表示する点が、ＧＵＩ１８０，１８０ａと異なる。状態遷移図１８１ｂは、手順情報テーブル２３１、手順実行記録テーブル２１２およびスナップショット記録テーブル２２２に基づいて、機器ＩＤ“Ｄ０１０”の装置の状態遷移を画像により図示したものである。
【０１５３】  状態遷移図１８１ｂでは、フルスナップショットが取得されている状態と、差分スナップショットが取得されている状態とが区別して表示される。具体的には、白抜きの四角形で囲われた丸印は、フルスナップショットが取得されている状態を示す。濃い色の四角形で囲われた丸印は、差分スナップショットが取得されている状態を示す。他のシンボルの意味は、状態遷移図１８１と同様である。凡例１８２には、フルスナップショットおよび差分スナップショットを区別して、各シンボルの説明が表示される。
【０１５４】  ＧＵＩ１８０ｂを端末装置３００に提供することで、ユーザは、フルスナップショットおよび差分スナップショットが取得された状態を区別して把握できる。また、その上で復元先の状態を選択することができる。
【０１５５】  次に、第３の実施の形態の処理を説明する。ここで、リリース作業に伴う手順実行の処理は、図１１で説明した第２の実施の形態の手順実行の例と同様である。また、状態復元の処理は、図１２で説明した第２の実施の形態の状態復元の例と同様である。
【０１５６】  図１９は、第３の実施の形態の削除対象の決定例を示すフローチャートである。以下、図１９に示す処理をステップ番号に沿って説明する。当該削除対象の決定例では、第２の実施の形態に対し、ステップＳ３９，Ｓ４０の間にステップＳ３９ａを実行する点が異なる。そこで、以下ではステップＳ３９ａのみを説明し、他のステップの説明を省略する。
【０１５７】  （Ｓ３９ａ）スナップショット削除判定部１６０は、スナップショット記録テーブル２２２に基づいて、削除対象リスト｛ｄｓｓ｝に含まれるスナップショットのうち、｛ｄｓｓ｝に含まれていない別のスナップショットから直接的または間接的に依存されているスナップショットを特定する。スナップショット削除判定部１６０は、特定したスナップショットを削除対象リスト｛ｄｓｓ｝から除外する。
【０１５８】  このように、スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝に含まれる第１のスナップショットに関する依存関係を調べる。そして、（１）第２のスナップショットから依存されていない第１のスナップショットを削除対象として維持する。また、（２）第２のスナップショットから依存されているが、当該第２のスナップショットや当該第２のスナップショットが依存されている第３のスナップショットも再帰的に全て｛ｄｓｓ｝に含まれているスナップショット群を削除対象として維持する。当該（１）、（２）の何れにも該当しないスナップショットを｛ｄｓｓ｝から除外する。
【０１５９】  ステップＳ３９ａの当該処理は、何れかの最短手順リストに用いられるスナップショットでの復元に利用される（あるいは当該復元の前提となる）スナップショットを削除対象から除外する処理であるともいえる。
【０１６０】  図２０は、第３の実施の形態の状態遷移グラフの例（その１）を示す図である。最短手順リスト作成部１５０は、手順実行記録テーブル２１２、スナップショット記録テーブル２２２および手順情報テーブル２３１に基づいて、状態遷移グラフＧ２を生成する。第３の実施の形態では、差分スナップショットＳＳ２，ＳＳ３およびフルスナップショットＳＳ４が取得されている点が第２の実施の形態と異なる。
【０１６１】  差分スナップショットＳＳ２は状態ＳＴ１から状態ＳＴ３へ復元するための差分スナップショットである。差分スナップショットＳＳ３は、状態ＳＴ３から状態ＳＴ５へ復元するための差分スナップショットである。差分スナップショットＳＳ２，ＳＳ３を用いた復元の所要時間は何れも１分である。フルスナップショットＳＳ４は、状態ＳＴ７へ復元するためのフルスナップショットである。フルスナップショットＳＳ４を用いた復元の所要時間は４分である。
【０１６２】  状態遷移グラフＧ２では、差分スナップショットＳＳ２を用いた復元手順をａss2、差分スナップショットＳＳ３を用いた復元手順をａss3、フルスナップショットＳＳ４を用いた復元手順をａss4としている。
【０１６３】  スナップショット記録テーブル２２２でも示されるように、差分スナップショットＳＳ２は、フルスナップショットＳＳ１に依存している。差分スナップショットＳＳ３は、差分スナップショットＳＳ２に依存している。この場合、フルスナップショットＳＳ１は、差分スナップショットＳＳ２から直接的に依存されているといえる。フルスナップショットＳＳ１は、（差分スナップショットＳＳ２を介して）差分スナップショットＳＳ３から間接的に依存されているといえる。差分スナップショットＳＳ２は、差分スナップショットＳＳ３から直接的に依存されているといえる。
【０１６４】  すなわち、差分スナップショットＳＳ２を用いて現在の状態Ｓｃから状態ＳＴ３に復元する場合、ＶＭＭ２１ａは復元手順ａss1，ａss2を順番に実行することになる。また、差分スナップショットＳＳ３を用いて現在の状態Ｓｃから状態ＳＴ５に復元する場合、ＶＭＭ２１ａは復元手順ａss1，ａss2，ａss3を順番に実行することになる。このように、差分スナップショットを用いた復元は、依存関係のある他のスナップショットと組み合わせて実行される。差分スナップショットを用いた復元は、ＶＭＭ２１ａにより制御されるので、シェルスクリプトなどの手順データと組み合わせた復元が難しい。
【０１６５】  最短手順リスト作成部１５０は、状態遷移グラフＧ２に基づいて、現在の状態Ｓｃからそれ以外の他の状態Ｓｉに至る最短手順リストｐ（Ｓｃ，Ｓｉ）の集合｛ｐ｝を求める。集合｛ｐ｝の求め方は、第２の実施の形態と同様である。
【０１６６】  図２１は、第３の実施の形態の削除対象の決定例（その１）を示す図である。テーブル１７２は、手順実行記録テーブル２１２、スナップショット記録テーブル２２２および手順情報テーブル２３１に基づいて得られる集合｛Ｓ｝，｛ｐ｝，｛ｄｓｓ｝を例示している。スナップショット削除判定部１６０は、最短手順リスト作成部１５０により作成された集合｛ｐ｝の情報に基づいて、集合｛ｄｓｓ｝の要素を決定する。
【０１６７】  具体的には、最短手順リスト作成部１５０は、各状態に対する集合｛ｐ｝の要素として、次の最短手順リストを作成する。状態ＳＴ１に対してｐ＝［ａss1］。状態ＳＴ２に対してｐ＝［ａss1，ａ1］。状態ＳＴ３に対してｐ＝［ａ7’，ａ6’，ａ5’，ａ4’，ａ3’］。状態ＳＴ４に対してｐ＝［ａ7’，ａ6’，ａ5’，ａ4’］。状態ＳＴ５に対してｐ＝［ａ7’，ａ6’，ａ5’］。状態ＳＴ６に対してｐ＝［ａ7’，ａ6’］。状態ＳＴ７に対してｐ＝［ａ7’］。
【０１６８】  そして、集合｛ＳＳ｝＝｛ＳＳ１，ＳＳ２，ＳＳ３｝の要素のうち、集合｛ｐ｝の何れの要素にも用いられない要素は、差分スナップショットＳＳ２，ＳＳ３である（フルスナップショットＳＳ１は、復元手順ａss1に用いられている）。したがって、スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝＝｛ａss2，ａss3｝とする。
【０１６９】  更に、差分スナップショットＳＳ２は、前述の通り、差分スナップショットＳＳ３から直接的に依存されているが、差分スナップショットＳＳ３も｛ｄｓｓ｝に含まれている。また、差分スナップショットＳＳ２は差分スナップショットＳＳ３以外のスナップショットからは依存されていない。このため、スナップショット削除判定部１６０は、差分スナップショットＳＳ２を削除対象として維持する。
【０１７０】  また、差分スナップショットＳＳ３は、何れのスナップショットからも依存されていない。このため、スナップショット削除判定部１６０は、差分スナップショットＳＳ３を削除対象として維持する。
【０１７１】  スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝に基づいて、差分スナップショットＳＳ２，ＳＳ３の記録をスナップショット記録テーブル２２２から削除する。また、スナップショット削除判定部１６０は、差分スナップショットＳＳ２，ＳＳ３のデータの削除をＶＭＭ２１ａに指示する。ＶＭＭ２１ａは当該指示に従って、スナップショットＤＢ２２０に格納された差分スナップショットＳＳ２，ＳＳ３を削除する。
【０１７２】  このように、状態復元装置１００は、スナップショット間の依存関係を考慮して、削除対象のスナップショットを決定する。仮に、依存関係を無視して削除対象を決定してしまうと、最短の復元手順リストに用いられる差分スナップショットによる復元を行えなくなる可能性があるからである。例えば、フルスナップショットＳＳ１または差分スナップショットＳＳ２の何れかが削除されてしまうと、ＶＭＭ２１ａは、差分スナップショットＳＳ３を用いた復元を行えなくなってしまう。そこで、上記のようにスナップショット間の依存関係を考慮して削除対象のスナップショットを決定することで、差分スナップショットを用いた復元が行えなくなることの防止を図れる。
【０１７３】  図２２は、第３の実施の形態の状態遷移グラフの例（その２）を示す図である。状態遷移グラフＧ３は、状態遷移グラフＧ２とエッジとノードとの接続関係は同一であるが、各エッジの長さ（エッジに対応する復元手順の所要時間）が異なる。各復元手順の所要時間を次の通りとする。復元手順ａ1，ａ1’，ａ3，ａ3’は１分である。復元手順ａ2，ａ2’は０．５分である。復元手順ａ4，ａ4’，ａ5，ａ5’，ａ6，ａ6’，ａ7，ａ7’は３分である。復元手順ａss1，ａss4は４分である。復元手順ａss2，ａss3は２分である。現在の状態をＳＴ８とすると、図１９で示した処理に従えば、状態復元装置１００は状態遷移グラフＧ３に対して、次のように削除対象のスナップショットを決定する。
【０１７４】  図２３は、第３の実施の形態の削除対象の決定例（その２）を示す図である。テーブル１７３は、状態遷移グラフＧ３に対する集合｛Ｓ｝，｛ｐ｝，｛ｄｓｓ｝を例示している。具体的には、最短手順リスト作成部１５０は、各状態に対する集合｛ｐ｝の要素として、次の最短手順リストを作成する。状態ＳＴ１に対してｐ＝［ａss1］。状態ＳＴ２に対してｐ＝［ａss1，ａ1］。状態ＳＴ３に対してｐ＝［ａss1，ａ1，ａ2］。状態ＳＴ４に対してｐ＝［ａss1，ａ1，ａ2，ａ3］。状態ＳＴ５に対してｐ＝［ａss1，ａ1，ａ2，ａss3］。状態ＳＴ６に対してｐ＝［ａ7’，ａ6’］。状態ＳＴ７に対してｐ＝［ａ7’］。
【０１７５】  そして、集合｛ＳＳ｝＝｛ＳＳ１，ＳＳ２，ＳＳ３｝の要素のうち、集合｛ｐ｝の何れの要素にも用いられない要素は、差分スナップショットＳＳ２である。フルスナップショットＳＳ１は復元手順ａss1に用いられているし、差分スナップショットＳＳ３は復元手順ａss3に用いられているからである。したがって、スナップショット削除判定部１６０は、削除対象リスト｛ｄｓｓ｝＝｛ａss2｝とする。
【０１７６】  ただし、差分スナップショットＳＳ２は、前述の通り、差分スナップショットＳＳ３から直接的に依存されている。また、図２２，２３の例では、差分スナップショットＳＳ３は｛ｄｓｓ｝に含まれていない。このため、スナップショット削除判定部１６０は、差分スナップショットＳＳ２を｛ｄｓｓ｝から除外する。すなわち、差分スナップショットＳＳ２を削除対象から除外する。
【０１７７】
すると、削除対象リスト｛ｄｓｓ｝の要素はなくなる。図２２，２３の例では、削除対象となるスナップショットが存在しないことになる。ここで、差分スナップショットＳＳ３は状態ＳＴ５の復元に用いられるが、差分スナップショットＳＳ２に依存している。このため、差分スナップショットＳＳ２を削除してしまうと、ＶＭＭ２１ａは差分スナップショットＳＳ３を用いた復元を行えなくなってしまう。そこで、状態復元装置１００は、｛ｄｓｓ｝にリストアップされた差分スナップショットＳＳ２を削除対象から除外する。
【０１７８】  これにより、ＶＭＭ２１ａによる差分スナップショットＳＳ３を用いた復元について、スナップショットＳＳ１，ＳＳ２，ＳＳ３を順番に適用する方法を確保できる。より具体的には、ＶＭＭ２１ａによる復元処理で、復元手順ａss3に対し復元手順ａss2の実行が前提であるとき、状態ＳＴ５に対して算出された手順リスト［ａss1，ａ1，ａ2，ａss3］に代えて、手順リスト［ａss1，ａss2，ａss3］をＶＭＭ２１ａに実行させることになる（当該代替の手順リストの実行指示はスナップショット削除判定部１６０が行う）。この場合にも、ＶＭＭ２１ａによる差分スナップショットを用いた復元を適切に行える。
【０１７９】  なお、これまでの例では最新のスナップショットを残すものとした。ただし、例えば、最新のスナップショットが取得された状態に、シェルスクリプトなどの手順データを用いて当該最新のスナップショット以下の所要時間で復元可能であれば、前述したように最新のスナップショットを削除対象としてもよい。図２２の例では、最新のスナップショットが取得された状態ＳＴ７へは復元手順ａ7’を用いて、現在の状態ＳＴ８からも復元可能である。更に、復元手順ａ7’の所要時間（３分）は復元手順ａss4の所要時間（４分）以下である。したがって、この場合には、フルスナップショットＳＳ４を削除対象と決定することも考えられる。
【０１８０】  また、前述のように、手順データやスナップショットを用いた復元手順の所要時間は実測してもよいし、所与のものとしてもよい。ただし、復元手順の所要時間は各装置の動作環境（例えば、プロセッサの処理性能やディスクがＨＤＤかＳＳＤかなど）によって異なることがある。このため、復元手順の所要時間を実測によって記録すれば、実際の環境により適した時間で復元の最短手順を計算できる。例えば、実測の方法としては、同じ性能の装置でテスト環境を作って実測する、多数の環境で復元手順を実行した際の時間を記録して統計処理して所要時間を推測する、動作環境（例えば、装置の性能）から所要時間を推測する、などの方法が考えられる。
【０１８１】  更に、スナップショットによる復元に制約を追加してもよい。例えば、スナップショットによる復元では、仮想マシン２１ｂ単体の状態は復元できる。しかし、付随する装置（例えば、ストレージ２２やルータ２３）の設定も当該仮想マシン２１ｂの状態に対応する状態に復元せねば、仮想マシン２１ｂを適切に動作させることができないことがある。このような場合は、当該付随する装置の復元も行われなければ、システムとして復元されたことにならない。そこで、付随する装置の設定にも影響を及ぼす設定変更を行った際に取得されたスナップショットは上記の復元に用いないようにしてもよい（この場合、シェルスクリプトなどの手順のみを用いて付随する装置の設定と共に復元するようにする）。
【０１８２】  例えば、図１１で示したステップＳ１８で、手順実行結果登録部１４０は、手順データによる設定変更が仮想マシン２１ｂだけでなく、ストレージ２２やルータ２３にも及んでいることを検出する。その場合、手順実行結果登録部１４０は、直前のステップＳ１３でスナップショットを取得していれば、当該スナップショットを復元に利用しない旨をスナップショット記録テーブル２２１に登録する。後の処理において、最短手順リスト作成部１５０およびスナップショット削除判定部１６０は、スナップショット記録テーブル２２１を参照して、復元に利用しない旨の登録がされているスナップショットを処理の対象から除外する。
【０１８３】
また、データサイズの大きな手順データを削除対象としてもよい。上記の例において、通常は手順データ（数十バイト〜数キロバイト）に比べてスナップショットのデータサイズ（数メガバイト〜数十ギガバイト）は大きくなる。ただし、ある手順データが、１回の設定変更にしか用いられないにも関わらず、スナップショット程度のデータサイズをもつこともある。例えば、このような手順データとしてＤＢのトランザクションログが考えられる。状態復元装置１００は、そのような手順データを検索し、当該手順データを検出した場合、当該手順データにより遷移する状態をスナップショットや他の手順データを用いて復元可能であれば、当該手順データをスナップショットよりも優先的に削除してもよい。例えば、手順データのデータサイズに１００メガバイトなどの閾値を設け、当該閾値を超える手順データを検索してもよい。このようにすれば、記憶領域を一層節約し得る。
【０１８４】  更に、仮想マシン２１ｂのスナップショットを特に例示して説明したが、ＤＢに対して取得されたスナップショットやサーバ２１に対して取得されたスナップショットについても第２，第３の実施の形態の方法を適用できる。ＤＢに対しては、トランザクションログを手順データとして用い得る。また、サーバ２１に対しては、仮想マシン２１ｂと同様にシェルスクリプトなどを手順データとして用い得る。
【０１８５】  ところで、第１の実施の形態の情報処理は、演算部１ｂにプログラムを実行させることで実現できる。また、第２の実施の形態の情報処理は、プロセッサ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体（例えば、光ディスク１３、メモリ装置１４およびメモリカード１６など）に記録できる。
【０１８６】  例えば、プログラムを記録した記録媒体を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＲＡＭ１０２やＨＤＤ１０３などの記憶装置に格納し（インストールし）、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１８７】  上記については単に本発明の原理を示すものである。更に、多数の変形や変更が当業者にとって可能であり、本発明は上記に示し、説明した正確な構成および応用例に限定されるものではなく、対応する全ての変形例および均等物は、添付の請求項およびその均等物による本発明の範囲とみなされる。
【符号の説明】
【０１８８】  １  状態復元装置  １ａ  記憶部  １ｂ  演算部  ２  記憶装置  ２ａ  命令リスト  ２ｂ，２ｃ  スナップショット  ３  情報処理装置  ４  状態遷移図
【図１】
0005971420.tif 000002
【図２】
0005971420.tif 000003
【図３】
0005971420.tif 000004
【図４】
0005971420.tif 000005
【図５】
0005971420.tif 000006
【図６】
0005971420.tif 000007
【図７】
0005971420.tif 000008
【図８】
0005971420.tif 000009
【図９】
0005971420.tif 000010
【図１０】
0005971420.tif 000011
【図１１】
0005971420.tif 000012
【図１２】
0005971420.tif 000013
【図１３】
0005971420.tif 000014
【図１４】
0005971420.tif 000015
【図１５】
0005971420.tif 000016
【図１６】
0005971420.tif 000017
【図１７】
0005971420.tif 000018
【図１８】
0005971420.tif 000019
【図１９】
0005971420.tif 000020
【図２０】
0005971420.tif 000021
【図２１】
0005971420.tif 000022
【図２２】
0005971420.tif 000023
【図２３】
0005971420.tif 000024