仮想マシンのスナップショットはどのように機能しますか?


16

ドライブイメージングソフトウェアを10年以上使用してきましたが、ドライブイメージングには数時間かかることがありますが、数秒で仮想マシンのスナップショットを作成して復元できることに驚かされます。

VMのスナップショットを作成し、別のOSに再インストールしてから復元を行うと、数秒で魔法のように古いVMが以前の状態に完全にバックアップされます。

これはどのように起こりますか?VMホストは、これを可能にするVMに対して実際に何をしますか?

回答:


16

スナップショットを作成すると、最初の仮想ディスクイメージで行われたすべての変更は、実際にはイメージ自体では行われませんが、新しい(スナップショット)ディスクファイルに書き込まれます。仮想ディスクイメージ全体をコピーする必要がないため、このアクションは非常に高速です。これは、コピーオンライトの原則で機能するためです(変更される、つまり、書き込まれたブロックがスナップショットイメージに書き込まれる)。元の仮想ディスクイメージのデータをますます変更すると、スナップショットイメージが大きくなることに注意してください(スナップショットを作成した時点の状態のままです)。ほとんどの場合、元の画像よりもはるかに小さくなりますが、最悪の場合はまったく同じサイズになります(すべてのブロックが変更された場合)。

この新しいスナップショットイメージで実行できるアクションは2つあります。

  1. スナップショットを破棄:非常に高速なアクション。Virtual Machine Managerは、スナップショットイメージファイルを削除し、元のディスクイメージまたは以前のスナップショットの一部に制御を返します
  2. スナップショットのマージ:仮想マシンマネージャーは、変更されたブロック(スナップショットイメージ)を元のイメージにマージします。このアクションは、元の画像から変更されたブロックの量に応じて時間がかかります。繰り返しますが、最悪のシナリオは、元のイメージのすべてのブロックがスナップショットの作成後に書き込まれた場合、元のイメージ全体が上書きされることです。

上記のすべての手順は、複数のスナップショットでも機能します。その場合、元のイメージは1つのスナップショットであり、次のスナップショットはその(最初の)スナップショットのブロックを参照できます。このようにして、簡単に破棄またはマージできる多くのスナップショットを作成できます。


1
削除後のワイプをオンにしている場合、画像の削除プロセスと同様に、スナップショットの破棄は実際には非常に遅くなります。イメージまたはスナップショットで使用されているスペースをクリーンアップしてから他のVMで使用できるようにする前にクリーンアップするセキュリティ機能です。そして、この機能を持たない仮想化ソリューションには、大きなセキュリティ上の欠陥があります
-dyasny

複数のスナップショットを作成するシナリオと、各スナップショットでの変更がどのように保持されるかを説明しようとしました。VMwareスナップショットの作業にこの短い説明を参照してください: cubicrace.com/2012/02/...を
Piyush Chordia

5

スナップショットを使用して、仮想化ソフトウェアは、CPU状態、RAM、構成(VM内のネットワークカードの数)、およびディスクの4つのことを追跡する必要があります。最初の3つのことは無視します。それらは膨大な量のデータではないため、ソフトウェアは比較的小さなデータ構造のコピーを作成してファイルに保存するだけです。そのため、説明のためにディスクのスナップショットのみを残します。

まず、VMがハードディスクと見なすのは、実際にはホストファイルシステム上の単なるファイルのセットです。スナップショットを作成するために、仮想マシンソフトウェアは特定の時点でVMのディスクを取得して保存し、新しい空のディスクファイルを開き、その後のすべてのディスクアクセスでコピーオンライトスキームを実行します。

ディスクファイルがBigVM.diskであるとします。スナップショットを作成すると、VMソフトウェアはディスクの名前をBigVM-s1.diskに変更し、新しい空のBigVM.diskを作成します。VMの実行中、すべての読み取り要求はBigVM.diskを通過します。そのファイルにVMが必要とするディスクの部分のエントリがない場合、BigVM-s1.diskからのデータが返されます。書き込み時には、データはBigVM-s1.diskではなくBigVM.diskに書き込まれます。同じセクターへの将来の読み取りでは、BigVM-s1.diskに含まれる元のスナップショットではなく、BigVM.diskからデータが返されます。BigVM-s1.diskにはスナップショットの時点でのVMのハードディスクの状態が含まれ、BigVM.diskにはスナップショット以降のディスクへのすべての差分が含まれます。

古いスナップショットに戻すとどうなりますか?VMソフトウェアはBigVM.diskの内容を破棄し、最初からやり直します。新しい空のBigVM.diskは引き続きBigVM-s1.diskを指します。


2

完全な仮想マシンディスクではなく、スナップショットの時点から変更されたファイルの違いのみを書き込みます。unix diffおよびpatchに似ていますが、バイナリレベルで差分を取り、仮想マシンの他の詳細について認識しているより洗練されたバージョンを除きます。


1

少なくともVMwareスナップショットでは、スナップショットは基本的に、ディスク書き込みとマシン状態の新しいチェックポイントを開始するVMXへのシグナルです。VMの電源がオフかオンかに応じて、スナップショットの復元には、単にそのチェックポイントを過ぎて発生したすべての処理を無効にするだけで済みます。それ以外の場合、VMのすべてのディスクセクターは書き込み時にコピーになります。つまり、ホットスナップショットの復元を実行するときは、スナップショットを作成してから変更されたセクターを書き換えるだけです。そのため、高速です。


-1

VMwareスナップショットとその内部での作業は、@ http://www.pcclm.com/2012/02/virtual-machine-snapshots-in-vmware.htmlで最もよく説明されています。


3
ServerFaultへようこそ!外部の参考資料へのリンクを推奨しますが、将来リンクが壊れた場合でも、各回答が完全になることを期待しています。この回答を編集して、詳細を追加できます。
スカイホーク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.