メインコンテンツへスキップ

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

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

libvirtとは

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

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

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

検証環境

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

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

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

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

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

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

libvirtのインストール

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

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

$ bash
$ sudo dnf install libvirt qemu-kvm

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

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

起動確認

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

$ bash
$ systemctl list-units "virt*"

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

output
  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'.

動作確認

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

$ bash
$ sudo virsh list --all

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

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

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

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

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

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

$ bash
$ sudo virsh net-start default
$ sudo virsh net-autostart default

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

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

$ bash
$ sudo usermod -aG libvirt $USER

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

トラブルシューティング

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

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

$ bash
# 状態を確認
$ systemctl status virtproxyd.socket

# 停止している場合は起動
$ sudo systemctl enable --now virtproxyd.socket

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

$ bash
$ sudo virt-host-validate

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

次のステップ

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

まとめ

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

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

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

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

サイト内検索