Hyper-Vのスナップショット機能を使えば仮想環境の構築や再現が素早くできる。HV 2.0での改善点についても解説。
前回はVirtual PC 2007/Windows Virtual PC/Virtual Server 2005における復元ディスクの使い方について解説した。保存できる状態が1つだけしかないなど、制約の多い復元機能であるが、これらの不満はHyper-Vのスナップショットでは大幅に改善されている。今回はそのスナップショット機能について解説する。なお以下では特に断らない限り、Windows Server 2008 R2で利用できるHyper-V 2.0のスナップショット機能について解説する。Windows Server 2008のHyper-V 1.0におけるスナップショット機能との違いについては、必要に応じて言及する。
Hyper-Vには「スナップショット」という、仮想マシンの“状態”を保存したり、復元させたりする機能がある。実際のコンピュータでいえば、システム全体をフルバックアップしたり、バックアップから素早く復元させる機能に相当するが、ディスクの内容だけでなく、実行中のコンピュータの状態も保存しておくことができる点が異なる。そのため「復元“ディスク”」ではなく、まったく別のスナップショットという名称が与えられている。複数のスナップショットを作成して履歴のように管理できるなど、その機能には大きな違いがある。以下に主な違いを列挙しておく。
項目 | 復元ディスク | スナップショット |
---|---|---|
保存可能な状態数 | 1つだけ | 複数可能 |
ディスク内容の保存と復元 | ○ | ○ |
メモリ内容(実行中の仮想マシンの状態)の保存と復元 | × | ○ |
仮想マシンの設定(構成)の保存と復元 | × | ○ |
復元のアンドゥ | × | ○(復元直前の状態をスナップショットとして保存しておけば可能) |
状態(およびスナップショット)のエクスポート/インポート | × | ○(同一コンピュータだけでなく、異なるコンピュータでインポートすることも可能) |
復元ディスクとスナップショットの機能比較 Virtual PC 2007/Windows Virtual PC/Virtual Server 2005の復元ディスクと、Hyper-Vのスナップショット機能の比較。 |
以下、簡単にまとめておく。
■保存される「状態」の内容
スナップショットで保存される状態には、ディスクの内容だけでなく、実行中のプロセス/メモリの内容(実行中の仮想マシンを保存する場合)や、仮想マシンに対する「設定(構成)」も含まれる。設定とは、CPUの数やメモリのサイズ、ディスクやネットワーク・インターフェイスの構成など、仮想マシンごとの設定メニューで指定する内容のことである。例えばメモリ・サイズが512Mbytesとして設定されている仮想マシンでスナップショットを作成後、メモリ・サイズを1Gbytesに増加させたとする。後でそのスナップショットを復元させると、メモリ・サイズ設定が自動的に元の512Mbytesに戻り、同じ仮想マシン環境が再現される。
従来のVirtual PC/Virtual Serverなどでは、仮想マシンの設定を変更しても復元操作ではディスクの内容が元に戻るだけであった。メモリ・サイズやデバイスの構成などは最後に変更された状態のままなので、同じ環境を何度も再現したい場合は設定が異なっていないか注意する必要がある。
逆にスナップショットを使う場合は、スナップショットの作成後に行った設定変更はすべて破棄されるので注意する。例えばスナップショットの作成後にメモリ・サイズを増加させて実験を行い、その後、最初のスナップショットに復旧させたとする。この時点でメモリ・サイズ設定も元の値に戻ってしまっているので、以後は少ないメモリで実行することになる。同じ状態で実験したければ、忘れずにまたメモリ・サイズ設定を変更するか、サイズ変更後の状態で新たにスナップショットを作成するといった操作が必要になる。特にVirtual PCとHyper-Vの両方を使っていると混乱しがちだ。
実行中のプロセスやメモリの内容の保存については、この後の「オンライン・スナップショットとオフライン・スナップショット」で詳しく説明する。
■保存可能な状態数
スナップショットでは複数の状態を保存することができ、そのいずれの状態へも素早く戻す(復元させる)ことができる。作成されたスナップショットは時系列で管理されるし、途中から別のスナップショット系列を派生させるといった使い方もできる。Hyper-Vで仮想マシンを作成後、それを起動する前に最初に1つスナップショットを作成しておけば、ちょうどVirtual PCやVirtual Serverで復元ディスクのオプションをオンにしたのと同じ効果が期待できる。つまり、仮想マシンでさまざまな実験を行った後、最初に作成したスナップショットへ復旧させれば、初期状態に素早く戻すことができる(TIPS「Hyper-Vのスナップショットを復元ディスクとして使う」参照)。
■復元のアンドゥ(取り消し)
すでに作成した過去のスナップショットのうちから1つを選び、その状態へ復旧させることをHyper-Vでは「(スナップショットを)適用する」という。だがそのまま適用すると現在の状態が失われてしまうので、適用前に、まず現在の状態のスナップショットを作成するかどうかを問い合わせるようになっている。このスナップショットを作成しておくと、後で簡単に現在の状態へ戻すこと、つまり復元操作のアンドゥ(取り消し)が可能になる。Virtual PCなどの復元ディスクでは、最大でも1つしか状態を保存できないため、復元操作のアンドゥは不可能である。
■状態のエクスポートとインポート
Hyper-Vでは、現在の仮想マシンの状態や、特定のスナップショットの状態を外部にエクスポートしたり、それをインポートしたりする機能がある。別のサーバにインポートすれば仮想マシンの実行環境を移行させることが可能である(これを自動的に行うのがクィック・マイグレーションやライブ・マイグレーションである)。
スナップショットでは実行中の仮想マシンの状態も保存できるが、これを「オンライン・スナップショット」という。これに対して、停止中の仮想マシンのスナップショットを「オフライン・スナップショット」という。
Virtual PC/Virtual Serverなどの復元ディスクは、オフライン・スナップショットに近いが、さらに仮想マシンの構成情報も保存されている点が異なる。
オンライン・スナップショットには仮想ディスクの内容と仮想マシンの構成情報のほか、実行中の仮想マシンのメモリ内容やプロセスの状態も保存されている。実行中の状態をオンライン・スナップショットとして保存しておけば、復元後にすぐに実行を再開できるので便利である。これはコンピュータをスリープやスタンバイさせたり、そこから復帰させたりするのと似ているが、実際にはスリープの準備などの操作は一切行われないため、場合によっては問題が起こることがあるので、注意して利用していただきたい。例えばネットワーク経由でファイルをコピーしている最中の状態でもオンライン・スナップショットを作成できるが(エクスプローラで巨大なファイルをネットワーク経由でコピーしている最中にスナップショットを作成する)、この状態を後で再開しても、コピー操作は続行できずにエラーとなる。なぜなら通信が途中で途絶えてしまい、再開することができないからだ(TCP/IPの通信を途中で長時間停止させると、通常はエラーとなって続行できない)。このように、仮想マシンの動作状況によっては問題が起こる可能性があるので、オンライン・スナップショットの運用には注意する。
Windows Server 2008のHyper-V 1.0で作成されたオフライン・スナップショット(および停止状態のエクスポート・ファイル)は、Windows Server 2008 R2のHyper-V 2.0と互換性がある。そのため、Windows Server 2008をWindows Server 2008 R2にアップグレードしてもそのまま継続して利用できる。
これに対して、オンライン・スナップショット(およびオンライン状態のエクスポート・ファイル)はHyper-V 1.0とHyper-V 2.0の間では互換性はない。OSをアップグレードする前に仮想マシンを停止させてからオフライン・スナップショットを作成したり、エクスポートしたりするなどの操作を行う必要がある。
スナップショットを作成すると、次のような拡張子のファイルが作成される。
拡張子 | 用途 |
---|---|
.xml | 仮想マシンの構成情報(設定)を保存するファイル。仮想マシンの構成情報を保存するフォルダ中に作られる |
.avhd | 差分ディスク情報を保存するファイル。親となる仮想ディスク(.vhdファイル)に対する差分ディスクになっている(差分ディスクの.vhdファイルと構造は同じ)。オリジナルの.vhdファイルと同じフォルダに作成される(以下同) |
.bin | オンライン・スナップショットにのみ存在。実行中の仮想マシンのメモリ内容。仮想マシンに割り当てたメモリと同じサイズになる |
.vsv | オンライン・スナップショットにのみ存在。実行中の仮想マシンに関するプロセス情報が保存されている。数十Mbytesのサイズ。.binファイルと.vsvファイルはペアで扱われる |
スナップショットで作成されるファイルの拡張子 スナップショットを作成すると、それぞれのスナップショットごとにこれらのファイルが作成される。 |
.avhdファイルは仮想マシンのオリジナル仮想ディスクに対する差分ディスクである。オリジナルの仮想ディスクのタイプが何であれ、スナップショット作成後はすべて差分ディスクになる。スナップショット作成以降にディスクに書き込まれるデータは、すべてこの.avhdファイルに対して書き込みが行われる。さらに子のスナップショットを作成すると、この.avhdファイルに対して新しい.avhd差分ディスクが作成されるというふうに、多段の差分ディスクのツリーが形成される。差分ディスク(.avhdも含む)には親の仮想ディスクに対する絶対パス情報などが記録されているので、いったんスナップショットを作成したら場所を変更してはいけない。変更すると親ファイルが見つけられなくなり、仮想マシンが利用できなくなる。
.binと.vsvは仮想マシンのメモリの状態などを保存するファイルであり、オンライン・スナップショットの場合にのみ作成される。特に.binファイルは仮想マシンに割り当てたメモリと同じサイズのファイルになるので、ディスクの空き領域などに注意する。
■スナップショットの保存場所
スナップショットを構成する各ファイルのうち、.xmlファイルはHyper-Vの仮想マシンの構成情報を保存するフォルダ(Hyper-V全体のオプション設定で指定する)の中に作成される。.avhd、.bin、.vsvの各ファイルは、Hyper-V 1.0では.xmlファイルと同じ場所に置かれていたが、Windows Server 2008 R2のHyper-V 2.0では、元の.vhd仮想ディスク・ファイルと同じ場所に置かれるように変更されている。これにより、仮想ディスク・ファイルの置き場所を1カ所に統合しやすくなった。Windows Server 2008 R2がインストールされているC:ドライブとは別に、Hyper-Vの仮想ディスク関連ファイルを置くドライブを別に用意し、パフォーマンスに大きく影響を与える仮想ディスク関連ファイルをそこに格納するとよいだろう。またシステム・ドライブが仮想ディスク・ファイルなどで容量不足になることも防ぐことができる。
スナップショットごとの.avhdファイルの場所は、スナップショットの[設定]ダイアログで、ディスクの情報を表示させると確認できる。
実際のファイル例は次のようになる。
Windows Server 2008 R2のHyper-V 2.0では、本来は差分ディスク・ファイルである.avhdファイルを直接仮想マシンにアタッチしたり、編集したりできるようになっている。(.xml構成ファイルなしで).avhdファイルだけを利用して仮想マシン環境を構築したり、スナップショットとして保存されている仮想ディスクを取り出して、独立した.vhdファイル(固定容量と容量可変のどちらでも可能)を作成したりできる。
すでに述べたように、スナップショットで利用されるファイルは.avhdという拡張子を持つ差分ディスクである。パフォーマンスを重視するため、容量固定の仮想ディスクをマスタとして仮想マシン環境を構築していても、いったんスナップショットを作成すると以後は差分ディスクが使われることになる。差分ディスクはオリジナルのディスクに対して変更のあったブロックのみを保存しているため、必要なディスク領域は少なくて済むが、パフォーマンスを向上させにくい。しかも差分ディスク上でのブロックの配置は元のファイル構造とはまったく関係ないものになっているので、例えば変更の多いファイルをシーケンシャル・アクセスしようとすると、実際には複数のファイル(オリジナルの.vhdファイルとスナップショットの.avhdファイル)にまたがってアクセスすることになる。スナップショットを複数作成していると多段の差分ディスクになっているので、さらにパフォーマンスが低下するだろう。
このような事情があるため、パフォーマンスを重視する環境ではスナップショットの利用を控えるなどの注意が必要である。実験環境でスナップショットを利用するなら問題ないが、実運用環境の場合は、例えばパッチ適用時の障害などを避けるためにスナップショットを使うようにするのが望ましいとされている(障害が発生したらスナップショットで環境を戻す)。そしてパッチ適用などで問題がなければ、スナップショットを削除して、オリジナルの容量固定の仮想ディスクへアクセスさせるとよい(スナップショットの削除方法とその挙動については後述)。
同様の理由により、スナップショットを実運用環境におけるバックアップ代わりに使うことも避けるのが望ましいとされている。バックアップが必要なら、バックアップ・ツールを使って全体をバックアップするか、(スナップショットではなく)仮想マシン環境のエクスポート機能を使って全体をどこか別の場所へ保存しておくのがよい。
Copyright© Digital Advantage Corp. All Rights Reserved.