VirtualBoxのスナップショット機能

本記事では、VirtualBoxのスナップショットがもつ情報と使い方について見ていきます。
 
【目次】

[1]はじめに

仮想マシンを利用するの利点の一つは、ある時点の仮想マシンの状態を保存し(スナップショットを作成)、後に、保存した状態を容易に復元することができることかと思います。

例えば、開発環境のある状態を保存しておき、ライブラリのバージョンアップを実行してみて、その結果が悪ければバージョンアップ前の状態に戻す、ということが簡単にできます。

スナップショットは、実行中の仮想マシンの状態(メモリ等の状態)も保存できますので、エディタで編集中の状態まで保存、復元できたりします。(少し言い過ぎですが、ワープロ編集中にでUndoやRedoを利用するのと同じような感覚でしょうか。)

また、スナップショットのデータは、仮想マシンと統合管理されているため、保存、復元操作が非常に簡単です。
(一方で、スナップショットは、一般に言うバックアップとは少し目的が異なるため、バックアップの代替えになるとは限らない点に注意が必要です。)

本記事ではVirtualBoxのスナップショットについて見ていきます。

(参考)
Vagrantをお使いの場合は、記事『Vagrantのスナップショット機能とVirtualBox』も参考にして下さい。

[2]スナップショットの保存内容

VirtualBoxのスナップショットについては、ユーザマニュアルに記載があります。

詳しくは上記ドキュメントをご参照頂くとして、スナップショットは仮想マシンの構成、ディスクとメモリの内容を保存しています。
  • ハードウェア構成を含む仮想マシン設定の完全なコピーを持っています。
    • これにより、例えば、ある時点Xでスナップショットを作成し、その後ハードディスク構成などを変更するとします。そしてXのスナップショットを復元すると、ハードディスク構成などがXの時点の状態に戻ります。
  • 仮想マシンに接続されているすべての仮想ディスクの完全な状態を持っています。
    • スナップショットを復元すると、その後に加えられた変更は破棄されて、スナップショットを作成した時点のディスクの状態に戻ります。
    • 仕組みとしては、スナップショットは仮想ディスク全体のバックアップを保存しているのではなく、スナップショットを作成した時点からの差分のみ保存しています。復元するときは、差分を破棄して元の状態に戻します。
    • なお、上記動作は通常(normal)モードのハードディスクに対するものであり、動作が異なるディスクを構成することも可能です。
  • 仮想マシン実行中にスナップショットを作成した場合は、仮想マシンのメモリ状態もスナップショットに保存されます。
    • このため、実行中に作成したスナップショットを復元すると、スナップショットを作成した時のメモリ状態も復元されます。
    • メモリ状態を保存すると、それなりにディスクスペースを必要とする可能性があります。

[3]VirtualBox マネージャのスナップショット画面

スナップショット機能を利用するには、VBoxManageコマンドを使う方法もありますが、以下ではVirtualBox マネージャのスナップショット画面から利用する方法を見ていきます。

Oracle VM VirtualBox マネージャを起動して、目的の仮想マシンのメニューボタンをクリックして、メニューから「スナップショット」を選択します。
すると、右側の画面がスナップショットの画面に切り替わります。

VirtualBoxマネージャ:スナップショット画面への切替手順


[4]スナップショットの作成

スナップショットの作成は、仮想マシンがどのような状態でも(「実行中」、「電源オフ」、「保存」)作成できます。

「最新の状態」(あるいは「最新の状態(変更)」)にフォーカス(選択した状態)があれば「作成」ボタンが有効になっています。
もし、「作成」ボタンが有効でない場合(例えば、既にスナップショットを作成しており、スナップショットにフォーカスがある場合)は、「最新の状態」をクリックすると「作成」ボタンが有効になります。

スナップショットの作成

そして、「作成」ボタンをクリックすると、以下の「仮想マシンのスナップショット作成」画面が表示されます。
ここで、VirtualBoxがデフォルトの名前(最初は「スナップショット 1」)を表示していますが、必要に応じて変更することができます。また、説明も必要に応じて入力します。

仮想マシンのスナップショット作成画面


「OK」をクリックすると、新たにスナップショットが作成されて、作成したスナップショットの下段に「最新の状態」が移動します。

(参考1)
実行中の仮想マシンのスナップショットを作成する場合は、VirtualBoxマネージャーを利用しなくても、下図のように仮想マシン画面上部の「仮想マシン」メニューから「スナップショット作成」を選択して作成することもできます。

VirtualBox仮想マシン画面上部の「仮想マシン」メニューからスナップショットを作成


この場合も同様に「仮想マシンのスナップショット作成」画面が表示され、名前と説明を入力します。作成されたスナップショットはVirtualBoxマネージャー画面から確認できます。

(参考2)
日本語版では「作成」ボタンですが、英語版では「Take」ボタンです。写真を撮るような感覚で面白いと思いました。

[5]スナップショットのプロパティの表示と編集

スナップショット画面下部に「属性」と「情報」タブが表示されます。(タブが表示されていない場合は、「プロパティ」ボタンをクリックすると表示されます。)

「属性タブ」では、スナップショットの名前と説明を見ることができます。
VirtualBoxスナップショット画面:プロパティ:属性タブ

名前や説明を修正したい場合は、テキストボックスを直接修正します。編集すると「適用」ボタンが有効になりますので、「適用」をクリックすると修正内容が反映されます。

「情報タブ」では、スナップショットを作成した時点での仮想マシンの設定を見ることができます。
VirtualBoxスナップショット画面:プロパティ:情報タブ

仮想マシンの構成を変更するような運用では、構成変更前にスナップショットを作成しておくと、構成変更履歴としても使えると思います。

[6]スナップショットの復元

スナップショットの復元は、仮想マシンが停止(「電源オフ」または「保存」)した状態で行います。

復元したいスナップショットを選択して、「復元」ボタンをクリックします。
VirtualBoxスナップショット画面:復元

上記例のように「最新の状態(変更)」と「変更」の文言がある場合は、以下の画面が表示されます。
VirtualBoxスナップショット画面:復元の確認

画面の説明にある通り、「最新の状態(変更)」は、「スナップショット 1」からの差分が存在する状態なので、その差分(変更分)のスナップショットを作成するか、それとも差分を破棄してよいか聞いています。

「現在のマシンの状態のスナップショットを作成」にチェックをいれると差分のスナップショットを作成し(デフォルトの動作)、チェックを外すと破棄します。
なお、作成したスナップショットは後で削除できますので、意図的に破棄したい場合以外は、スナップショットを残したほうがよいように思います。

「現在のマシンの状態のスナップショットを作成」にチェックをいれて「復元」をクリックすると、新規にスナップショットを作成する時と同じ画面が表示されますので、スナップショットの名前と必要に応じて説明を入力します。

すると、下図のように新しいスナップショットが作成され、その下に(変更)が消えて、選択したスナップショットの状態が「最新の状態」として復元されます。
この動きについては、後述の『[7]「最新の状態」とスナップショットの履歴』の項を参考にしてください。

VirtualBoxスナップショット画面:仮想マシンの起動

なお、「復元」を実行しても仮想マシンの状態が復元されただけで、仮想マシンが自動的に起動するわけではありません。仮想マシンを起動するには、「最新の状態」を選択して、「起動」ボタンをクリックします。

一方、「現在のマシンの状態のスナップショットを作成」のチェックをはずして「復元」ボタンをクリックすると、新たなスナップショットは作成せず、差分(変更分)は破棄されて、選択したスナップショットの状態が「最新の状態」として復元されます。

VirtualBoxスナップショット画面:仮想マシンの起動

同様に、仮想マシンを起動するには、「最新の状態」を選択して、「起動」ボタンをクリックします。

[7]「最新の状態」とスナップショットの履歴

日本語設定でVirtualBoxを使っていると「最新の状態」と表示されますが、言語設定を英語に切り替えると「Current State」と表示されます。つまり、「最新の状態」とは、いわば「現在の状態」ともいえます。(ちなみに「最新の状態(変更)」は「Current State (changed)」です。)

(変更)は、復元したスナップショットから最新の状態(現在)までに変更(差分)があることを表しています。

スナップショットはその時の仮想マシンの「状態」と考えられるので、スナップショットを作成して復元を行うと、状態の後戻りと新しい状態への分岐が生じることになります。(Git等のソースコード管理と同じように考えることができます。)

そして、VirtualBoxのスナップショット画面は、この状態(スナップショット)の履歴を木構造のように表示してくれます。そして「最新の状態」、つまり現在の状態は、状態履歴のなかで、どの位置にあるかを示してくれるカーソルのようなものと考えることができます。

これを少しシナリオで見ていきます。

まず、スナップショットが一つもない場合は、常に「最新の状態」です。

そして、「スナップショット 1」を作ると、その時の「最新の状態」が「スナップショット 1」に変わり、「最新の状態」は、次の行にインデントされた状態で表示されます。また、スナップショット作成時から仮想マシンに変化があれば(変更)も表示されます。(実行中の仮想マシンのスナップショットを作成すると、すぐに(変更)が生じることが分かります。)

この動作は大雑把に以下のように考えることができます。
  1. その時の「最新の状態」を「スナップショット 1」として保存する。
  2. 「スナップショット 1」からの変更(差分)を書き込む開始状態を「最新の状態」として、1つインデントした位置の一番下に表示する。
  3. 変更(差分)が生じると「最新の状態(変更)」と表示する。

次に、先の復元の例で書いた「スナップショット 1」を復元する場合を「最新の状態」の変化の観点で見てみます。

「現在のマシンの状態のスナップショットを作成」して復元すると以下のようになります。(名前を「スナップショット 2」とした場合)

もとの「最新の状態(変更)」が「スナップショット 2」に入れ替わり、新たに「スナップショット 2」と同じインデント位置に「最新の状態」が移動していることが分かります。

この動作も、以下のように考えることができます。
  1. その時の「最新の状態(変更)」の差分を「スナップショット 2」として保存する。
  2. 仮想マシンを「スナップショット 1」の状態に戻す。
  3. 「スナップショット 1」以降の差分を破棄します。
  4. 復元したスナップショットからの変更(差分)を書き込む開始状態を「最新の状態」として、1つインデントした位置の一番下に表示する。
  5. 差分が生じると「最新の状態(変更)」と表示する。

ちなみに、「現在のマシンの状態のスナップショットを作成」しないで復元した場合は、差分を破棄するため、「スナップショット 2」の保存がないだけです。

このように、スナップショットの作成と復元を繰り返していくと、下図のようにスナップショットの分岐の流れが分かりやすく表示されます。また、現在の仮想マシンの状態(「最新の状態」)が、どのスナップショットから生じているかもわかります。



[8]スナップショットの削除

仮想マシンが実行中でもスナップショットの削除は可能ですが、マニュアルによると、仮想マシンをシャットダウンしないと削除できないケースもあるようです。

まず、削除したいスナップショットを選択して「削除」ボタンをクリックします。
VirtualBoxスナップショット画面:削除

すると、以下の確認画面が表示されますので、「削除」を選択すると削除されます。
VirtualBoxスナップショット画面:削除の確認

ところで、削除できないスナップショットもあります。
例えば、以下のような複数に分岐するスナップショットがある場合、その分岐元が削除できません。
VirtualBox:スナップショットを削除できない例


上記例の場合、「スナップショット 1」を削除しようとすると、「because it has 2 child snapshots, which is more than the one snapshot allowed for deletion.」というエラーとなり、削除できません。
なお、「スナップショット 2~4」は、そこから2つ以上の分岐がないため、削除することができます。

ちなみに、上記の例で「スナップショット 2」と「スナップショット 3」を残し、それ以外を削除したい場合は、まず、「スナップショット 3」を復元して「最新の状態」を「スナップショット 3」の下に移動させます。その後、「スナップショット 4」、「スナップショット 1」と削除します。

[9]エクスポート/インポートの注意事項

VirtualBoxには仮想アプライアンスのエクスポートとインポートの機能があります。この機能を利用して、あるPCの仮想マシンを他のPCで利用したり、バックアップの用途にも使えます。

このエクスポート機能は、常に「最新の状態」(あるいは「最新の状態(変更)」)の内容をエクスポートします。つまり、このエクスポートのデータには、スナップショットの内容は含まれないようです。

その結果、エクスポートしたデータを、他のPCでインポートしてもスナップショットは再現されません。また、バックアップ用途として利用する場合も、スナップショットは含まれないことに注意が必要です。

もし、あるスナップショットの状態をエクスポートしたい場合は、エクスポートしたいスナップショットを復元して、「最新の状態」をそのスナップショットの状態に戻します。この状態でエクスポートする必要があります。

なお、エクスポート/インポートとは用途が異なりますが、VirtualBoxにはクローン機能もあります。クローンはスナップショットも含めた複製が可能です。

コメント

このブログの人気の投稿

Google Document AIで画像から表形式データを抽出する(Vision API OCRとの違い)

Ubuntu/Colab環境でPDFファイルのページを画像化する(pdf2image、pdftoppm、pdftocairo)