仮想マシンとハイパーバイザ

仮想マシンとは

仮想マシン(VM: Virtual Machine)は、1台の物理コンピュータの上に作られる仮想的なコンピュータです。物理マシンの CPU・メモリ・ディスクを分割して割り当て、それぞれの VM に独立した OS をインストールして動かせます。

1台のサーバーに Windows の VM と [[Linux]] の VM を同居させる、といったことが可能になり、ハードウェアを効率よく使えます。[[クラウドコンピューティング]] で借りる「サーバー」の実体は、ほとんどがこの仮想マシンです。

ハイパーバイザとは

ハイパーバイザは、物理マシンの資源を仮想マシンに分配して管理するソフトウェアです。大きく2種類に分かれます。

種類動作場所代表例主な用途
タイプ1(ベアメタル型)ハードウェアの上で直接動くVMware ESXi、Hyper-V、KVMデータセンター・クラウド
タイプ2(ホスト型)通常の OS の上で動くVirtualBox、VMware Workstation開発・学習用の手元PC

本番のサーバー基盤では性能に優れるタイプ1が、手元での検証にはインストールが簡単なタイプ2がよく使われます。

コンテナとの違い

仮想化というと [[Docker]] などのコンテナも思い浮かびますが、仕組みが異なります。

  • 仮想マシン(VM)は OS ごと丸ごと仮想化する — 分離が強固で、異なる OS も動かせるが、起動が遅くリソース消費が大きい
  • コンテナはホスト OS のカーネルを共有し、アプリの実行環境だけを分離する — 軽量で起動が速いが、ホストと同じ系統の OS に限られる

「別の OS が必要・強い分離が必要なら VM、アプリを軽く分離したいならコンテナ」が使い分けの目安です。

スナップショット

スナップショットは、ある時点の仮想マシンの状態をまとめて記録し、あとからその時点へ巻き戻せる機能です。記録されるのは仮想ディスクの中身と VM の構成情報で、稼働中の VM なら製品や取得時のオプションによってメモリの状態も一緒に保存されます(電源を切って取れば内容はディスクだけになります)。OS のアップデートやミドルウェアの設定変更を試す前に1つ取っておけば、壊れても数十秒で元に戻せるため、検証環境では定番の使い方になっています。

ただし長期の保存には向きません。取得後の変更は差分ファイルとして積み上がっていき、放置するとディスクを圧迫して書き込み性能も落ちるためです。同じ物理ホスト上に置かれる以上、ホストごと壊れれば一緒に失われる点でも [[バックアップとリカバリ]] の代わりにはなりません。「検証が終わったら削除する」運用が基本になります。

初学者向けポイント

  • クラウドの EC2 などのインスタンスは仮想マシン — 裏側でハイパーバイザが物理サーバーを分割している
  • 手元で試すなら VirtualBox などのホスト型が手軽。Linux の学習環境づくりに最適
  • 作業前にスナップショットを取る癖をつけると、失敗を恐れずに試せる実験環境になる
  • [[OSの基礎]] を学ぶうえでも、「OS がハードウェアを管理する」構図が仮想化では入れ子になっていると理解すると整理しやすい

関連技術とのつながり

  • [[クラウドコンピューティング]] — クラウドのサーバーの実体は仮想マシン
  • [[Docker]] — OS 丸ごとの VM に対し、コンテナはより軽量な分離技術
  • [[OSの基礎]] — VM ごとに独立した OS が動く。OS の役割を知ると仮想化が理解しやすい
  • [[Linux]] — KVM は Linux に組み込まれたハイパーバイザ。学習用 VM の定番 OS でもある
  • [[バックアップとリカバリ]] — スナップショットは戻すのが速いが、世代管理や遠隔保管の代わりにはならない
Q: ハイパーバイザの役割はどれ?
- [x] 物理マシンの資源を仮想マシンに分配して管理する
- [ ] Webページの画面を描画する
- [ ] データベースのクエリを最適化する
解説: ハイパーバイザは CPU・メモリなどの物理資源を各仮想マシンに割り当てて管理するソフトウェアです。

Q: タイプ1(ベアメタル型)ハイパーバイザの説明として正しいのはどれ?
- [ ] 通常の OS の上にアプリとしてインストールして動かす
- [x] ハードウェアの上で直接動き、データセンターやクラウドで使われる
- [ ] コンテナと同じ仕組みでカーネルを共有する
解説: タイプ1はハードウェア上で直接動作し、性能に優れるため本番のサーバー基盤で使われます。OS 上で動くのはタイプ2です。

Q: 仮想マシンとコンテナの違いとして正しいのはどれ?
- [ ] コンテナは OS ごと丸ごと仮想化するため起動が遅い
- [ ] 仮想マシンはホスト OS のカーネルを共有する
- [x] 仮想マシンは OS ごと仮想化し、コンテナはカーネルを共有して軽量に分離する
解説: VM は OS 丸ごとの仮想化で分離が強固、コンテナはカーネル共有で軽量・高速という対比です。