仮想化について簡単にまとめ

なるべく分かりやすいように書いていきたいと思います。

# 仮想化ってなんぞや？
1台のPCで複数のOSを同時に動かすことができる技術のことです。
仮想化には、WindowsやMac等で**アプリケーションとして利用するホスト型ハイパーバイザー(以下ホスト型)**と**OSそのものを仮想化対応させているベアメタルハイパーバイザー(ハイパーバイザー型)**の2つがあります。
仮想化した環境の上で動かすOSのの事は、一般に**仮想マシン**と呼ばれます。


# デュアルブートとは何が違うの？
皆さんが日々使っている一般的なPCのOSは、WindowsかMacかのどちらかではないかと思います。
PCを起動すると、そのPCにインストールされているOSが立ち上がりますよね。
デュアルブートは、PCのディスクを複数に分割し、その分割したディスクにそれぞれのOSをインストールすることで、PCの起動時に起動するOSを選択できます。
一度に起動できるOSは1つのみです。
仮想化はこれとは違い、OSを**複数同時に**起動させる事ができます。


# 仮想化のイメージがまだ湧かない
## ホスト型の仮想化
まずはホスト型から話をしましょう。
ホスト型は先述した通り、仮想化を**アプリケーションとして利用する**タイプの事です。
例えば、貴方は今Windows 7のPCを使用しているとします。
最近貴方はWindows以外に、Linuxも使いたいと考え始めました。
しかし、Linuxを入れる為の余分なPCはありません。
そういった時に利用するのが、**ホスト型の仮想化**です。
ホスト型の仮想化は、早い話が**専用のソフトウェアの上で別のOSを動かしてしまおう。**といったものです。
有名なソフトは**VMware Player**か**Oracle VM VirtualBox**かと思います。
これらは無償で利用ができます。
実際に使ってみた方がイメージしやすいと思うので、実際に使ってみましょう。
今回はVMware Playerを利用します。
下記のVMware社のWebページにアクセスしてください。
https://www.vmware.com/jp/

タブメニューがあるので、そこから[ダウンロード]にカーソルを合わせます。
製品のダウンロードメニューが表示されるので、「無償製品のダウンロード」の項の一番下にある[VMware Player]をクリックしてください。

![vm1.png](https://qiita-image-store.s3.amazonaws.com/0/76791/4769dd20-bf6c-34ef-35a6-f1eee8e074e1.png)

VMware Playerのダウンロードページが表示されます。
Windows版かLinux版かを選択できるので、Windows版の方の[ダウンロード]をクリックしてください。
程なくしてダウンロードが始まります。

![vm2.png](https://qiita-image-store.s3.amazonaws.com/0/76791/0cf73d06-cc85-13a8-99f7-8fc163fbf522.png)

あとはダウンロードされたexeファイルを起動させ、セットアップを完了させます。

今回Linuxを動かしたいので、とりあえずCentOSのisoファイルをダウンロードします。
http://ftp.nara.wide.ad.jp/pub/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
上記は直リンになっています。
クリックするとDLが始まりますので悪しからず。

isoのDLが終わったら、VMware Playerを使ってLinuxを動かしてみましょう。
VMware Playerを起動してください。
「新規仮想マシンの作成(N)」をクリックしてください。
![vm3.png](https://qiita-image-store.s3.amazonaws.com/0/76791/e9b20e35-5af3-6e0d-c523-bad4d1a5843c.png)

「新規仮想マシン作成ウィザード」が出てきます。
今回は手っ取り早く済ませるため、インストールするイメージファイルを指定してしまいます。
ダウンロードしたisoファイルを指定して、[次へ]をクリックしてください。
![vm4.png](https://qiita-image-store.s3.amazonaws.com/0/76791/747a9e2e-7d4f-88ff-0ffa-a9ee5f4030a0.png)

「ゲストOSの選択」に変わるので、今回インストールするOSを指定してください。
CentOS 7 64bitをインストールするので、「CentOS 64 ビット」を指定します。
![image](https://qiita-image-store.s3.amazonaws.com/0/76791/42007555-a460-e5af-bef2-39b0aa09346e.png)

仮想マシンに使用する名前を指定します。
これはVMware Player起動時に表示される仮想マシンの名前になります。
わかりやすくするため、今回は「CentOS7_64bit」としました。
![image](https://qiita-image-store.s3.amazonaws.com/0/76791/cc08f5a2-ec6b-4bce-9005-54640d7c018c.png)

仮想マシンのディスク容量を指定します。
CentOSのデフォルトは20GBになっているので、一旦このままでいいでしょう。
[仮想ディスクを複数のファイルに分割]にチェックが入っていると思うので、こちらは変えなくても結構です。
![image](https://qiita-image-store.s3.amazonaws.com/0/76791/ed70a06c-ff17-f3c5-0f2b-14acc74cfd38.png)

今までの設定が表示されるので、問題なければ[完了]をクリック
![image](https://qiita-image-store.s3.amazonaws.com/0/76791/0aec4a7d-b214-c863-8d10-7a7bec118157.png)

VMware Playerの最初の画面に戻ります。
先ほど作成した仮想マシンがメニューに追加されていると思うので、[仮想マシンの再生(L)]をクリックして、仮想マシンを立ち上げてみてください。
![vm5.png](https://qiita-image-store.s3.amazonaws.com/0/76791/5541512c-a898-17ca-f96e-f85880b83a7e.png)

CentOSのインストール画面が表示されます。
あとは普通にインストールするだけで、Linuxが利用できるようになります。
![image](https://qiita-image-store.s3.amazonaws.com/0/76791/8f7656f5-9b8c-b3b5-368d-c060d0557f52.png)

これがホスト型の仮想化です。
専用の仮想化ソフトを利用することで既存のOS上で別のOSを動かすことができます。

## ハイパーバイザー型の仮想化
次にハイパーバイザー型ですが、仮想化をアプリケーションとして利用するホスト型と比べ、こちらは**OSそのものに仮想化システムを組み込んで**います。
有名処は**VMware ESXi**や、**Windows Hyper-V**、**Xen**、**KVM**などでしょうか。

先ほど説明したホスト型の仮想化は、例えば**Linuxの専用端末が用意できない時**や、**別のOSを動かしたい時**などに利用する事が多いかと思います。
ユーザ向けの仮想化という感じです。
それと比べ、ハイパーバイザー型の仮想化は、**サーバ向けの仮想化技術**です。

仕組みはホスト型と同じようなものです。
PCの大元のOSにハイパーバイザー専用のOSを入れたり、専用のパッケージを導入する事で、そのOSをの上で仮想マシンを作成できるようにします。
ハイパーバイザー型の仮想化の場合、大元のOSのリソースは、ほぼ仮想マシンに渡してしまいます。
その為、大元のOSはハイパーバイザーと、それに伴う必要最低限の機能しか組み込まれておらず、そこまで容量は大きくありません(Windows Hyper-Vは違うかもしれませんが・・・)。
また、専用のソフトウェアで動かすホスト型と違い、レスポンスが早いのも特徴です。

ハイパーバイザー型のメリットは以下です。

* サーバPCのハードウェア能力の拡大により、余分になってしまったリソースを効率的に利用できる。
* 複数サーバを物理的に1台にまとめる事により、管理性が容易になり、電力コストの削減や、サーバルームの空間が有効活用できる。

1台に集約できるので、管理性が上がり、電気代の削減、空間の有効活用が可能です。
対して、デメリットも勿論あります。

* 複数サーバを1台に集約してしまっているため、停電発生時や物理的にサーバにガタが来た時、仮想マシンが全て落ちてしまう可能性がある。
* 大元のOSがクラッシュしたり不具合を起こしてしまうと、仮想マシンが操作できなくなる可能性がある。
* 電源のON/OFFやインターフェイスの制御をソフトウェアに委任している為、ソフトウェアに不具合が起きるとそれらが操作できなくなってしまう可能性がある。

懸念事項はHW関連のものだと思います。
1台に集約しているので、HWに異変が起きた場合、最悪仮想マシンが全て落ちてしまいます。
仮想化技術が登場した当時は、「仮想マシン一つを落としたら、他の仮想マシンまで一緒に引っ張られて落ちてしまうんじゃないか」という懸念もされていました。
しかし今ではそんな懸念もなくなり、ハイパーバイザー型の仮想化はなくてはならない技術になり、サーバ構築する上で必須とも言えるスキルとなっています。
また、HW自体の電源が落ちた場合でも、仮想マシンを自動的に別のハイパーバイザーへ移行させる為の機能が備わっていたり、電源の管理をする機能があったりと、仮想化のみに留まらず、それ以外の機能も非常に充実しています(これらはHW要件や利用するハイパーバイザーによっても変わってくると思います)。

***

超簡単でしたが、仮想化についてはなんとなくイメージ出来たでしょうか。
別にまとめるつもりはなかったのですが、一応KVM,oVirtをまとめる上で必要かなあと思い、基本的な部分を一通り書き出してみました。
完全仮想化、準仮想化の話や、Dockerとの違いや、解説のための図をもっと乗っけられればよかったのですが、そこまでの気力はありませんでした。
もっと詳しい説明も必要だったら後で書き足すかもしれません。