●BIOS
BIOS(Basic I/O System)は最もハードウェアに近い部分を司るシステムで、物理的なハードウェア(マザーボード)上に書き込まれています。コンピュータの電源を入れると、まずBIOSが起動し、周辺機器の制御を行います。
最近のシステムでは、BIOSよりも高機能なUEFI(Unified Extensible Firmware Interface)への移行が進んでいます
コンピュータの起動時に特定のキー(DEL、F2など)を押すことで呼び出せるBIOS/UEFIセットアップ画面では、主に以下の設定ができます。
・日付と時刻
・電源管理
・起動デバイスの優先順位
・組み込みデバイスの有効/無効化
仮想化(Virtualization)とは、コンピュータリソースを実際の物理的な構成にとらわれず、論理的に分割・統合して提供する技術です。
仮想化の実現方法の1つである仮想マシン(VM:Virtual Machine)は、仮想化のための専用のソフトウェア上で仮想的なハードウェア(仮想マシン)を起動し、ゲストOS(仮想マシンにインストールしたOS)を動作させる方式です。
【libvirt】
libvirtはオープンソースの仮想化管理用のライブラリです。libvirtを利用するプログラムとしては、GUIの仮想マシン管理ソリューションであるvirt-managerや、CLIのvirshコマンドなどがあります。
また、libvirtは以下のような数多くの仮想化ソフトウェアに対応しています。
Xen、KVM、OpenVZ、LXC、Oracle VM VirtualBox、VMware など
仮想化の種類
仮想化を実現する方法には、大きく分けて仮想マシンとコンテナがあります。
・仮想マシン(VM:Virtual Machine)
ハイパーバイザーという仮想化ソフトウェア上で仮想的なハードウェア(仮想マシン)を起動し、ゲストOS(仮想マシンにインストールしたOS)を動作させる方式。ゲストOSからは通常の物理マシン上で動作しているように見えるため、これまでのサーバにOSをインストールしているのと同様に環境を構築したり、運用できます。ハイパーバイザーがサポートしているOSであれば、ホストOSと異なる種類のゲストOSを使用できます。
ハイパーバイザーの種類には、ネイティブ型(またはベアメタル型)とホスト型があります。
[ネイティブ型(Type1)]
ハードウェア上でハイパーバイザーを直接起動し、その上で仮想マシンとゲストOSを動作させます。
ホストOS(物理マシンにインストールした通常のOS)を介さないため、ホスト型に比べてパフォーマンスが良く、近年の企業における仮想化の主流。
ネイティブ型の仮想化ソフトウェアには、Xen、MicrosoftのHyper-V、VMwareのvSphere Hypervisorなどがあります。
[ホスト型(Type2)]
ホストOS上にアプリケーションの一つとして仮想化ソフトウェアをインストールし、その上で仮想マシンとゲストOSを動作させます。
既に利用しているコンピュータ上に手軽に仮想環境を構築できますが、ホストOSを介してハードウェアにアクセスするため、ネイティブ型に比べて仮想化のオーバーヘッド(余分な処理の量)が大きくなります。
ホスト型の仮想化ソフトウェアには、Oracle VM VirtualBox、VMware Workstation、Parallels Desktopなどがあります。
・コンテナ
ホストOSのリソースを隔離して「コンテナ」という仮想環境を作成する方式です。
ホストOSのカーネルを共有することで、仮想マシンやゲストOSを起動せずにアプリケーションの実行環境を構築できます。ただし、ホストOSと異なるOSをコンテナで使用することはできません。
コンテナはホストOSのプロセスとして動作するので、仮想マシンに比べてリソース消費が少なく、軽量で起動が速いのが特徴です。作成したコンテナはDockerイメージのように、別の環境に配布して実行することも可能です。
コンテナ型仮想化では、Linuxカーネルの機能によってコンテナごとのユーザ管理やリソース制御を行います。例えば、cgroups(Control Groups)はグループごとにCPUやメモリなどのリソースを割り当て・制限し、コンテナのリソースを管理します。
また、コンテナ内のrootユーザはホスト上でもroot権限を持つことになりセキュリティ上望ましくありません。Linuxのユーザ名前空間(User Namespace)の機能を使うことで、コンテナ内のrootユーザをホスト上の一般ユーザとして扱うことができ、コンテナとホスト間でユーザ権限の分離ができるようになります。
コンテナ型ソフトウェアには、LXC、Dockerなどがあります。
【Linuxでの仮想化】
KVM(Kernel-based Virtual Machine)は、Linuxに標準搭載されている仮想化ソリューションです。仮想化の種類としては通常Type1に分類されます。
KVMを使用するためには仮想化支援機能を搭載したCPUが必要です。仮想化支援機能とは仮想化ソフトウェアが行う処理の一部をCPUが分担することで処理を高速化する機能で、Intel VT(Intel Virtualization Technology)やAMD-V(AMD Virtualization)という名称で実装されています。
CPUが仮想化支援機能をサポートしているかどうかを調べるには、「/proc/cpuinfo」のflagsにおいて"vmx"(Intel VT)または"svm"(AMD-V)という値があるかどうかを確認します。