サーバの仮想化を考える上で出てくる概念である仮想マシン。
「物理的なハードウェアとは何が違うのか?」
「そもそも仮想マシンとは何か?」
「仮想マシンは何で構成されているのか?」
「仮想マシンはどうやって作成されるのか?」
など、この記事では仮想マシンとは何か、そしてどのように作られるのか、仮想マシンの設定の変更方法などを説明していきます!
仮想マシンとは?
仮想マシンとは、物理マシンのハードウェア環境を部分的に切り出したOSの実行環境のことです。
また、狭義の意味では仮想ハードウェア(仮想CPU、メモリ、HDD、NICなど)を指したりもします。
そもそも、仮想マシンが動く仮想サーバは以下のような構成をしています。


左図の物理環境と異なり、右図のサーバ仮想化を用いた仮想環境では、サーバ仮想化ソフトを介して、物理ハードウェアとOSの実行環境である仮想マシンが組み合わさって動いています。
このような、OSの実行環境(OS+仮想ハードウェア+アプリ)を仮想マシンと呼びます。

OSのハードウェアサクセス方法
ここからは、仮想マシン内のOSがどのようにハードウェア(CPUやメモリなど)にアクセスするのか説明します。
OSからハードウェアにアクセスする方法として、完全仮想化と準仮想化という2つの方法があります。
完全仮想化
完全仮想化とは、OSが直接物理ハードウェアにアクセスできる方法です。
このような場合、物理ハードウェアたとえばCPUに「仮想化支援機能」というものが搭載されています。
これは、CPU自体に仮想化を実現する機能が付いているため、どの仮想マシンのどのOSからもアクセスすることができ仮想化を実現することができます。
準仮想化
準仮想化とは、OSから物理ハードウェアへのアクセスをサーバ仮想化ソフトによって制御する方法です。
このような場合、ハードウェアへのアクセスがあると仮想化ソフトのAPIが呼び出される仕組みになっています。
そして、その呼び出されたAPIによってOSのカーネルのパラメータが変更されたり、カーネルレベルでの命令が書き換えられることでハードウェアにアクセスします。
しかし、この方法には欠点もあります。
それは、仮想化ソフトにはそれぞれ制御に最適なOSがあるということです。例えば、MicrosoftのHyper-Vという仮想化ソフトではWindowsOSしか制御することができません。
つまり、仮想マシンが複数あり、それぞれ違うOSが起動していたら仮想化ソフトではハードウェアへのアクセスを制御できないということになります。
そのため、実際は「CPUは完全仮想化、ネットワークとストレージは準仮想化する」といったように、ハードウェアごとに仮想化の方法を変えることが多いです。
仮想マシンの作成方法
ここからは、仮想マシンの作成方法について3種類説明していきます。
ウィザードを用いた方法
この方法では、まず新規作成用のウィザードは起動されます。そのウィザードに名前や、値を入力していくだけで仮想マシンを作ることができます。
例えば、仮想マシンの名前や使用するCPU、CPUのサイズ、仮想ディスクの場所等を入力して指定します。
以下は、Windowsのサーバ仮想化ソフトであるHyper-Vにおける、ウィザードを用いた作成画面です。


実際は、このあとゲストOSをインストールしたり、仮想環境適応ツールといったものをインストールしたりすることで仮想マシンが完成します。
仮想マシンファイルのコピーによる方法
仮想マシンは、実体としてはファイルで存在しています。そのため、そのファイルをコピーすることで新たな仮想マシンを作成することができます。
コピーしてファイルを使う流れとして、以下の2つがあります。
テンプレートからの展開
以下の図を用いて、テンプレートを使った仮想マシンの作成方法を説明します。

仮想マシンファイルVM01をコピーして、テンプレートであるTemp-VM01を作成します。
そこから派生させて(デプロイという)異なる仮想マシン、VM02とVM03を作ります。
こうすることで、共通部分はテンプレート化し、そこからの差分をデプロイすることで仮想マシンを作成することができます。
クローンの作成
以下のを用いて、クローン作成で仮想マシンを作成する方法を説明します。

クローン化とは、全く同じ仮想マシンファイルを作成することです。
こうすることで、例えば「Webサーバをスケールアウトしたい」なんてときに簡単に仮想マシンを増やすことができます。
このように、テンプレートを用いたりクローンを用いたりは、実現したいシステムに合わせて使い分けると考えてよいでしょう。
まとめ
仮想マシンとは、仮想化されたサーバの部分的なOSの実行環境です。
仮想化サーバの重要な要素ですので、「OSがどのようにハードウェアにアクセスするのか」や「仮想マシンがどのように作られるのか」の知識はしっかり押さえておく必要があります。
仮想マシンの実際の使い方は、製品によってそれぞれ異なるので、その製品のマニュアルを参照してください。