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 Xen から KVM への移行ガイド
  4. III 全ハイパーバイザ共通の機能
    1. 16 ディスクのキャッシュモード
    2. 17 VM ゲスト の時刻設定
    3. 18 libguestfs
    4. 19 QEMU ゲストエージェント
    5. 20 ソフトウエア TPM エミュレータ
    6. 21 VM ゲスト に対するクラッシュダンプの作成
  5. IV Xen を利用した仮想マシンの管理
    1. 22 仮想マシンホストの設定
    2. 23 仮想ネットワーク
    3. 24 仮想環境の管理
    4. 25 Xen 内でのブロックデバイス
    5. 26 仮想化: オプション設定
    6. 27 管理作業
    7. 28 XenStore: ドメイン間で共有される設定データベース
    8. 29 Xen の高可用性仮想化ホストとしての使用
    9. 30 Xen: 準仮想化 (PV) ゲストから完全仮想化 (FV/HVM) ゲストへの変換
  6. V QEMU を利用した仮想マシンの管理
    1. 31 QEMU の概要
    2. 32 KVM VM ホストサーバ の構築
    3. 33 ゲストのインストール
    4. 34 qemu-system-ARCH を利用した仮想マシンの実行
    5. 35 QEMU モニタを利用した仮想マシンの管理
  7. VI トラブルシューティング
    1. 36 内蔵ヘルプとパッケージのドキュメンテーション
    2. 37 システム情報とログの収集
  8. 用語集
  9. A NVIDIA カードに対する GPU パススルー の設定
  10. B GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.5

7 libvirt デーモン Edit source

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

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

7.1 モノリシック型デーモンの開始と停止 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.2 モジュール型デーモンの開始と停止 Edit source

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

  • 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 では明示的に開始する必要はありません。

libvirt のモジュール型デーモンで使用される virtlockd と virtlogd は、モノリシック型のデーモンでも使用されます。

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

モノリシック型のデーモンと同様に、モジュール型のデーモンにもいくつかの systemd ユニットファイルが存在しています:

  • 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 で各種のソケットを有効化すると、 ドライバ名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.3 モジュール型デーモンへの移行 Edit source

モノリシック型のデーモンからモジュール型のデーモンに移行する場合は、いくつかのサービスを調整する必要があります。なお、デーモンを移行する際には、あらかじめ仮想マシンを停止しておくか、別のホストに移行しておくことをお勧めします。

  1. まずはモノリシック型のデーモンとソケットを停止します

    > sudo systemctl stop libvirtd.service
    > sudo systemctl stop libvirtd{,-ro,-admin}.socket
  2. 次回のシステム起動時に開始しないように設定します

    > sudo systemctl disable libvirtd.service
    > sudo systemctl disable libvirtd{,-ro,-admin}.socket
  3. あとは KVM や Xen に対応するデーモンと、その他のセカンダリドライバをそれぞれ有効化します。下記の例では、 KVM 向けの QEMU ドライバと、必要な全てのセカンダリドライバを有効化しています:

    for drv in qemu network nodedev nwfilter secret storage
    do
     > sudo systemctl enable virt${drv}d.service
     > sudo systemctl enable virt${drv}d{,-ro,-admin}.socket
    done
  4. あとは同じセットのデーモンを起動します

    for drv in qemu network nodedev nwfilter secret storage
    do
     > sudo systemctl start virt${drv}d{,-ro,-admin}.socket
    done
  5. リモートからの接続を受け付ける必要がある場合は、 virtproxyd デーモンも有効化して開始しておく必要があります:

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