Ubuntu 22.04 を KVM ホストとして使う場合、QEMU、KVM、libvirt、仮想ネットワーク、ストレージプールの役割を分けて確認します。仮想マシンを作る前に、libvirt の管理単位、ネットワーク接続方式、イメージ保存先を決めておくと、あとから運用状態を追いやすくなります。
この記事では、既存の Ubuntu 22.04 KVM 環境を保守する前提で、必要パッケージ、サービス、ユーザー権限、default network、ブリッジ、ストレージプールを確認します。
- KVM / QEMU / libvirt の役割
- 必要パッケージとサービス状態
- 管理ユーザーの権限
- default network と bridge の使い分け
- ストレージプールとイメージ保存先
書籍
ストーリーで覚える Linux CLI 入門
Linux のコマンドライン操作やサーバー管理の基礎を確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
KVM と libvirt の役割
KVM は Linux カーネルの仮想化機能で、QEMU は仮想マシンを実行するエミュレーターです。libvirt はその上で仮想マシン、ネットワーク、ストレージを管理するための共通 API とサービスです。
- KVM はカーネル側の仮想化機能
- QEMU は仮想マシンの実行を担当する
- libvirt は VM 定義、仮想ネットワーク、ストレージプールを管理する
virshは libvirt を操作する CLIvirt-installは libvirt へ VM 定義を作成するための CLI
必要パッケージをインストールする
KVM ホストとして使うための基本パッケージを導入します。既存環境では、インストール済みかどうかと version を確認します。
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y qemu-kvm libvirt-daemon-system libvirt-clients virtinst libosinfo-bin virt-top
qemu-system-x86_64 --version
virsh version
virt-install --version仮想化支援機能を確認する
CPU の仮想化支援機能が有効か確認します。BIOS / UEFI 側で無効になっていると、KVM ホストとして期待した性能が出ません。
lscpu | grep -E 'Virtualization|Model name'
lsmod | grep -E 'kvm|vfio'
kvm-oklibvirt サービスを確認する
Ubuntu 22.04 では libvirt 関連サービスの状態を確認します。環境によってサービス名が異なることがあるため、systemctl と virsh の両方で見ます。
systemctl status libvirtd --no-pager
systemctl status virtqemud --no-pager
virsh -c qemu:///system version
virsh -c qemu:///system nodeinfo管理ユーザーの権限を確認する
一般ユーザーで libvirt を操作する場合は、libvirt と kvm グループへの所属を確認します。グループ追加後は、再ログインして反映します。
id
sudo usermod -aG libvirt,kvm "$USER"
newgrp libvirt
virsh -c qemu:///system list --alldefault network を確認する
libvirt の default network は NAT 型の仮想ネットワークです。検証用途では便利ですが、外部ネットワークから直接到達させるサーバー用途では、ブリッジを使う方が分かりやすい場合があります。
virsh -c qemu:///system net-list --all
virsh -c qemu:///system net-info default
virsh -c qemu:///system net-dumpxml defaultdefault network を停止する場合
default network を使わない方針にする場合は、自動起動を止めます。既存 VM が使っていないことを確認してから実行します。
virsh -c qemu:///system net-destroy default
virsh -c qemu:///system net-autostart default --disable
virsh -c qemu:///system net-list --allブリッジを確認する
VM を物理ネットワークに近い形で接続したい場合は、ホスト側の bridge を使います。Netplan や systemd-networkd で作成した bridge が存在するか確認します。
ip link show type bridge
networkctl list
networkctl status br0
bridge linkストレージプールを確認する
libvirt の default storage pool は、多くの場合 /var/lib/libvirt/images を指します。VM イメージの置き場所、空き容量、バックアップ対象を確認します。
virsh -c qemu:///system pool-list --all
virsh -c qemu:///system pool-info default
virsh -c qemu:///system vol-list default
df -h /var/lib/libvirt/imagesイメージ保存先を確認する
QCOW2 などの仮想ディスクをどこに置くかは、性能、容量、バックアップ設計に影響します。外部ストレージを使う場合は、マウント状態も確認します。
sudo ls -ld /var/lib/libvirt/images
sudo find /var/lib/libvirt/images -maxdepth 1 -type f -name '*.qcow2' -ls
findmnt /var/lib/libvirt/imagesvirsh で状態を確認する
VM 作成前でも、libvirt の管理対象を virsh で確認できます。VM、ネットワーク、ストレージプールを同じ接続先で見ることが重要です。
virsh -c qemu:///system list --all
virsh -c qemu:///system net-list --all
virsh -c qemu:///system pool-list --all運用時に見るポイント
KVM ホストの運用では、VM 作成コマンドだけでなく、ネットワーク接続方式、ディスク配置、管理権限、バックアップ範囲を決めておきます。
- VM が NAT と bridge のどちらを使うかを決める
- VM イメージの保存先と容量を確認する
- 管理ユーザーを必要以上に増やさない
- VM 名、ディスク名、IP アドレスを対応させる
- libvirt の接続先を
qemu:///systemに揃える
まとめ
Ubuntu 22.04 の KVM / libvirt 環境では、パッケージ導入だけでなく、libvirt サービス、管理ユーザー、default network、bridge、ストレージプールを確認します。
virt-install で VM を作成する前に、どのネットワークへ接続し、どこにディスクを置き、どのユーザーが管理するのかを決めておくことが重要です。既存環境を保守する場合も、virsh で同じ観点を定期的に確認します。

