Virt-Manager とは IBM 傘下の RedHat が開発している QEMU と KVM(Kernel-based Virtual Machine)を利用した仮想マシンマネージャです。システムの構成によってネイティブに近いパフォーマンスを発揮することもあります。QEMU 上で Windows を動かしてゲームをしている人もいるようです。 QEMU は様々アーキテクチャで動作でき、Android SDK にも使われていたり信頼性と高速性が高いエミュレータです。
QEMU はほぼすべての GNU/Linux で使えるので使わない手はありません。
Vir-Managerの仕組み
Virt-Manager の仕組みをざっくりと図にすると以下のようなものになります。KVM の仮想 CPU 支援機能を使いつつ、 QEMU が残りのネットワークやグラフィックデバイスなどをエミュレートさせます。あとは Virt-manager が Libvirt というライブラリ(API)を使って GUI を表示し人間が操作するという感じです。

いろんなサイトを読みましたが自分の理解ではこんな感じです。QEMU の一部が Linux カーネルに取り入れられた結果 KVM になったなどの経緯があり、古いサイトだとそのあたりがわからないのでかなり混乱しました。
ちなみに VirtualBox は2007年リリース当初は QEMU の仮想ハードウェアを利用していました。
Virt-ManagerとVirtualBoxの比較
VirtualBox も Virt-Manager 同様 KVM を用いた CPU の仮想支援機能を使えますが VRAM の利用可能容量が厳しく制限されており、GPUパススルーなどは行なえません。ネットワーク速度も遅いです。
よく VirtualBox と引き合いに出される VMware Player は大量の VRAM を扱えますが NVIDIA と提携しているため、AMD GPU が使えないという致命的な問題もあります。
多くの利点がある QEMU がなぜ中々広まらないのかは、多少の設定が必要なのとターミナルがメインな操作方法だからでしよう。
しかし、近年グラフィックUIを有したツールも進化してきているので利便性は高くなっています。
ここでは Arch Linux にQEMUとGUIツールである「Virtual Machine Manager(Virt-Manager)」の導入方法を解説していきます。現代のほとんどのディストリビューションが利用している Systemd を前提とした記事です。
Virt-Manager は RedHat が開発してるだけあって Fedora Linux だと1コマンドで導入から設定まで行ってくれるので大変便利です。仮想マシンを介して多くの作業を行っている人は Fedora がかなりおすすめです。
躓いてしまった場合は ArchWiki を参照することをおすすめします。必要となるパッケージがコロコロ変わってしまうようなので最新情報を見た方が良いでしよう。
Virt-Managerの導入法
1. CPUの仮想化支援機能の有無をチェック
AMD や Intel 製の CPU には仮想化をハードウェアレベルで支援するための拡張機能があります。この機能はそれぞれ AMD CPU では SVM、Intel CPU では VT-X と呼ばれています。 KVM を利用する上で必須な機能であり、サポートしている CPU を使う必要があります。
近年ほとんどの CPU でこの仮想化機能は搭載されています。ですが、AMD Bulldozer やIntel Sandybridge 以前の古いCPUは対応していないので KVM は利用できません。大半の場合、この支援機能はデフォルトで無効になっています。
以下確認用のコマンドです。
$ LC_ALL=C lscpu | grep Virtualization
Virtualization: AMD-V
上記のようにAMD-VかIntel-VTなどと表示されればハードウェア支援機能が有効になっています。何も表示されていなければBIOSで設定変更が必要です。
2. 必要なパッケージを確認
こちらArch Linuxで必要と思われるパッケージ一覧です。
libvirt | 仮想化エンジンをコントロールするためのAPI |
qemu | 仮想マシンエミュレーター |
iptables-nft | Linuxカーネルネットワークのパケットを制御するツール |
dnsmasq | 軽量なDNSサーバとDHCPサーバ |
edk2-ovmf | 仮想マシンのためのファームウェア(x86_64,i686)、仮想マシンがUEFIを利用している場合必要。 |
最新のArchWikiではAURにあるebtables
よりも同様のイーサネットフィルタリング機能を有する公式パッケージにあるiptables-nft
を推奨しています。
他のディストリビューションは利用しているパッケージ・サービスが大きく異なることがあるので事前に調べる必要があります。
3. QEMUとVirtual Machine Managerのインストール
QEMU本体と管理しやすいようGUIフロントエンドのインストールを行います。
- Pacmanパッケージマネージャ(Arch系)
$ sudo pacman -S virt-manager qemu libvirt edk2-ovmf dnsmasq iptables-nft
- APTパッケージマネージャ(Debian系)
$ sudo apt install qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virtinst libvirt-daemon virt-manager
- DNFパッケージマネージャ(Red Hat系)
$ sudo dnf install virt-manager
Fedora ならこれ以降の設定をしなくてもすぐに動作します。
4. Libvitサービスの設定
LibvirtはKVMやXenなどのハイパーバイザに仮想マシンの制御を簡単に行えるよう制御を抽象化したAPIライブラリです。このサービスが開始しているかどうか確認を行い、有効化されてなければ設定を行います。
設定していなければこのようなエラーが表示されます。
Unable to connect to libvirt qemu:///system.
ソケットの '/var/run/libvirt/virtqemud-sock' への接続に失敗しました: そのようなファイルやディレクトリはありません
Libvirtのスタータスを確認
まずはSystemdでLibvirtサービスがどのような状態なのかを確認します。
$ sudo systemctl status libvirtd.service
○ libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; disabled; vendor>
Active: inactive (dead)
TriggeredBy: ○ libvirtd-admin.socket
○ libvirtd.socket
○ libvirtd-ro.socket
Docs: man:libvirtd(8)
https://libvirt.org
このシステムでは inactive (dead)
となっているのでサービスを有効化&開始する必要があります。
Libvirtdサービスを開始・有効化
$ sudo systemctl start libvirtd.service
Libvirtdサービスをシステム起動時から有効化します。
$ sudo systemctl enable libvirtd.service
6. 認証機能を設定する
root権限を利用せずにLibvirtを利用するにはKVMの設定を行う必要があります。更に副効果としてLibvirtのネットワーク機能を利用することができるようになります。
一番簡単な方法は自分のユーザIDを libvirt
グループに追加することです。libvirt
グループに登録されたメンバーはRWソケットにパスワードの入力なくアクセスできます。
$ sudo gpasswd -a hogehoge libvirt
7. 仮想ネットワークデバイスを設定
Arch Wiki に沿ってすべての設定を行いましたが、ゲスト仮想マシンを立ち上げようとしたら下記のようなエラーが表示されました。どうやら仮想ネットワークデバイスを利用するには設定が必要なようです。
仮想マシンの開始中にエラーが発生しました: 要求された操作は有効ではありません: network 'default' is not active
QEMUをLinuxにインストールすると default
NATネットワークがLibvirtdによって自動的に生成されます。このネットワークは仮想マシンの仮想NIC(ネットワークインターフェイスカード) 同士をつなげる役割を担っています。設定は /etc/libvirt/qemu/networks/default.xml
内に格納されています。
上記のエラー表示はこの default
ネットワークが何かしらの理由で無効になってしまっていることを示します。ネットワークを使う設定になっている場合はその仮想マシンは起動しません。
設定方法
Libvirt を管理するためのコマンド virsh
を使います。存在するすべての仮想ネットワークデバイスを表示します。
$ sudo virsh net-list --all
$ sudo virsh net-list --all
名前 状態 自動起動 永続
------------------------------------------------
default 停止状態 いいえ (no) はい (yes)
ご丁寧に日本語化されています。自動起動が「いいえ(no)」になっているので自動起動させます。
$ sudo virsh net-autostart default
これでLibvirtdサービスを再起動すれば自動的に default
ネットワークが起動します。
8. Libvirtd の再起動
Libvirtd サービスを再起動して導入完了です。
sudo systemctl restart libvirtd.service
Virt-Manager を起動しましよう。

次の記事で Virt-Manager の使い方を解説していきたいと思います。
おわり
コメント