変更要約: 初版(主題2.05・副主題2.05.1〜2.05.2に対応)
5.1仮想マシンの仕組みとKVM
ホスト型とハイパーバイザー型(KVM/VirtualBox/Xen)の違い、CPU・メモリ・ストレージ・ネットワークの仮想化の仕組み、QEMU の役割、vmx・svm(仮想化支援機構)と /proc/cpuinfo・lscpu での確認、kvm-intel・kvm-amd モジュール、libvirtd によるライフサイクル管理、virt-manager、bridge-utils を学びます。
1台の物理サーバーで複数の独立した OS を同時に動かす仮想化は、検証環境の量産からデータセンターの集約まで、Linux 運用の中核技術です。LinuC-2 では Linux 標準のハイパーバイザーであるKVMを軸に、CPU・メモリ・ストレージ・ネットワークをどう「見せかける」かの仕組みが問われます。
5.1.1ホスト型とハイパーバイザー型
- ホスト型=既存の OS の上に仮想化ソフトをアプリとしてインストールする方式(例 VirtualBox)。導入は容易だがホスト OS のオーバーヘッドがかかる。
- ハイパーバイザー型=ハードウェアを直接制御する方式。Linux ではKVMがカーネルの一部として動作し、ゲスト OS ごとに独立した実行環境を提供する。Xenは専用のハイパーバイザー層を持つ別方式。
- KVM(Kernel-based Virtual Machine)は Linux カーネルをそのままハイパーバイザー化するモジュール群で、ゲストは通常の Linux プロセスとしてスケジューリングされる。
5.1.2CPU・メモリ・ストレージ・ネットワークの仮想化
- CPU 仮想化=ゲストに仮想 CPU(vCPU)を割り当て、ハードウェア仮想化支援(vmx=Intel VT-x/svm=AMD-V)を使って特権命令を高速に処理する。対応の有無は
/proc/cpuinfoの flags やlscpuの Virtualization 行で確認する。 - メモリ仮想化=ゲスト物理アドレスとホスト物理アドレスを対応付け、ゲストごとに独立したメモリ空間があるように見せる。
- ストレージ仮想化=仮想ディスクイメージファイルをゲストの物理ディスクとして提供する。ネットワーク仮想化=bridge-utils 等でホストとゲストを接続する仮想ブリッジ/仮想 NIC を構成する。
「KVM はカーネルモジュール+QEMU で構成される」「CPU が仮想化支援に対応しているかは lscpu または /proc/cpuinfo の vmx/svm フラグで確認」「kvm-intel は Intel、kvm-amd は AMD 用のロード対象モジュール」が最頻出です。VirtualBox=ホスト型、KVM=ハイパーバイザー型(Linuxカーネル一体型)という対比も定番です。
KVM 単体はハードウェア仮想化支援を使って CPU とメモリの仮想化を担うカーネルモジュール(kvm に加え、CPU ベンダーごとの kvm-intel または kvm-amd)にすぎません。ディスクやネットワークカードなどデバイスのエミュレーションを担当するのがユーザー空間で動くQEMUで、実務では「KVM=高速化エンジン、QEMU=デバイスの提供役」という役割分担で覚えると整理しやすいです。両者を束ねて仮想マシンのライフサイクル(作成・起動・停止・削除)を管理する常駐デーモンが libvirtd で、その上に GUI 管理ツールの virt-manager が乗ります。導入手順としては、まず lscpu または cat /proc/cpuinfo で vmx(Intel)/svm(AMD)フラグの有無を確認し、対応していれば lsmod | grep kvm で kvm_intel や kvm_amd モジュールがロード済みかを確認します。ネットワークについては、ゲストを外部ネットワークへ透過的に参加させたい場合、bridge-utils でホストの物理 NIC を含む仮想ブリッジ(例 br0)を作成し、ゲストの仮想 NIC をそこへ接続する構成が定番です(NAT 構成に比べ、ゲストが物理 LAN 上の一員として振る舞える)。
| 方式 | 代表例 | 特徴 |
|---|---|---|
| ホスト型 | VirtualBox | 既存OS上にアプリとして導入・導入が容易 |
| ハイパーバイザー型 | KVM・Xen | ハードウェアを直接制御・オーバーヘッドが小さい |
| KVM の構成要素 | kvm-intel/kvm-amd+QEMU+libvirtd | カーネルモジュールが高速化・QEMUがデバイス提供 |
ひっかけ: 「KVM はデバイスのエミュレーションまで単独で行う」は誤りです。デバイスエミュレーションはQEMUの役割で、KVM は CPU/メモリの高速化を担うカーネルモジュールです。また「VirtualBox はハイパーバイザー型」も誤り=VirtualBox は既存 OS 上で動くホスト型の代表例です。vmx(Intel)と svm(AMD)を取り違える選択肢にも注意してください。
5.1.3この節のまとめ
- ホスト型(VirtualBox)=既存OS上のアプリ/ハイパーバイザー型(KVM・Xen)=ハードウェア直接制御
- KVM=カーネルモジュール(kvm-intel/kvm-amd)でCPU/メモリを高速化・QEMU=デバイスエミュレーション・確認は lscpu/
/proc/cpuinfoの vmx/svm
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. サーバーが KVM によるハードウェア仮想化支援に対応しているかを事前に確認したい。適切な方法は?
Q2. KVM 環境で、ディスクやネットワークカードなどの仮想デバイスのエミュレーションを実際に担っているコンポーネントはどれ?
Q3. ホスト型仮想化の代表例として最も適切なものはどれ?

