VirtualBoxのメモリ消費量や動作の重さ、Ubuntuのカーネルアップデートのたびに発生するカーネルモジュールのビルドエラーにうんざりしていませんか?それなら、KVM/QEMUへの移行が最適解です。KVMはLinuxカーネル自体をベアメタル型(Type-1)ハイパーバイザーへと拡張します。これにより、仮想マシンのCPUおよびディスクI/O性能は物理マシン比で約95〜98%という圧倒的なパフォーマンスを発揮します。
クイックスタート:Virt-Managerで5分以内にKVM仮想マシンを構築
まず、CPUがハードウェア仮想化支援機能(Intel VT-xまたはAMD-V)に対応しているか確認します:
egrep -c '(vmx|svm)' /proc/cpuinfo
出力された数値が1以上(通常はCPUスレッド数に応じた4、8、16など)であれば準備完了です。もし「0」が返ってきた場合は、BIOS/UEFI設定画面でIntel Virtualization Technology(VT-x)またはAMD SVM / SVM Modeを有効化する必要があります。
KVM、QEMU、libvirt、およびGUI管理ツールVirt-Manager一式をインストールします:
sudo apt update
sudo apt install -y qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager
root権限なしで操作できるよう、現在のユーザーをlibvirtグループとkvmグループに追加します:
sudo usermod -aG libvirt,kvm $USER
newgrp libvirt
システム起動時に自動実行されるよう、libvirtdサービスを有効化して起動します:
sudo systemctl enable --now libvirtd
端末でvirt-managerと入力するか、デスクトップのアプリケーション一覧から仮想マシンマネージャー(Virtual Machine Manager)を起動します。左上のパソコンアイコンをクリックして新規VMを作成します。インストール用ISOファイルを選択し、リソース(例:4 vCPU、4GB RAM、30GB ディスク)を割り当てて完了(Finish)をクリックします。わずか数秒で仮想マシンが起動し、インストーラー画面が表示されます。
アーキテクチャの理解:KVM、QEMU、Virt-Managerの連携の仕組み
Linux初心者の多くはこれら3つのツールを混同しがちですが、実際にはそれぞれが異なるレイヤーを担当しています:
1. KVM (Kernel-based Virtual Machine)
KVMはLinuxカーネル内部に組み込まれたモジュールです。主な役割は、VT-x/AMD-Vのハードウェア仮想化インターフェースを解放することです。KVMにより、VMのvCPUが命令変換レイヤーを経由せずホストCPU上で直接ネイティブ実行されるため、レイテンシを極限まで低減できます。
2. QEMU (Quick Emulator)
KVMが担当するのはCPUとメモリの仮想化のみです。キーボード、マウス、NIC、ストレージバスなどのハードウェアエミュレーションは行いません。そこでユーザー空間で動作するQEMUが不足分を補い、チップセット、周辺機器、仮想ビデオカードのエミュレーションや、VM向けBIOS/UEFI(OVMF)のロードを担います。
3. Libvirt と Virt-Manager
数十個ものオプションフラグを並べてqemu-system-x86_64コマンドを手動実行するのは、ミスが起こりやすく非効率です。そこでデーモンであるlibvirtが、仮想マシン、ネットワーク、ストレージの全設定を構造化されたXMLファイルとして抽象化・標準化します。そしてVirt-ManagerはGTKベースのGUIとして機能し、元の設定ファイルを直接編集することなく、マウス操作だけでVMの作成、設定変更、スナップショット取得を可能にします。
ブリッジネットワークの設定とSSH経由のリモート管理
デフォルト設定では、KVM仮想マシンはNATネットワーク配下(virbr0インターフェース経由の192.168.122.0/24レンジ)に配置されます。VMからインターネットへの接続は可能ですが、同一LAN内の他のホストからVMへ直接Pingを送信したりSSH接続したりすることはできません。
ルーターから直接IPを取得するLinuxブリッジの作成
オフィスのLANと同じセグメント(例:192.168.1.x)のIPアドレスを仮想マシンに割り当てるには、Netplanを使用して物理NICを仮想ブリッジに収容します:
sudo nano /etc/netplan/01-netcfg.yaml
物理NICの名前がenp3s0の場合、設定ファイルを次のように編集します:
network:
version: 2
renderer: networkd
ethernets:
enp3s0:
dhcp4: false
bridges:
br0:
interfaces: [enp3s0]
dhcp4: true
parameters:
stp: false
forward-delay: 0
設定を反映します:
sudo netplan apply
Virt-Managerを開き、該当の仮想マシンを選択してNIC設定を開きます。ネットワークソースをNATからブリッジデバイス...へ変更し、br0を指定します。再起動すると、仮想マシンは物理ルーターのDHCPサーバーから直接IPアドレスを取得するようになります。
ヘッドレスサーバーのSSH経由リモート管理
サーバー側に重たいデスクトップGUI環境を導入する必要はありません。Ubuntu Server 22.04/24.04が動作するステージングサーバーには、qemu-kvmとlibvirtdのみをインストールします。Virt-ManagerのUI自体は、手元のクライアントPC(ノートPCなど)上で実行できます。
手元のPCのVirt-Managerで、ファイル > 接続を追加を選択します。SSH経由でリモートホストに接続にチェックを入れ、サーバーのユーザー名とIPアドレスを入力して接続します。LibvirtがSSHトンネル経由でソケットを自動フォワードするため、セキュアでありながらサーバー側のメモリ消費を数百MB削減できます。
実運用で役立つ実践的なTips
- 常にVirtIOを最優先する:仮想ディスクのBusにはSATAではなくVirtIOを選択してください。NICもe1000ではなくvirtioを指定します。VirtIOは準仮想化(Paravirtualization)方式を採用しており、NVMe環境でのディスク読み書きスループットを従来の約180MB/sから500MB/s超へと飛躍的に引き上げます。Windowsゲストをインストールする場合は、Fedoraが提供する
virtio-winのISOファイルをマウントし、ディスク選択時にドライバを読み込ませてください。 - RAWではなくQCOW2を選択する:QCOW2は実使用量に応じて容量を確保するシンプロビジョニングに対応し、圧縮機能やわずか1〜2秒での瞬時スナップショットをサポートしています。極限の2〜3%のIOPS向上を絞り出したいシビアなデータベースベンチマーク用途を除き、通常の運用にはQCOW2がベストです。
- ISOファイルの「Permission Denied」エラー対策:QEMUプロセスは
libvirt-qemuユーザー権限で動作するため、/home/user/Downloadsなどの個別ユーザーのホームディレクトリ配下にあるISOファイルを読み取れないことがあります。最も確実な対処法は、管理用ディレクトリへISOを配置して適切な所有権を設定することです:
sudo mv ~/Downloads/ubuntu.iso /var/lib/libvirt/images/
sudo chown libvirt-qemu:kvm /var/lib/libvirt/images/ubuntu.iso
- 押さえておきたい主要なvirshコマンド:Virt-ManagerのGUIが応答しない場合や、Bashスクリプトで運用を自動化する際に重宝します:
virsh list --all # すべてのVMのステータスを確認
virsh start vm-ubuntu # 仮想マシンを起動
virsh shutdown vm-ubuntu # ACPIによる安全なグレースフルシャットダウン
virsh destroy vm-ubuntu # フリーズ時などの強制電源オフ
virsh snapshot-create-as --domain vm-ubuntu --name "update-mae" # バックアップ用スナップショットを作成
KVM/QEMUとVirt-Managerの組み合わせは、卓越したパフォーマンスと実用的な操作性を両立します。VirtualBoxよりも軽量で、VMware Workstationよりも自由度が高いこの構成は、Linuxを日常的に活用するすべてのエンジニアにとって習得する価値のある強力なツールセットです。

