Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
仮想化ガイド
  1. 前書き
  2. I 概要
    1. 1 仮想化技術
    2. 2 仮想化シナリオ
    3. 3 Xen 仮想化の紹介
    4. 4 KVM 仮想化の紹介
    5. 5 仮想化ツール
    6. 6 仮想化コンポーネントのインストール
  3. II libvirt を利用した仮想マシンの管理
    1. 7 libvirt デーモン
    2. 8 VM ホストサーバ の準備
    3. 9 ゲストのインストール
    4. 10 基本的な VM ゲスト の管理
    5. 11 接続と認可
    6. 12 高度なストレージ設定
    7. 13 仮想マシンマネージャ を利用した仮想マシンの設定
    8. 14 virsh を利用した仮想マシンの設定
    9. 15 AMD SEV-SNP による仮想マシンのセキュリティ強化
    10. 16 VM ゲスト の移行
    11. 17 Xen から KVM への移行ガイド
  4. III 全ハイパーバイザ共通の機能
    1. 18 ディスクのキャッシュモード
    2. 19 VM ゲスト の時刻設定
    3. 20 libguestfs
    4. 21 QEMU ゲストエージェント
    5. 22 ソフトウエア TPM エミュレータ
    6. 23 VM ゲスト に対するクラッシュダンプの作成
  5. IV Xen を利用した仮想マシンの管理
    1. 24 仮想マシンホストの設定
    2. 25 仮想ネットワーク
    3. 26 仮想環境の管理
    4. 27 Xen 内でのブロックデバイス
    5. 28 仮想化: オプション設定
    6. 29 管理作業
    7. 30 XenStore: ドメイン間で共有される設定データベース
    8. 31 Xen の高可用性仮想化ホストとしての使用
    9. 32 Xen: 準仮想化 (PV) ゲストから完全仮想化 (FV/HVM) ゲストへの変換
  6. V QEMU を利用した仮想マシンの管理
    1. 33 QEMU の概要
    2. 34 KVM VM ホストサーバ の構築
    3. 35 ゲストのインストール
    4. 36 qemu-system-ARCH を利用した仮想マシンの実行
    5. 37 QEMU モニタを利用した仮想マシンの管理
  7. VI トラブルシューティング
    1. 38 内蔵ヘルプとパッケージのドキュメンテーション
    2. 39 システム情報とログの収集
  8. 用語集
  9. A NVIDIA カードに対する GPU パススルー の設定
  10. B GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.7

7 libvirt デーモン Edit source

KVM や Xen の機能を提供する libvirt を使用するにあたっては、 1 つまたは複数のデーモンをインストールして有効化しておく必要があります。また libvirt には、モノリシック型とモジュール型という 2 種類の利用形態があります。モノリシック型の場合、 libvirt に標準で付属する libvirtd という単一のデーモンを使用します。ここには主要なハイパーバイザドライバのほか、ストレージやネットワーク、ノードデバイスの管理機能など、必要な全てのセカンダリドライバも用意されています。またモノリシック型の場合、 libvirtd は外部クライアントからの機密を保持したリモートアクセス機能も提供します。もう一方のモジュール型はしばらく後に作られた仕組みで、この場合それらの機能はそれぞれ別々のデーモンとして起動します。これにより、 libvirt のインストールをカスタマイズすることができるようになっています。既定ではモジュール型のデーモンが有効化されますが、個別のデーモンを無効化して libvirtd を有効化することで、従来のモノリシック型に切り替えることもできます。

モジュール型のデーモンは、最小限の libvirt 機能のみを使用したい場合に有用です。たとえば仮想マシンで libvirt 以外が提供するストレージとネットワークを利用したい場合、 libvirt-daemon-driver-storagelibvirt-daemon-driver-network などのパッケージは不要になります。典型的な例が Kubernetes で、ネットワークやストレージ、 cgroup やネームスペース統合などの機能は Kubernetes 側が処理します。そのためモジュール型の場合は、 virtqemud を提供する libvirt-daemon-driver-QEMU パッケージのみが必須となります。モジュール型は、実際に使用するコンポーネントの種類が少ない場合に libvirt のインストールを最小化できる仕組みです。

7.1 モジュール型デーモンの開始と停止 Edit source

モジュール型デーモンの場合、 virtドライバ名d の形式でそれぞれのデーモンが提供されています。これらは /etc/libvirt/virtドライバ名d.conf という設定ファイルで制御することができます。 SUSE では virtqemudvirtxend のハイパーバイザデーモンをサポートしているほか、下記に示すセカンダリデーモンをサポートしています:

  • virtnetworkd - libvirt の仮想ネットワーク管理 API を提供する仮想ネットワーク管理デーモンです。たとえば virtnetworkd は、仮想マシンが使用する NAT 仮想ネットワークの作成機能などを提供します。

  • virtnodedevd - libvirt のノードデバイス管理 API を提供するホスト物理デバイス管理デーモンです。たとえば virtnodedevd は、仮想マシンが使用する PCI デバイスをホストから切り離す機能などを提供します。

  • virtnwfilterd - libvirt のファイアウオール管理 API を提供するホストファイアウオール管理デーモンです。たとえば virtnwfilterd は、仮想マシンに対するネットワークトラフィックのフィルタ機能などを提供します。

  • virtsecretd - libvirt の機密管理 API を提供するホスト機密管理デーモンです。たとえば virtsecretd は、 LUKS ボリュームの鍵を保存する機能などを提供します。

  • virtstoraged - libvirt のストレージ管理 API を提供するホストストレージ管理デーモンです。たとえば virtstoraged は、様々な種類のストレージプールを作成する機能のほか、作成したプール内にボリュームを作成する機能なども提供します。

  • virtinterfaced - libvirt のネットワークインターフェイス管理 API を提供するホスト側 NIC 管理デーモンです。たとえば virtinterfaced は、ホスト側のボンディングデバイスの作成機能などを提供します。ただし SUSE では、 wicked や NetworkManager などのネットワーク管理ツールを使用するのが一般的であることから、本デーモンの使用は非推奨としております。そのため virtinterfaced についても無効化しておくことをお勧めします。

  • virtproxyd - 従来型の libvirtd ソケットとモジュール型のデーモンソケットとの仲介を行うデーモンです。 libvirt をモジュール型で使用する場合、 virtproxyd を介することで、モノリシック型の libvirtd に似た API を利用できるようになります。モノリシック型の libvirtd ソケットに接続するクライアントからも使用することができます。

  • virtlogd - 仮想マシンのコンソールに出力されるログを収集するデーモンです。 virtlogd はモノリシック型の libvirtd でも使用されているデーモンですが、 virtqemud の systemd ユニットファイルから virtlogd を開始するように設定していることから、モジュール型の libvirtd では明示的に開始する必要はありません。

  • virtlockd - ディスクなどの仮想マシンリソースに対して施錠 (ロック) を行うためのデーモンです。 virtlockd はモノリシック型の libvirtd でも使用されているデーモンですが、 virtqemud や virtxend の systemd ユニットファイルから virtlockd を開始するように設定していることから、モジュール型の libvirtd では明示的に開始する必要はありません。

virtlogdvirtlockd はモノリシック型の libvirtd でも使用されます。また、これらのデーモンはセキュリティ上の理由から、 libvirtd とは分離されているためです。

既定では、モジュール型デーモンは /var/run/libvirt/virtドライバ名d-sock および /var/run/libvirt/virtドライバ名d-sock-ro の 2 種類の UNIX ドメインソケットで待ち受けを行います。クライアントライブラリは通常、従来型の /var/run/libvirt/libvirtd-sock という UNIX ソケットファイルにアクセスしますが、これらのクライアント向けに virtproxyd というデーモンが提供されています。

また、 virtqemudvirtxend は、 systemd の事前設定で有効化されているほか、 virtnetworkd , virtnodedevd , virtnwfilterd , virtstoraged , virtsecretd の各デーモンも、対応するパッケージがインストールされていれば事前に有効化されます。これらは利便性向上のために設定されているものですが、モジュール型のデーモンはそれぞれ個別に管理することができます:

  • virtドライバ名d.service - ドライバ名 に対応する仮想化デーモンを開始するためのメインのユニットファイルです。ホストの起動時に VM を開始する必要がある場合は、こちらを起動時に開始するように設定しておくことをお勧めします。

  • virtドライバ名d.socket - 読み書き可能な UNIX ソケットである /var/run/libvirt/virtドライバ名d-sock に対応するユニットファイルです。こちらは起動時に開始するよう有効化しておくことをお勧めします。

  • virtDRIVERd-ro.socket - 読み込み専用の UNIX ソケットである /var/run/libvirt/virtドライバ名d-sock-ro に対応するユニットファイルです。こちらも起動時に開始するよう有効化しておくことをお勧めします。

  • virtDRIVERd-admin.socket - 管理用の UNIX ソケットである /var/run/libvirt/virtドライバ名d-admin-sock に対応するユニットファイルです。こちらも起動時に開始するよう有効化しておくことをお勧めします。

systemd で各種のソケットを有効化すると、 virtドライバ名d.conf に設定されたソケット関連の設定が無視されるようになります。無視される設定と対応するユニットファイルは下記のとおりです:

  • unix_sock_group - UNIX ソケットのグループ所有者を設定します。この設定は virtドライバ名d.socket および virtドライバ名d-ro.socket ユニットファイル内の SocketGroup パラメータで設定します。

  • unix_sock_ro_perms - 読み込み専用の UNIX ソケットのアクセス許可を設定します。この設定は virtドライバ名d-ro.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_rw_perms - 読み書き可能な UNIX ソケットのアクセス許可を設定します。この設定は virtドライバ名d.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_admin_perms - 管理用の UNIX ソケットのアクセス許可を設定します。この設定は virtドライバ名d-admin.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_dir - 全ての UNIX ソケットが作成されるディレクトリを指定します。この設定は virtドライバ名d.socket , virtドライバ名d-ro.socket , virtドライバ名d-admin.socket の各ユニットファイル内の ListenStream で個別に設定します。

7.2 モノリシック型デーモンの開始と停止 Edit source

モノリシック型デーモンは libvirtd と呼ばれ、 /etc/libvirt/libvirtd.conf ファイルで設定を行います。 libvirtd はいくつかの systemd から構成されています:

  • libvirtd.service - libvirtd を起動するためのメインとなる systemd ユニットファイルです。ホストの起動時に VM を開始する必要がある場合は、 libvirtd.service を起動時に開始するように設定しておくことをお勧めします。

  • libvirtd.socket - 読み書き可能な UNIX ソケット /var/run/libvirt/libvirt-sock に対応するユニットファイルです。こちらも起動時に開始するよう有効化しておくことをお勧めします。

  • libvirtd-ro.socket - こちらは読み込み専用の UNIX ソケットである /var/run/libvirt/libvirt-sock-ro に対応するユニットファイルです。こちらも起動時に開始するよう有効化しておくことをお勧めします。

  • libvirtd-admin.socket - 管理用の UNIX ソケットである /var/run/libvirt/libvirt-admin-sock に対応するユニットファイルです。こちらも起動時に開始するよう有効化しておくことをお勧めします。

  • libvirtd-tcp.socket - 非 TLS リモートアクセスのための TCP ポート 16509 に対応するユニットファイルです。こちらは管理者が適切な認証機構を設定している場合を除き、起動時に開始するように設定すべきではありません。

  • libvirtd-tls.socket - TLS リモートアクセスのための TCP ポート 16509 に対応するユニットファイルです。管理者が x509 証明書と適切な認証機構を設定するまでは、起動時に開始するように設定すべきではありません。

systemd で各種のソケットを有効化すると、 libvirtd.conf に設定されたソケット関連の設定が無視されるようになります。無視される設定と対応するユニットファイルは下記のとおりです:

  • listen_tcp - TCP 接続は libvirtd-tcp.socket ユニットファイルで設定します。

  • listen_tls - TLS 接続は libvirtd-tls.socket ユニットファイルで設定します。

  • tcp_port - 非 TLS 向け TCP ポートを設定します。こちらは libvirtd-tcp.socket ユニットファイル内の ListenStream パラメータで設定します。

  • tls_port - TLS 向け TCP ポートを設定します。こちらは libvirtd-tls.socket ユニットファイル内の ListenStream パラメータで設定します。

  • listen_addr - 待ち受ける IP アドレスを設定します。この設定は libvirtd-tcp.socket または libvirtd-tls.socket ユニットファイル内の ListenStream パラメータで設定します。

  • unix_sock_group - UNIX ソケットのグループ所有者を設定します。この設定は libvirtd.socket および libvirtd-ro.socket ユニットファイル内の SocketGroup パラメータで設定します。

  • unix_sock_ro_perms - 読み込み専用の UNIX ソケットのアクセス許可を設定します。この設定は libvirtd-ro.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_rw_perms - 読み書き可能な UNIX ソケットのアクセス許可を設定します。この設定は libvirtd.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_admin_perms - 管理用の UNIX ソケットのアクセス許可を設定します。この設定は libvirtd-admin.socket ユニットファイル内の SocketMode パラメータで設定します。

  • unix_sock_dir - 全ての UNIX ソケットが作成されるディレクトリを指定します。この設定は libvirtd.socket , libvirtd-ro.socket , libvirtd-admin.socket の各ユニットファイル内の ListenStream で個別に設定します。

重要
重要: 矛盾関係にある libvirtdxendomains のサービスについて

libvirtd を開始してもエラーになってしまう場合は、まず xendomains サービスが開始されていないかどうかを確認してください:

> systemctl is-active xendomains active

上記のコマンドが active を返した場合、 libvirtd を開始するには、事前に xendomains を停止させる必要があります。また、システムの起動時に libvirtd を開始したい場合は、これに加えて xendomains が自動的に開始されないように設定する必要もあります。具体的には、下記のように入力して実行してください:

> sudo systemctl stop xendomains
> sudo systemctl disable xendomains
> sudo systemctl start libvirtd

xendomainslibvirtd は同一のサービスを提供するものであり、同時に使用しようとすると、互いに競合する結果になります。たとえば libvirtd によって domU が起動されている場合でも、 xendomains を開始すると、 domU を再度起動しようとしてしまいます。

7.3 モノリシック型デーモンへの切り替え Edit source

モジュール型のデーモンからモノリシック型のデーモンに切り替えたい場合は、いくつかのサービスに対して変更を行う必要があります。なお、切り替えに際しては事前に動作中の仮想マシンを停止させるか、別のホストに移行しておくことをお勧めします。

  1. まずはモジュール型のデーモンとソケットをそれぞれ停止します。下記の例では、 KVM 向けの QEMU といくつかのセカンダリデーモンをそれぞれ停止しています。

    for drv in qemu network nodedev nwfilter secret storage
    do
     > sudo systemctl stop virt${drv}d.service
     > sudo systemctl stop virt${drv}d{,-ro,-admin}.socket
    done
  2. 次回のシステム起動時にモジュール型のデーモンが開始しないように設定します

    for drv in qemu network nodedev nwfilter secret storage
    do
     > sudo systemctl disable virt${drv}d.service
     > sudo systemctl disable virt${drv}d{,-ro,-admin}.socket
    done
  3. あとはモノリシック型の libvirtd のサービスとソケットを有効化します

    > sudo systemctl enable libvirtd.service
    > sudo systemctl enable libvirtd{,-ro,-admin}.socket
  4. 最後にモノリシック型の libvirtd ソケットを開始します

    > sudo systemctl start libvirtd{,-ro,-admin}.socket
このページを印刷