サーバーリソースを効率的に集約・運用する基盤として、Linuxカーネル標準の仮想化技術であるKVM(Kernel-based Virtual Machine)は、クラウド基盤やプライベート仮想化環境の中核を担っています。LinuCレベル2(201試験)の主題2.05「仮想化技術」では、QEMU/KVMのアーキテクチャ理解、libvirtスイート(virsh)による仮想マシンのライフサイクル制御、仮想ストレージ(qemu-img)の操作、および仮想ネットワークの構成が幅広く出題されます。
特に記述式問題(コマ問)では、virshのサブコマンド(list、start、shutdown、destroy、undefine、autostart)の正確な使い分けや、qemu-imgによる仮想ディスクのフォーマット指定(raw vs qcow2)、virt-installの必須パラメータが頻出します。本記事では、AlmaLinux 9の実機ログを交えながら、仮想化基盤の設計・運用に必要な実践知識を整理して解説します。
- ホスト名: linuc-node01 (192.168.2.138)
- OS: AlmaLinux 9.8 (x86_64)
- 仮想化ツール: qemu-img 10.1.0 / libvirt 11.10.0 / virsh 11.10.0
| 公式試験の必須出題範囲 | 主題2.05.1(仮想マシンの仕組みとKVM)、主題2.05.2(仮想マシンの作成とvirsh管理、qemu-img操作) |
|---|---|
| 現場で役立つ実務拡張 | raw形式とqcow2形式のシンプロビジョニング容量差実証、KVMとlibvirtの仮想ネットワーク(default bridge)運用 |
目次
1. Linux仮想化技術のアーキテクチャ(KVMとQEMU)
Linux環境における仮想化は、カーネルモジュールとしての「KVM」と、ユーザ空間のエミュレータである「QEMU」、そしてこれらを一元管理する「libvirt」という3つのコンポーネントが緊密に連携して動作します。

1.1 タイプ1(ベアメタル)とタイプ2(ホスト型)ハイパーバイザの違い
ハイパーバイザには大きく分けて以下の2つの分類が存在します。
| 分類 | 構造 | 代表例 | 特徴 |
|---|---|---|---|
| タイプ1(ベアメタル型) | ハードウェア上で直接ハイパーバイザが稼働 | VMware ESXi, Hyper-V, Xen | オーバーヘッドが小さく、エンタープライズ本番環境向き |
| タイプ2(ホスト型) | ホストOS上でアプリケーションとしてハイパーバイザが稼働 | VirtualBox, VMware Workstation | 導入が容易だが、ホストOSを経由するためオーバーヘッドが大きい |
KVMは、通常のLinuxカーネルにカーネルモジュール(kvm.ko)をロードすることで、Linuxカーネルそのものをタイプ1ハイパーバイザとして動作させるアーキテクチャを採用しています。これにより、Linux標準のプロセススケジューラやメモリ管理の恩恵をダイレクトに受けることができます。
1.2 KVM(カーネルモジュール)とQEMUの連携
KVM単体では、CPUとメモリの仮想化(/dev/kvmデバイスインターフェース経由)しか提供しません。ハードディスク、ネットワークカード、ディスプレイ、USBといった各種I/Oデバイスのエミュレーションは、ユーザ空間で動作するQEMUが担当します。
各仮想マシンは、ホストOS上では「1つの独立したQEMUプロセス」として見えます。ps aux | grep qemuを実行すると、仮想マシンのメモリ割り当てやディスク設定がQEMUの起動引数として渡されている様子が確認できます。
1.3 CPU仮想化支援機構の確認(Intel VT-x / AMD-V)
KVMを動作させるには、物理CPUにハードウェア仮想化支援機能(Intel VT-x、またはAMD-V)が搭載され、BIOS/UEFIで有効化されている必要があります。稼働中ホストでは/proc/cpuinfoのフラグを検査します。
# Intel CPU の場合は vmx、AMD CPU の場合は svm が出力される
$ grep -E -m 1 "vmx|svm" /proc/cpuinfo
flags : ... vmx ...
2. 仮想ディスクイメージの形式とqemu-imgによる操作
KVM仮想マシンのハードディスクは、ホスト上の単一ファイル(ディスクイメージ)として管理されます。主要な形式として**raw形式**と**qcow2形式**があり、運用要件に応じて使い分けます。
2.1 raw形式とqcow2形式の特性比較
| 形式 | フォーマット名 | 特徴・メリット | デメリット |
|---|---|---|---|
| raw | raw |
構造を持たない生のバイト配列。変換オーバーヘッドがなくI/O性能が最も高い | 指定サイズ分の物理容量を即座に消費。スナップショット非対応 |
| qcow2 | qcow2 |
QEMU Copy-On-Write v2形式。シンプロビジョニング(実際に書き込まれた容量のみ消費)、内部スナップショット、圧縮、暗号化に対応 | rawに比べるとわずかにI/Oオーバーヘッドが存在する |
2.2 qemu-imgによるイメージ作成・変換・情報確認
仮想ディスクイメージの作成やフォーマット変換には、qemu-imgコマンドを使用します。実機で10GBのrawおよびqcow2イメージを作成し、実際のディスク消費量を比較します。
# raw 形式で 10GB のディスクを作成
$ qemu-img create -f raw /tmp/disk.raw 10G
Formatting '/tmp/disk.raw', fmt=raw size=10737418240
# qcow2 形式で 10GB のディスクを作成
$ qemu-img create -f qcow2 /tmp/disk.qcow2 10G
Formatting '/tmp/disk.qcow2', fmt=qcow2 cluster_size=65536 size=10737418240
# ファイルサイズと実際のディスク消費量を比較
$ ls -lh /tmp/disk.*
-rw-r--r--. 1 user01 user01 193K 9月 7 08:03 /tmp/disk.qcow2
-rw-r--r--. 1 user01 user01 10G 9月 7 08:03 /tmp/disk.raw
# qcow2 の詳細プロパティを確認
$ qemu-img info /tmp/disk.qcow2
image: /tmp/disk.qcow2
file format: qcow2
virtual size: 10 GiB (10737418240 bytes)
disk size: 196 KiB
cluster_size: 65536
実機ログから明らかなように、disk.rawは作成直後から10GBを専有しているのに対し、disk.qcow2は仮想サイズ(virtual size)が10GiBでありながら、初期の物理ディスク消費量(disk size)はわずか196KiBに抑えられています。
フォーマットの相互変換を行うには、qemu-img convertを使用します。
# raw から qcow2 への変換(-O オプションで出力形式を指定)
$ qemu-img convert -f raw -O qcow2 /tmp/disk.raw /tmp/converted.qcow2
3. libvirt基盤とvirshコマンドによる仮想マシン管理
KVMやQEMUを直接操作するのは複雑であるため、通常は仮想化抽象化ライブラリであるlibvirtとそのデーモン(libvirtd)、およびコマンドラインツールvirshを使用します。
3.1 libvirtアーキテクチャと仮想マシンのXML定義
libvirtでは、各仮想マシンの構成情報(vCPU数、メモリ量、ディスクパス、MACアドレスなど)がXML形式の定義ファイルとして/etc/libvirt/qemu/<vm-name>.xmlに保存されます。設定を変更する場合は、ファイルを直接編集するのではなくvirsh edit <vm-name>を実行します。
3.2 virshによる仮想マシンのライフサイクル制御
試験で最も問われるのが、仮想マシンの状態確認と停止・強制停止のコマンドです。
| コマンド | 機能・効果 | 注意点・備考 |
|---|---|---|
virsh list |
実行中の仮想マシン一覧を表示 | 停止中のVMは表示されない |
virsh list --all |
停止中を含む全仮想マシンを一覧表示 | 試験での頻出オプション |
virsh start <vm> |
仮想マシンを起動 | 定義済みのVMをパワーオン |
virsh shutdown <vm> |
仮想マシンを正常終了(ACPIシャットダウン) | OSにシャットダウンシグナルを送信(クリーン終了) |
virsh destroy <vm> |
仮想マシンを強制電源断(即時停止) | ファイルやVM定義は削除されない(電源プラグを抜く動作に相当) |
virsh undefine <vm> |
仮想マシンのXML定義を削除 | ディスクイメージファイル自体は手動削除が必要 |
virsh autostart <vm> |
ホストOS起動時の自動起動を有効化 | --disableで無効化 |
destroyという単語から「仮想マシンが消滅・削除される」と誤認しやすいですが、virsh destroyは「強制電源OFF(Power Off)」にすぎません。仮想マシンの登録情報(XML定義)を削除するコマンドは**virsh undefine**です。
4. 仮想ネットワークのトポロジー(NAT vs ブリッジ)
仮想マシンが外部ネットワークと通信するためのネットワーク構成には、大きく分けて**NAT方式**と**ブリッジ方式**の2つが存在します。

4.1 デフォルト仮想ネットワーク(NAT / virbr0)
libvirtのインストール時に標準で作成される仮想ネットワークが「default」ネットワークです。内部的にvirbr0という仮想ブリッジ(通常192.168.122.1/24)が作成され、仮想マシンにはDHCP(dnsmasq)経由でプライベートIPが割り当てられます。
外部通信時はホストOSのiptables/nftablesによって**IPマスカレード(NAT)**が行われます。仮想マシンからインターネットへのアウトバウンド通信は自動で確立しますが、外部ネットワークから仮想マシンへ直接アクセスすることはできません(ポートフォワーディング設定が必要)。
4.2 物理ネットワーク直結のブリッジ接続(Bridge)
仮想マシンを外部公開サーバー(Web、DB等)として運用する場合、ホストOS上に物理NIC(eth0)を収容したLinuxブリッジ(br0)を作成し、仮想マシンのNICをこのbr0に直結します。
これにより、仮想マシンはホストOSと同一の物理LANセグメント(例: 192.168.2.0/24)に属する独立したIPアドレスを持つことができ、外部から直接通信可能になります。
4.3 virsh net-* コマンドによるネットワーク制御
# 仮想ネットワークの一覧表示
$ sudo virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
default active yes yes
# ネットワークの起動・停止・自動起動設定
$ sudo virsh net-start default
$ sudo virsh net-autostart default
5. 仮想マシンの新規構築と複製(virt-install と virt-clone)
GUI環境(virt-manager)を用いず、CUIからコマンド1発で仮想マシンをプロビジョニングするツールがvirt-installです。また、既存VMを複製するvirt-cloneも試験で頻出します。
$ sudo virt-install \
--name=web01 \
--vcpus=2 \
--memory=2048 \
--disk path=/var/lib/libvirt/images/web01.qcow2,size=20,format=qcow2 \
--os-variant=almalinux9 \
--network bridge=br0 \
--location=/iso/AlmaLinux-9.8-x86_64-minimal.iso \
--extra-args="console=ttyS0" \
--graphics none
既存の仮想マシンからMACアドレスやUUIDを再生成し、完全に独立した同一クローンを作成するにはvirt-cloneを使用します。
# web01 から web02 を自動クローン作成(ディスクも自動生成)
$ sudo virt-clone \
--original web01 \
--name web02 \
--auto-clone
6. LinuC 201試験(主題2.05)重要ポイント総整理
試験本番で問われる主要コマンドと構文上の盲点を整理します。
6.1 記述式(コマ問)頻出コマンド・サブコマンド一覧
| コマンド | 主要サブコマンド / 引数 | 機能詳細 |
|---|---|---|
qemu-img |
create -f <fmt> <path> <size> |
ディスクイメージの新規作成(raw / qcow2) |
qemu-img |
info <path> |
ディスクイメージの詳細情報・実消費容量の確認 |
qemu-img |
convert -f <fmt> -O <fmt> <src> <dst> |
ディスクイメージ形式の変換 |
virsh |
list [--all] |
仮想マシン一覧の表示(全件表示) |
virsh |
start <vm> / shutdown <vm> |
仮想マシンの起動 / 正常終了 |
virsh |
destroy <vm> |
仮想マシンの強制電源断(即時停止) |
virsh |
undefine <vm> |
仮想マシンの登録定義(XML)の削除 |
virsh |
autostart <vm> [--disable] |
ホスト起動時の自動起動有効化 / 無効化 |
virt-clone |
--original <vm> --name <new> --auto-clone |
既存仮想マシンの自動複製 |
7. まとめ:ハイパーバイザの制御を理解し仮想化基盤を統括する
LinuxにおけるKVM仮想化は、カーネル標準のハイパーバイザモジュールと、デバイスを模倣するQEMU、そしてこれらを抽象化して操作するlibvirtの三位一体で成り立っています。
ディスクフォーマットの特性(rawの高速性 vs qcow2の柔軟性)や、ネットワーク構成の使い分け(内部完結のNAT vs 本番運用のブリッジ)、virshによる正確なライフサイクル制御を体系的に把握しておくことで、試験の記述問題はもちろん、実務におけるプライベートクラウド基盤の運用保守を自信を持って行えるようになります。
次回(第8回)は、201試験の最終回となる「コンテナ技術の基礎とDockerコンテナ管理・Dockerfile」(Namespacesとcgroupsの仕組み、コンテナのライフサイクル、イメージビルド、コンテナネットワーク)を取り上げます。
