AlmaLinux 10にlibvirtをインストールしてKVM仮想化環境を構築する

公開日:

この記事では、AlmaLinux 10上でKVM仮想マシンを管理するための基盤となる libvirt のインストールと初期設定を行います。

AlmaLinux 10にlibvirtをインストールする

libvirtとは

libvirtは、KVM、QEMU、Xenなど複数の仮想化技術を統一的に管理するためのAPIおよびデーモンです。

以下のようなツールがlibvirtを利用しています:

ツール用途
virshコマンドラインでのVM管理
virt-managerGUIでのVM管理(デスクトップ向け)
cockpit-machinesWebブラウザでのVM管理

検証環境

本記事の作業手順は、以下の環境にて検証を行いました。

OSアーキテクチャ稼働環境
AlmaLinux 10.1x86_64物理サーバー

前提条件:仮想化支援機能の確認

libvirtをインストールする前に、CPUが仮想化をサポートしているか確認します。

Terminal window
$ grep -E '(vmx|svm)' /proc/cpuinfo
  • vmx: Intel VT-x(Intel製CPU)
  • svm: AMD-V(AMD製CPU)

何も出力されない場合は、BIOSで仮想化支援機能が無効になっている可能性があります。

libvirtのインストール

パッケージのインストール

dnfコマンドでlibvirtqemu-kvmをインストールします。 インストール完了後はマシンを再起動してください。

Terminal window
$ sudo dnf install libvirt qemu-kvm

2つのパッケージは次の表のようなものです。

パッケージ説明
libvirt仮想化管理デーモンとAPI
qemu-kvmKVM用のQEMUエミュレータ

起動確認

以下のコマンドで、仮想マシンの操作に必要な主要デーモンが動作しているか確認します。

Terminal window
$ systemctl list-units "virt*"

以下のように、各専門デーモン(virtqemud など)やソケットが active running または active listening と表示されれば正常です。

UNIT LOAD ACTIVE SUB DESCRIPTION
virtinterfaced.socket loaded active listening libvirt interface daemon socket
virtlockd.socket loaded active listening libvirt locking daemon socket
virtlogd.socket loaded active listening libvirt logging daemon socket
virtnetworkd.socket loaded active listening libvirt network daemon socket
virtnodedevd.socket loaded active listening libvirt nodedev daemon socket
virtnwfilterd.socket loaded active listening libvirt nwfilter daemon socket
virtproxyd.socket loaded active listening libvirt proxy daemon socket
virtqemud.socket loaded active listening libvirt QEMU daemon socket
virtsecretd.socket loaded active listening libvirt secret daemon socket
virtstoraged.socket loaded active listening libvirt storage daemon socket
... (他、ネットワークやストレージのユニット)
Legend: LOAD → Reflects whether the unit definition was properly loaded.
ACTIVE → The high-level unit activation state, i.e. generalization of SUB.
SUB → The low-level unit activation state, values depend on unit type.
28 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.
info-icon tips

libvirtd.socket (レガシーなモノリシック型) は古い仕組みであり、モジュラー型が有効な環境では inactive (dead) のままで問題ありません。

libvirdの状態はinactive

モジュラー型であることは先ほどのコマンドsystemctl list-units "virt*"virt*.socketが表示されていることで確認できます。

動作確認

virshコマンドでの接続テスト

Terminal window
$ sudo virsh list --all

初期状態では何も表示されませんが、エラーなく実行できれば成功です。

Id Name State
--------------------

デフォルトネットワークの確認

libvirtはデフォルトでNATネットワーク(default)を提供します。

Terminal window
$ sudo virsh net-list --all
Name State Autostart Persistent
--------------------------------------------
default active yes yes

inactiveの場合は以下で起動します:

Terminal window
$ sudo virsh net-start default
$ sudo virsh net-autostart default

ユーザーをlibvirtグループに追加(任意)

毎回sudoを使わずにlibvirtを操作したい場合は、ユーザーをlibvirtグループに追加します。

Terminal window
$ sudo usermod -aG libvirt $USER

変更を反映するには、一度ログアウトして再ログインしてください。

トラブルシューティング

virshコマンドが「接続できない」とエラーを出す場合

virshコマンドを実行した際にfailed to connect to socket等のエラーが出る場合は、総合窓口であるvirtproxydが動いていない可能性があります。

Terminal window
# 状態を確認
$ systemctl status virtproxyd.socket
# 停止している場合は起動
$ sudo systemctl enable --now virtproxyd.socket

仮想化が無効と表示される場合

Terminal window
$ sudo virt-host-validate

このコマンドで各項目がPASSになっているか確認してください。

info-icon 補足

IOMMUSecure Guestの項目で WARN が出ることがありますが、物理デバイスの直接割り当て(パススルー)などの特殊な操作を行わない限り、無視しても問題ありません。

次のステップ

libvirtの準備が完了したら、以下の方法でVMを作成できます:

まとめ

本記事では、最新のLinuxディストリビューションで標準となっている 「モジュラー型デーモン」 を用いたlibvirtのインストールと設定方法を解説しました。

従来の libvirtd サービスを一括起動する方式から、機能ごとに分離されたデーモン(virtqemud 等)を使用する方式に移行することで、システムの安定性とセキュリティが向上しています。

クイックリファレンス:コマンド一覧

手順実行コマンド備考
インストールsudo dnf install libvirt qemu-kvm仮想化に必要な基本パッケージ
ホストの適合性確認sudo virt-host-validateKVMや仮想化支援機能のチェック
動作確認sudo virsh list --all仮想マシン一覧が表示されれば成功