WIN1@Codename

Codename

Hyper-V memo(スナップショット「戻す」の落とし穴)

前回スナップショットについて注意すべき点を述べましたが、実はスナップショットには大きな落とし穴があります。
スナップショット作成後に、元の状態に戻す「戻す」コマンドがvhdファイルとavhdファイルにどのように影響するかをわかってないと痛い目にあいます。

この問題は仮想マシンを使っていてスナップショットを取っていたのですが、元にもどそうと「戻す」コマンドを使ったとき、「残ったスナップショットのツリーはいらないな、あ、でも削除してしまうとシャットダウンしたら結合される?まさかなぁ・・・」と試してみたところ気づいたものです。

あるオリジナルのvhdを元に仮想マシンを作成します。
今回は「WIN7x64_Diff.vhd」というファイルを使用します。
作成した仮想マシンを起動します。
TestWin7という仮想マシンが起動しています。
 20091130121056[2]

この状態でまずスナップショットを作成します。
20091430121036[5]

仮想マシンにログインして、デスクトップ上に検証用のファイルを作成します。
20091630121001[2]

このときファイル構成はどうなっているかというと、オリジナルファイルのvhdと差分のavhdファイルが作成されています。
20091630121053[2]

スナップショット作成後の仮想マシンは、このavhdファイルで稼動していることになります。
20091830121047[2]

 

ではここからが問題の部分です。
通常、この状態からもどの状態に戻すには仮想マシンを右クリックして「戻す」を選択します。
20092030121054[2]

当然先ほど追加した検証用ファイルはコマンド実行直後になくなっている状態で、変更に戻ります。
20092330121035[2]

戻すということは、差分のavhdファイルを破棄して、元のvhdファイルに切り替えるというのをイメージすると思うのですが、実際には仮想マシンは引き続きavhdファイルを使用し続けています。
20091830121047[2]

イメージ的には参照ファイルはavhdからvhdファイルに切り替わっているように思えるのですが、実際avhdファイルを参照したままです。
しかし、加えられた変更部分は元に戻っています。

Hyper-Vマネージャーでは、「戻す」コマンドを実行後であっても、スナップショットのツリーは残ったままです。
20091430121036[5]

ここで問題なのですが、通常スナップショットのツリーを削除した後、仮想マシンをシャットダウンすると、vhdファイルとavhdファイルの結合処理がはじまります。
これにより、差分がオリジナルのvhdに適用され最新の状態のvhdファイルとなるわけです。

では、「戻す」コマンド実行後 いらなくなったスナップショットを削除してシャットダウンするとどうなるのか?
実はこの場合も結合処理が開始され結合処理が行われます。
20093230121003[2]

ファイル構成を見てみると、確かにavhdファイルはなくなっており、vhdファイルだけが残っています。
20093330121052[2]

Hyper-Vマネージャーの構成も参照ファイルはvhdファイルとなっています。
20093430121045[2]

仮想マシンを起動してみるときちんと変更前の状態にもどっています。
20092330121035[2]

「戻す」コマンドを実行したにもかかわらず、仮想マシンはavhdファイルを参照しつづけて、なおかつスナップショットを削除してシャットダウンすると結合処理が行われる。
これはいったいどういうことなのか・・・。   
予想するに、たとえ元に戻すという操作を行ったとしても、Hyper-Vではそのこと自体も差分情報として保持するのではないでしょうか。
であれば、今回のふるまいもなんとなくわかる気がします。

 

ですが、ここで大きな問題が!

通常スナップショットを削除してシャットダウンすると、結合処理が行われ意図した変更分がvhdファイルに適用されることになるのですが、「戻す」コマンドを実行後にスナップショットを削除してシャットダウンすると、元の状態に戻るということになります。

では、「戻す」コマンドが実行したか、していないのか、今回のように目に見えて変更箇所が確認できる場合はよいのですが、数ヶ月前に「戻す」コマンドを実行しておきながら、それを忘れてしまいスナップショット削除-シャットダウンをした場合、意図した状態にvhdファイルはなっていません。
スナップショット削除後であれば、元に戻すこともできず・・・。

要は、「戻す」コマンドを実行したのか否かがHyper-Vマネージャーなどから確認できれば、もしくは一言スナップショット削除前に「戻す」コマンドが実行されていますなどダイアログでも出してもらえればましなような気がします。

便利な「戻す」機能ですが、使い方をまちがうと痛い目にあいますのでくれぐれもご注意を!


コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://codename2010.blog11.fc2.com/tb.php/54-00972d51
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad