Ubuntu 環境で KVM 仮想化環境を構築するには、通常、以下のコアステップを順に実行します:ハードウェア確認 ➔ コンポーネントのインストール ➔ ユーザー権限の設定 ➔ ネットワークの設定 ➔ 仮想マシンの作成

本ガイドは Ubuntu 20.04、22.04、24.04 LTS(デスクトップ版・サーバー版の両方)に対応しています。


1. CPU のハードウェア仮想化支援の確認

まず、CPU がハードウェア仮想化(Intel の vmx または AMD の svm)をサポートしているか確認します:

egrep -c '(vmx|svm)' /proc/cpuinfo
  • 出力が 0 より大きい場合:CPU は仮想化をサポートしています。
  • 出力が 0 の場合:BIOS / UEFI 設定に入り、Intel VT-x または AMD-V を有効にしてください(一部のクラウドサーバーでは、ネストされた仮想化がサポートされていない場合があります)。

また、システムアーキテクチャが 64 ビットであることを確認します(KVM の必須条件):

uname -m
# x86_64 または aarch64 と出力されるはずです

2. KVM および関連ツールのインストール

パッケージリストを更新し、KVM スィートをインストールします:

sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager virtinst

コアコンポーネントの説明:

  • qemu-kvm:KVM コアエミュレーションモジュール。
  • libvirt-daemon-system:統一された管理インターフェースを提供する libvirt デーモン。
  • libvirt-clientsvirsh などのコマンドライン管理ツール。
  • bridge-utils:ネットワークブリッジ設定用ツール(オプション。高度なブリッジが不要な場合は省略可能)。
  • virt-manager:仮想マシンのグラフィカル管理インターフェース(GUI、ヘッドレスサーバーではインストール不要)。
  • virtinstvirt-installvirt-clone などのコマンドライン作成ツール。

3. インストールの検証とサービスの起動

libvirtd サービスの状態を確認して起動し、KVM カーネルモジュールがロードされていることを確認します:

# libvirtd のステータス確認
sudo systemctl status libvirtd

# 実行されていない場合は、起動して自動起動を有効化
sudo systemctl enable --now libvirtd

# KVM モジュールがロードされているか検証(kvm_intel または kvm_amd が含まれていること)
lsmod | grep kvm

4. 現在のユーザーをグループに追加(root 不要での管理)

すべての操作に sudo をつけずに済むよう、現在のユーザーを libvirt および kvm グループに追加します:

sudo usermod -aG libvirt $USER
sudo usermod -aG kvm $USER

コマンド実行後、一度ログアウトして再度ログインするか、次のコマンドを実行してグループメンバーシップを即時反映させます:

newgrp libvirt

5. ネットワーク設定(オプション)

KVM はデフォルトで default という名前の NAT 仮想ネットワーク(セグメント 192.168.122.0/24)を作成し、仮想マシンがホスト経由で外部ネットワークにアクセスできるようにします。

# デフォルトネットワークの確認
virsh net-list --all

# 起動していない場合は、有効化して自動起動を設定
virsh net-start default
virsh net-autostart default

ブリッジネットワーク(Bridge モード)の設定

仮想マシンをホストマシンと同じローカルネットワークに配置する必要がある場合は、Netplan を使用してネットワークブリッジを設定できます。 ネットワーク設定ファイルを編集します(例:/etc/netplan/01-netcfg.yaml、ファイル名はシステムによって異なります):

network:
  version: 2
  ethernets:
    enp3s0:
      dhcp4: false
  bridges:
    br0:
      interfaces: [enp3s0]
      dhcp4: true

ネットワーク設定を適用します:

sudo netplan apply

注意:ブリッジは物理ネットワークインターフェースを占有します。操作ミスによるネットワーク切断を防ぐため、事前に別のリモート接続手段(IPMI や追加の NIC など)が確保されていることを確認してください。後で仮想マシンを作成する際、ネットワークとして br0 を選択します。


6. 最初のエンドユーザー仮想マシンの作成

方法 A:グラフィカルインターフェース (virt-manager)

  1. 端末で virt-manager と入力するか、アプリケーションメニューから起動します。
  2. File ➔ New Virtual Machine の順に進み、ISO イメージ、メモリ、ディスクサイズなどを選択します。
  3. ネットワーク設定のステップで、NAT ネットワークの場合は default を選択し、事前に作成したブリッジネットワークの場合は br0 を選択します。

方法 B:コマンドラインインターフェース (virt-install)

Ubuntu Server をインストールする場合の例:

sudo virt-install \
  --name ubuntu-test \
  --ram 2048 \
  --vcpus 2 \
  --disk path=/var/lib/libvirt/images/ubuntu-test.qcow2,size=20,format=qcow2 \
  --os-variant ubuntu22.04 \
  --network network=default \
  --graphics spice,listen=0.0.0.0 \
  --console pty,target_type=serial \
  --cdrom /path/to/ubuntu-22.04-live-server-amd64.iso
  • --diskqcow2 形式を使用し、フォーマットを簡素化してディスク容量を節約します。
  • --network:デフォルトの NAT ネットワークを使用します。
  • VNC / SPICE 経由でリモート接続する場合は、--graphics vnc,listen=0.0.0.0 に変更できます。

7. 一般的な管理コマンド (virsh)

操作コマンド
すべての仮想マシンの確認virsh list --all
仮想マシンの起動virsh start <vm-name>
通常のシャットダウンvirsh shutdown <vm-name>
強制シャットダウンvirsh destroy <vm-name>
仮想マシンとディスクの削除virsh undefine <vm-name> --remove-storage all
テキストコンソールへの接続virsh console <vm-name>

8. リモート管理(オプション)

  • SSH + Virsh によるリモート管理
    virsh -c qemu+ssh://user@host/system list
    
  • Web コントロールパネル (Cockpit)
    sudo apt install cockpit cockpit-machines
    
    ブラウザから https://<ホストIP>:9090 にアクセスします。

トラブルシューティング

  1. 権限エラー (Permission denied): ユーザーが libvirt および kvm グループに追加されており、セッションに再ログインしていることを確認してください。
  2. 仮想マシンがインターネットに接続できないdefault ネットワークが起動しているか、ホストマシンで IP フォワーディングが有効になっているか(cat /proc/sys/net/ipv4/ip_forward1 であること)を確認してください。
  3. kvm: permission denied エラー: 現在のユーザーに /dev/kvm へのアクセス権がない可能性があります。ls -l /dev/kvm を実行してグループが kvm になっているか確認し、ユーザーがそのグループに含まれていることを確認してください。