Menu Close
Settings Close

Language and Page Formatting Options

仮想化の設定および管理

Red Hat Enterprise Linux 9

ホストの設定、仮想マシンの作成および管理、ならびに Red Hat Enterprise Linux 9 の仮想化機能の理解

概要

本書は、Red Hat Enterprise Linux 9 (RHEL 9) で仮想化を管理する方法を説明します。仮想化に関する一般的な情報と、コマンドラインツールユーティリティーおよび Web コンソールを使用して仮想化を管理する方法を説明します。

オープンソースをより包摂的に

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。

Red Hat ドキュメントへのフィードバック

当社のドキュメントに関するご意見やご感想をお寄せください。また、改善点があればお知らせください。

特定の文章に関するコメントの送信

  1. Multi-page HTML 形式でドキュメントを表示し、ページが完全にロードされてから右上隅に Feedback ボタンが表示されていることを確認します。
  2. カーソルを使用して、コメントを追加するテキスト部分を強調表示します。
  3. 強調表示されたテキストの近くに表示される Add Feedback ボタンをクリックします。
  4. フィードバックを追加し、Submit をクリックします。

Bugzilla からのフィードバック送信 (アカウントが必要)

  1. Bugzilla の Web サイトにログインします。
  2. Version メニューから正しいバージョンを選択します。
  3. Summary フィールドにわかりやすいタイトルを入力します。
  4. Description フィールドに、ドキュメントの改善に関するご意見を記入してください。ドキュメントの該当部分へのリンクも追加してください。
  5. Submit Bug をクリックします。

第1章 RHELにおける仮想化について

本章では、仮想化の概念や、Linux における仮想化の実装について参考になるように、RHEL 9 における仮想化の概要、基本な内容、利点、コンポーネントなど、Red Hat が提供する仮想化ソリューションを説明します。

1.1. 仮想化とは

RHEL 9 では 仮想化機能 が提供され、RHEL 9 を実行するマシンが、複数の仮想マシン (VM) (ゲスト とも呼ばれます) を ホスト できるようにします。仮想マシンは、ホストの物理ハードウェアとコンピューティングリソースを使用して、独立した仮想化オペレーティングシステム (ゲスト OS) を、ホストのオペレーティングシステムのユーザー空間プロセスとして実行します

つまり、仮想化により、オペレーティングシステム内にオペレーティングシステムを追加できます。

仮想マシンを使用すると、ソフトウェアの設定や機能を安全にテストしたり、レガシーソフトウェアを実行したり、ハードウェアのワークロードの効率を最適化したりできます。利点の詳細は、Advantages of virtualization を参照してください。

仮想システムの詳細は「仮想化とは」を参照してください。

次のステップ

  • Red Hat Enterprise Linux 9 で仮想化の使用を開始するには、Red Hat Enterprise Linux 9 での 仮想化の有効化 を 参照してください。
  • Red Hat は、Red Hat Enterprise Linux 9 の仮想化以外にも、専門化した仮想化ソリューションを多数提供しています。各ソリューションには、さまざまなユーザーフォーカスおよび機能があります。詳細は、Red Hat virtualization solutions を参照してください。

1.2. 仮想化の利点

仮想マシンの使用には、物理マシンを使用する場合と比較して、以下の利点があります。

  • リソースの柔軟性と詳細な割り当て

    仮想マシンは、通常、物理マシンであるホストマシンで稼働し、使用するゲスト OS に物理ハードウェアを割り当てることもできます。ただし、仮想マシンへの物理リソースの割り当てはソフトウェアレベルで行うため、柔軟性が非常に高くなります。仮想マシンは、ホストメモリー、CPU、またはストレージ領域で設定可能な割合を指定して、非常に詳細なリソース要求を指定できます。

    たとえば、ゲスト OS がディスクとして見るものは、ホストファイルシステムではファイルとして表示され、そのディスクのサイズは、物理ディスクで利用可能なサイズよりも少なくなります。

  • ソフトウェアで制御される設定

    仮想マシン全体の設定は、ホスト上のデータとして保存され、ソフトウェア制御下にあります。したがって、仮想マシンの作成、削除、クローン作成、移行、リモートからの操作、リモートストレージへの接続などを簡単に行うことができます。

  • ホストからの分離

    ゲスト OS は、ホストの OS とは別の仮想化カーネルで実行します。つまり、任意の OS を仮想マシンにインストールでき、ゲスト OS が不安定になっても、または不正アクセスされても、ホストには影響を及ぼしません。

  • 領域とコスト効率

    1 台の物理マシンで仮想マシンを多数ホストできます。したがって、複数の物理マシンが同じタスクを実行する必要がないため、物理ハードウェアに対する領域、電力、およびメンテナンスの要件が低くなります。

  • ソフトウェアの互換性

    仮想マシンは、ホストとは異なる OS を使用できるため、仮想化により、本来はホスト OS 用にリリースされていないアプリケーションを実行できるようになります。たとえば、RHEL 7 のゲスト OS を使用すると、RHEL 7 用にリリースされたアプリケーションを RHEL 9 ホストシステムで実行できます。

    注記

    RHEL 9 ホストでは、すべてのオペレーティングシステムがゲスト OS としてサポートされているわけではありません。詳細は、Recommended features in RHEL 9 virtualization を参照してください。

1.3. 仮想マシンコンポーネントおよびその相互作用

RHEL 9 の仮想化は、以下の主要ソフトウェアコンポーネントで構成されています。

ハイパーバイザー

RHEL 9で仮想マシンを作成する基礎となる部分は、ハードウェアを制御し、ホストマシンで複数のオペレーティングシステムを実行できるようにするソフトウェア層で、ハイパーバイザー と呼ばれます。

ハイパーバイザーには、KVM (Kernel-based Virtual Machine) モジュールと仮想化カーネルドライバーが含まれます。このコンポーネントでは、ホストマシンの Linux カーネルにより、ユーザー空間のソフトウェアに仮想化のリソースが提供されます。

ユーザー空間レベルでは、QEMU エミュレーターが、ゲスト OS を実行できる完全に仮想化されたハードウェアプラットフォームをシミュレートし、リソースがホストでどのように割り当てられ、ゲストに示されるかを管理します。

さらに、libvirt ソフトウェアスイートが管理層および通信層として機能し、QEMU とのやり取りを容易にし、セキュリティルールを適用し、VM を設定して実行するための追加ツールを多数提供します。

XML 設定

ホストベースの XML 設定ファイル (ドメイン XML ファイルとも呼ばれます) では、個別の仮想マシンの設定およびデバイスをすべて決定します。設定には以下が含まれます。

  • メタデータ (仮想マシンの名前、タイムゾーン、その他の仮想マシンの情報など)
  • 仮想マシンのデバイスの説明 (仮想 CPU (vCPU)、ストレージデバイス、入出力デバイス、ネットワークインターフェースカード、その他の物理ハードウェアおよび仮想ハードウェアなど)
  • 仮想マシンの設定 (使用可能な最大メモリー量、再起動設定、仮想マシンの動作に関するその他の設定など)

XML 設定の内容の詳細は、Sample virtual machine XML configuration を参照してください。

コンポーネントのインタラクション

仮想マシンが起動すると、ハイパーバイザーは XML 設定を使用して、ホストのユーザー空間プロセスとして仮想マシンのインスタンスを作成します。ハイパーバイザーは、仮想マシンプロセスが、ホストベースのインターフェース (virsh ユーティリティー、virt-install ユーティリティー、guestfish ユーティリティー、Web コンソールの GUI など) にアクセスできるようにします。

このような仮想化ツールを使用すると、libvirt が、入力を QEMU の命令に変換します。QEMU が命令を KVM に伝え、カーネルが命令を実行するのに必要なリソースを適切に割り当てるようになります。これにより、QEMU が、仮想マシンの作成や修正、仮想マシンのオペレーティングシステムでのアクションの実行など、対応するユーザー空間を変更します。

注記

QEMU はアーキテクチャーの必須コンポーネントですが、セキュリティーに関する懸念があるため、RHEL 9 システムで直接使用することは意図されていません。したがって、Red Hat は、qemu-* コマンドの使用をサポート対象外としており、libvirt を使用して QEMU と相互作用することを強く推奨します。

ホストベースのインターフェイスの詳細は、Tools and interfaces for virtualization management を参照してください。

図1.1 RHEL 9 の仮想アーキテクチャー

仮想アーキテクチャー

1.4. 仮想管理に使用するツールおよびインターフェース

RHEL 9 の仮想化は、コマンドラインインターフェース (CLI) または複数のグラフィカルユーザーインターフェース (GUI) を使用して管理できます。

コマンドラインインターフェース

CLI は、RHEL 9 で仮想化を管理する最も強力な方法です。仮想マシン (VM) 管理用の CLI コマンドでは、以下のものがよく知られています。

  • virsh - 指定した引数に応じて、多種多様な目的を持つ多目的仮想コマンドラインユーティリティーおよびシェル。以下に例を示します。

    • 仮想マシンの起動およびシャットダウン - virsh start および virsh shutdown
    • 利用可能な仮想マシンの一覧表示 - virsh list
    • 設定ファイルからの仮想マシンの作成 - virsh create
    • 仮想化シェルの入力 - virsh

    詳細は、virsh(1) man ページを参照してください。

  • virt-install - 新しい仮想マシンを作成する CLI ユーティリティー。詳細は、virt-install(1) man ページを参照してください。
  • virt-xml - 仮想マシンの設定を編集するユーティリティー。
  • guestfish - 仮想マシンのディスクイメージを調べ、修正するユーティリティー。詳細は、guestfish(1) man ページを参照してください。

グラフィカルユーザーインターフェース

以下の GUI を使用して、RHEL 9 で仮想化を管理できます。

  • RHEL 9 の Web コンソール (Cockpit とも呼ばれています) は、仮想マシンおよび仮想化ホストの管理用に、リモートからアクセスでき、簡単に使用できるグラフィカルユーザーインターフェースを提供します。

    Web コンソールを使用した基本的な仮想化管理の手順については、Managing virtual machines in the web console を参照してください。

1.5. Red Hat の仮想化ソリューション

以下の Red Hat 製品は、RHEL 9 仮想化機能に構築されており、RHEL 9 で利用可能な KVM 仮想化機能を拡張します。また、RHEL 9 仮想化の制限の多くが、このような製品には適用されません。

OpenShift Virtualization

KubeVirt テクノロジーに基づいて、OpenShift Virtualization は Red Hat OpenShift Container Platform の一部であり、仮想マシンをコンテナーで実行することができます。

OpenShift Virtualization の詳細は、Red Hat ハイブリッドクラウド のページを参照してください。

Red Hat OpenStack Platform (RHOSP)

Red Hat OpenStack Platform は、安全で信頼性の高いパブリックまたはプライベートの OpenStack クラウドを作成、デプロイ、および拡張するための統合基盤を提供します。

Red Hat OpenStack Platform の詳細は、Red Hat OpenStack Platform の製品ページ、または Red Hat OpenStack Platform ドキュメントスイート を参照してください。

注記

RHEL ではサポートされていませんが、他の Red Hat 仮想化ソリューションでサポートされている仮想化機能の詳細は、「RHEL 9 仮想化で対応していない機能」を参照してください。

第2章 仮想化を有効にする

RHEL 9 で仮想化を使用するには、仮想化パッケージをインストールして、仮想マシンをホストするようにシステムを設定する必要があります。これを行うための具体的な手順は、CPU アーキテクチャーによって異なります。

2.1. AMD64 および Intel 64 での仮想化の有効化

KVM ハイパーバイザーを設定し、RHEL 9 を実行している AMD64 または Intel 64 システムで仮想マシンを作成するには、以下の手順に従います。

前提条件

  • Red Hat Enterprise Linux 9 が、ホストマシンに インストールされ登録されている
  • システムが仮想ホストとして機能するように、以下のハードウェア要件を満たしている。

    • ホストマシンのアーキテクチャーが KVM 仮想化に対応 している。
    • 最低でも、以下のシステムリソースが利用できる。

      • ホスト用に 6 GB と、各仮想マシン用に 6 GB の空きディスク容量。
      • ホスト用に 2 GB と、各仮想マシン用に 2 GB の RAM。

手順

  1. 仮想化ハイパーバイザーパッケージをインストールします。

    # dnf install qemu-kvm libvirt virt-install virt-viewer
  2. 仮想化サービスを起動します。

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done

検証

  1. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking for device assignment IOMMU support         : PASS
    QEMU: Checking if IOMMU is enabled by kernel               : WARN (IOMMU appears to be disabled in kernel. Add intel_iommu=on to kernel cmdline arguments)
    LXC: Checking for Linux >= 2.6.26                          : PASS
    [...]
    LXC: Checking for cgroup 'blkio' controller mount-point    : PASS
    LXC: Checking if device /sys/fs/fuse/connections exists    : FAIL (Load the 'fuse' module to enable /proc/ overrides)
  2. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成する 準備ができています。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

トラブルシューティング

  • KVM 仮想化がホスト CPU でサポートされていない場合は、virt-host-validate は以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムにある仮想マシンは、パフォーマンス上の問題が発生するのではなく、起動に失敗します。

    これを回避するには、仮想マシンの XML 設定の <domain type> 値を qemu に変更します。ただし、Red Hat は qemu ドメインタイプを使用する仮想マシンに対応していないため、実稼働環境ではこれを設定しないことを強く推奨している点に注意してください。

2.2. IBM Z での仮想化の有効化

KVM ハイパーバイザーを設定し、RHEL 9 を実行している IBM Z システムで仮想マシンを作成するには、以下の手順に従います。

前提条件

  • 最低でも、以下のシステムリソースが利用できる。

    • ホスト用に 6 GB と、各仮想マシン用に 6 GB の空きディスク容量。
    • ホスト用に 2 GB と、各仮想マシン用に 2 GB の RAM。
    • ホスト上の 4 つの CPU通常、仮想マシンは、割り当てられた 1 つの vCPU で実行できますが、Red Hat は、高負荷時に仮想マシンが応答しなくならないように、仮想マシンごとに 2 つ以上の vCPU を割り当てることを推奨します。
  • IBM Z ホストシステムでは、z13 以降の CPU を使用している。
  • RHEL 9 が論理パーティション (LPAR) にインストールされている。また、LPAR が start-interpretive execution (SIE) 仮想機能に対応している。

    これを確認するには、/proc/cpuinfo ファイルで sie を検索します。

    # grep sie /proc/cpuinfo/
    features        : esan3 zarch stfle msa ldisp eimm dfp edat etf3eh highgprs te sie

手順

  1. 仮想化パッケージをインストールします。

    # dnf install qemu-kvm libvirt virt-install
  2. 仮想化サービスを起動します。

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done

検証

  1. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/kvm is accessible             : PASS
    QEMU: Checking if device /dev/vhost-net exists              : PASS
    QEMU: Checking if device /dev/net/tun exists                : PASS
    QEMU: Checking for cgroup 'memory' controller support       : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point   : PASS
    [...]
  2. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成する 準備ができています。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

トラブルシューティング

  • KVM 仮想化がホスト CPU でサポートされていない場合は、virt-host-validate は以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムにある仮想マシンは、パフォーマンス上の問題が発生するのではなく、起動に失敗します。

    これを回避するには、仮想マシンの XML 設定の <domain type> 値を qemu に変更します。ただし、Red Hat は qemu ドメインタイプを使用する仮想マシンに対応していないため、実稼働環境ではこれを設定しないことを強く推奨している点に注意してください。

2.3. ARM 64 での仮想化の有効化

RHEL 9 を実行している ARM 64 システムで仮想マシン (VM) を作成するために KVM ハイパーバイザーをセットアップするには、以下の手順に従ってください。

重要

ARM 64 での仮想化は、RHEL 9 で テクノロジープレビュー としてのみ提供されるため、サポートされていません。

前提条件

  • 最低でも、以下のシステムリソースが利用できる。

    • ホスト用に 6 GB と、各ゲスト用に 6 GB の空きディスク容量
    • ホスト用に 4 GB の RAM と、対象のゲストごとにさらに 4 GB。

手順

  1. 仮想化パッケージをインストールします。

    # dnf install qemu-kvm libvirt virt-install
  2. 仮想化サービスを起動します。

    # for drv in qemu network nodedev nwfilter secret storage interface; do systemctl start virt${drv}d{,-ro,-admin}.socket; done

検証

  1. システムが仮想ホストとして準備されていることを確認します。

    # virt-host-validate
    [...]
    QEMU: Checking if device /dev/vhost-net exists              : PASS
    QEMU: Checking if device /dev/net/tun exists                : PASS
    QEMU: Checking for cgroup 'memory' controller support       : PASS
    QEMU: Checking for cgroup 'memory' controller mount-point   : PASS
    [...]
    QEMU: Checking for cgroup 'blkio' controller support        : PASS
    QEMU: Checking for cgroup 'blkio' controller mount-point    : PASS
    QEMU: Checking if IOMMU is enabled by kernel                : WARN (Unknown if this platform has IOMMU support)
  2. virt-host-validate のすべての項目で PASS 値が返された場合は、システムに 仮想マシンを作成 できます。

    いずれかの項目で FAIL が返された場合は、表示される指示に従って問題を解決してください。

    いずれかの項目で WARN が返された場合は、表示される指示に従って仮想化機能を向上させることを検討してください。

トラブルシューティング

  • KVM 仮想化がホスト CPU でサポートされていない場合は、virt-host-validate は以下の出力を生成します。

    QEMU: Checking for hardware virtualization: FAIL (Only emulated CPUs are available, performance will be significantly limited)

    ただし、このようなホストシステムにある仮想マシンは、パフォーマンス上の問題が発生するのではなく、起動に失敗します。

    これを回避するには、仮想マシンの XML 設定の <domain type> 値を qemu に変更します。ただし、Red Hat は qemu ドメインタイプを使用する仮想マシンに対応していないため、実稼働環境ではこれを設定しないことを強く推奨している点に注意してください。

次のステップ

第3章 仮想マシンの作成

RHEL 9 で仮想マシンを作成する場合は、コマンドラインインターフェース または RHEL 9 Web コンソール を使用します。

前提条件

  • 仮想化がシステムに インストールされ有効になっている
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがある。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。

    警告

    RHEL 9 では、ホストの CD-ROM デバイスまたは DVD-ROM デバイスからインストールすることができません。RHEL 9 で利用可能な仮想マシンのインストール方法を使用する際に、インストールソースに CD-ROM または DVD-ROM を選択するとインストールに失敗します。詳細は Red Hat ナレッジベースの記事 を参照してください。

3.1. コマンドラインインターフェースを使用した仮想マシンの作成

virt-install ユーティリティーを使用して、RHEL 9 ホストで仮想マシンを作成するには、以下の手順に従ってください。

前提条件

  • ホストシステムで仮想化が 有効 になっている。
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがある。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。
  • オペレーティングシステム (OS) のインストールソースがローカルまたはネットワークで利用できる。これには、次のいずれかを使用できます。

    • インストールメディアの ISO イメージ
    • 既存の仮想マシンインストールのディスクイメージ

      警告

      RHEL 9 では、ホストの CD-ROM デバイスまたは DVD-ROM デバイスからインストールすることができません。RHEL 9 で利用可能な仮想マシンのインストール方法を使用する際に、インストールソースに CD-ROM または DVD-ROM を選択するとインストールに失敗します。詳細は Red Hat ナレッジベースの記事 を参照してください。

  • オプション:インストールをより速く、簡単に設定するために、キックスタートファイルを利用できます。

手順

仮想マシンを作成して OS のインストールを開始するには、以下の必須引数を指定して、virt-install コマンドを使用します。

  • 新しいマシンの名前(--name)
  • 割り当てるメモリーの量(--memory)
  • 割り当てる仮想 CPU (vCPU) の数(--vcpus)
  • 割り当てるストレージのタイプおよびサイズ(--disk)
  • OS インストールソースのタイプおよび場所(--cdrom または --location)

選択したインストール方法に応じて、必要なオプションと値が異なります。例については、以下を参照してください。

  • 次のコマンドでは、demo-guest1 という名前の仮想マシンを作成し、ローカルの /home/username/Downloads/Win10install.iso ファイルに保存されている ISO イメージから、Windows 10 OS をインストールします。この仮想マシンには、2048 MiB の RAM と 2 つの vCPU が割り当てられ、80 GiB の qcow2 仮想ディスクも自動的に割り当てられます。

    # virt-install --name demo-guest1 --memory 2048 --vcpus 2 --disk size=80 --os-variant win10 --cdrom /home/username/Downloads/Win10install.iso
  • 次のコマンドは、demo-guest2 という名前の仮想マシンを作成し、/home/username/Downloads/rhel9.iso イメージを使用して、ライブ CD から RHEL 9 OS を実行します。この仮想マシンにはディスク領域が割り当てられないため、セッション中に行った変更は保持されません。また、仮想マシンには、4096 MiB の RAM と、4 つの vCPU が割り当てられます。

    # virt-install --name demo-guest2 --memory 4096 --vcpus 4 --disk none --livecd --os-variant rhel9.0 --cdrom /home/username/Downloads/rhel9.iso
  • 次のコマンドは、既存のディスクイメージ /home/username/backup/disk.qcow2 に接続する demo-guest3 という名前の RHEL 9 仮想マシンを作成します。これは、マシン間でハードドライブを物理的に移動するのと似ています。したがって、demo-guest3 で使用できる OS およびデータは、イメージが処理された方法により決定します。また、仮想マシンには、2048 MiB の RAM および 2 つの vCPU が割り当てられます。

    # virt-install --name demo-guest3 --memory 2048 --vcpus 2 --os-variant rhel9.0 --import --disk /home/username/backup/disk.qcow2

    ディスクイメージをインポートする場合は、--os-variant オプションを使用することが強く推奨されます。このオプションを指定しないと、作成された仮想マシンのパフォーマンスに影響を及ぼします。

  • 次のコマンドは、demo-guest4 という名前の仮想マシンを作成し、URL http://example.com/OS-install からインストールします。インストールを開始するには、作業中の OS インストールツリーを URL に指定する必要があります。さらに、OS は、キックスタートファイル /home/username/ks.cfg で自動的に設定されます。この仮想マシンには、2048 MiB の RAM、2 つの vCPU、および 160 GiB の qcow2 仮想ディスクも割り当てられます。

    # virt-install --name demo-guest4 --memory 2048 --vcpus 2 --disk size=160 --os-variant rhel9.0 --location http://example.com/OS-install --initrd-inject /home/username/ks.cfg --extra-args="inst.ks=file:/ks.cfg console=tty0 console=ttyS0,115200n8"
  • 次のコマンドは、demo-guest5 という名前の仮想マシンを作成し、グラフィックスがない、テキストのみのモードである RHEL9.iso イメージファイルからインストールします。ゲストコンソールをシリアルコンソールに接続します。仮想マシンには、16384 MiB のメモリー、16 個の vCPU、および 280 GiB のディスクが割り当てられます。このようなインストールは、低速なネットワークリンクを介してホストに接続する際に便利です。

    # virt-install --name demo-guest5 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel9.0 --location RHEL9.iso --graphics none --extra-args='console=ttyS0'
  • 次のコマンドは、demo-guest6 という名前の仮想マシンを作成します。この仮想マシンの設定は demo-guest5 と同じですが、リモートホスト 10.0.0.1 に置かれます。

    # virt-install --connect qemu+ssh://root@10.0.0.1/system --name demo-guest6 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel9.0 --location RHEL9.iso --graphics none --extra-args='console=ttyS0'
  • 以下は、demo-guest5 と同じ設定を持つ demo-guest-7 という名前の仮想マシンを作成しますが、そのストレージで DASD 仲介デバイス mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8 を使用し、デバイス番号を 1111 に割り当てます。

    # virt-install --name demo-guest7 --memory 16384 --vcpus 16 --disk size=280 --os-variant rhel9.0 --location RHEL9.iso --graphics none --disk none --hostdev mdev_30820a6f_b1a5_4503_91ca_0c10ba12345a_0_0_29a8,address.type=ccw,address.cssid=0xfe,address.ssid=0x0,address.devno=0x1111,boot-order=1 --extra-args 'rd.dasd=0.0.1111'

    インストールに利用可能な仲介デバイスの名前は、virsh nodedev-list --cap mdev コマンドを使用して取得できることに注意してください。

検証

  • 仮想マシンが問題なく作成されると、仮想マシンのグラフィカルコンソールで virt-viewer 画面が開き、ゲスト OS のインストールが開始します。

トラブルシューティング

  • virt-installcannot find default network エラーを出力する場合は、以下のようにします。

    1. libvirt-daemon-config-network パッケージがインストールされていることを確認します。

      # dnf info libvirt-daemon-config-network
      Installed Packages
      Name         : libvirt-daemon-config-network
      [...]
    2. libvirt のデフォルトネットワークがアクティブで、自動的に起動するように設定されていることを確認します。

      # virsh net-list --all
       Name      State    Autostart   Persistent
      --------------------------------------------
       default   active   yes         yes
    3. そうでない場合は、デフォルトのネットワークをアクティブにし、自動起動に設定します。

      # virsh net-autostart default
      Network default marked as autostarted
      
      # virsh net-start default
      Network default started
      1. デフォルトのネットワークをアクティベートしても以下のエラーが出て失敗する場合は、libvirt-daemon-config-network パッケージが正常にインストールされていません。

        error: failed to get network 'default'
        error: Network not found: no network with matching name 'default'

        この問題を修正するには、libvirt-daemon-config-network を再インストールします。

        # dnf reinstall libvirt-daemon-config-network
      2. 以下のようなエラーでデフォルトのネットワークをアクティベートできない場合には、デフォルトネットワークのサブネットとホストの既存インターフェースで競合が発生しています。

        error: Failed to start network default
        error: internal error: Network is already in use by interface ens2

        これを修正するには、virsh net-edit default コマンドを使用して、設定の 192.168.122.* の値を、ホストで使用していないサブネットに変更します。

関連情報

  • man virt-install コマンド

3.2. Web コンソールを使用した仮想マシンの作成、およびゲストのオペレーティングシステムのインストール

RHEL 9 ホストの GUI で仮想マシンを管理するには、Web コンソールを使用します。次のセクションでは、RHEL 9 Web コンソールを使用して仮想マシンを作成し、仮想マシンにゲストオペレーティングシステムをインストールする方法を説明します。

3.2.1. Web コンソールで仮想マシンの作成

Web コンソールが接続しているホストマシンに仮想マシンを作成する場合は、以下の手順を行います。

前提条件

  • ホストシステムで仮想化が 有効 になっている。
  • Web コンソールの VM プラグインが システムにインストールされている
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがある。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。

手順

  1. Web コンソールの 仮想マシン インターフェースで、仮想マシンの作成 をクリックします。

    「仮想マシンの新規作成」ダイアログが表示されます。

    「仮想マシンの新規作成」ダイアログボックスを表示しているイメージ
  2. 作成する仮想マシンの基本設定を入力します。

    • 名前 - 仮想マシンの名前
    • 接続 - libvirt 接続、システム、またはセッションの種類。詳しくは、System and session connections を参照してください。
    • インストールタイプ - インストールでは、ローカルのインストールメディア、URL、PXE ネットワークブート、クラウドベースイメージを使用したり、または限定されたオペレーティングシステムのセットから OS をダウンロードしたりできます。
    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、限られたゲストオペレーティングシステムのセット のみです。
    • ストレージ - 仮想マシンを設定するストレージの種類
    • サイズ - 仮想マシンを設定するストレージ容量
    • メモリー - 仮想マシンを設定するメモリーのサイズ
    • 無人インストールの実行 - 無人インストールを実行するかどうかこの項目は、インストールの種類OS のダウンロード の場合にのみ使用できます。
    • 仮想マシンをすぐに起動 - 仮想マシンの作成直後にそのマシンを開始するかどうか
  3. 作成 をクリックします。

    仮想マシンが作成されます。仮想マシンをすぐに起動 チェックボックスが選択されていると、仮想マシンがすぐに起動し、ゲスト OS のインストールを開始します。

3.2.2. Web コンソールでディスクイメージをインポートして仮想マシンを作成する手順

既存の仮想マシンインストールのディスクイメージをインポートして仮想マシンを作成するには、以下の手順に従います。

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがある。推奨値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。
  • 既存の仮想マシンインストールのディスクイメージがある。

手順

  1. Web コンソールの Virtual Machines インターフェースで、仮想マシンのインポート をクリックします。

    「仮想マシンのインポート」ダイアログが表示されます。

    「仮想マシンのインポート」ダイアログボックスを表示しているイメージ
  2. 作成する仮想マシンの基本設定を入力します。

    • 名前 - 仮想マシンの名前
    • 接続 - libvirt 接続、システム、またはセッションの種類。詳しくは、System and session connections を参照してください。
    • ディスクイメージ - ホストシステム上の仮想マシンに存在するディスクイメージのパスです。
    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、限られたゲストオペレーティングシステムのセット のみです。
    • メモリー - 仮想マシンを設定するメモリーのサイズ
    • 仮想マシンをすぐに起動 - 仮想マシンの作成直後にそのマシンを開始するかどうか。
  3. Import をクリックします。

3.2.3. Web コンソールでゲストオペレーティングシステムのインストール

仮想マシンを最初に読み込む際に、仮想マシンにオペレーティングシステムをインストールする必要があります。

注記

仮想マシンの新規作成ダイアログの 仮想マシンをすぐに起動 チェックボックスにチェックマークを入れると、仮想マシンの作成時にオペレーティングシステムのインストールルーチンが自動的に起動します。

前提条件

手順

  1. 仮想マシン インターフェースで、ゲスト OS をインストールする仮想マシンを選択します。

    選択した仮想マシンの基本情報を含む新しいページが開き、仮想マシンのさまざまな側面を管理するための制御を行います。

    仮想マシンの詳細情報を表示するページ
  2. オプション:ファームウェアを変更します。

    注記

    Create New Virtual Machine ダイアログの Immediately Start VM チェックボックスを選択しておらず、OS が仮想マシンにインストールされていない場合にのみファームウェアを変更できます。

    1. ファームウェアをクリックします。
    2. 「ファームウェアの変更ウィンドウ」で、目的のファームウェアを選択します。
    3. 保存 をクリックします。
  3. インストール をクリックします。

    仮想マシンコンソールで、オペレーティングシステムのインストールルーチンが実行します。

トラブルシューティング

  • インストールルーチンが失敗した場合は、仮想マシンを削除し、再作成する必要があります。

3.2.4. Web コンソールを使用したクラウドイメージ認証による仮想マシンの作成

デフォルトでは、ディストリビューションクラウドイメージにはログインアカウントがありません。ただし、RHEL Web コンソールを使用して、仮想マシン (VM) を作成し、root アカウントとユーザーアカウントのログイン認証情報を指定して、cloud-init に渡すことができるようになりました。

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • ホストシステムで仮想化が 有効 になっている。
  • ディスク領域、RAM、CPU など、仮想マシンに割り当てるのに十分なシステムリソースがある。推奨される値は、仮想マシンで行うタスクやワークロードにより大きく異なる可能性があります。

手順

  1. Web コンソールの 仮想マシン インターフェースで、仮想マシンの作成 をクリックします。

    「仮想マシンの新規作成」ダイアログが表示されます。

    「仮想マシンの新規作成」ダイアログボックスを表示しているイメージ
  2. 名前 フィールドに、仮想マシンの名前を入力します。
  3. インストールのタイプ フィールドで、クラウドベースイメージ を選択します。

    Create new virtual machine using cloud-init ダイアログボックスを表示するイメージ。
  4. インストールソース フィールドで、ホストシステム上のイメージファイルへのパスを設定します。
  5. 作成する VM の設定を入力します。

    • オペレーティングシステム - 仮想マシンのオペレーティングシステム。Red Hat がサポートするのは、限られたゲストオペレーティングシステムのセット のみです。
    • ストレージ - 仮想マシンを設定するストレージの種類
    • サイズ - 仮想マシンを設定するストレージ容量
    • メモリー - 仮想マシンを設定するメモリーのサイズ
  6. クラウド初期化パラメーターの設定 を選択します。

    クラウド認証の認証情報を設定します。

    • root パスワード - 仮想マシンの root パスワードを入力します。root パスワードを設定しない場合は、フィールドを空白のままにします。
    • ユーザーログイン - cloud-init ユーザーログインを入力します。
    • ユーザーパスワード - パスワードを入力します。パスワードを設定しない場合は、このフィールドを空白のままにします。
  7. 作成 をクリックします。

    仮想マシンが作成されます。

第4章 仮想マシンの起動

RHEL 9 で仮想マシンを起動する場合は、コマンドインターフェース または Web コンソール GUI を使用できます。

前提条件

  • 仮想マシンを起動する前に仮想マシンを作成しておく。理想としては、OS をインストールしておく。手順は、Creating virtual machines を参照してください。

4.1. コマンドラインインターフェースでの仮想マシンの起動

コマンドラインインターフェース (CLI) を使用して、シャットダウンした仮想マシン (VM) を起動するか、保存した仮想マシンを復元します。CLI を使用すると、ローカル VM とリモート VM の両方を起動できます。

前提条件

  • 既に定義されている非アクティブな仮想マシン
  • 仮想マシンの名前
  • リモート仮想マシンの場合は、以下も設定されている。

    • 仮想マシンが置かれているホストの IP アドレス
    • ホストへの root アクセス権限

手順

  • ローカルの仮想マシンには、virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは仮想マシン demo-guest1 を起動します。

    # virsh start demo-guest1
    Domain 'demo-guest1' started
  • リモートホストにある仮想マシンでは、ホストへの QEMU+SSH 接続と共に virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは、ホスト 192.168.123.123 にある仮想マシン demo-guest1 を起動します。

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    
    Domain 'demo-guest1' started

4.2. Web コンソールを使用した仮想マシンの起動

仮想マシンが 停止 状態にある場合は、RHEL 9 Web コンソールを使用して起動できます。ホストの起動時に、仮想マシンが自動的に起動するように設定することもできます。

前提条件

手順

  1. 仮想マシン インターフェースで、起動する仮想マシンをクリックします。

    選択した仮想マシンの詳細情報を含む新しいページが開き、仮想マシンのシャットダウンおよび削除を制御できます。

  2. Run をクリックします。

    仮想マシンが起動し、そのコンソールまたはグラフィカル出力に接続 できます。

  3. オプション:ホストの起動時に仮想マシンが自動的に起動するように設定するには、Autostart のチェックボックスをクリックします。

    libvirt が管理していないネットワークインターフェースを使用する場合は、systemd 設定も変更する必要があります。そうしないと、影響を受ける仮想マシンが起動できなくなる可能性があります。starting virtual machines automatically when the host starts を参照してください。

4.3. ホストの起動時に仮想マシンを自動的に起動する

実行中の仮想マシン (VM) のホストが再起動すると、仮想マシンはシャットダウンされるため、デフォルトで手動で再起動する必要があります。ホストの実行中に仮想マシンがアクティブであることを確認するには、仮想マシンが自動的に起動するように設定できます。

手順

  1. virsh autostart ユーティリティを使用して、ホストの起動時に仮想マシンが自動的に起動するように設定します。

    たとえば、次のコマンドは、demo-guest1 仮想マシンを自動的に起動するように設定します。

    # virsh autostart demo-guest1
    Domain 'demo-guest1' marked as autostarted
  2. libvirt が管理していないネットワークインターフェイスを使用する場合は、systemd 設定にも追加の変更を行う必要があります。これを行わないと、影響を受ける仮想マシンの起動に失敗する可能性があります。

    注記

    このようなインターフェースには、以下の例が含まれます。

    • NetworkManager が作成したブリッジデバイス
    • <forward mode='bridge'/> を使用するように設定されたネットワーク
    1. systemd 設定ディレクトリーツリーに、virtqemud.service.d ディレクトリーが存在しない場合は作成します。

      # mkdir -p /etc/systemd/system/virtqemud.service.d/
    2. 以前に作成したディレクトリーに、10-network-online.conf systemd ユニットオーバーライドファイルを作成します。このファイルのコンテンツは、virtqemud サービスのデフォルトの systemd 設定を上書きします。

      # touch /etc/systemd/system/virtqemud.service.d/10-network-online.conf
    3. 10-network-online.conf ファイルに以下の行を追加します。この設定変更により、ホストのネットワークの準備ができてから、systemd が virtqemud サービスを起動するようになります。

      [Unit]
      After=network-online.target

検証

  1. 仮想マシンの設定を表示し、自動開始 オプションが有効になっていることを確認します。

    たとえば、次のコマンドは、自動開始 オプションなど、demo-guest1 仮想マシンの基本情報を表示します。

    # virsh dominfo demo-guest1
    Id:             2
    Name:           demo-guest1
    UUID:           e46bc81c-74e2-406e-bd7a-67042bae80d1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       385.9s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      enable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c873,c919 (enforcing)
  2. libvirt が管理していないネットワークインターフェースを使用する場合は、10-network-online.conf ファイルの内容が次の出力と一致するかどうかを確認してください。

    $ cat /etc/systemd/system/virtqemud.service.d/10-network-online.conf
    [Unit]
    After=network-online.target

関連情報

第5章 仮想マシンへの接続

RHEL 9 で仮想マシンと相互作用するには、以下のいずれかの方法で接続する必要があります。

  • Web コンソールインターフェースを使用する場合は、Web コンソールインターフェースの仮想マシンペインを使用します。詳細は、Interacting with virtual machines using the web console を参照してください。
  • Web コンソールを使用せずに、仮想マシンのグラフィカル表示と相互作用する必要がある場合は、Virt Viewer アプリケーションを使用します。詳細は、Opening a virtual machine graphical console using Virt Viewer を参照してください。
  • グラフィック表示ができない、または必要ない場合は、SSH の端末接続 を使用します。
  • ネットワークを使用してシステムから仮想マシンに到達できない場合は、virsh コンソール を使用します。

接続先の仮想マシンがローカルホストではなくリモートホストにある場合は、リモートホストにより便利にアクセスできるように、システムを設定することもできます。

前提条件

5.1. Web コンソールを使用した仮想マシンとの対話

RHEL 9 Web コンソールで仮想マシンと相互作用するには、仮想マシンのコンソールに接続する必要があります。グラフィカルコンソールおよびシリアルコンソールの両方が含まれます。

5.1.1. Web コンソールで仮想マシンのグラフィカルコンソールの表示

仮想マシンのコンソールインターフェースを使用すると、RHEL 9 Web コンソールに、選択した仮想マシンのグラフィカル出力を表示できます。

前提条件

手順

  1. Virtual Machines インターフェースで、グラフィカルコンソールを表示する仮想マシンをクリックします。

    仮想マシンの概要コンソールセクションがある新しいページが開きます。

  2. コンソールドロップダウンメニューで VNC コンソール を選択します。

    Web インターフェースのメニューの下に VNC コンソールが表示されます。

    グラフィカルコンソールが Web インターフェースに表示されます。

    選択した仮想マシンのインターフェースを表示するイメージ。
  3. Expand をクリックします。

    実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できるようになりました。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

注記

Web コンソールを実行しているホストで、特定の鍵の組み合わせ (Ctrl+Alt+Del など) を傍受して、仮想マシンに送信しないようにできます。

このようなキーの組み合わせを送信する場合は、キーの送信 メニューをクリックして、送信するキーシーケンスを選択します。

たとえば、仮想マシンに Ctrl+Alt+Del の組み合わせを送信するには、キーの送信 メニューをクリックして、Ctrl+Alt+F1 メニューエントリーを選択します。

トラブルシューティング

  • グラフィカルコンソールをクリックしても効果がない場合は、コンソールを全画面表示にします。これは、マウスカーソルオフセットの既知の問題です。

5.1.2. Web コンソールを使用して、リモートビューアーでグラフィカルコンソールを表示

Webコンソールインターフェースを使用して、選択した仮想マシン(VM)のグラフィカルコンソールをVirt Viewerなどのリモートビューアに表示することができます。

注記

Web コンソールから Virt Viewer を起動できます。他の VNC リモートビューアーは手動で起動できます。

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • ホストおよび仮想マシンの両方が、グラフィカルインターフェースに対応している。
  • Virt Viewer でグラフィカルコンソールを表示する前に、Web コンソールが接続しているマシンに Virt Viewer をインストールする必要があります。

    1. リモートビューアーの起動 をクリックします。

      .vv ファイルがダウンロードされます。

    2. ファイルを開き、Virt Viewer を起動します。
注記

リモートビューアーは、ほとんどのオペレーティングシステムで使用できます。ブラウザーの拡張機能やプラグインによっては、Web コンソールで Virt Viewer を開けないことがあります。

手順

  1. Virtual Machines インターフェースで、グラフィカルコンソールを表示する仮想マシンをクリックします。

    仮想マシンの概要コンソールセクションがある新しいページが開きます。

  2. コンソールドロップダウンメニューで デスクトップビューアー を選択します。

    仮想マシンインターフェースの「コンソール」セクションを他のVMの詳細とともに表示するページ。
  3. リモートビューアーの起動 をクリックします。

    Virt Viewer でグラフィカルコンソールが開きます。

    RHEL 9 ゲスト OS のデスクトップを表示する Virt Viewer ウィンドウ

    実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できます。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

注記

Web コンソールを実行しているサーバーで、特定の鍵の組み合わせ (Ctrl+Alt+Del など) を傍受して、仮想マシンに送信しないようにできます。

このようなキーの組み合わせを送信する場合は、キーの送信 メニューをクリックして、送信するキーシーケンスを選択します。

たとえば、仮想マシンに Ctrl+Alt+F1 の組み合わせを送信するには、キーの送信 メニューをクリックして、Ctrl+Alt+F1 メニューエントリーを選択します。

トラブルシューティング

  • グラフィカルコンソールをクリックしても効果がない場合は、コンソールを全画面表示にします。これは、マウスカーソルオフセットの既知の問題です。
  • Web コンソールでリモートビューアーを起動できない場合、または最適ではない場合は、以下のプロトコルを使用して、任意のビューアーアプリケーションに手動で接続できます。

    • アドレス - デフォルトのアドレスーは 127.0.0.1 です。/etc/libvirt/qemu.confvnc_listen パラメーターを変更して、ホストの IP アドレスに変更できます。
    • VNC ポート - 5901

5.1.3. Web コンソールで仮想マシンのシリアルコンソールの表示

RHEL 9 Web コンソールで、選択した仮想マシンのシリアルコンソールを表示できます。これは、グラフィカルインターフェースでホストマシンまたは仮想マシンを設定していない場合に便利です。

シリアルコンソールの詳細は、Opening a virtual machine serial console を参照してください。

前提条件

手順

  1. 仮想マシンペインで、シリアルコンソールを表示する仮想マシンをクリックします。

    仮想マシンの概要コンソールセクションがある新しいページが開きます。

  2. コンソールドロップダウンメニューで シリアルコンソール を選択します。

    グラフィカルコンソールが Web インターフェースに表示されます。

    仮想マシンのシリアルコンソールおよびその他の仮想マシンの詳細を表示するページ。

仮想マシンからシリアルコンソールへの接続を切断して、再接続できます。

  • 仮想マシンからシリアルコンソールへの接続を切断するには、切断 をクリックします。
  • シリアルコンソールを仮想マシンに再接続するには、再接続 をクリックします。

5.2. Virt Viewer で仮想マシンのグラフィカルコンソールを開く

KVM 仮想マシンのグラフィカルコンソールに接続して、Virt Viewer デスクトップアプリケーションで開く場合は、以下の手順を行います。

前提条件

  • システム、および接続している仮想マシンが、グラフィカルディスプレイに対応している。
  • ターゲットの仮想マシンがリモートホストにある場合は、そのホストへの接続およびルートアクセス権限が確保されている。
  • オプション:ターゲットの仮想マシンがリモートホストにある場合は、リモートホストにアクセスしやすくなる ように libvirt と SSH を設定している。

手順

  • ローカルの仮想マシンに接続するには、次のコマンドを使用して、guest-name を、接続する仮想マシンの名前に置き換えます。

    # virt-viewer guest-name
  • リモートの仮想マシンに接続するには、SSH プロトコルで virt-viewer コマンドを実行します。たとえば、次のコマンドは、root 権限で、リモートシステム 10.0.0.1 にある guest-name という名前の仮想マシンに接続します。接続には、10.0.0.1 用の root 認証も必要になります。

    # virt-viewer --direct --connect qemu+ssh://root@10.0.0.1/system guest-name
    root@10.0.0.1's password:

検証

接続が正しく機能している場合は、Virt Viewer 画面に仮想マシンのディスプレイが表示されます。

RHEL 9 ゲスト OS を表示する Virt Viewer

実際のマシンの場合と同じように、マウスとキーボードを使用して仮想マシンのコンソールと相互作用できます。仮想マシンコンソールには、仮想マシンで実行しているアクティビティーが表示されます。

トラブルシューティング

  • グラフィカルコンソールをクリックしても効果がない場合は、コンソールを全画面表示にします。これは、マウスカーソルオフセットの既知の問題です。

5.3. SSH を使用した仮想マシンへの接続

SSH 接続プロトコルを使用して仮想マシン (VM) の端末と対話するには、以下の手順に従います。

前提条件

  • ターゲットの仮想マシンへのネットワーク接続および root アクセス権がある。
  • ターゲットの仮想マシンがリモートホストにある場合は、そのホストへの接続およびルートのアクセス権限もある。
  • 仮想マシンネットワークは、libvirt が生成した dnsmasq により IP アドレスを割り当てます。これは、たとえば、libvirt NAT ネットワーク などに該当します。

    特に、VM が次のネットワーク設定のいずれかを使用している場合、SSH を使用して VM に接続することはできません。

    • hostdev インターフェイス
    • ダイレクトインターフェイス
    • ブリッジインターフェイス
  • libvirt-nss コンポーネントを仮想マシンのホストにインストールして有効にしている。そうでない場合は、以下を行います。

    1. libvirt-nss パッケージをインストールします。

      # dnf install libvirt-nss
    2. /etc/nsswitch.conf ファイルを編集し、libvirt_guesthosts 行に追加します。

      [...]
      passwd:      compat
      shadow:      compat
      group:       compat
      hosts:       files libvirt_guest dns
      [...]

手順

  1. リモート仮想マシンに接続する場合は、最初に SSH でその物理ホストに接続します。以下の例は、root 認証情報を使用してホストマシン 10.0.0.1 に接続する方法を示しています。

    # ssh root@10.0.0.1
    root@10.0.0.1's password:
    Last login: Mon Sep 24 12:05:36 2021
    root~#
  2. 仮想マシンの名前とユーザーアクセスの認証情報を使用して、仮想マシンに接続します。たとえば、以下は、root 認証情報を使用して、仮想マシン testguest1 に接続します。

    # ssh root@testguest1
    root@testguest1's password:
    Last login: Wed Sep 12 12:05:36 2018
    root~]#

トラブルシューティング

  • 仮想マシンの名前が分からない場合は、virsh list --all コマンドを使用すると、ホストで利用可能な仮想マシンの一覧を表示できます。

    # virsh list --all
    Id    Name                           State
    ----------------------------------------------------
    2     testguest1                    running
    -     testguest2                    shut off

5.4. 仮想マシンのシリアルコンソールを開く

virsh console コマンドを使用すると、仮想マシン (VM) のシリアルコンソールに接続できます。

これは、仮想マシンが次のような場合に役に立ちます。

  • VNC プロトコルは提供されないため、GUI ツールのビデオ表示には対応していません。
  • ネットワークに接続されていないため、SSH を使用して 相互作用できない

前提条件

  • 仮想マシンには、console type='pty' などのシリアルコンソールデバイスが設定されている必要がある。確認するには、以下の手順を実施します。

    # *virsh dumpxml vm-name | grep console
    
    <console type='pty' tty='/dev/pts/2'>
    </console>
  • 仮想マシンに、カーネルコマンドラインでシリアルコンソールが設定されている。これを確認するには、仮想マシンの cat /proc/cmdline コマンドの出力に console=ttyS0 が含まれていることを確認します。以下に例を示します。

    # cat /proc/cmdline
    BOOT_IMAGE=/vmlinuz-3.10.0-948.el7.x86_64 root=/dev/mapper/rhel-root ro console=tty0 console=ttyS0,9600n8 rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap rhgb

    シリアルコンソールが仮想マシンに正しく設定されていない場合は、virsh コンソール を仮想マシンに接続すると、応答のないゲストコンソールに接続できます。ただし、Ctrl+] ショートカットを使用すると、応答しないコンソールを終了できます。

    • 仮想マシンでシリアルコンソールを設定するには、以下を行います。

      1. 仮想マシンで /etc/default/grub ファイルを編集し、console=ttyS0 を、GRUB_CMDLINE_LINUX で開始する行に追加します。
      2. 変更を反映させない可能性があるカーネルオプションを削除します。

        # grub2-editenv - unset kernelopts
      3. Grub 設定を再読み込みします。

        # grub2-mkconfig -o /boot/grub2/grub.cfg
        Generating grub configuration file ...
        Found linux image: /boot/vmlinuz-3.10.0-948.el7.x86_64
        Found initrd image: /boot/initramfs-3.10.0-948.el7.x86_64.img
        [...]
        done
      4. 仮想マシンを再起動します。

手順

  1. ホストシステムで、virsh console コマンドを使用します。次の例では、libvirt ドライバーが安全なコンソール処理に対応していると、仮想マシン guest1 に接続します。

    # virsh console guest1 --safe
    Connected to domain 'guest1'
    Escape character is ^]
    
    Subscription-name
    Kernel 3.10.0-948.el7.x86_64 on an x86_64
    
    localhost login:
  2. virsh コンソールは、標準のコマンドラインインターフェースと同じ方法で相互作用できます。

関連情報

  • virsh の man ページ

5.5. リモートの仮想化ホストへの簡単なアクセスの設定

libvirt ユーティリティを使用してリモートホストシステムの仮想マシンを管理する場合は、-c qemu+ssh://root@hostname/system 構文を使用することが推奨されます。たとえば、ホスト 10.0.0.1 で、root で virsh list コマンドを実行します。

# virsh -c qemu+ssh://root@10.0.0.1/system list

root@10.0.0.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running

ただし、便宜上、SSH および libvirt の設定を変更すれば、接続の詳細を完全に指定する必要がなくなります。たとえば、以下を行うことができます。

# virsh -c remote-host list

root@10.0.0.1's password:

Id   Name              State
---------------------------------
1    remote-guest      running

この改善を有効にするには、以下の手順を行います。

手順

  1. ~/.ssh/config ファイルを編集または作成し、以下をこれに追加します。ここで、host-alias は、特定のリモートホストに関連付けられる短縮名で、hosturl はホストの URL アドレスです。

    Host host-alias
            User                    root
            Hostname                hosturl

    たとえば、次の例は、root@10.0.0.1 に tyrannosaurus エイリアスを設定します。

    Host tyrannosaurus
            User                    root
            Hostname                10.0.0.1
  2. /etc/libvirt/libvirt.conf ファイルを編集するか作成し、以下を追加します。qemu-host-alias は、QEMU ユーティリティーおよび libvirt ユーティリティーが目的のホストに関連付けるホストのエイリアスです。

    uri_aliases = [
      "qemu-host-alias=qemu+ssh://host-alias/system",
    ]

    たとえば、次の例では、1 つ前の手順で設定した tyrannosaurus エイリアスを使用して、t-rex エイリアスを設定します。これは、qemu+ssh://10.0.0.1/system を表します。

    uri_aliases = [
      "t-rex=qemu+ssh://tyrannosaurus/system",
    ]

検証

  1. ローカルシステムで libvirt ベースのユーティリティーを使用し、-c qemu-host-alias パラメーターを追加することで、リモートの仮想マシンを管理できることを確認します。これにより、リモートホストの SSH でコマンドが自動的に実行されます。

    たとえば、以下が、10.0.0.1 リモートホスト (このホストへの接続は、上の手順で t-rex として設定) の仮想マシンを一覧表示していることを確認します。

    $ virsh -c t-rex list
    
    root@10.0.0.1's password:
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running
    注記

    virsh の他に、-c (または --connect) オプションと、上記のリモートホストアクセス設定は、以下のユーティリティーで使用できます。

次のステップ

  • libvirt ユーティリティーを、1 台のリモートホストで排他的に使用する場合は、libvirt ベースのユーティリティーのデフォルトターゲットとして特定の接続を設定することもできます。これを行うには、/etc/libvirt/libvirt.conf ファイルを編集して、uri_default パラメーターの値を qemu-host-alias に設定します。たとえば、次の例では、上の手順でデフォルトの libvirt ターゲットとして設定した t-rex ホストのエイリアスを使用します。

    # These can be used in cases when no URI is supplied by the application
    # (@uri_default also prevents probing of the hypervisor driver).
    #
    uri_default = "t-rex"

    これにより、指定したリモートホストで、libvirt ベースのコマンドがすべて自動的に実行されます。

    $ virsh list
    root@10.0.0.1's password:
    
    Id   Name              State
    ---------------------------------
    1    velociraptor      running

    ただし、ローカルホストまたは別のリモートホストでも仮想マシンを管理する場合、この方法は推奨されません。

  • リモートホストに接続する場合は、リモートシステムに root パスワードを指定しないように設定することもできます。そのためには、以下の方法を 1 つ以上行います。

  • -c (または --connect) オプションを使用して、リモートホストで virt-installvirt-viewer、および virsh コマンドを実行できます。

第6章 仮想マシンのシャットダウン

RHEL 9 でホストされた実行中の仮想マシンをシャットダウンする場合は、コマンドラインインターフェース または Web コンソールの GUI を使用します。

6.1. コマンドラインインターフェースでの仮想マシンのシャットダウン

応答している仮想マシンをシャットダウンするには、以下のいずれかを行います。

  • ゲストに接続している 場合に、ゲスト OS に適したシャットダウンコマンドを使用
  • ホストで virsh shutdown コマンドを使用

    • 仮想マシンがローカルホストにある場合は、以下のコマンドを実行します。

      # virsh shutdown demo-guest1
      Domain 'demo-guest1' is being shutdown
    • 仮想マシンがリモートホスト (この例では 10.0.0.1) にある場合は、以下のコマンドを実行します。

      # virsh -c qemu+ssh://root@10.0.0.1/system shutdown demo-guest1
      
      root@10.0.0.1's password:
      Domain 'demo-guest1' is being shutdown

応答しない場合など、仮想マシンを強制的にシャットダウンする場合は、そのホストで virsh destroy コマンドを実行します。

# virsh destroy demo-guest1
Domain 'demo-guest1' destroyed
注記

virsh destroy コマンドは、仮想マシンの構成またはディスクイメージを削除するわけではありません。物理マシンから電源コードを抜くのと同様に、仮想マシンの実行中の仮想マシンインスタンスを終了するだけになります。したがって、まれに、virsh destroy により、仮想マシンのファイルシステムが破損することがあるため、その他のシャットダウン方法がすべて失敗した場合に限り、このコマンドを使用することが推奨されます。

6.2. Web コンソールを使用した仮想マシンのシャットダウンおよび再起動

RHEL 9 Web コンソールを使用して、実行中の仮想マシンを シャットダウン または 再起動 できます。仮想マシンが応答しない場合は、マスク不可割り込みを送信できます。

6.2.1. Web コンソールで仮想マシンのシャットダウン

仮想マシンが 稼働 状態であれば、RHEL 9 Web コンソールを使用してシャットダウンできます。

前提条件

手順

  1. 仮想マシン インターフェイスで、シャットダウンする仮想マシンがある行を見つけます。
  2. 行の右側で、シャットダウン をクリックします。

    仮想マシンがシャットダウンします。

トラブルシューティング

  • 仮想マシンがシャットダウンしない場合には、シャットダウン ボタンの横にある をクリックして、シャットダウンの強制 を選択します。
  • 応答しない VM をシャットダウンするには、マスク不可割り込みを送信 することもできます。

6.2.2. Web コンソールを使用した仮想マシンの再起動

仮想マシンが 稼働 状態であれば、RHEL 9 Web コンソールを使用して再起動できます。

前提条件

手順

  1. 仮想マシン インターフェイスで、再起動する VM の行を見つけます。
  2. 行の右側にあるメニューボタン をクリックします。

    アクションのドロップダウンメニューが表示されます。

  3. ドロップダウンメニューで、再起動 をクリックします。

    仮想マシンがシャットダウンして再起動します。

トラブルシューティング

  • 仮想マシンが再起動しない場合には 再起動 ボタンのとなりにある をクリックして 再起動の強制 を選択します。
  • 応答しない VM をシャットダウンするには、マスク不可割り込みを送信 することもできます。

6.2.3. Web コンソールでマスク不可割り込みを仮想マシンに送信

NMI (マスク不可割り込み) を送信すると、応答しない稼働中の仮想マシンが応答またはシャットダウンする可能性があります。たとえば、Ctrl+Alt+Del の NMI を、標準入力に応答しない仮想マシンに送信できます。

前提条件

手順

  1. 仮想マシン インターフェイスで、NMI を送信する仮想マシンの行を見つけます。
  2. 行の右側にあるメニューボタン をクリックします。

    アクションのドロップダウンメニューが表示されます。

  3. ドロップダウンメニューで、マスク不可割り込みの送信 をクリックします。

    NMI が仮想マシンに送信されます。

第7章 仮想マシンの削除

RHEL 9 で仮想マシンを削除する場合は、コマンドラインインターフェース または Web コンソールの GUI を使用します。

7.1. コマンドラインインターフェースで仮想マシンの削除

仮想マシンを削除するには、コマンドラインでその XML 設定および関連するストレージファイルをホストから削除します。以下の手順を実施します。

前提条件

  • 仮想マシンからの重要なデータのバックアップを作成する。
  • 仮想マシンをシャットダウンしている。
  • その他の仮想マシンが、同じ関連ストレージを使用しないようにしている。

手順

  • virsh undefine ユーティリティーを使用します。

    たとえば、次のコマンドは、guest1 仮想マシン、関連のあるストレージボリューム、および不揮発性 RAM が存在する場合はそれを削除します。

    # virsh undefine guest1 --remove-all-storage --nvram
    Domain 'guest1' has been undefined
    Volume 'vda'(/home/images/guest1.qcow2) removed.

関連情報

  • virsh undefine --help コマンド
  • virsh の man ページ

7.2. Web コンソールで仮想マシンの削除

RHEL 9 Web コンソールが接続しているホストから、仮想マシンおよび関連ストレージファイルを削除する場合は、以下の手順を行います。

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • 仮想マシンからの重要なデータのバックアップを作成する。
  • 他の仮想マシンが同じ関連ストレージを使用していないことを確認します。
  • オプション:仮想マシンをシャットダウンしている。

手順

  1. 仮想マシン インターフェースで、削除する仮想マシンのメニューボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

    シャットダウン時に利用可能な仮想マシンの操作を表示するイメージ。
  2. 削除 をクリックします。

    確認ダイアログが表示されます。

    「仮想マシンの削除の確認」ダイアログボックスを表示しているイメージ
  3. オプション:仮想マシンに関連するすべてまたは一部のストレージファイルを削除する場合は、削除するストレージファイルの横にあるチェックボックスを選択します。
  4. 削除 をクリックします。

    仮想マシンと、選択したストレージファイルが削除されます。

第8章 Web コンソールでの仮想マシンの管理

RHEL 9 ホストのグラフィカルインターフェースで仮想マシンを管理する場合は、RHEL 9 Web コンソールの Virtual Machines ペインを使用できます。

Web コンソールの仮想マシンタブを表示するイメージ

8.1. Web コンソールで仮想マシンの管理の概要

RHEL 9 Web コンソールは、Web ベースのシステム管理インターフェースです。Web コンソールは、その機能の 1 つとして、ホストシステムで仮想マシンをグラフィカルに表示し、その仮想マシンを作成、アクセス、および構成できるようにします。

Web コンソールを使用して RHEL 9 で仮想マシンを管理するには、最初に、仮想化用の Web コンソールプラグイン をインストールする必要があります。

次のステップ

8.2. 仮想マシンを管理するために Web コンソールを設定

Web コンソールの仮想マシン (VM) プラグインをインストールして、RHEL 9 Web コンソールを使用してホストで仮想マシンを管理できるようにしてある。

前提条件

  • Web コンソールがマシンにインストールされ、有効化さていることを確認してください。

    # systemctl status cockpit.socket
    cockpit.socket - Cockpit Web Service Socket
    Loaded: loaded (/usr/lib/systemd/system/cockpit.socket
    [...]

    このコマンドが、Unit cockpit.socket could not be found を返す場合は、Installing the web console のドキュメントに従って Web コンソール を有効にします。

手順

  • cockpit-machines プラグインをインストールします。

    # dnf install cockpit-machines

検証

  1. ブラウザにhttps://localhost:9090のアドレスを入力するなどして、Web コンソールにアクセスします。
  2. ログインします。
  3. インストールに成功すると、仮想マシン が Web コンソールのサイドメニューに表示されます。

    Web コンソールの仮想マシンタブを表示するイメージ

8.3. Web コンソールを使用した仮想マシンの名前の変更

仮想マシン (VM) の作成後、競合を回避するために VM の名前を変更するか、ユースケースに基づいて新しい一意の名前を割り当てることをお勧めします。RHEL Web コンソールを使用して VM の名前を変更できます。

前提条件

手順

  1. 仮想マシン インターフェイスで、名前を変更する VM のメニューボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

    シャットダウン時に利用可能な仮想マシンの操作を表示するイメージ。
  2. Rename をクリックします。

    「VM の名前の変更」ダイアログが表示されます。

    「VM の名前の変更」ダイアログボックスを表示しているイメージ。
  3. 新しい名前 フィールドに、VM の名前を入力します。
  4. Rename をクリックします。

検証

  • 新しい VM 名が 仮想マシン インターフェイスに表示されるはずです。

8.4. Web コンソールで利用可能な仮想マシンの管理機能

RHEL 9 Web コンソールを使用すると、システム上の仮想マシンを管理する以下のアクションを実行できます。

表8.1 RHEL 9 Web コンソールで実行できる仮想マシン管理タスク

タスク詳細は以下を参照してください。

仮想マシンを作成し、ゲストオペレーティングシステムでインストールします。

Web コンソールを使用した仮想マシンの作成、およびゲストのオペレーティングシステムのインストール

仮想マシンを削除します。

Web コンソールで仮想マシンの削除

仮想マシンを起動、シャットダウンし、再起動します。

Starting virtual machines using the web console および Shutting down and restarting virtual machines using the web console を参照してください。

さまざまなコンソールを使用して仮想マシンに接続し、操作します。

Web コンソールで仮想マシンとの相互作用

仮想マシンに関するさまざまな情報を表示します。

Web コンソールで仮想マシン情報の表示

仮想マシンに割り当てられたホストメモリーを調整します。

Web コンソールで仮想マシンのメモリーの追加と削除

仮想マシンのネットワーク接続を管理します。

Web コンソールで仮想マシンのネットワークインターフェースの管理

ホストで利用可能な仮想マシンストレージを管理し、仮想ディスクを仮想マシンに割り当てます。

Web コンソールで仮想マシン用のストレージの管理

仮想マシンの仮想 CPU 設定を構成します。

Web コンソールでの仮想 CPU の管理

VMのライブマイグレーション

Web コンソールを使用した仮想マシンのライブ移行

ホストデバイスの管理

Web コンソールを使用したホストデバイスの管理

第9章 仮想マシンに関する情報の表示

RHEL 9 での仮想化デプロイメントのあらゆる側面を調整またはトラブルシューティングする必要がある場合、通常、最初の手順として実行しなければならないのは、仮想マシンの現在の状態および設定に関する情報を確認することです。これには、the command-line interface または the web console を使用できます。仮想マシンの XML 設定 で情報を表示することもできます。

9.1. コマンドラインインターフェースでの仮想マシン情報の表示

ホストおよびその設定で仮想マシンに関する情報を取得するには、以下のコマンドのいずれかまたは複数コマンドを使用します。

手順

  • ホストで仮想マシンの一覧を取得するには、次のコマンドを実行します。

    # virsh list --all
    Id   Name              State
    ----------------------------------
    1    testguest1             running
    -    testguest2             shut off
    -    testguest3             shut off
    -    testguest4             shut off
  • 特定の仮想マシンに関する基本的な情報を取得するには、次のコマンドを実行します。

    # virsh dominfo testguest1
    Id:             1
    Name:           testguest1
    UUID:           a973666f-2f6e-415a-8949-75a7a98569e1
    OS Type:        hvm
    State:          running
    CPU(s):         2
    CPU time:       188.3s
    Max memory:     4194304 KiB
    Used memory:    4194304 KiB
    Persistent:     yes
    Autostart:      disable
    Managed save:   no
    Security model: selinux
    Security DOI:   0
    Security label: system_u:system_r:svirt_t:s0:c486,c538 (enforcing)
  • 特定の仮想マシンの完全な XML 設定を取得するには、次のコマンドを実行します。

    # virsh dumpxml testguest2
    
    <domain type='kvm' id='1'>
      <name>testguest2</name>
      <uuid>a973434f-2f6e-4ěša-8949-76a7a98569e1</uuid>
      <metadata>
    [...]
  • 仮想マシンのディスクおよびその他のブロックデバイスに関する情報は、次のコマンドを実行します。

    # virsh domblklist testguest3
     Target   Source
    ---------------------------------------------------------------
     vda      /var/lib/libvirt/images/testguest3.qcow2
     sda      -
     sdb      /home/username/Downloads/virt-p2v-1.36.10-1.el7.iso
  • 仮想マシンのファイルシステムとそのマウントポイントに関する情報を取得するには、次のコマンドを実行します。

    # virsh domfsinfo testguest3
    Mountpoint   Name   Type   Target
    ------------------------------------
     /            dm-0   xfs
     /boot        vda1   xfs
  • 特定の仮想マシンの vCPU に関する詳細を取得するには、次のコマンドを実行します。

    # virsh vcpuinfo testguest4
    VCPU:           0
    CPU:            3
    State:          running
    CPU time:       103.1s
    CPU Affinity:   yyyy
    
    VCPU:           1
    CPU:            0
    State:          running
    CPU time:       88.6s
    CPU Affinity:   yyyy

    仮想マシンで vCPU を設定し、最適化するには、仮想マシンの CPU パフォーマンスの最適化 を参照してください。

  • ホスト上の仮想ネットワークインターフェースの一覧を表示するには、次のコマンドを実行します。

    # virsh net-list --all
     Name       State    Autostart   Persistent
    ---------------------------------------------
     default    active   yes         yes
     labnet     active   yes         yes

    特定のインターフェースに関する情報は、次のコマンドを実行します。

    # virsh net-info default
    Name:           default
    UUID:           c699f9f6-9202-4ca8-91d0-6b8cb9024116
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Bridge:         virbr0

    ネットワークインターフェイス、仮想マシンネットワーク、およびこれらの設定手順の詳細は、仮想マシンのネットワーク接続の設定 を参照してください。

9.2. Web コンソールで仮想マシン情報の表示

RHEL 9 Web コンソールを使用して、Web コンソールセッションがアクセスできるすべての 仮想マシン および ストレージプール に関する情報を表示することができます。

Web コンソールセッションの接続先である 選択した仮想マシンに関する情報 を表示できます。これには、ディスク仮想ネットワークインターフェイス、および リソースの使用量 に関する情報が含まれます。

9.2.1. Web コンソールで仮想化の概要を表示

Web コンソールを使用して、仮想マシン、ストレージプール、およびネットワークに関する概要情報を含む仮想化の概要にアクセスできます。

前提条件

手順

  • Web コンソールのサイドメニューで、仮想マシン をクリックします。

    利用可能なストレージプール、利用可能なネットワーク、および Web コンソールが接続する仮想マシンに関する情報を含むダイアログボックスが表示されます。

    Web コンソールの仮想マシンタブを表示するイメージ

この情報には以下が含まれます。

  • ストレージプール - Web コンソールからアクセス可能なストレージプールの数とその状態です (アクティブまたは非アクティブ)。
  • ネットワーク - Web コンソールからアクセス可能なネットワークの数とその状態です (アクティブまたは非アクティブ)。
  • 名前 - 仮想マシンの名前
  • 接続 - libvirt 接続、システム、またはセッションの種類。
  • 状態 - 仮想マシンの状態

9.2.2. Web コンソールでストレージプール情報の表示

Web コンソールを使用して、システムで利用可能なストレージプールの詳細情報を表示できます。ストレージプールを使用すると、仮想マシンのディスクイメージを作成できます。

前提条件

手順

  1. 仮想マシン インターフェースで ストレージプール をクリックします。

    ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    既存のストレージプールの情報を含む Web コンソールのストレージプールタブを表示するイメージ

    この情報には以下が含まれます。

    • 名前 - ストレージプールの名前
    • サイズ - 現在の割り当てとストレージプールの合計容量。
    • 接続 - ストレージプールのアクセスに使用される接続
    • 状態 - ストレージプールのステータス
  2. 情報を表示するストレージプールの横にある矢印をクリックします。

    行が展開され、選択したストレージプールに関する詳細情報を含む「概要」ペインが表示されます。

    選択したストレージプールの詳細情報を表示するイメージ。

    この情報には以下が含まれます。

    • ターゲットパス - dirまたはnetfs などのディレクトリーによってサポートされるストレージプールの種類のソース。
    • 永続的 - ストレージプールの設定が永続的であるかどうかを示します。
    • 自動起動 - システムの起動時にストレージプールが自動的に起動するかどうかを示します。
    • 種類 - ストレージプールの種類。
  3. ストレージプールに関連付けられているストレージボリュームの一覧を表示する場合は、ストレージボリューム をクリックします。

    ストレージボリュームペインが表示され、設定したストレージボリュームの一覧が表示されます。

    選択したストレージプールに関連付けられているストレージボリュームの一覧を表示するイメージ。

    この情報には以下が含まれます。

    • 名前 - ストレージボリュームの名前。
    • 使用者 - 現在ストレージボリュームを使用している仮想マシン。
    • サイズ - ボリュームのサイズ。

9.2.3. Web コンソールで仮想マシン基本情報の表示

Web コンソールを使用して、選択した仮想マシンに関する基本情報 (割り当てられたリソース、ハイパーバイザーの詳細など) を表示できます。

前提条件

手順

  1. Web コンソールのサイドメニューで、仮想マシン をクリックします。
  2. 情報を表示する仮想マシンをクリックします。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

    選択した仮想マシンのインターフェースを表示するイメージ。

    「概要」セクションには、次の一般的な仮想マシンの詳細が記載されています。

    • 状態 - 仮想マシンの状態 (実行中またはシャットオフ)。
    • メモリー - 仮想マシンに割り当てるメモリー容量
    • vCPU - 仮想マシンに設定された仮想 CPU の数
    • CPU タイプ - 仮想マシンに設定された仮想 CPU のアーキテクチャー
    • ブート順序 - 仮想マシンに設定されたブート順序
    • 自動起動 - 仮想マシンで自動起動が有効になっているかどうか

    この情報には、以下のハイパーバイザーの詳細も含まれます。

    • エミュレートされたマシン - 仮想マシンによりエミュレートされたマシンタイプ
    • ファームウェア - 仮想マシンのファームウェア。

9.2.4. Web コンソールで仮想マシンのリソース使用状況の表示

Web コンソールを使用して、選択した仮想マシンのメモリーと仮想 CPU 使用率を表示できます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. 使用方法 までスクロールします。

    「使用率」セクションには、仮想マシンのメモリーおよび仮想 CPU 使用率に関する情報が表示されます。

    選択した仮想マシンのメモリーと CPU 使用率を表示するイメージ

9.2.5. Web コンソールで仮想マシンのディスク情報の表示

Web コンソールを使用して、選択した仮想マシンに割り当てられたディスクの詳細情報を表示できます。

前提条件

手順

  1. 情報を表示する仮想マシンをクリックします。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ディスク までスクロールします。

    「ディスク」セクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの 追加削除、または 編集 のオプションが表示されます。

    選択した仮想マシンのディスク使用率を表示するイメージ

この情報には以下が含まれます。

  • デバイス - ディスクのデバイスの種類。
  • 使用済み - 現在割り当てられているディスク容量。
  • 容量 - ストレージボリュームの最大サイズ。
  • バス - エミュレートされるディスクデバイスの種類。
  • アクセス - ディスクが書き込み可能 かどうか、読み取り専用 であるか。raw ディスクの場合は、書き込み可能および共有 へのアクセスを設定することもできます。
  • ソース - ディスクデバイスまたはファイル

9.2.6. Web コンソールで仮想ネットワークインターフェース情報の表示および編集

RHEL 9 Web コンソールを使用して、選択した仮想マシン (VM) で仮想ネットワークインターフェイスを表示および変更することができます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ネットワークインターフェース までスクロールします。

    「ネットワークインターフェース」セクションには、仮想マシンに設定された仮想ネットワークインターフェースに関する情報と、ネットワークインターフェースの追加削除編集、またはアンプラグ のオプションが表示されます。

    選択した仮想マシンのネットワークインターフェースの詳細を表示するイメージ。

    + この情報には以下が含まれます。

    • 種類 - 仮想マシンのネットワークインターフェースの種類。タイプには、仮想ネットワーク、LAN へのブリッジ、および直接割り当てが含まれます。

      注記

      RHEL 9 以降では、汎用イーサネット接続はサポートされていません。

    • モデルタイプ - 仮想ネットワークインターフェースのモデル。
    • MACアドレス - 仮想ネットワークインターフェースの MAC アドレス。
    • IP アドレス - 仮想ネットワークインターフェースの IP アドレス。
    • ソース - ネットワークインターフェースのソース。これはネットワークの種類によって異なります。
    • 状態 - 仮想ネットワークインターフェースの状態。
  3. 仮想ネットワークインターフェースの設定を編集するには、編集 をクリックします。仮想ネットワークインターフェースの設定ダイアログが開きます。

    選択したネットワークインターフェースで編集可能なさまざまなオプションを表示するイメージ。
  4. インターフェースの種類、ソース、モデル、または MAC アドレスを変更します。
  5. 保存 をクリックします。ネットワークインターフェースが変更しました。

    注記

    仮想ネットワークインターフェース設定の変更は、仮想マシンを再起動しないと有効になりません。

    また、MAC アドレスは、仮想マシンがシャットダウンしている場合にのみ変更できます。

9.3. 仮想マシンの XML 設定例

仮想マシンの XML 設定 (ドメイン XML とも呼ばれる) は、仮想マシンの設定およびコンポーネントを決定します。以下の表は、仮想マシンの XML 設定例の各セクションと、コンテンツについて説明しています。

仮想マシンの XML 設定を取得するには、virsh dumpxml コマンドの後に仮想マシンの名前を指定します。

# virsh dumpxml testguest1

表9.1 XML 設定のサンプル

ドメイン XML セクション説明
<domain type='kvm'>
 <name>Testguest1</name>
 <uuid>ec6fbaa1-3eb4-49da-bf61-bb02fbec4967</uuid>
 <memory unit='KiB'>1048576</memory>
 <currentMemory unit='KiB'>1048576</currentMemory>

これは、1024 MiB のメモリーが割り当てられている KVM 仮想マシン Testguest1 です。

 <vcpu placement='static'>1</vcpu>

仮想マシンには、仮想 CPU (vCPU) が 1 つ割り当てられます。

vCPU の設定に関する詳細は、仮想マシンの CPU パフォーマンスの最適化 を参照してください。

 <os>
  <type arch='x86_64' machine='pc-q35-rhel9.0.0'>hvm</type>
  <boot dev='hd'/>
 </os>

マシンアーキテクチャーは AMD64 および Intel 64 のアーキテクチャーに設定され、Intel Q35 マシン種別を使用して機能の互換性を決定します。OS はハードドライブから起動するように設定されています。

OS がインストールされた VM の作成については、Web コンソールを使用した仮想マシンの作成、およびゲストのオペレーティングシステムのインストール を参照してください。

 <features>
  <acpi/>
  <apic/>
 </features>

acpi および apic ハイパーバイザー機能が無効になっています。

 <cpu mode='host-model' check='partial'/>

機能 XML (virsh domcapabilities で取得可能 )からのホストの CPU 定義は、仮想マシンの XML 設定に自動的にコピーされます。したがって、仮想マシンの起動時に、libvirt はホストの CPU と似た CPU モデルを選択し、さらに機能を追加してホストモデルに可能な限り近づけます。

 <clock offset='utc'>
  <timer name='rtc' tickpolicy='catchup'/>
  <timer name='pit' tickpolicy='delay'/>
  <timer name='hpet' present='no'/>
 </clock>

仮想マシンの仮想ハードウェアクロックは UTC タイムゾーンを使用します。また、QEMU ハイパーバイザーと同期するために、異なるタイマーが 3 つ設定されます。

 <on_poweroff>destroy</on_poweroff>
 <on_reboot>restart</on_reboot>
 <on_crash>destroy</on_crash>

仮想マシンの電源が切れた場合や、仮想マシンの OS が突然終了すると、libvirt が仮想マシンを終了し、割り当てられているリソースをすべて解放します。仮想マシンの再起動時に、libvirt は同じ設定で仮想マシンを起動します。

 <pm>
  <suspend-to-mem enabled='no'/>
  <suspend-to-disk enabled='no'/>
 </pm>

この仮想マシンでは、S3 および S4 ACPI のスリープ状態が無効になっています。

 <devices>
  <emulator>/usr/libexec/qemu-kvm</emulator>
  <disk type='file' device='disk'>
   <driver name='qemu' type='qcow2'/>
   <source file='/var/lib/libvirt/images/Testguest.qcow2'/>
   <target dev='vda' bus='virtio'/>
  </disk>
  <disk type='file' device='cdrom'>
   <driver name='qemu' type='raw'/>
   <target dev='sdb' bus='sata'/>
   <readonly/>
  </disk>

仮想マシンは、エミュレーションに /usr/libexec/qemu-kvm バイナリーファイルを使用し、これには 2 つのディスクデバイスが割り当てられています。

最初のディスクは、ホストに保存されている /var/lib/libvirt/images/Testguest.qcow2 をベースにした仮想ハードドライブで、その論理デバイス名は vda に設定されています。Windows ゲストでは、virtio の代わりに sata バスを使用することが推奨されます。

2 番目のディスクは仮想化 CD-ROM で、その論理デバイス名は sdb に設定されています。

  <controller type='usb' index='0' model='qemu-xhci' ports='15'/>
  <controller type='sata' index='0'/>
  <controller type='pci' index='0' model='pcie-root'/>
  <controller type='pci' index='1' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='1' port='0x10'/>
  </controller>
  <controller type='pci' index='2' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='2' port='0x11'/>
  </controller>
  <controller type='pci' index='3' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='3' port='0x12'/>
  </controller>
  <controller type='pci' index='4' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='4' port='0x13'/>
  </controller>
  <controller type='pci' index='5' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='5' port='0x14'/>
  </controller>
  <controller type='pci' index='6' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='6' port='0x15'/>
  </controller>
  <controller type='pci' index='7' model='pcie-root-port'>
   <model name='pcie-root-port'/>
   <target chassis='7' port='0x16'/>
  </controller>
  <controller type='virtio-serial' index='0'/>

仮想マシンは、USB デバイスの割り当てにコントローラーを 1 つ、PCI-Express (PCIe) デバイスにルートコントローラーを使用します。さらに、virtio-serial コントローラーが利用できるため、仮想マシンは、シリアルコンソールなど、各種方法でホストを操作できます。

仮想デバイスの詳細は、仮想デバイスの種類 を参照してください。

 <interface type='network'>
  <mac address='52:54:00:65:29:21'/>
  <source network='default'/>
  <model type='virtio'/>
 </interface>

ネットワークインターフェイスは、default の仮想ネットワークおよび virtio ネットワークデバイスモデルを使用する仮想マシンに設定されます。Windows ゲストでは、virtio の代わりに e1000e モデルを使用することが推奨されます。

ネットワークインターフェイスの設定に関する詳細は、仮想マシンのネットワークパフォーマンスの最適化 を参照してください。

  <serial type='pty'>
   <target type='isa-serial' port='0'>
    <model name='isa-serial'/>
   </target>
  </serial>
  <console type='pty'>
   <target type='serial' port='0'/>
  </console>
  <channel type='unix'>
   <target type='virtio' name='org.qemu.guest_agent.0'/>
   <address type='virtio-serial' controller='0' bus='0' port='1'/>
  </channel>

pty シリアルコンソールが仮想マシンに設定されているので、ホストとの基本的な仮想マシン通信が可能になります。コンソールは、ポート 1 で UNIX チャンネルを使用します。この設定は自動で設定されており、設定の変更は推奨されません。

仮想マシンとの対話方法の詳細は、Web コンソールを使用した仮想マシンとの対話 を参照してください。

  <input type='tablet' bus='usb'>
   <address type='usb' bus='0' port='1'/>
  </input>
  <input type='mouse' bus='ps2'/>
  <input type='keyboard' bus='ps2'/>

仮想マシンは、タブレット入力を受信するように設定された仮想 usb ポートと、マウスとキーボード入力を受け取るように設定された仮想 ps2 ポートを使用します。この設定は自動で設定されており、設定の変更は推奨されません。

  <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
   <listen type='address' address='127.0.0.1'/>
  </graphics>

仮想マシンは、グラフィカル出力をレンダリングするために vnc プロトコルを使用します。

  <redirdev bus='usb' type='tcp'>
   <source mode='connect' host='localhost' service='4000'/>
   <protocol type='raw'/>
  </redirdev>
  <memballoon model='virtio'>
   <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
  </memballoon>
 </devices>
</domain>

仮想マシンは、USB デバイスのリモート接続に tcp リダイレクターを使用し、メモリーバルーンがオンになっています。この設定は自動で設定されており、設定の変更は推奨されません。

第10章 仮想マシンの保存および復元

システムリソースを解放するには、そのシステムで実行中の仮想マシンをシャットダウンできます。ただし、仮想マシンが再び必要になった場合は、ゲストオペレーティングシステム (OS) を起動し、アプリケーションを再起動する必要があります。これにはかなりの時間がかかる場合があります。このダウンタイムを短縮し、仮想マシンワークロードをより早く実行できるようにする場合は、保存機能および復元機能を使用して、OS のシャットダウンと起動シーケンスを完全に回避できます。

本セクションでは、仮想マシンの保存、および仮想マシンの完全な起動を行わずに仮想マシンを同じ状態に復元する方法を説明します。

10.1. 仮想マシンの保存および復元の仕組み

仮想マシンを保存すると、そのメモリーとデバイス状態がホストのディスクに保存され、仮想マシンプロセスがすぐに停止します。実行中または一時停止状態の仮想マシンを保存できます。復元すると、仮想マシンがその状態に戻ります。

このプロセスにより、ディスク容量と引き換えにホストシステムの RAM および CPU のリソースが解放され、ホストシステムのパフォーマンスが向上する場合があります。仮想マシンが復元する場合にゲスト OS を起動する必要がないため、時間がかかる起動時間も回避できます。

仮想マシンを保存するには、コマンドラインインターフェース (CLI) を使用します。手順は、「コマンドラインインターフェースで仮想マシンの削除」を参照してください。

仮想マシンを復元するには、CLI または Web コンソールの GUI を使用します。

10.2. コマンドラインインターフェースで仮想マシンの保存

仮想マシン (VM) と現在の状態をホストのディスクに保存できます。これは、たとえば、その他の目的でホストのリソースを使用する必要がある場合に便利です。保存した仮想マシンは、すぐに以前の稼働状態に復元できます。

コマンドラインを使用して仮想マシンを保存するには、以下の手順を行います。

前提条件

  • 仮想マシンと設定を保存するのに十分なディスク領域がある。仮想マシンが占有する領域は、その仮想マシンに割り当てられている RAM のサイズによって異なることに注意してください。
  • 仮想マシンが永続化されている。
  • オプション:仮想マシンの重要なデータのバックアップを作成する。

手順

  • virsh managedsave ユーティリティーを使用します。

    たとえば、次のコマンドは、仮想マシン demo-guest1 を停止し、その設定を保存します。

    # virsh managedsave demo-guest1
    Domain 'demo-guest1' saved by libvirt

    保存された仮想マシンファイルは、デフォルトで /var/lib/libvirt/qemu/save ディレクトリーに demo-guest1.save として置かれます。

    次に仮想マシンを 起動 すると、上記のファイルから、保存された状態が自動的に復元します。

検証

  • virsh list ユーティリティーを使用して、仮想マシンが保存された状態になっていることを確認したり、シャットダウンできます。

    managed save が有効になっている仮想マシンの一覧を表示するには、次のコマンドを実行します。保存済み に挙げられている仮想マシンでは、管理保存 (managed save) が有効になっています。

    # virsh list --managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    saved
    -     demo-guest2                    shut off

    管理保存のイメージがある仮想マシンの一覧を表示するには、次のコマンドを使用します。

    # virsh list --with-managed-save --all
    Id    Name                           State
    ----------------------------------------------------
    -     demo-guest1                    shut off

    停止状態にある保存された仮想マシンの一覧を表示するには、コマンドで --all オプションまたは --inactive オプションを使用する必要があります。

トラブルシューティング

  • 保存した仮想マシンファイルが破損したり、読み込めない場合は、仮想マシンを復元すると、代わりに標準の仮想マシン起動が起動します。

10.3. コマンドラインインターフェースでの仮想マシンの起動

コマンドラインインターフェース (CLI) を使用して、シャットダウンした仮想マシン (VM) を起動するか、保存した仮想マシンを復元します。CLI を使用すると、ローカル VM とリモート VM の両方を起動できます。

前提条件

  • 既に定義されている非アクティブな仮想マシン
  • 仮想マシンの名前
  • リモート仮想マシンの場合は、以下も設定されている。

    • 仮想マシンが置かれているホストの IP アドレス
    • ホストへの root アクセス権限

手順

  • ローカルの仮想マシンには、virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは仮想マシン demo-guest1 を起動します。

    # virsh start demo-guest1
    Domain 'demo-guest1' started
  • リモートホストにある仮想マシンでは、ホストへの QEMU+SSH 接続と共に virsh start ユーティリティーを使用します。

    たとえば、次のコマンドは、ホスト 192.168.123.123 にある仮想マシン demo-guest1 を起動します。

    # virsh -c qemu+ssh://root@192.168.123.123/system start demo-guest1
    
    root@192.168.123.123's password:
    
    Domain 'demo-guest1' started

10.4. Web コンソールを使用した仮想マシンの起動

仮想マシンが 停止 状態にある場合は、RHEL 9 Web コンソールを使用して起動できます。ホストの起動時に、仮想マシンが自動的に起動するように設定することもできます。

前提条件

手順

  1. 仮想マシン インターフェースで、起動する仮想マシンをクリックします。

    選択した仮想マシンの詳細情報を含む新しいページが開き、仮想マシンのシャットダウンおよび削除を制御できます。

  2. Run をクリックします。

    仮想マシンが起動し、そのコンソールまたはグラフィカル出力に接続 できます。

  3. オプション:ホストの起動時に仮想マシンが自動的に起動するように設定するには、Autostart のチェックボックスをクリックします。

    libvirt が管理していないネットワークインターフェースを使用する場合は、systemd 設定も変更する必要があります。そうしないと、影響を受ける仮想マシンが起動できなくなる可能性があります。starting virtual machines automatically when the host starts を参照してください。

第11章 仮想マシンのクローン作成

特定のプロパティーセットで仮想マシンの新規作成を行うには、既存の仮想マシンの クローン を作成します。

クローンを作成すると、ストレージ用に独自のディスクイメージを使用する新しい仮想マシンが作成されますが、クローン設定と保存データのほとんどはソース仮想マシンと同じです。これにより、各仮想マシンを個別に最適化せずに、特定のタスクに最適化された多数の仮想マシンを準備できます。

11.1. 仮想マシンのクローン作成の仕組み

仮想マシンのクローンを作成すると、ソース仮想マシンとそのディスクイメージの XML 構成がコピーされるため、新しい仮想マシンの一意性を確保するように設定を調整します。これには、仮想マシンの名前を変更して、ディスクイメージのクローンを使用するようにすることが含まれます。ただし、クローンの仮想ディスクに保存されているデータは、ソース仮想マシンと同じです。

このプロセスは、新しい仮想マシンを作成してゲストオペレーティングシステムと一緒にインストールするよりも高速であり、特定の構成およびコンテンツを持つ仮想マシンを迅速に生成するために使用できます。

仮想マシンの複数のクローンを作成することを計画している場合は、最初に、以下を含まない仮想マシン テンプレート を作成します。

  • 永続的なネットワーク MAC 設定などの一意の設定。これにより、クローンが適切に機能しなくなる可能性があります。
  • SSH キーやパスワードファイルなどの機密データ。

手順は、Creating virtual machines templates を参照してください。

11.2. 仮想マシンテンプレートの作成

正常に機能する複数のクローン仮想マシンを作成するには、SSH 鍵や永続的なネットワーク MAC 設定などの、ソース仮想マシンに固有の情報および設定を削除します。これにより、仮想マシンのクローンを簡単かつ安全に作成するのに使用できる仮想マシンテンプレートが作成されます。

仮想マシンのテンプレートは、virt-sysprep ユーティリティーを使用して 作成するか、要件に基づいて 手動で作成 することができます。

11.2.1. virt-sysprep を使用した仮想マシンテンプレートの作成

既存の仮想マシン (VM) からテンプレートを作成するには、virt-sysprep ユーティリティーを使用して、ゲスト仮想マシンの設定をすばやく解除し、クローン作成の準備をします。virt-sysprep ユーティリティーは、クローンにコピーしてはいけない仮想マシンから、特定の設定を自動的に削除してテンプレートを作成します。

前提条件

  • virt-sysprep ユーティリティーがホストにインストールされている。

    # dnf install /usr/bin/virt-sysprep
  • テンプレートとして使用する仮想マシンがシャットダウンしている。
  • ソースの仮想マシンのディスクイメージの場所と、仮想マシンのディスクイメージファイルの所有者情報がある。

    libvirt の システムコネクション で作成した仮想マシンのディスクイメージが、デフォルトで /var/lib/libvirt/images ディレクトリーにあり、root ユーザーが所有している。

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • オプション:仮想マシンのディスクにある重要なデータのバックアップが作成されている。ソースの仮想マシンをそのまま保持する場合は、クローン を作成してから、そのクローンを編集してテンプレートを作成します。

手順

  1. 仮想マシンのディスクイメージの所有者としてログインしていることを確認します。

    # whoami
    root
  2. オプション:仮想マシンのディスクイメージをコピーします。

    # cp /var/lib/libvirt/images/a-really-important-vm.qcow2 /var/lib/libvirt/images/a-really-important-vm-original.qcow2

    これは後で、仮想マシンがテンプレートに正常に変換されたことを確認するのに使用されます。

  3. 次のコマンドを使用し、/var/lib/libvirt/images/a-really-important-vm.qcow2 を、ソース仮想マシンのディスクイメージへのパスに置き換えます。

    # virt-sysprep -a /var/lib/libvirt/images/a-really-important-vm.qcow2
    [   0.0] Examining the guest ...
    [   7.3] Performing "abrt-data" ...
    [   7.3] Performing "backup-files" ...
    [   9.6] Performing "bash-history" ...
    [   9.6] Performing "blkid-tab" ...
    [...]

検証

  • プロセスが成功したことを確認するには、変更したディスクイメージを元のイメージと比較します。次の例は、テンプレートの作成例を示しています。

    # virt-diff -a /var/lib/libvirt/images/a-really-important-vm-orig.qcow2 -A /var/lib/libvirt/images/a-really-important-vm.qcow2
    - - 0644       1001 /etc/group-
    - - 0000        797 /etc/gshadow-
    = - 0444         33 /etc/machine-id
    [...]
    - - 0600        409 /home/username/.bash_history
    - d 0700          6 /home/username/.ssh
    - - 0600        868 /root/.bash_history
    [...]

関連情報

11.2.2. 仮想マシンテンプレートの手動による作成

既存の仮想マシンからテンプレートを作成する場合は、ゲスト仮想マシンを手動でリセットまたは設定解除して、クローン作成の準備をします。

前提条件

  • ソースの仮想マシンのディスクイメージの場所を把握しており、仮想マシンのディスクイメージファイルの所有者であることを確認します。

    libvirt の システムコネクション で作成した仮想マシンのディスクイメージが、デフォルトで /var/lib/libvirt/images ディレクトリーにあり、root ユーザーが所有している。

    # ls -la /var/lib/libvirt/images
    -rw-------.  1 root root  9665380352 Jul 23 14:50 a-really-important-vm.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 an-actual-vm-that-i-use.qcow2
    -rw-------.  1 root root  8591507456 Jul 26  2017 totally-not-a-fake-vm.qcow2
    -rw-------.  1 root root 10739318784 Sep 20 17:57 another-vm-example.qcow2
  • 仮想マシンがシャットダウンしていることを確認します。
  • オプション:仮想マシンのディスクにある重要なデータのバックアップが作成されている。ソースの仮想マシンをそのまま保持する場合は、クローン を作成してから、そのクローンを編集してテンプレートを作成します。

手順

  1. クローンを作成するように仮想マシンを設定します。

    1. クローンに必要なソフトウェアをインストールします。
    2. オペレーティングシステムに一意でない設定を構成します。
    3. 固有でないアプリケーション設定を構成します。
  2. ネットワーク設定を削除します。

    1. 以下のコマンドを使用して、永続的な udev ルールを削除します。

      # rm -f /etc/udev/rules.d/70-persistent-net.rules
      注記

      udev ルールを削除しないと、最初の NIC の名前が eth0 ではなく eth1 になる場合があります。

    2. 以下のように /etc/sysconfig/network-scripts/ifcfg-eth[x] を編集し、ifcfg スクリプトから一意のネットワークの詳細を削除します。

      1. HWADDR 行および Static 行を削除します。

        注記

        HWADDR が新しいゲストの MAC アドレスと一致しない場合、ifcfgは無視されます。

        DEVICE=eth[x] BOOTPROTO=none ONBOOT=yes #NETWORK=10.0.1.0 <- REMOVE #NETMASK=255.255.255.0 <- REMOVE #IPADDR=10.0.1.20 <- REMOVE #HWADDR=xx:xx:xx:xx:xx <- REMOVE #USERCTL=no <- REMOVE # Remove any other *unique or non-desired settings, such as UUID.*
      2. DHCP を設定しますが、HWADDR やその他の一意の情報は含まれません。

        DEVICE=eth[x] BOOTPROTO=dhcp ONBOOT=yes
    3. システムに同じコンテンツが存在する場合は、次のファイルにもそのコンテンツが含まれていることを確認します。

      • /etc/sysconfig/networking/devices/ifcfg-eth[x]
      • /etc/sysconfig/networking/profiles/default/ifcfg-eth[x]

        注記

        仮想マシンで NetworkManager または特殊な設定を使用している場合は、追加の固有情報がifcfg スクリプトから削除されていることを確認します。

  3. 登録の詳細を削除します。

    • Red Hat ネットワーク (RHN) に登録されている仮想マシンの場合:

      # rm /etc/sysconfig/rhn/systemid
    • Red Hat Subscription Manager (RHSM) に登録されている仮想マシンの場合:

      • 元の仮想マシンを使用しない場合は、次のコマンドを実行します。

        # subscription-manager unsubscribe --all # subscription-manager unregister # subscription-manager clean
      • 元の仮想マシンを使用する場合は、以下を行います。

        # subscription-manager clean
        注記

        元の RHSM プロファイルは、ID コードとともにポータルに残ります。クローンの作成後、次のコマンドを使用して仮想マシンで RHSM 登録を再アクティブ化します。

        #subscription-manager register --consumerid=71rd64fx-6216-4409-bf3a-e4b7c7bd8ac9
  4. その他の固有の詳細を削除します。

    1. ssh 公開鍵と秘密鍵のペアを削除します。

      # rm -rf /etc/ssh/ssh_host_example
    2. 複数のマシンで実行している場合に、競合する可能性があるその他のアプリケーション固有の識別子や設定を削除します。
  5. gnome-initial-setup-done ファイルを削除し、次回のシステムの起動時に設定ウィザードを実行するように仮想マシンを設定します。

    # rm ~/.config/gnome-initial-setup-done
    注記

    次回の起動時に実行するウィザードは、仮想マシンから削除された設定によって異なります。また、クローンの初回起動時には、ホスト名を変更することが推奨されます。

11.3. コマンドラインインターフェースで仮想マシンのクローン作成

特定のプロパティーセット (例: テスト目的) で新しい仮想マシンをすばやく作成するために、既存の仮想マシンのクローンを作成します。CLI を使用してこれを行うには、以下の手順を行います。

前提条件

  • 移行元の仮想マシンがシャットダウンしている。
  • クローンとして作成したディスクイメージを保存するのに十分なディスク領域があることを確認します。
  • オプション:仮想マシンのクローンを複数作成する場合は、ソースの仮想マシンから一意のデータと設定を削除して、クローンとして作成した仮想マシンが正しく機能することを確認することを推奨します。手順は、仮想マシンテンプレートの作成 を参照してください。

手順

  1. 環境とユースケースに適したオプションを指定して virt-clone ユーティリティーを使用します。

    サンプルのユースケース

    • 次のコマンドは、doppelganger という名前のローカルの仮想マシンのクローンを作成し、doppelganger-clone 仮想マシンを作成します。また、クローン元の仮想マシンのディスクイメージと同じ場所に、同じデータで doppelganger-clone.qcow2 ディスクイメージを作成します。

      # virt-clone --original doppelganger --auto-clone
      Allocating 'doppelganger-clone.qcow2'                            | 50.0 GB  00:05:37
      
      Clone 'doppelganger-clone' created successfully.
    • 以下のコマンドは、geminus1 という名前の仮想マシンのクローンを作成し、geminus2 という名前のローカル仮想マシンを作成します。これは、geminus1 の複数のディスクの 2 つのみを使用します。

      # virt-clone --original geminus1 --name geminus2 --file /var/lib/libvirt/images/disk1.qcow2 --file /var/lib/libvirt/images/disk2.qcow2
      Allocating 'disk1-clone.qcow2'                                      | 78.0 GB  00:05:37
      Allocating 'disk2-clone.qcow2'                                      | 80.0 GB  00:05:37
      
      Clone 'geminus2' created successfully.
    • 仮想マシンのクローンを別のホストに作成するには、ローカルホストで未定義のまま仮想マシンを移行します。たとえば、次のコマンドは、作成済みのgeminus2 仮想マシンを、ローカルディスクを含む 10.0.0.1 リモートシステムにクローンします。これらのコマンドを使用するには、10.0.0.1 に対して root 権限も必要であることに注意してください。

      # virsh migrate --offline --persistent geminus2 qemu+ssh://root@10.0.0.1/system
      root@10.0.0.1's password:
      
      # scp /var/lib/libvirt/images/disk1-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/
      
      # scp /var/lib/libvirt/images/disk2-clone.qcow2 root@10.0.0.1/user@remote_host.com://var/lib/libvirt/images/

検証

仮想マシンのクローンが正常に作成され、正しく機能していることを確認するには、以下を行います。

  1. クローンが、ホストの仮想マシンの一覧に追加されていることを確認します。

    # virsh list --all
    Id   Name                  State
    ---------------------------------------
    -    doppelganger          shut off
    -    doppelganger-clone    shut off
  2. クローンを起動し、起動しているかどうかを確認します。

    # virsh start doppelganger-clone
    Domain 'doppelganger-clone' started

関連情報

11.4. Web コンソールを使用した仮想マシンのクローン作成

特定のプロパティーセットで新しい仮想マシンをすばやく作成するには、事前に設定した仮想マシンのクローンを作成します。以下の手順では、Web コンソールを使用してその方法を説明します。

注記

仮想マシンのクローンを作成すると、その仮想マシンに関連付けられたディスクのクローンも作成されます。

前提条件

手順

  1. Web コンソールの仮想マシンインターフェースで、クローンを作成する仮想マシンの メニュー ボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

    仮想マシンのシャットダウン時に利用可能なオプションを表示する仮想マシンのメインページ。
  2. Clone をクリックします。

    「仮想マシンのクローンの作成」ダイアログが表示されます。

    VM の新しい名前を入力するオプションを含む「仮想マシンのクローンの作成」ダイアログボックスを作成します。
  3. オプション:仮想マシンクローンに新しい名前を入力します。
  4. Clone をクリックします。

    ソースの仮想マシンに基づいて、新しい仮想マシンが作成されます。

検証

  • クローンとして作成された仮想マシンが、ホストで利用可能な仮想マシンの一覧に表示されるかどうかを確認します。

第12章 仮想マシンの移行

仮想マシンの現在のホストが不安定であったり、使用できない場合は、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。

12.1. 仮想マシンの移行の仕組み

仮想マシンの移行は、仮想マシンの XML 設定を別のホストマシンにコピーします。移行した仮想マシンがシャットダウンしていない場合、移行では、仮想マシンのメモリーと仮想デバイスの状態も移行先ホストマシンに転送されます。移行先ホストで仮想マシンが機能し続けるには、仮想マシンのディスクイメージが利用可能なままである必要があります。

デフォルトでは、移行した仮想マシンは移行先ホストで一時的で、移行元ホストでも定義されたままになります。

ライブ マイグレーションまたは 非ライブ マイグレーションを使用して、実行中の仮想マシンを移行できます。シャットダウンした仮想マシンを移行するには、オフライン マイグレーションを使用する必要があります。詳細は、以下の表を参照してください。

表12.1 仮想マシンの移行タイプ

移行タイプ説明ユースケースストレージ要件

ライブマイグレーション

仮想マシンが移行元ホストマシンで実行し続け、KVM が仮想マシンのメモリーページを移行先ホストに転送します。移行がほぼ完了すると、KVM はごく短い間仮想マシンを中断し、移行先ホストで再開します。

一定の稼働時間が必要な仮想マシンに役に立ちます。ただし、I/O 負荷が大きい仮想マシンなど、KVM がメモリーページを転送するよりも速くメモリーページを変更する仮想マシンではライブマイグレーションが行えず、代わりに非ライブマイグレーションを使用する必要があります。

仮想マシンのディスクイメージが 共有ネットワークに存在し、移行元ホストと移行先ホストの両方からアクセスできる必要があります。

非ライブマイグレーション

仮想マシンを一時停止し、その設定とそのメモリーを移行先ホストにコピーし、仮想マシンを再開します。

仮想マシンに対するダウンタイムを作成しますが、一般的にはライブマイグレーションよりも信頼性が高くなります。I/O 負荷が大きい仮想マシンには推奨されます。

仮想マシンのディスクイメージが 共有ネットワークに存在し、移行元ホストと移行先ホストの両方からアクセスできる必要があります。

オフラインマイグレーション

仮想マシンの設定を移行先ホストに移動します。

仮想マシンをシャットダウンするのに推奨されます。

仮想マシンのディスクイメージは共有ネットワークで利用可能である必要はなく、代わりに移行先ホストに手動でコピーまたは移動できます。

12.2. 仮想マシンの移行の利点

仮想マシンの移行は、以下の場合に役に立ちます。

ロードバランシング
ホストがオーバーロードするか、別のホストの使用率が低くなっている場合に、仮想マシンを使用率の低いホストマシンに移動できます。
ハードウェアの非依存性
ホストマシンでハードウェアデバイスのアップグレード、追加、削除などを行う必要がある場合は、仮想マシンをその他のホストに安全に移動できます。つまり、仮想マシンは、ハードウェアを改善する際にダウンタイムが生じることはありません。
エネルギー節約
仮想マシンはその他のホストに再配布できるため、電力使用量の少ない時間帯に、アンロードしたホストシステムの電源を切ることで、節電やコスト削減が可能になります
地理的な移行
待ち時間の短縮や他の理由により、別の物理的な場所に仮想マシンを移動できます。

12.3. 仮想マシンの移行の制限

RHEL 9 で仮想マシンを移行する前に、移行の制限に注意してください。

  • 仮想マシンと libvirt のセッションコネクション間の移行 は信頼できないため、推奨されません。
  • 特定の機能と構成を使用する仮想マシンは、移行すると正しく機能しなくなるか、移行が失敗します。このような機能は次のとおりです。

    • デバイスパススルー
    • SR-IOV デバイスの割り当て
    • vGPU などの仲介デバイス
  • NUMA (Non-Uniform Memory Access) ピニングを使用するホスト間の移行は、ホストのトポロジーが類似している場合にのみ機能します。ただし、実行中のワークロードのパフォーマンスは、移行の影響を受ける可能性があります。
  • 移行元仮想マシンと移行先仮想マシンの両方で、エミュレートしている CPU が同一である必要があります。同一でないと、移行が失敗します。以下の CPU 関連領域の仮想マシン間で相違があると、移行の問題が発生する可能性があります。

    • CPU モデル

      注記

      Intel 64 ホストと AMD64 ホスト間の移行は、x86-64 命令セットを共有している場合でも サポートされていません。

    • ファームウェア設定
    • Microcode バージョン
    • BIOS バージョン
    • BIOS 設定
    • QEMU バージョン
    • カーネルバージョン
  • メモリーが 1 TB を超える仮想マシンのライブマイグレーションは、確実に機能しない場合があります。このような移行の安定性は、以下のとおりです。

    • 仮想マシンの現在のワークロード
    • ホストが移行に使用できるネットワーク帯域幅
    • デプロイメントがサポートすることのできるダウンタイム

    メモリーが 1 TB を超える仮想マシンのライブマイグレーションについては、Red Hat にお問い合わせください。

12.4. 他のホスト間での仮想マシンディスクイメージの共有

対応している KVM ホスト 間で仮想マシンのライブマイグレーションを実行するには、仮想マシンの共有ストレージが必要です。本セクションでは、NFS プロトコルを使用して、ローカルに保存された仮想マシンイメージを移行元ホストと移行先ホストで共有する方法を説明します。

前提条件

  • 移行に使用する仮想マシンがシャットダウンしている。
  • オプション:移行元ホストまたは移行先ホストではないストレージをホストするのにホストシステムを使用できるが、移行元ホストと移行先ホストの両方がネットワーク経由でアクセスできる。これは共有ストレージに最適なソリューションで、Red Hat が推奨しています。
  • KVM では対応していないため、NFS ファイルのロック機能を使用しない。
  • NFS が移行元および移行先ホストにインストールされ、有効になっている。そうでない場合は、以下を行います。

    1. NFS パッケージをインストールします。

      # dnf install nfs-utils
    2. 2049 などの NFS のポートがファイアウォールで開いていることを確認します。

      # firewall-cmd --permanent --add-service=nfs
      # firewall-cmd --permanent --add-service=mountd
      # firewall-cmd --permanent --add-service=rpc-bind
      # firewall-cmd --permanent --add-port=2049/tcp
      # firewall-cmd --permanent --add-port=2049/udp
      # firewall-cmd --reload
    3. NFS サービスを起動します。

      # systemctl start nfs-server

手順

  1. 共有ストレージを提供するホストに接続します。以下の例では、cargo-bay ホストになります。

    # ssh root@cargo-bay
    root@cargo-bay's password:
    Last login: Mon Sep 24 12:05:36 2019
    root~#
  2. ディスクイメージを保持するディレクトリーを作成し、移行ホストと共有します。

    # mkdir /var/lib/libvirt/shared-images
  3. 移行元ホストから新規作成されたディレクトリーに仮想マシンのディスクイメージをコピーします。たとえば、以下は、wanderer1 仮想マシンのディスクイメージを、`cargo-bay` ホストの /var/lib/libvirt/shared-images/ ディレクトリーのディスクイメージにコピーします。

    # scp /var/lib/libvirt/images/wanderer1.qcow2 root@cargo-bay:/var/lib/libvirt/shared-images/wanderer1.qcow2
  4. ストレージを共有するのに使用するホストで、/etc/exports ファイルに共有ディレクトリーを追加します。以下の例では、/var/lib/libvirt/shared-images ディレクトリーを source-exampledest-example ホストと共有しています。

    /var/lib/libvirt/shared-images source-example(rw,no_root_squash) dest-example(rw,no_root_squash)
  5. 移行元ホストと移行先ホストの両方で、共有ディレクトリーを /var/lib/libvirt/images ディレクトリーにマウントします。

    # mount cargo-bay:/var/lib/libvirt/shared-images /var/lib/libvirt/images

検証

  • プロセスが成功したことを確認するには、ソースホストで仮想マシンを起動して、正しく起動したかどうかを確認します。

12.5. コマンドラインインターフェースでの仮想マシンの移行

仮想マシンの現在のホストが不安定であったり、使用できない場合は、ホストワークロードを再分散する場合は、仮想マシンを別の KVM ホストに移行できます。このセクションでは、このような移行のさまざまなシナリオの手順と例を説明します。

前提条件

  • 移行元ホストと移行先ホストはいずれも KVM ハイパーバイザーを使用します。
  • 移行元ホストと移行先のホストは、ネットワーク経由で相互に通信できなければなりません。ping ユーティリティーを使用してこれを確認します。
  • 移行先ホストで以下のポートが開いていることを確認します。

    • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
    • ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
    • ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
    • ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
  • Red Hat が移行に対応できるようにするには、移行元ホストと移行先のホストが特定のオペレーティングシステムとマシンタイプを使用している必要があります。これを確認するには、Supported hosts for virtual machine migration を参照してください。
  • 移行される VM のディスクイメージは、ソースホストと宛先ホストの両方にアクセスできる別のネットワーク上の場所にあります。オフラインマイグレーションの場合は任意ですが、実行中の仮想マシンの移行に必要になります。

    このような仮想マシンの共有ストレージを設定する手順は、Sharing virtual machine disk images with other hosts を参照してください。

  • 仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成するレートを超える必要があります。

    ライブマイグレーションを開始する前に仮想マシンのダーティーページレートを取得するには、次の手順を実行します。

    1. 短期間、仮想マシンのダーティーページ生成の速度を監視します。

      # virsh domdirtyrate-calc vm-name 30
    2. 監視が終了したら、結果を取得します。

      # virsh domstats vm-name --dirtyrate
      Domain: 'vm-name'
        dirtyrate.calc_status=2
        dirtyrate.calc_start_time=200942
        dirtyrate.calc_period=30
        dirtyrate.megabytes_per_second=2

      この例では、仮想マシンが 1 秒あたり 2MB のダーティーメモリーページを生成しています。帯域幅が 2MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止したり、ワークロードを低くしたりしないと、ライブマイグレーションが進行しません。

      ライブマイグレーションが正常に終了するように、Red Hat では、ネットワークの帯域幅が仮想マシンのダーティーページの生成速度を大幅に上回ることを推奨しています。

  • パブリックブリッジタップネットワークの既存の仮想マシンで移行を行う場合は、移行元ホストと移行先ホストが同じネットワークにある必要があります。そうでない場合は、移行後に仮想マシンのネットワークが機能しなくなります。
  • VM 移行を実行する場合、ソースホスト上の virsh クライアントは、いくつかのプロトコルの 1 つを使用して、宛先ホスト上の libvirt デーモンに接続できます。次の手順の例では SSH 接続を使用していますが、別の接続を選択することもできます。

    • libvirt で SSH 接続を使用する場合は、virtqemud ソケットが有効になっていて、宛先ホストで実行されていることを確認してください。

      # systemctl enable --now virtqemud.socket
    • libvirt で TLS 接続を使用する場合は、virtproxyd-tls ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

      # systemctl enable --now virtproxyd-tls.socket
    • libvirt で TCP 接続を使用する場合は、virtproxyd-tcp ソケットが有効になっていて、宛先ホストで実行していることを確認してください。

      # systemctl enable --now virtproxyd-tcp.socket

手順

  1. virsh migrate コマンドで、移行の要件に適したオプションを指定します。

    • 以下では、SSH トンネルを使用して、ローカルホストから dest-example ホストのシステム接続に、wanderer1 仮想マシンを移行します。仮想マシンは移行中も稼働し続けます。

      # virsh migrate --persistent --live wanderer1 qemu+ssh://dest-example/system
    • 次のコマンドでは、ローカルホストで実行している仮想マシン wanderer2 の設定を手動で調整し、仮想マシンを dest-example ホストに移行できます。移行した仮想マシンが更新された設定を自動的に使用します。

      # virsh dumpxml --migratable wanderer2 >wanderer2.xml
      # vi wanderer2.xml
      # virsh migrate --live --persistent --xml wanderer2.xml wanderer2 qemu+ssh://dest-example/system

      この手順は、たとえば、移行先ホストが別のパスを使用して仮想マシンの共有ストレージにアクセスする必要がある場合、または移行先ホストに固有の機能を構成する場合に役立ちます。

    • 以下では、source-example ホストから wanderer3 仮想マシンを停止し、これを dest-example ホストに移行し、wanderer3-alt.xml が提供する調整された XML 設定を使用するように指示します。移行が終了すると、libvirt は移行先ホストで仮想マシンを再開します。

      # virsh migrate wanderer3 qemu+ssh://source-example/system qemu+ssh://dest-example/system --xml wanderer3-alt.xml

      移行後、仮想マシンはソースホストでシャットオフ状態になり、移行されたコピーはシャットダウン後に削除されます。

    • 以下では、source-example ホストからシャットダウンされた wanderer4 仮想マシンを削除し、その設定を dest-example ホストに移動します。

      # virsh migrate --offline --persistent --undefinesource wanderer4 qemu+ssh://source-example/system qemu+ssh://dest-example/system

      このタイプの移行では、仮想マシンのディスクイメージを共有ストレージに移動する必要がないことに注意してください。ただし、移行先ホストで仮想マシンを使用するには、仮想マシンのディスクイメージも移行する必要があります。以下に例を示します。

      # scp root@source-example:/var/lib/libvirt/images/wanderer4.qcow2 root@dest-example:/var/lib/libvirt/images/wanderer4.qcow2
  2. 移行が完了するまで待ちます。ネットワーク帯域幅、システムの負荷、仮想マシンのサイズによっては、プロセスに時間がかかる場合があります。virsh migrate--verbose オプションが使用されていないと、CLI はエラー以外の進捗インジケーターを表示しません。

    移行の進行中は、virsh domjobinfo ユーティリティーを使用して移行の統計を表示できます。

検証

  • 移行先ホストで、使用可能な仮想マシンの一覧を表示して、仮想マシンが移行されたかどうかを確認します。

    # virsh list
    Id Name                 State
    ----------------------------------
    10 wanderer1              running

    移行がまだ実行中であれば、このコマンドは、paused の仮想マシンの一覧を表示します。

トラブルシューティング

  • 場合によっては、ターゲットホストが、ネットワーク名や CPU タイプなど、移行した仮想マシンの XML 設定の特定の値と互換性がないことがあります。その結果、仮想マシンがターゲットホストで起動できなくなります。この問題を修正するには、 virsh edit を使用して、問題のある値を更新できます。値を更新した後、変更を適用するには仮想マシンを再起動する必要があります。
  • ライブマイグレーションの完了に時間がかかっている場合は、仮想マシンの負荷が高く、ライブマイグレーションを実行するために変更しているメモリページ多すぎる可能性があります。この問題を修正するには、仮想マシンを停止して、ライブ以外への移行に変更します。

    # virsh suspend wanderer1

関連情報

  • virsh migrate --help コマンド
  • virsh の man ページ

12.6. Web コンソールを使用した仮想マシンのライブ移行

継続的に実行する必要があるタスクを実行している仮想マシンを移行する場合は、シャットダウンせずに、その仮想マシンを別の KVM ホストに移行できます。これはライブマイグレーションとも呼ばれます。以下の手順では、Web コンソールを使用してその方法を説明します。

警告

I/O 負荷が高いタスクなど、KVM がメモリーページを転送するよりも速い速度でメモリーページを変更するタスクには、仮想マシンをライブマイグレーションしないことが推奨されます。

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • 移行元ホストと移行先ホストが実行中である。
  • 移行先ホストで以下のポートが開いていることを確認します。

    • ポート 22 は、SSH を使用して宛先ホストに接続するために必要です。
    • ポート 16509 は、TLS を使用して宛先ホストに接続するために必要です。
    • ポート 16514 は、TCP を使用して宛先ホストに接続するために必要です。
    • ポート 49152-49215 は、QEMU がメモリーおよびディスク移行データを転送するために必要です。
  • 仮想マシンのディスクイメージは、移行元ホストおよび移行先ホストからアクセス可能な共有ストレージに配置されています。
  • 仮想マシンの実行中に移行する場合は、ネットワークの帯域幅が、仮想マシンがダーティーメモリーページを生成するレートを超える必要があります。

    ライブマイグレーションを開始する前に仮想マシンのダーティーページレートを取得するには、コマンドラインインターフェースで次の手順を行います。

    1. 短期間、仮想マシンのダーティーページ生成の速度を監視します。

      # virsh domdirtyrate-calc vm-name 30
    2. 監視が終了したら、結果を取得します。

      # virsh domstats vm-name --dirtyrate
      Domain: 'vm-name'
        dirtyrate.calc_status=2
        dirtyrate.calc_start_time=200942
        dirtyrate.calc_period=30
        dirtyrate.megabytes_per_second=2

      この例では、仮想マシンが 1 秒あたり 2MB のダーティーメモリーページを生成しています。帯域幅が 2MB/s 以下のネットワーク上でこのような仮想マシンをライブマイグレーションしようとすると、仮想マシンを一時停止したり、ワークロードを低くしたりしないと、ライブマイグレーションが進行しません。

      ライブマイグレーションが正常に終了するように、Red Hat では、ネットワークの帯域幅が仮想マシンのダーティーページの生成速度を大幅に上回ることを推奨しています。

手順

  1. Web コンソールの仮想マシンインターフェースで、移行する仮想マシンのメニュー ボタン をクリックします。

    仮想マシン操作を制御するためのドロップダウンメニューが表示されます。

    仮想マシンの実行時に利用可能なオプションを表示する仮想マシンのメインページ。
  2. Migrate をクリックします。

    「仮想マシンを別のホストに移行」ダイアログボックスが表示されます。

    「仮想マシンを別のホストに移行」ダイアログボックスにフィールドを追加し、移行先ホストの URI を入力して、移行期間を設定します。
  3. 宛先ホストの URI を入力します。
  4. 移行の期間を設定します。

    • Permanent - 仮想マシンを永続的に移行する場合はチェックを外します。永続的な移行では、移行元ホストから仮想マシンの設定が完全に削除されます。
    • Temporary - 一時的な移行では、仮想マシンのコピーを移行先ホストに移行します。このコピーは、仮想マシンのシャットダウン時に移行先ホストから削除されます。元の仮想マシンは、ソースホストに残ります。
  5. Migrate をクリックします。

    仮想マシンが移行先ホストに移行されます。

検証

仮想マシンの移行に成功し、正常に機能しているかどうかを確認するには、次のコマンドを実行します。

  • 移行先ホストで利用可能な仮想マシンの一覧に仮想マシンが表示されているかどうかを確認します。
  • 移行した仮想マシンを起動し、起動するかどうかを確認します。

12.7. 仮想マシンの移行で対応しているホスト

仮想マシンの移行が適切に機能し、Red Hat でサポートされるようにするには、移行元ホストと移行先ホストが特定の RHEL バージョンおよびマシンタイプである必要があります。以下の表は、対応している仮想マシンの移行パスを示しています。

表12.2 ライブマイグレーションの互換性

移行の方法リリースタイプ将来バージョンの例サポート状況

前方

マイナーリリース

9.0.1 → 9.1

対応している RHEL 9 システム - マシンタイプ q35

後方

マイナーリリース

9.1 → 9.0.1

対応している RHEL 9 システム - マシンタイプ q35

注記

RHOSP や OpenShift Virtualization など、Red Hat が提供する他の仮想化ソリューションのサポートレベルは異なります。

第13章 仮想デバイスの管理

仮想マシンの機能、特徴、およびパフォーマンスを管理する最も効果的な方法の 1 つは、仮想デバイス を調整することです。

以下のセクションでは、仮想デバイスの 一般的な概要 と、CLI または Web コンソール を使用して仮想デバイスを管理する方法について説明します。

13.1. 仮想デバイスの動作

物理マシンと同様、仮想マシンでは、処理能力、メモリー、ストレージ、ネットワーク、グラフィックスなどの機能をシステムに提供する特殊なデバイスが必要になります。物理システムでは通常、これらの目的でハードウェアデバイスを使用します。ただし、仮想マシンはソフトウェア実装として機能するため、代わりにそのようなデバイスのソフトウェアの抽象化を使用する必要があります。これは、仮想デバイス と呼ばれています。

基本情報

仮想マシンの作成 時に、仮想マシンに接続されている仮想デバイスを設定でき、既存の仮想マシンでも管理できます。通常、仮想デバイスは、仮想マシンが停止している場合に限り仮想マシンに接続または切断できますが、仮想マシンの実行中に追加または削除できるものもあります。この機能は、デバイスの ホットプラグ および ホットアンプラグ と呼ばれています。

新しい仮想マシンを作成すると、特に指定しない限り、libvirt は、必須の仮想デバイスのデフォルトセットを自動的に作成して構成します。これは、ホストシステムのアーキテクチャーとマシンタイプに基づいており、通常は以下のものが含まれます。

  • CPU
  • メモリー
  • キーボード
  • ネットワークインターフェースコントローラー (NIC)
  • さまざまなデバイスコントローラー
  • ビデオカード
  • サウンドカード

仮想マシンの作成後に仮想デバイスを管理するには、コマンドラインインターフェース (CLI) を使用します。ただし、仮想ストレージデバイスおよび NIC を管理する場合は、RHEL .9 Web コンソールを使用することもできます。

パフォーマンスまたは柔軟性

デバイスの種類によっては、RHEL 9 が複数の実装に対応し、しばしばパフォーマンスと柔軟性にトレードオフが伴います。

たとえば、仮想ディスクに使用される物理ストレージは、qcow2raw などのさまざまな形式のファイルで示され、次のようなさまざまなコントローラーを使用して仮想マシンに提示されます。

  • エミュレートされたコントローラー
  • virtio-scsi
  • virtio-blk

virtio デバイスは、仮想化を目的として特別に設計されているため、エミュレートされたコントローラーは、virtio コントローラーよりも遅くなります。一方、エミュレートされたコントローラーは、virtio デバイスに対するドライバーがないオペレーティングシステムを実行するのを可能にします。同様に、virtio-scsi は、SCSI コマンドへのより完全な対応を提供しており、仮想マシンにより多くのディスクを割り当てることができるようにします。最後に、virtio-blk は、virtio-scsi とエミュレートされたコントローラーよりも高いパフォーマンスを提供しますが、ユースケースは範囲がより限定されます。たとえば、virtio-blk を使用する場合には、物理ディスクを LUN デバイスとして仮想マシンに割り当てることはできません。

仮想デバイスの種類の詳細は、Types of virtual devices を参照してください。

13.2. 仮想デバイスの種類

RHEL 9 の仮想化では、仮想マシン(VM)に接続できるいくつかの異なるタイプの仮想デバイスを提示できます。

エミュレートされたデバイス

エミュレートされたデバイスは、広く使用されている物理デバイスのソフトウェア実装です。物理デバイス用に設計されたドライバーは、エミュレートされたデバイスとも互換性があります。そのため、エミュレートされたデバイスは柔軟性に非常に優れています。

ただし、特定のタイプのハードウェアを正確にエミュレートする必要があるため、エミュレートされたデバイスは、対応する物理デバイス、またはより最適化された仮想デバイスと比較すると、パフォーマンスが大幅に低下する可能性があります。

以下のタイプのエミュレートされたデバイスに対応します。

  • 仮想 CPU (vCPU) があり、利用可能な CPU モデルが多数あります。エミュレーションのパフォーマンスへの影響は、ホストの CPU とエミュレートされた vCPU の差異に大きく左右されます。
  • PCI バスコントローラーなどのエミュレートされたシステムコンポーネント。
  • SATA、SCSI、IDE などのエミュレートされたストレージコントローラー。
  • ICH9、ICH6、AC97 などのエミュレートされたサウンドデバイス。
  • VGA カードなどのエミュレートされたグラフィックカード。
  • rtl8139 などのエミュレートされたネットワークデバイス。
準仮想化デバイス

準仮想化は、仮想デバイスを仮想マシンに公開する高速かつ効率的な方法を提供します。準仮想化デバイスは、仮想マシンで使用するために特別に設計されたインターフェースを公開するため、デバイスのパフォーマンスが大幅に向上します。RHEL 9 では、virtio API を、ハイパーバイザーと仮想マシンとの間のレイヤーとして使用して、仮想マシンに準仮想化デバイスを提供します。このアプローチの欠点は、ゲストオペレーティングシステムで特定のデバイスドライバーが必要になることです。

可能な場合、特に I/O 集約型アプリケーションを実行している場合は、仮想マシンにエミュレートされたデバイスの代わりに準仮想化デバイスを使用することが推奨されます。準仮想化デバイスは、I/O レイテンシーを低減し、I/O スループットを増加させます。場合によっては、ベアメタルのパフォーマンスに非常に近づくことがあります。その他の準仮想化デバイスも、他の方法では利用できない機能を仮想マシンに追加します。

以下のタイプの準仮想化デバイスに対応します。

  • 準仮想化ネットワークデバイス (virtio-net)
  • 準仮想化ストレージコントローラー:

    • virtio-blk - ブロックデバイスエミュレーションを提供します。
    • virtio-scsi - より完全な SCSI エミュレーションを提供します。
  • 準仮想化されたクロック
  • 準仮想化されたシリアルデバイス (virtio-serial)
  • 仮想マシンとそのホスト間でメモリーを動的に分散するために使用されるバルーンデバイス (virtio-balloon)。
  • 準仮想化された乱数ジェネレーター (virtio-rng)
物理的に共有されているデバイス

特定のハードウェアプラットフォームにより、仮想マシンはさまざまなハードウェアデバイスやコンポーネントに直接アクセスできます。このプロセスは、デバイスの割り当て として、または パススルー として知られています。

この方法で接続すると、物理マシンの場合と同様に、物理デバイスの一部の側面が仮想マシンで直接利用できます。これにより、仮想マシンで使用されるデバイスのパフォーマンスが向上します。ただし、仮想マシンに物理的に接続されているデバイスはホストからは利用できず、移行もできません。

それにもかかわらず、いくつかのデバイスは、複数の仮想マシンで 共有 できます。たとえば、場合によっては、1 台の物理デバイスが複数の 仲介デバイス を提供します。これは、異なる仮想マシンに割り当てることができます。

以下の種類のパススルーデバイスに対応します。

  • USB、PCI、および SCSI のパススルー - ゲストソフトウェアで特定の機能が利用できるようにするために、一般的な業界標準のバスを仮想マシンに直接公開します。
  • シングルルート I/O 仮想化 (SR-IOV) - PCI Express リソースのハードウェアで強制された分離を可能にする仕様です。これにより、1 つの物理 PCI リソースを、複数の仮想 PCI 機能に分割する、安全かつ効率的な作業が可能になります。これは、通常、ネットワークインターフェースカード (NIC) に使用されます。
  • NPIV (N_Port ID virtualization) - 1 つの物理ホストバスアダプター (HBA) を、複数の仮想ポートと共有するファイバーチャネル技術です。
  • GPU および vGPU - 特定のタイプのグラフィックスまたは計算ワークロード用のアクセラレーター。GPU によっては仮想マシンに直接接続できるものもありますが、一部のタイプでは、基本となる物理ハードウェアを共有する仮想 GPU (vGPU) を作成する機能も提供されます。

13.3. CLI を使用した仮想マシンに接続されたデバイスの管理

仮想マシン (VM) の機能を変更するには、コマンドラインインターフェイス (CLI) を使用して、VM に接続されているデバイスを管理できます。

CLI を使用して次のことができます。

13.3.1. 仮想マシンへのデバイスの割り当て

新しい仮想デバイスを割り当てることで、仮想マシンに特定の機能を追加できます。

次の手順では、コマンドラインインターフェース (CLI) を使用して、仮想マシンに仮想デバイスを作成して割り当てる方法を説明します。一部のデバイスは、RHEL Web コンソールを使用 して VM に接続することもできます。

たとえば、仮想マシンに新しい仮想ディスクデバイスを割り当てることで、仮想マシンのストレージ容量を増やすことができます。これは、メモリーのホットプラグとも呼ばれます。

警告

仮想マシンからのメモリーデバイスの削除 (メモリーのホットアンプラグ とも呼ばれる) は、RHEL 9 ではサポートされておらず、Red Hat ではその使用を推奨していません。

前提条件

  • 仮想マシンに接続するデバイスに必要なオプションを取得します。特定のデバイスで利用可能なオプションを確認するには、virt-xml --device=? コマンドを使用します。以下に例を示します。

    # virt-xml --network=?
    --network options:
    [...]
    address.unit
    boot_order
    clearxml
    driver_name
    [...]

手順

  1. デバイスを仮想マシンに接続するには、デバイスと必要なオプションの定義を含む virt-xml --add-device コマンドを使用します。

    • たとえば、次は、/var/lib/libvirt/images/ ディレクトリーに 20GB の newdisk qcow2 ディスクイメージを作成し、仮想マシンの次回の起動時にそれを仮想マシンとして、実行中の仮想マシン testguest に接続します。

      # virt-xml testguest --add-device --disk /var/lib/libvirt/images/newdisk.qcow2,format=qcow2,size=20
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • 以下は、仮想マシンの稼働時に、ホストでバス 002 のデバイス 004 として、仮想マシン testguest2 に接続した USB フラッシュドライブを接続します。

      # virt-xml testguest2 --add-device --update --hostdev 002.004
      Device hotplug successful.
      Domain 'testguest2' defined successfully.

      USB を定義するバスとデバイスの組み合わせは、lsusb コマンドを使用して取得できます。

検証

デバイスが追加されたことを確認するには、次のいずれかを行います。

  • virsh dumpxml コマンドを実行し、デバイスの XML 定義が、仮想マシンの XML 設定の <devices> セクションに追加されました。

    たとえば、以下の出力は、仮想マシン testguest の設定を表示し、002.004 USB フラッシュディスクドライブが追加されていることを確認します。

    # virsh dumpxml testguest
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x4146'/>
        <product id='0x902e'/>
        <address bus='2' device='4'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]
  • 仮想マシンを実行し、デバイスが存在し、正しく機能しているかどうかをテストします。

関連情報

  • man virt-xml コマンド

13.3.2. 仮想マシンに接続されているデバイスの変更

接続している仮想デバイスの設定を編集することで、仮想マシンの機能を変更できます。たとえば、仮想マシンのパフォーマンスを最適化する場合は、ホストの CPU に合わせて仮想 CPU モデルを変更できます。

以下の手順は、コマンドラインインターフェース (CLI) を使用して仮想デバイスを修正する一般的な手順を示しています。ディスクや NIC など、仮想マシンに接続されている一部のデバイスは、using the RHEL 9 web console 変更することもできます。

前提条件

  • 仮想マシンに接続するデバイスに必要なオプションを取得します。特定のデバイスで利用可能なオプションを確認するには、virt-xml --device=? コマンドを使用します。以下に例を示します。
# virt-xml --network=?
--network options:
[...]
address.unit
boot_order
clearxml
driver_name
[...]
  • オプション:virsh dumpxml vm-name を使用してファイルに出力を送って、仮想マシンの XML 構成のバックアップを作成します。たとえば、以下は、Motoko 仮想マシンの設定のバックアップファイル motoko.xml を作成します。
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

手順

  1. デバイスの定義および必要なオプションを追加して、virt-xml --edit コマンドを使用します。

    たとえば、次のようにすると、停止する仮想マシン testguest<cpu> 設定を削除し、host-model に設定します。

    # virt-xml testguest --edit --cpu host-model,clearxml=yes
    Domain 'testguest' defined successfully.

検証

デバイスが変更されたことを確認するには、次のいずれかを行います。

  • デバイスが存在し、変更を反映する場合は、仮想マシンを実行してテストします。
  • virsh dumpxml コマンドを使用して、デバイスの XML 定義が、仮想マシンの XML 構成で変更されているかどうかを確認します。

    たとえば、次の出力は、仮想マシン testguest の設定を表示し、CPU モードが host-model として設定されていることを確認します。

    # virsh dumpxml testguest
    [...]
    <cpu mode='host-model' check='partial'>
      <model fallback='allow'/>
    </cpu>
    [...]

トラブルシューティング

  • デバイスを変更すると仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、バックアップとして作成しておいた XML 設定ファイルを再読み込みして XML 設定を復元します。

    # virsh define testguest.xml
注記

仮想マシンの XML 構成を変更する場合は、virsh edit コマンド (virsh edit testguest など) も使用できます。ただし、より詳細な変更にはこの方法を使用しないでください。構成を壊し、仮想マシンの起動を妨げる可能性が高くなります。

関連情報

  • man virt-xml コマンド

13.3.3. 仮想マシンからのデバイスの削除

仮想デバイスを削除することで、仮想マシンの機能を変更できます。たとえば、仮想マシンから仮想ディスクデバイスが不要になった場合は、削除できます。

次の手順は、コマンドラインインターフェース (CLI) を使用して、仮想マシンから仮想デバイスを削除する方法を示しています。ディスクや NIC などの一部のデバイスは、using the RHEL 9 web console 仮想マシンから削除することもできます。

前提条件

  • オプション:virsh dumpxml vm-name を使用してファイルに出力を送って、仮想マシンの XML 構成のバックアップを作成します。たとえば、以下は、Motoko 仮想マシンの設定のバックアップファイル motoko.xml を作成します。
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

手順

  1. デバイスの定義を付けて、virt-xml --remove-device コマンドを使用します。以下に例を示します。

    • 以下は、シャットダウン後に、稼働中の仮想マシン testguest から vdb としてマークされているストレージデバイスを削除します。

      # virt-xml testguest --remove-device --disk target=vdb
      Domain 'testguest' defined successfully.
      Changes will take effect after the domain is fully powered off.
    • 次は、稼働中の稼働マシン testguest2 からすぐに USB フラッシュドライブデバイスを削除します。

      # virt-xml testguest2 --remove-device --update --hostdev type=usb
      Device hotunplug successful.
      Domain 'testguest2' defined successfully.

トラブルシューティング

  • デバイスを取り外すと仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、バックアップとして作成しておいた XML 設定ファイルを再読み込みして XML 設定を復元します。

    # virsh define testguest.xml

関連情報

  • man virt-xml コマンド

13.4. Web コンソールを使用したホストデバイスの管理

仮想マシン (VM) の機能を変更するには、Red Hat Enterprise Linux 9 Web コンソールを使用して、VM に接続されているホストデバイスを管理します。

ホストデバイスは、ホストシステムに接続されている物理デバイスです。要件に基づいて、VM がこれらのハードウェアデバイスおよびコンポーネントに直接アクセスできるようにすることができます。

Web コンソールを使用して以下を行うことができます。

13.4.1. Web コンソールを使用した仮想マシンに接続されているデバイスの表示

仮想マシンに接続されているデバイスを追加または変更する前に、仮想マシンに接続されているデバイスを表示できます。以下の手順では、Web コンソールを使用してこのようなデバイスを表示する方法を説明します。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    仮想マシンの詳細情報を含む新しいページが開きます。

    仮想マシンインターフェースを表示するページ。
  2. ホストデバイス セクションまでスクロールします。

    仮想マシンのホストデバイスセクションを表示するページ。

13.4.2. Web コンソールを使用した仮想マシンへのデバイスの接続

仮想マシン (VM) に特定の機能を追加するには、Web コンソールを使用してホストデバイスを VM に接続します。

注記

複数のホストデバイスを同時に接続することはできません。一度に接続できるデバイスは 1 つだけです。

詳細は、RHEL 9 Known Issues を参照してください。

前提条件

  • PCI デバイスを接続している場合は、hostdev 要素の managed 属性のステータスが、yes に設定されていることを確認してください。

    注記

    PCI デバイスを VM に接続するときは、hostdev 要素の managed 属性を省略したり、no に設定したりしないでください。設定している場合は、PCI デバイスを VM に渡すときに、PCI デバイスをホストから自動的に切り離すことができなくなります。また、VM をオフにしたときに、ホストに自動的に再接続することもできません。

    その結果、ホストが応答しなくなったり、予期せずシャットダウンしたりする可能性があります。

    managed 属性のステータスは、VM の XML 設定で確認できます。次の例では、Ag47 VM の XML 設定を開きます。

    # virsh edit Ag47
  • 仮想マシンからの重要なデータのバックアップを作成する。
  • オプション:VM の XML 設定をバックアップします。たとえば、Centurion VM をバックアップするには、次のようにします。

    # virsh dumpxml Centurion > Centurion.xml
  • Web コンソールの VM プラグインが システムにインストールされている

手順

  1. 仮想マシン インターフェイスで、ホストデバイスを接続する VM をクリックします。

    新しいページが開き、選択した VM に関する基本情報を含む 概要 セクションと、VM のグラフィカルインターフェイスにアクセスするための コンソール セクションが表示されます。

  2. ホストデバイス までスクロールします。

    ホストデバイス セクションには、VM に接続されているデバイスに関する情報と、デバイスを 追加 または 削除 するためのオプションが表示されます。

    選択した VM のホストデバイスセクションを表示するイメージ。
  3. ホストデバイスの追加 をクリックします。

    ホストデバイスの追加 ダイアログが表示されます。

    「ホストデバイスの追加」ダイアログボックスを表示しているイメージ。
  4. VM に接続するデバイスを選択します。
  5. 追加 をクリックします。

    選択したデバイスが VM に接続されます。

検証

  • VM を実行し、デバイスが ホストデバイス セクションに表示されるかどうかを確認します。

13.4.3. Web コンソールを使用した仮想マシンからのデバイスの削除

リソースを解放するか、VM の機能を変更するか、またはその両方を行うには、Web コンソールを使用して VM を変更し、不要になったホストデバイスを削除します。

警告

デバイスと USB デバイスのバス番号の相関が正しくないため、Web コンソールを使用して接続された USB ホストデバイスを削除できない場合があります。

詳細は、RHEL 9 Known Issues を参照してください。

回避策として、"virsh" ユーティリティーを使用して、VM の XML 設定から USB デバイスの <hostdev> 部分を削除します。次の例では、Ag47 VM の XML 設定を開きます。

# virsh edit Ag47

前提条件

  • Web コンソールの VM プラグインが システムにインストールされている
  • オプション:virsh dumpxml vm-name を使用してファイルに出力を送って、仮想マシンの XML 構成のバックアップを作成します。たとえば、以下は、Motoko 仮想マシンの設定のバックアップファイル motoko.xml を作成します。
# virsh dumpxml Motoko > motoko.xml
# cat motoko.xml
<domain type='kvm' xmlns:qemu='http://libvirt.org/schemas/domain/qemu/1.0'>
  <name>Motoko</name>
  <uuid>ede29304-fe0c-4ca4-abcd-d246481acd18</uuid>
  [...]
</domain>

手順

  1. 仮想マシン インターフェイスで、ホストデバイスを削除する VM をクリックします。

    新しいページが開き、選択した VM に関する基本情報を含む 概要 セクションと、VM のグラフィカルインターフェイスにアクセスするための コンソール セクションが表示されます。

  2. ホストデバイス までスクロールします。

    ホストデバイス セクションには、VM に接続されているデバイスに関する情報と、デバイスを 追加 または 削除 するためのオプションが表示されます。

    選択した VM のホストデバイスセクションを表示するイメージ。
  3. VM から削除するデバイスの横にある 削除 ボタンをクリックします。

    「デバイスの削除確認」ダイアログが表示されます。

    接続されている仮想デバイスを削除するオプションを表示するイメージ。
  4. 削除 をクリックします。

    デバイスが VM から削除されます。

トラブルシューティング

  • ホストデバイスを取り外すことで、仮想マシンが起動できなくなる場合は、virsh define ユーティリティーを使用して、以前にバックアップした XML 設定ファイルを再ロードして XML 設定を復元します。

    # virsh define motoko.xml

13.5. 仮想 USB デバイスの管理

仮想マシンを使用する場合は、ホストシステムに接続されているフラッシュドライブや Web マッピングなどの USB デバイスにアクセスし、制御できます。このシナリオでは、ホストシステムはデバイスの制御を仮想マシンに渡します。これは USB パススルーとしても知られています。

次のセクションでは、コマンドラインを使用して次のことを行う方法を説明します。

13.5.1. 仮想マシンへの USB デバイスの割り当て

USB デバイスを仮想マシンに割り当てるには、仮想マシンの XML 設定ファイルに USB デバイス情報を含めることができます。

前提条件

  • 仮想マシンにパススルーするデバイスがホストに接続されていることを確認します。

手順

  1. 仮想マシンに接続する USB のバスおよびデバイス値を見つけます。

    たとえば、次のコマンドは、ホストに接続されている USB デバイスの一覧を表示します。この例で使用するデバイスは、デバイス 005 としてバス 001 にアタッチされています。

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. virt-xml ユーティリティーを --add-device 引数と共に使用します。

    たとえば、次のコマンドは、USB フラッシュドライブを Library 仮想マシンに接続します。

    # virt-xml Library --add-device --hostdev 001.005
    Domain 'Library' defined successfully.
注記

実行中の仮想マシンに USB デバイスを接続するには、--update 引数を直前のコマンドに追加します。

検証

  • 仮想マシンを実行し、デバイスが存在し、予想通りに機能するかどうかをテストします。
  • virsh dumpxml コマンドを使用して、デバイスの XML 定義が仮想マシンの XML 設定ファイルの <devices> セクションに追加されたかどうかを確認します。

    # virsh dumpxml Library
    [...]
    <hostdev mode='subsystem' type='usb' managed='yes'>
      <source>
        <vendor id='0x0407'/>
        <product id='0x6252'/>
        <address bus='1' device='5'/>
      </source>
      <alias name='hostdev0'/>
      <address type='usb' bus='0' port='3'/>
    </hostdev>
    [...]

関連情報

13.5.2. 仮想マシンからの USB デバイスの削除

仮想マシンから USB デバイスを削除するには、仮想マシンの XML 設定から USB デバイス情報を削除できます。

手順

  1. 仮想マシンから削除する USB のバスおよびデバイス値を見つけます。

    たとえば、次のコマンドは、ホストに接続されている USB デバイスの一覧を表示します。この例で使用するデバイスは、デバイス 005 としてバス 001 にアタッチされています。

    # lsusb
    [...]
    Bus 001 Device 003: ID 2567:0a2b Intel Corp.
    Bus 001 Device 005: ID 0407:6252 Kingston River 2.0
    [...]
  2. virt-xml ユーティリティーを --remove-device 引数と共に使用します。

    たとえば、次のコマンドは、Library 仮想マシンから、バス 001 でデバイス 005 としてホストに接続されている USB フラッシュドライブを削除します。

    # virt-xml Library --remove-device --hostdev 001.005
    Domain 'Library' defined successfully.
注記

実行中の仮想マシンから USB デバイスを削除するには、--update 引数を直前のコマンドに追加します。

検証

  • 仮想マシンを実行し、デバイスがデバイスの一覧から削除されたかどうかを確認します。

関連情報

13.6. 仮想光学ドライブの管理

仮想マシンを使用する場合は、ホストの ISO イメージに保存されている情報にアクセスできます。これを行うには、CD ドライブや DVD ドライブなどの仮想光学ドライブとして、ISO イメージを仮想マシンに割り当てます。

次のセクションでは、コマンドラインを使用して次のことを行う方法を説明します。

13.6.1. 仮想マシンへの光学ドライブの割り当て

ISO イメージを仮想光学ドライブとして割り当てるには、仮想マシンの XML 設定ファイルを編集し、新しいドライブを追加します。

前提条件

  • ISO イメージをローカルホストに保存する必要があります。
  • ISO イメージへのパスを知っている必要があります。

手順

  • --add-device 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、/MC/tank/ ディレクトリーに保存されている Doc10 ISO イメージを、DN1 仮想マシンに割り当てます。

    # virt-xml DN1 --add-device --disk /MC/tank/Doc10.iso,device=cdrom
    Domain 'DN1' defined successfully.

検証

  • 仮想マシンを実行し、デバイスが存在し、予想通りに機能するかどうかをテストします。

関連情報

13.6.2. 仮想光学ドライブでの ISO イメージの置き換え

仮想マシンに仮想光学ドライブとして割り当てられた ISO イメージを置き換えるには、仮想マシンの XML 設定ファイルを編集し、置き換えを指定します。

前提条件

  • ISO イメージをローカルホストに保存する必要があります。
  • ISO イメージへのパスを知っている必要があります。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/MC/tank/Doc10.iso'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --edit 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、ターゲット sda で仮想マシン DN1 に接続された ISO イメージ Doc10 を、/Dvrs/current/ ディレクトリーに保存されている ISO イメージ DrDN に置き換えます。

    # virt-xml DN1 --edit target=sda --disk /Dvrs/current/DrDN.iso
    Domain 'DN1' defined successfully.

検証

  • 仮想マシンを実行し、デバイスが置き換えられているかどうかをテストし、期待どおりに機能します。

関連情報

  • man virt-xml コマンド

13.6.3. 仮想光学ドライブからの ISO イメージの削除

仮想マシンに接続されている仮想光学ドライブから ISO イメージを削除するには、仮想マシンの XML 設定ファイルを編集します。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk>
      ...
      <source file='/Dvrs/current/DrDN'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --edit 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、仮想マシン DN1 に接続されている CD ドライブから、ISO イメージ DrDN を削除します。

    # virt-xml DN1 --edit target=sda --disk path=
    Domain 'DN1' defined successfully.

検証

  • 仮想マシンを実行し、イメージが使用できなくなったことを確認します。

関連情報

  • man virt-xml コマンド

13.6.4. 仮想マシンからの光学ドライブの削除

仮想マシンに接続されている光学ドライブを削除するには、仮想マシンの XML 設定ファイルを編集します。

手順

  1. CD-ROM が仮想マシンに接続されているターゲットデバイスを見つけます。この情報は、仮想マシンの XML 設定ファイルにあります。

    たとえば、次のコマンドは、CD-ROM のターゲットデバイスが sda である DN1 仮想マシンの XML 設定ファイルを表示します。

    # virsh dumpxml DN1
    ...
    <disk type='file' device='cdrom'>
      <driver name='qemu' type='raw'/>
      <target dev='sda' bus='sata'/>
      ...
    </disk>
    ...
  2. --remove-device 引数を指定して virt-xml ユーティリティーを使用します。

    たとえば、次のコマンドは、ターゲット sda として接続された光学ドライブを仮想マシン DN1 から削除します。

    # virt-xml DN1 --remove-device --disk target=sda
    Domain 'DN1' defined successfully.

検証

  • デバイスが仮想マシンの XML 設定ファイルに一覧表示されていないことを確認します。

関連情報

  • man virt-xml コマンド

13.7. SR-IOV デバイスの管理

エミュレートされた仮想デバイスは、多くの場合、ハードウェアネットワークデバイスよりも多くの CPU およびメモリーを使用します。これにより、仮想マシンのパフォーマンスを制限できます。ただし、仮想化ホストのデバイスが SR-IOV (Single Root I/O Virtualization) に対応する場合は、この機能を使用してデバイスのパフォーマンスを向上し、仮想マシンの全体的なパフォーマンスを向上させることができます。

13.7.1. SR-IOV とは

SR-IOV (Single-root I/O virtualization) は、1 つの PCIe (PCI Express) デバイスが、ホストに、複数の個別の PCI デバイス (仮想機能 (VF) と呼ばれます) をホストシステムに表示できるようにする仕様です。このデバイスはそれぞれ以下のようになります。

  • 元の PCIe デバイスと同一または同様のサービスを提供できます。
  • ホストの PCI バス上にある別のアドレスに表示されます。
  • VFIO の割り当てを使用して、別の仮想マシンに割り当てることができます。

たとえば、1 つの SR-IOV 対応ネットワークデバイスが、VF を複数の仮想マシンに提示できます。すべての VF は同じ物理カード、同じネットワーク接続、同じネットワークケーブルを使用しますが、各仮想マシンは直接そのハードウェアネットワークデバイスを制御し、ホストのリソースは使用しません。

SR-IOV の仕組み

SR-IOV 機能は、以下の PCIe 機能の導入により可能になりました。

  • Physical Function (PF) - デバイス (ネットワークなど) の機能をホストに提供しますが、一連の VF を作成して管理することもできる PCIe 機能。SR-IOV 対応の各デバイスには、1 つ以上の PF があります。
  • Virtual Function (VF) - 独立したデバイスとして動作する軽量の PCIe 機能。各 VF は PF から派生します。デバイスが持つことができる VF の最大数は、デバイスのハードウェアによって異なります。各 VF は、一度に 1 台の仮想マシンにのみ割り当てることができますが、1 台の仮想マシンには複数の VF を割り当てることができます。

仮想マシンは、VF を仮想デバイスとして認識します。たとえば、SR-IOV ネットワークデバイスによって作成された VF は、物理ネットワークカードがホストシステムに表示されるのと同じように、割り当てられた仮想マシンへのネットワークカードとして表示されます。

図13.1 SR-IOV アーキテクチャー

virt SR IOV

利点

エミュレートされたデバイスではなく SR-IOV VF を使用する主な利点は以下のとおりです。

  • パフォーマンスが向上する
  • ホストの CPU およびメモリーリソースの使用が減少する

たとえば、vNIC として仮想マシンに接続する VF は、物理 NIC とほぼ同じレベルで実行され、準仮想化またはエミュレートされた NIC よりもはるかに適しています。特に、複数の VF を 1 台のホスト上で同時に使用する場合に、パフォーマンス上のメリットは重要です。

デメリット

  • PF の設定を変更する場合は、最初に PF により公開される VF の数をゼロに変更する必要があります。したがって、このような VF が提供するデバイスを、デバイスが割り当てられている仮想マシンから削除する必要もあります。
  • SR-IOV VF など、VFIO が割り当てられたデバイスが接続された仮想マシンは、別のホストに移行することができません。場合によっては、割り当てられたデバイスをエミュレートされたデバイスとペアにすることにより、この制限を回避できます。たとえば、割り当てられたネットワーク VF をエミュレートされた vNIC に ボンディング を行い、移行前に VF を削除できます。
  • さらに、VFIO が割り当てたデバイスには仮想マシンのメモリーの固定 (ピニング) が必要になるため、仮想マシンのメモリー消費が増加し、仮想マシンのメモリーバルーンが使用できなくなります。

13.7.2. SR-IOV ネットワークデバイスの仮想マシンへの割り当て

Intel ホストまたは AMD ホストの仮想マシンに SR-IOV ネットワークデバイスを割り当てるには、VF (Virtual Function) をホストの SR-IOV 対応ネットワークインターフェースから作成し、VF をデバイスとして、指定された仮想マシンに割り当てます。詳細は、次の手順を参照してください。

前提条件

  • ホストの CPU およびファームウェアは、IOMMU (I/O Memory Management Unit) に対応している。

    • Intel CPU を使用している場合は、Intel VT-d (Virtualization Technology for Directed I/O) に対応する必要があります。
    • AMD CPU を使用している場合は、AMD-Vi 機能に対応している必要があります。
  • ホストシステムが、アクセス制御サービス (ACS) を使用して PCIe トポロジーの DMA (Direct Memory Access) 分離を提供している。この点をシステムベンダーに確認してください。

    詳細は、「SR-IOV 実装に関するハードウェアの考慮事項」を参照してください。

  • 物理ネットワークデバイスが SR-IOV をサポートしている。システムのネットワークデバイスが SR-IOV に対応しているかどうかを確認するには、lspci -v コマンドを使用して、出力で Single Root I/O Virtualization (SR-IOV) を探します。

    # lspci -v
    [...]
    02:00.0 Ethernet controller: Intel Corporation 82576 Gigabit Network Connection (rev 01)
    	Subsystem: Intel Corporation Gigabit ET Dual Port Server Adapter
    	Flags: bus master, fast devsel, latency 0, IRQ 16, NUMA node 0
    	Memory at fcba0000 (32-bit, non-prefetchable) [size=128K]
    [...]
    	Capabilities: [150] Alternative Routing-ID Interpretation (ARI)
    	Capabilities: [160] Single Root I/O Virtualization (SR-IOV)
    	Kernel driver in use: igb
    	Kernel modules: igb
    [...]
  • VF の作成に使用するホストのネットワークインターフェースが実行中である。たとえば、eth1 インターフェースをアクティブにして、実行していることを確認するには、次のコマンドを実行します。

    # ip link set eth1 up
    # ip link show eth1
    8: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT qlen 1000
       link/ether a0:36:9f:8f:3f:b8 brd ff:ff:ff:ff:ff:ff
       vf 0 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 1 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 2 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
       vf 3 MAC 00:00:00:00:00:00, spoof checking on, link-state auto
  • SR-IOV デバイス割り当てを有効にするには、ホスト BIOS およびカーネルで IOMMU 機能を有効にする必要があります。そのためには、以下を行います。

    • Intel ホストで VT-d を有効にします。

      • Intel ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、intel_iommu=on パラメーターおよび iommu=pt パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 intel_iommu=on iommu=pt"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • Intel ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. intel_iommu = on iommu=pt パラメーターを使用して GRUB 設定を再生成します。

          # grubby --args="intel_iommu=on iommu=pt" --update-kernel DEFAULT
        2. ホストを再起動します。
    • AMD ホストで、AMD-Vi を有効にします。

      • AMD ホストが複数のブートエントリーを使用する場合は、以下を行います。

        1. /etc/default/grub ファイルを編集し、iommu=pt パラメーターを GRUB_CMDLINE_LINUX 行の末尾に追加します。

          GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rhel_dell-per730-27-swap rd.lvm.lv=rhel_dell-per730-27/root rd.lvm.lv=rhel_dell-per730-27/swap console=ttyS0,115200n81 iommu=pt"
        2. GRUB 設定を再生成します。

          # grub2-mkconfig -o /boot/grub2/grub.cfg
        3. ホストを再起動します。
      • AMD ホストがブートエントリーを 1 つ使用する場合は、以下を行います。

        1. iommu=pt パラメーターで GRUB 設定を再生成します。

          # grubby --args="iommu=pt" --update-kernel DEFAULT
        2. ホストを再起動します。

手順

  1. オプション:ネットワークデバイスが使用できる VF の最大数を確認します。これを実行するには、次のコマンドを使用して、eth1 を SR-IOV 互換のネットワークデバイスに置き換えます。

    # cat /sys/class/net/eth1/device/sriov_totalvfs
    7
  2. 次のコマンドを実行して、Virtual Function (VF) を作成します。

    # echo VF-number > /sys/class/net/network-interface/device/sriov_numvfs

    上記コマンドでは、以下のようになります。

    • VF-number には、PF に作成する VF の数を入力します。
    • network-interface は、VF が作成されるネットワークインターフェースの名前に置き換えます。

    以下の例では、eth1 ネットワークインターフェースから 2 つの VF を作成します。

    # echo 2 > /sys/class/net/eth1/device/sriov_numvfs
  3. VF が追加されたことを確認します。

    # lspci | grep Ethernet
    82:00.0 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:00.1 Ethernet controller: Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection (rev 01)
    82:10.0 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
    82:10.2 Ethernet controller: Intel Corporation 82599 Ethernet Controller Virtual Function (rev 01)
  4. VF の作成に使用したネットワークインターフェース用の udev ルールを作成して、作成した VF を永続化します。たとえば、eth1 インターフェースの場合は、/etc/udev/rules.d/eth1.rules ファイルを作成し、以下の行を追加します。

    ACTION=="add", SUBSYSTEM=="net", ENV{ID_NET_DRIVER}=="ixgbe", ATTR{device/sriov_numvfs}="2"

    これにより、ホストの起動時に ixgbe ドライバーを使用する 2 つの VF が eth1 インターフェースで自動的に利用できるようになります。永続的な SR-IOV デバイスが必要ない場合は、この手順を省略します。

    警告

    現在、Broadcom NetXtreme II BCM57810 アダプターで VF を永続化しようとすると、上記の設定が正しく機能しません。また、このアダプターに基づく VF を Windows 仮想マシンに接続することは、現在信頼性がありません。

  5. 新しく追加された VF インターフェイスデバイスの 1 つを実行中の仮想マシンにホットプラグします。

    # virsh attach-interface testguest1 hostdev 0000:82:10.0 --managed --live --config

検証

  • この手順が成功すると、ゲストオペレーティングシステムが新しいネットワークインターフェースカードを検出します。

13.7.3. SR-IOV 割り当てに対応しているデバイス

すべてのデバイスを SR-IOV に使用できるわけではありません。以下のデバイスは、RHEL 9 の SR-IOV との互換性がテストおよび検証されています。

ネットワークデバイス

  • Intel 82599ES 10 Gigabit Ethernet Controller - ixgbe ドライバーを使用します。
  • Intel Ethernet Controller XL710 Series - i40e ドライバーを使用します。
  • Mellanox ConnectX-5 Ethernet Adapter Cards - mlx5_core ドライバーを使用します。
  • Intel Ethernet Network Adapter XXV710 - i40e ドライバーを使用します。
  • Intel 82576 Gigabit Ethernet Controller - igb ドライバーを使用します。
  • Broadcom NetXtreme II BCM57810 - bnx2x ドライバーを使用します。

13.8. 仮想 SCSI デバイスの管理

Small Computer System Interface (SCSI) デバイスは、ホストに接続され、接続とデータ転送に SCSI 標準を使用する物理デバイスです。

ホストに接続された他の物理デバイスと同様に、これらの SCSI デバイスの制御と管理を、ホストシステムで実行されている任意の仮想マシン (VM) に渡すことができます。さらに、SCSI 仮想デバイスを使用すると、永続的な予約を有効にして、特定の VM がこれらのデバイスへの排他的アクセスを要求できるようにすることもできます。Libvirt システム接続Libvirt セッション接続 の両方で永続的な予約を設定できます。

13.8.1. SCSI 仮想デバイスの永続的な予約について

仮想マシン (VM) は、それに接続されている SCSI 仮想デバイスにアクセスして使用できます。通常、一度に 1 つのシステムまたは VM が SCSI デバイスにアクセスします。このようなシナリオでは、SCSI デバイスはターゲットと呼ばれ、アクセスしているシステムまたは VM はイニシエーターと呼ばれます。SCSI デバイスの永続的な予約により、複数のイニシエータからのアクセスが同期されます。つまり、永続的な予約では、予約を実行したイニシエーターだけがターゲットにアクセスでき、他のイニシエーターはブロックされます。

永続的な予約を実行するには、特権アクセスが必要です。QEMU のような特権のないプログラムは、永続的な予約を設定できません。ただし、qemu-pr-helper という別のプログラムを使用して、予約を設定できます。qemu-pr-helper には特別な権限があり、QEMU およびストレージと直接通信します。さらに、Device Mapper Multipath を使用して SCSI デバイスを設定すると、qemu-pr-helper プログラムは VM からの予約をすべてのパスに適用します。

重要

永続的な予約を使用する VM は移行しないでください。永続的な予約は、それを作成したイニシエーターに関連付けられます。

13.8.2. システム接続での SCSI 仮想デバイスの永続的な予約の有効化

特権付きの Libvirt システム接続 qemu:///system を使用している場合は、SCSI 仮想デバイスを設定して永続的な予約コマンドを許可します。これにより、仮想マシン (VM) が SCSI デバイスへの排他的アクセスを要求できるようになります。

注記

次の手順では、永続的な予約のみを有効にします。VM 上で動作する専用ソフトウェアを使用して、デバイスの実際の予約を実行できます。

前提条件

  • VM がシャットダウンされていることを確認します。

手順

  1. multipath.conf ファイルを開き、reservation_key ファイル パラメーターを デフォルト セクションに追加します。

    注記

    reserved_key file パラメーターを追加すると、multipathd サービスは、デバイスの World Wide Identifier (WWID) と予約キーの間のマップされたパスを保存します。パスは /etc/multipath/prkeys ファイルに保存されます。multipathd サービスは、このファイルを使用して予約を新しいパスに適用します。

    ...
    defaults
      {
      user_friendly_names yes
      find_multipaths yes
      reservation_key file
      }
    ...
  2. VM の XML 設定ファイルを開きます。以下に例を示します。

    # virsh edit Example-Machine
  3. <source> セクションの下で、次の行を仮想ディスクの説明に追加します。

    ...
    <disk type="block" device="lun">
      <driver ... type="raw"/>
      <source dev="..." >
        <reservations managed="yes"/>
      </source>
      <target dev="..." bus="scsi"/>
    </disk>
    ...
  4. ファイルを保存し、VM を再起動します。

検証

  • デバイスの予約状況を確認してください。

    永続的予約を正常に有効化していない場合、次のコマンドはエラーになります。

    # sg_persist -k /dev/sdb
    LIO-ORG disk1 4.0
    Peripheral device type: disk
    PR generation=0x1, there are NO registered reservation keys

13.8.3. セッション接続での SCSI 仮想デバイスの永続的な予約の有効化

特権のない Libvirt セッション接続 (qemu:///session) を使用している場合は、SCSI 仮想デバイスを設定して永続的な予約コマンドを許可します。これにより、仮想マシン (VM) が SCSI デバイスへの排他的アクセスを要求できるようになります。

注記

次の手順では、永続的な予約のみを有効にします。VM 上で動作する専用ソフトウェアを使用して、デバイスの実際の予約を実行できます。

前提条件

  • VM がシャットダウンされていることを確認します。
  • QEMU Persistent Helper サービスが実行されていることを確認します。

    # systemctl is-active qemu-pr-helper.socket

手順

  1. multipath.conf ファイルを開き、reservation_key ファイル パラメーターを デフォルト セクションに追加します。

    注記

    reserved_key file パラメーターを追加すると、multipathd サービスは、デバイスの World Wide Identifier (WWID) と予約キーの間のマップされたパスを保存します。パスは /etc/multipath/prkeys ファイルに保存されます。multipathd サービスは、このファイルを使用して予約を新しいパスに適用します。

    ...
    defaults
      {
      user_friendly_names yes
      find_multipaths yes
      reservation_key file
      }
    ...
  2. VM の XML 設定ファイルを開きます。以下に例を示します。

    # virsh edit Example-Machine
  3. <source> セクションの下で、次の行を仮想ディスクの説明に追加します。

    <source>
      …
        <reservations managed='no'>
          <source type='unix' mode='client' path='/run/qemu-pr-helper.sock'/>
        </reservations>
      …
    </source>
  4. ファイルを保存し、VM を再起動します。

検証

  • デバイスの予約状況を確認してください。

    永続的予約を正常に有効化していない場合、次のコマンドはエラーになります。

    # sg_persist -k /dev/sdb
    LIO-ORG disk1 4.0
    Peripheral device type: disk
    PR generation=0x1, there are NO registered reservation keys

13.9. IBM Z の仮想マシンへの DASD デバイスの割り当て

vfio-ccw 機能を使用すると、直接アクセスストレージデバイス (DASD) を仲介デバイスとして IBM Z ホスト上の仮想マシンに割り当てることができます。これにより、たとえば仮想マシンは z/OS データセットにアクセスできるか、割り当てられた DASD を z/OS マシンに提供できるようになります。

前提条件

  • お使いのホストシステムが IBM Z ハードウェアアーキテクチャーを使用し、FICON プロトコルをサポートしている。
  • ターゲットの仮想マシンが Linux ゲストオペレーティングシステムを使用している。
  • mdevctl パッケージがインストールされている。

    # dnf install mdevctl
  • driverctl パッケージがインストールされている。

    # dnf install driverctl
  • ホストに必要なカーネルモジュールがロードされている。確認するには、次のコマンドを実行します。

    # lsmod | grep vfio

    出力に以下のモジュールが含まれている必要があります。

    • vfio_ccw
    • vfio_mdev
    • vfio_iommu_type1
  • 仮想マシンによる排他的使用のために予備の DASD デバイスがあり、デバイスの識別子が分かっている。

    この手順では、0.0.002c を例として使用しています。コマンドを実行する場合は、0.0.002c を DASD デバイスーの ID に置き換えます。

手順

  1. DASD デバイスのサブチャネル識別子を取得します。

    # lscss -d 0.0.002c
    Device   Subchan.  DevType CU Type Use  PIM PAM POM  CHPIDs
    ----------------------------------------------------------------------
    0.0.002c 0.0.29a8  3390/0c 3990/e9 yes  f0  f0  ff   02111221 00000000

    この例では、サブチャンネルID は 0.0.29a8 として検出されます。以下のコマンドでは、0.0.29a8 を、検出されたデバイスのサブチャンネル ID に置き換えます。

  2. 前の手順の lscss コマンドでヘッダー出力のみが表示され、デバイスインフォメーションが表示されない場合は、以下の手順を実行します。

    1. cio_ignore一覧からデバイスを削除します。

      # cio_ignore -r 0.0.002c
    2. ゲスト OS で、仮想マシンの edit the kernel command line を編集し、! マークを使用して、cio_ignore= で始まる行にデバイス識別子を追加します (まだ存在しない場合)。

      cio_ignore=all,!condev,!0.0.002c
    3. ホストで手順 1 を繰り返し、サブチャネル識別子を取得します。
  3. サブチャネルは vfio_ccw パススルードライバーにバインドします。

    # driverctl -b css set-override 0.0.29a8 vfio_ccw
    注記

    これにより、0.0.29a8 サブチャンネルが vfio_ccw に永続的にバインドされます。つまり、DASD はホストコンピューターでは使用できなくなります。ホストでデバイスを使用する必要がある場合は、まず 'vfio_ccw' への自動バインディングを削除し、サブチャンネルをデフォルトドライバーに再バインドする必要があります。

    # driverctl -b css unset-override 0.0.29a8

  4. UUID を生成します。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba12345a
  5. 生成された UUID を使用して DASD 仲介デバイスを作成します。

    # mdevctl start --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a --parent 0.0.29a8 --type vfio_ccw-io
  6. 仲介デバイスを永続化します。

    # mdevctl define --auto --uuid 30820a6f-b1a5-4503-91ca-0c10ba12345a
  7. 実行中の場合は、仮想マシンをシャットダウンします。
  8. 仲介デバイスを仮想マシンに接続します。これを行うには、virsh edit ユーティリティーを使用して仮想マシンの XML 設定を編集し、以下のセクションを XML に追加します。uuid の値は、前の手順で生成した UUID に置き換えます。

    <hostdev mode='subsystem' type='mdev' model='vfio-ccw'>
      <source>
        <address uuid="30820a6f-b1a5-4503-91ca-0c10ba12345a"/>
      </source>
    </hostdev>

検証

  1. libvirt が仲介 DASD デバイスに割り当てた識別子を取得します。これを行うには、仮想マシンの XML 設定を表示して、vfio-ccw デバイスを見つけます。

    # virsh dumpxml vm-name
    
    <domain>
    [...]
        <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-ccw'>
          <source>
            <address uuid='10620d2f-ed4d-437b-8aff-beda461541f9'/>
          </source>
          <alias name='hostdev0'/>
          <address type='ccw' cssid='0xfe' ssid='0x0' devno='0x0009'/>
        </hostdev>
    [...]
    </domain>

    この例では、デバイスに割り当てられた識別子は 0.0.0009 です。

  2. 仮想マシンを起動し、ゲスト OS にログインします。
  3. ゲスト OS で、DASD デバイスがリストされていることを確認します。以下に例を示します。

    # lscss | grep 0.0.0009
    0.0.0009 0.0.0007  3390/0c 3990/e9      f0  f0  ff   12212231 00000000
  4. ゲスト OS で、デバイスをオンラインに設定します。以下に例を示します。

    # chccwdev -e 0.0009
    Setting device 0.0.0009 online
    Done

第14章 仮想マシン用のストレージの管理

仮想マシンは、物理マシンと同様に、データ、プログラム、およびシステムファイル用にストレージを必要とします。仮想マシン管理者は、物理ストレージまたはネットワークベースのストレージを仮想マシンに仮想ストレージとして割り当てることができます。また、基本となるハードウェアに関係なく、ストレージを仮想マシンに表示する方法を変更することもできます。

次のセクションでは、仮想マシンのストレージの種類、その機能、および CLI または Web コンソールを使用してそれらを管理する方法を説明します。

14.1. 仮想マシンのストレージの概要

仮想マシンのストレージを初めて使用するユーザー、またはその仕組みがよくわからないユーザー向けに、次のセクションでは仮想マシンストレージのさまざまなコンポーネントの概要、その機能、管理の基本、Red Hat が提供するサポートされるソリューションを説明します。

以下の情報が記載されています。

14.1.1. ストレージプールの概要

ストレージプールは、仮想マシンにストレージを提供するために、libvirt が管理するファイル、ディレクトリー、またはストレージデバイスです。ストレージプールは、ストレージボリュームに分割できます。ストレージボリュームは、仮想マシンイメージを保存するか、追加のストレージとして仮想マシンに割り当てられます。

さらに、複数の仮想マシンが同じストレージプールを共有できるため、ストレージリソースの割り当てが改善されます。

  • ストレージプールは永続的または一時的なものにできます。

    • 永続ストレージプールは、ホストマシンのシステムを再起動しても維持します。このvirsh pool-defineを使用して、永続ストレージプールを作成できます。
    • 一時的なストレージプールは、ホストが再起動すると削除されます。virsh pool-create コマンドを使用すると、一時的なストレージプールを作成できます。

ストレージプールのストレージタイプ

ストレージプールは、ローカルまたはネットワークベース (共有) にできます。

  • ローカルストレージのプール

    ローカルストレージプールは、ホストサーバーに直接割り当てることができます。これには、ローカルデバイスのローカルディレクトリー、直接接続したディスク、物理パーティション、および論理ボリューム管理 (LVM) ボリュームグループが含まれます。

    ローカルストレージプールは、移行を必要としない、または仮想マシンが多数存在する、開発、テスト、および小規模なデプロイメントに役立ちます。

  • ネットワーク (共有) ストレージプール

    ネットワークストレージプールには、標準プロトコルを使用してネットワーク経由で共有されるストレージデバイスが含まれます。

14.1.2. ストレージボリュームの概要

ストレージプールは、ストレージボリュームに分類されます。ストレージボリュームは、libvirt が処理する物理パーティション、LVM 論理ボリューム、ファイルベースのディスクイメージ、その他のストレージタイプの抽象化です。ストレージボリュームは、基盤となるハードウェアに関係なく、ローカルのストレージデバイス (ディスクなど) として仮想マシンに表示されます。

ホストマシンでは、ストレージボリュームは、その名前と、そこから派生するストレージプールの識別子で参照されます。virsh コマンドラインでは、--pool storage_pool volume_name の形式を取ります。

たとえば、guest_images プールにある firstimage という名前のボリュームに関する情報を表示するには、次のコマンドを実行します。

# virsh vol-info --pool guest_images firstimage
  Name:             firstimage
  Type:             block
  Capacity:         20.00 GB
  Allocation:       20.00 GB

14.1.3. libvirt を使用したストレージ管理

libvirt リモートプロトコルを使用して、仮想マシンストレージのあらゆる側面を管理できます。これらの操作は、リモートホストで実行することもできます。したがって、RHEL Web コンソールなどの libvirt を使用する管理アプリケーションを使用して、仮想マシンのストレージを設定するために必要なすべてのタスクを実行できます。

libvirt の API を使用すると、ストレージプールのボリューム一覧を照会したり、そのストレージプールの容量、割り当て、利用可能なストレージに関する情報を取得したりできます。それに対応するストレージプールの場合は、libvirt の API を使用して、ストレージボリュームを作成、クローン作成、サイズ変更、および削除することもできます。また、libvirt API を使用してデータをストレージボリュームにアップロードしたり、ストレージボリュームからデータをダウンロードしたり、ストレージボリュームのデータを消去したりできます。

14.1.4. ストレージ管理の概要

ストレージの管理で利用可能なオプションを説明するため、以下の例では、mount -t nfs nfs.example.com:/path/to/share /path/to/data を使用するサンプルの NFS サーバーを説明します。

ストレージ管理者は、以下を実行できます。

  • 仮想ホストに NFS ストレージプールを定義し、エクスポートするサーバーパスと、クライアントのターゲットパスを記述できます。その結果、libvirt は、libvirt の起動時に自動的に、または libvirt の実行中に必要に応じてストレージをマウントできます。
  • ストレージプールとストレージボリュームは、名前で仮想マシンに追加するだけです。ターゲットパスをボリュームに追加する必要はありません。そのため、ターゲットのクライアントパスが変更しても、仮想マシンには影響を及ぼしません。
  • ストレージプールを自動起動するように設定できます。これを行うと、libvirt は、libvirt の起動時に指定されたディレクトリーに NFS 共有ディスクを自動的にマウントします。libvirt は、コマンド mount nfs.example.com:/path/to/share/vmdata と同様に、指定されたディレクトリーに共有をマウントします。
  • libvirt の API を使用して、ストレージボリュームパスをクエリーできます。このようなストレージボリュームは、基本的には NFS 共有ディスクにあるファイルです。その後、これらのパスを、仮想マシンのブロックデバイスのソースストレージを説明する仮想マシンの XML 定義のセクションにコピーできます。
  • NFS の場合は、libvirt の API を使用するアプリケーションを使用して、ストレージプール (NFS 共有内のファイル) にあるストレージボリュームを、プールのサイズ (共有のストレージ容量) の上限まで作成および削除できます。

    すべてのストレージプールタイプがボリュームの作成および削除に対応しているわけではないことに注意してください。

  • ストレージプールは、不要になったときに停止できます。ストレージプールを停止する (pool-destroy) と、開始操作が取り消されます。この場合は、NFS 共有のマウントが解除されます。コマンドの名前が記載されているにも関わらず、共有上のデータは destroy 操作で修正されません。詳細は、man virsh を参照してください。

14.1.5. 対応しているストレージプールのタイプと、対応していないストレージプールのタイプ

対応しているストレージプールの種類

以下は、RHEL で対応しているストレージプールタイプの一覧です。

  • ディレクトリーベースのストレージプール
  • ディスクベースのストレージプール
  • パーティションベースのストレージプール
  • iSCSI ベースのストレージプール
  • LVM ベースのストレージプール
  • NFS ベースのストレージプール
  • vHBA デバイスを使用した SCSI ベースのストレージプール
  • マルチパスベースのストレージプール
  • RBD ベースのストレージプール

対応していないストレージプールの種類

以下は、RHEL で対応していないlibvirt ストレージプールタイプの一覧です。

  • sheepdog ベースのストレージプール
  • vstorage ベースのストレージプール
  • ZFS ベースのストレージプール
  • iSCSI-direct ストレージプール
  • GlusterFS ストレージプール

14.2. CLI を使用した仮想マシンストレージプールの管理

CLI を使用して、ストレージプールの次の側面を管理し、仮想マシン (VM) にストレージを割り当てることができます。

14.2.1. CLI でストレージプール情報の表示

CLI を使用して、ストレージプールに関する詳細の一部またはすべてが含まれるストレージプールの一覧を表示できます。また、一覧表示されているストレージプールにフィルターをかけることもできます。

手順

  • virsh pool-list コマンドを使用して、ストレージプール情報を表示します。

    # virsh pool-list --all --details
     Name                State    Autostart  Persistent    Capacity  Allocation   Available
     default             running  yes        yes          48.97 GiB   23.93 GiB   25.03 GiB
     Downloads           running  yes        yes         175.62 GiB   62.02 GiB  113.60 GiB
     RHEL-Storage-Pool   running  yes        yes         214.62 GiB   93.02 GiB  168.60 GiB

関連情報

  • virsh pool-list --help コマンド

14.2.2. CLI でディレクトリーベースのストレージプールの作成

ディレクトリーベースのストレージプールは、マウントされている既存のファイルシステムのディレクトリーを基にしています。これは、たとえば、ファイルシステムの残りの領域を他の目的で使用する場合に役立ちます。virsh ユーティリティーを使用して、ディレクトリーベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーがディレクトリーのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'dir' supported='yes'"

    コマンドの出力が表示される場合には、ディレクトリープールはサポートの対象です。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用し、ディレクトリータイプのストレージプールを定義して作成します。たとえば、 /guest_images ディレクトリーを使用する guest_images_dir という名前のストレージプールを作成するには以下を実行します。

    # virsh pool-define-as guest_images_dir dir --target "/guest_images"
    Pool guest_images_dir defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、Directory-based storage pool parameters を参照してください。

  2. ストレージプールのターゲットパスの作成

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_dir
      Pool guest_images_dir built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_dir     inactive   no
  4. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_dir
      Pool guest_images_dir started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  5. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_dir
      Pool guest_images_dir marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_dir
      Name:           guest_images_dir
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.3. CLI でディスクベースのストレージプールの作成

ディスクベースのストレージプールでは、プールはディスクパーティションに基づいています。これは、たとえば、ディスクパーティション全体を仮想マシン (VM) ストレージ専用にする場合に便利です。virsh ユーティリティーを使用して、ディスクベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーがディスクベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'disk' supported='yes'"

    コマンドの出力が表示される場合には、ディスクベースのプールはサポートの対象です。

  • ストレージプールのベースとなるデバイスを準備します。この目的のために、パーティション (/dev/sdb1 など) または LVM ボリュームを優先します。ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセスを仮想マシンに提供すると、その仮想マシンはそれをパーティション分割するか、その上に独自の LVM グループを作成する可能性があります。これにより、ホストでシステムエラーが発生する可能性があります。

    ただし、ストレージプールにブロックデバイス全体を使用する必要がある場合、Red Hat は、デバイス上の重要なパーティションを GRUB の os-prober 機能から保護することをお勧めします。これを行うには、/etc/default/grub ファイルを編集して、次のいずれかの設定を適用します。

    • os-prober を無効にします。

      GRUB_DISABLE_OS_PROBER=true
    • os-prober が特定のパーティションを検出しないようにします。以下に例を示します。

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"
  • ストレージプールを作成する前に、選択したストレージデバイス上のデータをバックアップします。使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用し、ディスクタイプのストレージプールを定義して作成します。次の例では、/dev/sdb デバイスを使用する guest_images_disk という名前のストレージプールを作成します。

    # virsh pool-define-as guest_images_disk disk --source-format=gpt --source-dev=/dev/sdb --target /dev
    Pool guest_images_disk defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、Disk-based storage pool parameters を参照してください。

  2. ストレージプールのターゲットパスの作成

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_disk
      Pool guest_images_disk built
    注記

    ターゲットパスの構築は、ディスクベース、ファイルシステムベース、論理ストレージプールにのみ必要です。libvirt は、overwrite オプションが指定されている場合を除き、ソースストレージデバイスのデータフォーマットが、選択したストレージプールタイプと異なることを検出すると、ビルドに失敗します。

  3. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_disk    inactive   no
  4. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_disk
      Pool guest_images_disk started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  5. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_disk
      Pool guest_images_disk marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_disk
      Name:           guest_images_disk
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.4. CLI でファイルシステムベースのストレージプールの作成

マウントされていないファイルシステムにストレージプールを作成する場合は、ファイルシステムベースのストレージプールを使用します。このストレージプールは、指定のファイルシステムのマウントポイントを基にしています。virsh ユーティリティーを使用すると、ファイルシステムベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーがファイルシステムベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'fs' supported='yes'"

    コマンドの出力が表示される場合には、ファイルベースのストレージプールはサポートの対象です。

  • ストレージプールのベースとなるデバイスを準備します。この目的のために、パーティション (/dev/sdb1 など) または LVM ボリュームを優先します。ディスク全体またはブロックデバイス (/dev/sdb など) への書き込みアクセスを仮想マシンに提供すると、その仮想マシンはそれをパーティション分割するか、その上に独自の LVM グループを作成する可能性があります。これにより、ホストでシステムエラーが発生する可能性があります。

    ただし、ストレージプールにブロックデバイス全体を使用する必要がある場合、Red Hat は、デバイス上の重要なパーティションを GRUB の os-prober 機能から保護することをお勧めします。これを行うには、/etc/default/grub ファイルを編集して、次のいずれかの設定を適用します。

    • os-prober を無効にします。

      GRUB_DISABLE_OS_PROBER=true
    • os-prober が特定のパーティションを検出しないようにします。以下に例を示します。

      GRUB_OS_PROBER_SKIP_LIST="5ef6313a-257c-4d43@/dev/sdb1"

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用し、ファイルシステムタイプのストレージプールを定義して作成します。たとえば、/dev/sdc1 パーティションを使用し、/guest_images ディレクトリーにマウントされるストレージプールに guest_images_fs という名前を指定して作成するには以下を実行します。

    # virsh pool-define-as guest_images_fs fs --source-dev /dev/sdc1 --target /guest_images
    Pool guest_images_fs defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、Filesystem-based storage pool parameters を参照してください。

  2. ストレージプールのターゲットパスを定義します。

    virsh pool-build コマンドを使用して、フォーマット済みファイルシステムのストレージプール用のストレージプールターゲットパスを作成し、ストレージソースデバイスを初期化し、データのフォーマットを定義します。

    # virsh pool-build guest_images_fs
      Pool guest_images_fs built
    
    # ls -la /guest_images
      total 8
      drwx------.  2 root root 4096 May 31 19:38 .
      dr-xr-xr-x. 25 root root 4096 May 31 19:38 ..
  3. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_fs      inactive   no
  4. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_fs
      Pool guest_images_fs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  5. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_fs
      Pool guest_images_fs marked as autostarted

検証

  1. virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_fs
      Name:           guest_images_fs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB
  2. ファイルシステムのターゲットパスに lost+found ディレクトリーがあることを確認します。これは、デバイスがマウントされていることを示しています。

    # mount | grep /guest_images
      /dev/sdc1 on /guest_images type ext4 (rw)
    
    # ls -la /guest_images
      total 24
      drwxr-xr-x.  3 root root  4096 May 31 19:47 .
      dr-xr-xr-x. 25 root root  4096 May 31 19:38 ..
      drwx------.  2 root root 16384 May 31 14:18 lost+found

14.2.5. CLI で iSCSI ベースのストレージプールの作成

iSCSI (Internet Small Computer Systems Interface) は、データストレージ施設をリンクするための IP ベースのストレージネットワーク標準です。iSCSI サーバーにストレージプールを置く場合は、virsh ユーティリティーを使用して、iSCSI ベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーが iSCSI ベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'iscsi' supported='yes'"

    コマンドの出力が表示される場合には、iSCSI ベースのストレージプールはサポートの対象です。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用し、iSCSI タイプのストレージプールを定義して作成します。たとえば、server1.example.comiqn.2010-05.com.example.server1:iscsirhel7guest IQN を使用し、/dev/disk/by-path パスにマウントされるストレージプールに guest_images_iscsi という名前を指定して作成するには、以下を実行します。

    # virsh pool-define-as --name guest_images_iscsi --type iscsi --source-host server1.example.com --source-dev iqn.2010-05.com.example.server1:iscsirhel7guest --target /dev/disk/by-path
    Pool guest_images_iscsi defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、iSCSI-based storage pool parameters を参照してください。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_iscsi   inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_iscsi
      Pool guest_images_iscsi started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_iscsi
      Pool guest_images_iscsi marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_iscsi
      Name:           guest_images_iscsi
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.6. CLI で LVM ベースのストレージプールの作成

LVM ボリュームグループに含まれるストレージプールが必要な場合は、virsh ユーティリティーを使用して LVM ベースのストレージプールを作成できます。

推奨事項

LVM ベースのストレージプールを作成する前に、以下の点に注意してください。

  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
  • LVM ベースのストレージプールは、ボリュームグループです。virsh ユーティリティーを使用してボリュームグループを作成できますが、この方法では、作成したボリュームグループに 1 つのデバイスしか作成できません。複数のデバイスを持つボリュームグループを作成する場合は、代わりに LVM ユーティリティーを使用します。詳細は、How to create a volume group in Linux with LVM を参照してください。

    ボリュームグループの詳細は、Red Hat Enterprise Linux Logical Volume Manager Administration Guide を参照してください。

  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。virsh コマンドを使用して新しいパーティションまたはデバイスをアクティブにすると、パーティションがフォーマットされ、すべてのデータが消去されます。この手順で説明しているように、ホストの既存のボリュームグループを使用している場合は、何も消去されません。

前提条件

  • ハイパーバイザーが LVM ベースのストレージプールをサポートしていることを確認します。

    # virsh pool-capabilities | grep "'logical' supported='yes'"

    コマンドの出力が表示される場合には、LVM ベースのストレージプールはサポートの対象です。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用して、LVM タイプのストレージプールを定義して作成します。たとえば、次のコマンドは、lvm_vg ボリュームグループを使用し、/dev/lvm_vg ディレクトリーにマウントされている guest_images_lvm という名前のストレージプールを作成します。

    # virsh pool-define-as guest_images_lvm logical --source-name lvm_vg --target /dev/lvm_vg
    Pool guest_images_lvm defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、LVM-based storage pool parameters を参照してください。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                   State      Autostart
      -------------------------------------------
      default                active     yes
      guest_images_lvm       inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_lvm
      Pool guest_images_lvm started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_lvm
      Pool guest_images_lvm marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_lvm
      Name:           guest_images_lvm
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.7. CLI を使用した LVM ベースのストレージプールの作成

ネットワークファイルシステム (NFS) サーバーにストレージプールを置く場合は、virsh ユーティリティーを使用して、NFS ベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーが NFS ベースのストレージプールに対応していることを確認します。

    # virsh pool-capabilities | grep "<value>nfs</value>"

    コマンドの出力が表示される場合には、NFS ベースのストレージプールはサポートの対象です。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドを使用し、NFS タイプのストレージプールを定義して作成します。たとえば、ターゲットディレクトリー /var/lib/libvirt/images/nfspool を使用してサーバーディレクトリー /home/net_mount にマウントされる、 IP が 111.222.111.222 の NFS サーバーを使用するストレージプールに guest_images_netfs の名前を指定して作成するには、以下を実行します。

    # virsh pool-define-as --name guest_images_netfs --type netfs --source-host='111.222.111.222' --source-path='/home/net_mount' --source-format='nfs' --target='/var/lib/libvirt/images/nfspool'

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、NFS-based storage pool parameters を参照してください。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_netfs   inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_netfs
      Pool guest_images_netfs started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_netfs
      Pool guest_images_netfs marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_netfs
      Name:           guest_images_netfs
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.8. CLI で vHBA デバイスを使用した SCSI ベースのストレージプールを作成する手順

SCSI (Small Computer System Interface) デバイスにストレージプールを設定する場合は、ホストが、仮想ホストバスアダプター (vHBA) を使用して SCSI デバイスに接続できる必要があります。その後、virsh ユーティリティーを使用して、SCSI ベースのストレージプールを作成できます。

前提条件

  • ハイパーバイザーが SCSI ベースのストレージプールをサポートしている。

    # virsh pool-capabilities | grep "'scsi' supported='yes'"

    コマンドの出力が表示される場合には、SCSI ベースのストレージプールはサポートの対象です。

  • 先に vHBA を作成し、vHBA デバイスで SCSI ベースのストレージプールを作成できるようにしてある。詳細は、Creating vHBAs を参照してください。

手順

  1. ストレージプールを作成します。

    virsh pool-define-as コマンドで、vHBA を使用して SCSI ストレージプールを定義して作成します。たとえば、以下は、guest_images_vhba という名前のストレージプールを作成します。このストレージプールは、親アダプター (scsi_host3)、ワールドワイドポート番号 (5001a4ace3ee047d)、ワールドワイドノード番号 (5001a4a93526d0a1) で識別される vHBA を使用します。ストレージプールは /dev/disk/ ディレクトリーにマウントされます。

    # virsh pool-define-as guest_images_vhba scsi --adapter-parent scsi_host3 --adapter-wwnn 5001a4a93526d0a1 --adapter-wwpn 5001a4ace3ee047d --target /dev/disk/
    Pool guest_images_vhba defined

    作成するストレージプールの XML 構成がすでにある場合は、XML を基にプールを定義することもできます。詳細は、Parameters for SCSI-based storage pools with vHBA devices を参照してください。

  2. プールが作成されたことを確認します。

    virsh pool-list コマンドを使用して、プールが作成されたことを確認します。

    # virsh pool-list --all
    
      Name                 State      Autostart
      -----------------------------------------
      default              active     yes
      guest_images_vhba    inactive   no
  3. ストレージプールを起動します。

    virsh pool-start コマンドを使用して、ストレージプールをマウントします。

    # virsh pool-start guest_images_vhba
      Pool guest_images_vhba started
    注記

    virsh pool-start コマンドは、永続ストレージプールにのみ必要です。一時的なストレージプールは、作成時に自動的に起動します。

  4. (必要に応じて) 自動起動をオンにします。

    デフォルトでは、virsh コマンドで定義されたストレージプールは、仮想化サービスが起動するたびに自動的に起動するようには設定されていません。virsh pool-autostart コマンドを使用して、ストレージプールが自動的に起動するように設定します。

    # virsh pool-autostart guest_images_vhba
      Pool guest_images_vhba marked as autostarted

検証

  • virsh pool-info コマンドを使用して、ストレージプールが running 状態であることを確認します。報告されるサイズが期待どおりであるか、また、自動開始が正しく設定されているかを確認してください。

    # virsh pool-info guest_images_vhba
      Name:           guest_images_vhba
      UUID:           c7466869-e82a-a66c-2187-dc9d6f0877d0
      State:          running
      Persistent:     yes
      Autostart:      yes
      Capacity:       458.39 GB
      Allocation:     197.91 MB
      Available:      458.20 GB

14.2.9. CLI でストレージプールの削除

ホストシステムからストレージプールを削除するには、プールを停止して、その XML 定義を削除する必要があります。

手順

  1. virsh pool-list コマンドを使用して、定義済みストレージプールを一覧表示します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    Downloads            active     yes
    RHEL-Storage-Pool   active     yes
  2. virsh pool-destroy コマンドを使用して、削除するストレージプールを停止します。

    # virsh pool-destroy Downloads
    Pool Downloads destroyed
  3. オプション:ストレージプールの種類によっては、virsh pool-delete コマンドを使用して、ストレージプールが含まれるディレクトリーを削除できます。これを実行するには、ディレクトリーが空である必要があります。

    # virsh pool-delete Downloads
    Pool Downloads deleted
  4. virsh pool-undefine コマンドを使用して、ストレージプールの定義を削除します。

    # virsh pool-undefine Downloads
    Pool Downloads has been undefined

検証

  • ストレージプールが削除されたことを確認します。

    # virsh pool-list --all
    Name                 State      Autostart
    -------------------------------------------
    default              active     yes
    RHEL-Storage-Pool   active     yes

14.3. Web コンソールを使用した仮想マシンストレージプールの管理

RHEL Web コンソールを使用すると、ストレージプールを管理して、仮想マシン (VM) にストレージを割り当てることができます。

Web コンソールを使用して以下を行うことができます。

14.3.1. Web コンソールでストレージプール情報の表示

Web コンソールを使用して、システムで利用可能なストレージプールの詳細情報を表示できます。ストレージプールを使用すると、仮想マシンのディスクイメージを作成できます。

前提条件

手順

  1. 仮想マシン インターフェースで ストレージプール をクリックします。

    ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    既存のストレージプールの情報を含む Web コンソールのストレージプールタブを表示するイメージ

    この情報には以下が含まれます。

    • 名前 - ストレージプールの名前
    • サイズ - 現在の割り当てとストレージプールの合計容量。
    • 接続 - ストレージプールのアクセスに使用される接続
    • 状態 - ストレージプールのステータス
  2. 情報を表示するストレージプールの横にある矢印をクリックします。

    行が展開され、選択したストレージプールに関する詳細情報を含む「概要」ペインが表示されます。

    選択したストレージプールの詳細情報を表示するイメージ。

    この情報には以下が含まれます。

    • ターゲットパス - dirまたはnetfs などのディレクトリーによってサポートされるストレージプールの種類のソース。
    • 永続的 - ストレージプールの設定が永続的であるかどうかを示します。
    • 自動起動 - システムの起動時にストレージプールが自動的に起動するかどうかを示します。
    • 種類 - ストレージプールの種類。
  3. ストレージプールに関連付けられているストレージボリュームの一覧を表示する場合は、ストレージボリューム をクリックします。

    ストレージボリュームペインが表示され、設定したストレージボリュームの一覧が表示されます。

    選択したストレージプールに関連付けられているストレージボリュームの一覧を表示するイメージ。

    この情報には以下が含まれます。

    • 名前 - ストレージボリュームの名前。
    • 使用者 - 現在ストレージボリュームを使用している仮想マシン。
    • サイズ - ボリュームのサイズ。

14.3.2. Web コンソールを使用したディレクトリーベースのストレージプールの作成

ディレクトリーベースのストレージプールは、マウントされている既存のファイルシステムのディレクトリーを基にしています。これは、たとえば、ファイルシステムの残りの領域を他の目的で使用する場合に役立ちます。

前提条件

手順

  1. RHEL Web コンソールで、Virtual Machines タブの Storage pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    Image displaying all the storage pools currently configured on the host
  2. Create storage pool をクリックします。

    Create storage pool ダイアログボックスが表示されます。

  3. ストレージプールの名前を入力します。
  4. Type ドロップダウンメニューで、Filesystem directory を選択します。

    「ストレージプールの作成」ダイアログボックスが表示されるイメージ
    注記

    ドロップダウンメニューに Filesystem directory オプションが表示されない場合、ハイパーバイザーはディレクトリーベースのストレージプールをサポートしていません。

  5. 以下の情報を入力します。

    • ターゲットパス - dirまたはnetfs などのディレクトリーによってサポートされるストレージプールの種類のソース。
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  6. 作成 をクリックします。

    ストレージプールが作成され、Create Storage Pool ダイアログが閉じて、新しいストレージプールがストレージプールの一覧に表示されます。

14.3.3. Web コンソールを使用した NFS ベースのストレージプールの作成

NFS ベースのストレージプールは、サーバーでホストされているファイルシステムに基づいています。

前提条件

手順

  1. RHEL Web コンソールで、Virtual Machines タブの Storage pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    Image displaying all the storage pools currently configured on the host
  2. Create storage pool をクリックします。

    Create storage pool ダイアログボックスが表示されます。

  3. ストレージプールの名前を入力します。
  4. Type ドロップダウンメニューで、Network file system を選択します。

    「ストレージプールの作成」ダイアログボックスが表示されるイメージ
    注記

    ドロップダウンメニューに Network file system オプションが表示されない場合、ハイパーバイザーは nfs ベースのストレージプールをサポートしていません。

  5. 残りの情報を入力します。

    • Target path - ターゲットを指定するパス。ストレージプールに使用されるパスになります。
    • Host - マウントポイントがあるネットワークサーバーのホスト名。これは、ホスト名または IP アドレスになります。
    • Source path - ネットワークサーバーで使用されるディレクトリー。
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  6. 作成 をクリックします。

    ストレージプールが作成されます。Create storage pool ダイアログが閉じ、新しいストレージプールがストレージプールの一覧に表示されます。

14.3.4. Web コンソールを使用した iSCSI ベースのストレージプールの作成

iSCSI ベースのストレージプールは、iSCSI (Internet Small Computer Systems Interface) をベースとする、データストレージ施設をリンクするための IP ベースのストレージネットワーク規格です。

前提条件

手順

  1. RHEL Web コンソールで、Virtual Machines タブの Storage pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    Image displaying all the storage pools currently configured on the host
  2. Create storage pool をクリックします。

    Create storage pool ダイアログボックスが表示されます。

  3. ストレージプールの名前を入力します。
  4. Type ドロップダウンメニューで、iSCSI target を選択します。

    「ストレージプールの作成」ダイアログボックスが表示されるイメージ
  5. 残りの情報を入力します。

    • Target Path - ターゲットを指定するパス。ストレージプールに使用されるパスになります。
    • Host - ISCSI サーバーのホスト名または IP アドレス。
    • Source path - iSCSI ターゲットの一意の iSCSI 修飾名 (IQN)。
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  6. 作成 をクリックします。

    ストレージプールが作成されます。Create storage pool ダイアログが閉じ、新しいストレージプールがストレージプールの一覧に表示されます。

14.3.5. Web コンソールを使用したディスクベースのストレージプールの作成

ディスクベースのストレージプールは、ディスクパーティション全体を使用します。

警告
  • 使用されている libvirt のバージョンに応じて、ディスクをストレージプール専用にすると、現在ディスクデバイスに格納されているすべてのデータが再フォーマットされて消去される可能性があります。ストレージプールを作成する前に、ストレージデバイスのデータのバックアップを作成することを強く推奨します。
  • ディスク全体またはブロックデバイスが仮想マシンに渡されると、仮想マシンはそれをパーティション分割するか、その上に独自の LVM グループを作成する可能性があります。これにより、ホストマシンがこのようなパーティションまたは LVM グループを検出し、エラーが発生する可能性があります。

    これらのエラーは、パーティションまたは LVM グループを手動で作成して仮想マシンに渡す場合にも発生する可能性があります。

    これらのエラーを回避するには、代わりにファイルベースのストレージプールを使用します。

前提条件

手順

  1. RHEL Web コンソールで、Virtual Machines タブの Storage pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    Image displaying all the storage pools currently configured on the host
  2. Create storage pool をクリックします。

    Create storage pool ダイアログボックスが表示されます。

  3. ストレージプールの名前を入力します。
  4. Type ドロップダウンメニューで、Physical disk device を選択します。

    「ストレージプールの作成」ダイアログボックスが表示されるイメージ
    注記

    ドロップダウンメニューに Physical disk device オプションが表示されない場合、ハイパーバイザーはディスクベースのストレージプールをサポートしていません。

  5. 残りの情報を入力します。

    • Target Path - ターゲットデバイスを指定するパス。ストレージプールに使用されるパスになります。
    • Source path - ストレージデバイスを指定するパス。たとえば、/dev/sdb です。
    • Format - パーティションテーブルのタイプ。
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  6. 作成 をクリックします。

    ストレージプールが作成されます。Create storage pool ダイアログが閉じ、新しいストレージプールがストレージプールの一覧に表示されます。

14.3.6. Web コンソールを使用した LVM ベースのストレージプールの作成

LVM ベースのストレージプールはボリュームグループに基づいており、論理ボリュームマネージャー (LVM) を使用して管理できます。ボリュームグループは、単一のストレージ構造を作成する複数の物理ボリュームの組み合わせです。

注記
  • LVM ベースのストレージプールは、LVM の柔軟性を完全には提供しません。
  • libvirt は、シン論理ボリュームに対応しますが、シンストレージプールの機能は提供しません。
  • LVM ベースのストレージプールには、完全なディスクパーティションが必要です。virsh コマンドを使用して新しいパーティションまたはデバイスをアクティブにすると、パーティションがフォーマットされ、すべてのデータが消去されます。この手順で説明しているように、ホストの既存のボリュームグループを使用している場合は、何も消去されません。
  • 複数のデバイスを持つボリュームグループを作成する場合は、代わりに LVM ユーティリティーを使用します。詳細は、How to create a volume group in Linux with LVM を参照してください。

    ボリュームグループの詳細は、Red Hat Enterprise Linux Logical Volume Manager Administration Guide を参照してください。

前提条件

手順

  1. RHEL Web コンソールで、Virtual Machines タブの Storage pools をクリックします。

    Storage pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    Image displaying all the storage pools currently configured on the host
  2. Create storage pool をクリックします。

    Create storage pool ダイアログボックスが表示されます。

  3. ストレージプールの名前を入力します。
  4. Type ドロップダウンメニューで、LVM volume group を選択します。

    「ストレージプールの作成」ダイアログボックスが表示されるイメージ
    注記

    ドロップダウンメニューに LVM volume group オプションが表示されない場合、ハイパーバイザーは LVM ベースのストレージプールをサポートしていません。

  5. 残りの情報を入力します。

    • Source volume grou - 使用する LVM ボリュームグループの名前。
    • 起動 - ホストの起動時にストレージプールが起動するかどうか
  6. 作成 をクリックします。

    ストレージプールが作成されます。Create storage pool ダイアログが閉じ、新しいストレージプールがストレージプールの一覧に表示されます。

14.3.7. Web コンソールでストレージプールの削除

ホストまたはネットワーク上のリソースを解放するためにストレージプールを削除して、システムパフォーマンスを向上させることができます。ストレージプールを削除すると、他の仮想マシンが使用可能なリソースが解放されます。

重要

明示的に指定されていない限り、ストレージプールを削除しても、そのプール内のストレージボリュームは同時に削除されません。

RHEL Web コンソールを使用してストレージプールを削除するには、以下の手順を参照してください。

注記

削除せずにストレージプールを一時的に非アクティブにする場合は、Web コンソールでストレージプールの非アクティブ化 を参照してください。

前提条件

手順

  1. Virtual Machines タブの Storage Pools をクリックします。

    Storage Pools 画面が表示され、設定されているストレージプールの一覧が示されます。

    ホストに現在設定されているすべてのストレージプールを表示するイメージ。
  2. ストレージプール 画面で、削除するストレージプールをクリックします。

    行が展開し、概要 ペインが表示されます。このペインには選択したストレージプールの基本情報が記載され、ストレージプールの非アクティブ化または削除を制御できます。

    選択したストレージプールに関する詳細情報を表示するイメージ。
  3. メニューボタン をクリックし、削除 をクリックします。

    確認ダイアログが表示されます。

    「ストレージプールのデフォルトの削除」ダイアログボックスが表示されるイメージ
  4. オプション:プール内のストレージボリュームを削除するには、ダイアログでチェックボックスを選択します。
  5. 削除 をクリックします。

    ストレージプールが削除されます。直前の手順でチェックボックスを選択した場合は、関連付けられたストレージボリュームも削除されます。

14.3.8. Web コンソールでストレージプールの非アクティブ化

ストレージプールを永続的に削除しない場合は、代わりに一時的に非アクティブにすることができます。

ストレージプールを非アクティブにすると、そのプールに新しいボリュームを作成することができません。ただし、そのプールにボリュームがある仮想マシンは引き続き実行します。これは、たとえばプールに作成できるボリューム数を制限してシステムパフォーマンスを向上させることができます。

RHEL Web コンソールを使用してストレージプールを非アクティブ化するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    ホストに現在設定されているすべてのストレージプールを表示するイメージ。
  2. ストレージプール 画面で、非アクティブにするストレージプールをクリックします。

    行が展開し、概要ペインが表示されます。このペインには選択したストレージプールの基本情報が記載され、仮想マシンの非アクティブ化および削除を制御できます。

    選択したストレージプールに関する詳細情報を表示するイメージ。
  3. 非アクティブ をクリックします。

    ストレージプールは非アクティブになります。

14.4. ストレージプールを作成するパラメーター

必要なストレージプールのタイプに基づいて、その XML 設定ファイルを変更し、特定のタイプのストレージプールを定義できます。本セクションは、さまざまなタイプのストレージプールを作成するために必要な XML パラメーターと、例を説明します。

14.4.1. ディレクトリーベースのストレージプールのパラメーター

XML 設定ファイルを使用してディレクトリーベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_dir

パラメーター

以下の表は、ディレクトリーベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.1 ディレクトリーベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='dir'>

ストレージプールの名前

<name>name</name>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、/guest_images ディレクトリーに基づいたストレージプールの XML ファイルの例です。

<pool type='dir'>
  <name>dirpool</name>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

14.4.2. ディスクベースのストレージプールのパラメーター

XML 設定ファイルを使用してディスクベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_disk

パラメーター

以下の表は、ディスクベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.2 ディスクベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='disk'>

ストレージプールの名前

<name>name</name>

ストレージデバイスを指定するパス。たとえば、/dev/sdb です。

<source>
   <path>source_path</path>
</source>

ターゲットデバイスを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、ディスクに基づいたストレージプールに対する XML ファイルの例です。

<pool type='disk'>
  <name>phy_disk</name>
  <source>
    <device path='/dev/sdb'/>
    <format type='gpt'/>
  </source>
  <target>
    <path>/dev</path>
  </target>
</pool>

14.4.3. ファイルシステムベースのストレージプールパラメーター

XML 設定ファイルを使用してファイルシステムベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_fs

パラメーター

次の表は、ファイルシステムベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.3 ファイルシステムベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='fs'>

ストレージプールの名前

<name>name</name>

パーミッションを指定するパス。たとえば、/dev/sdc1 です。

<source>
   <device path=device_path />

ファイルシステムのタイプ (ext4 など)。

    <format type=fs_type />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
    <path>path-to-pool</path>
</target>

以下は、/dev/sdc1 パーティションに基づいたストレージプールに対する XML ファイルの例です。

<pool type='fs'>
  <name>guest_images_fs</name>
  <source>
    <device path='/dev/sdc1'/>
    <format type='auto'/>
  </source>
  <target>
    <path>/guest_images</path>
  </target>
</pool>

14.4.4. iSCSI ベースのストレージプールパラメーター

XML 設定ファイルを使用して iSCSI ベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_iscsi

パラメーター

以下の表は、iSCSI ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.4 iSCSI ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='iscsi'>

ストレージプールの名前

<name>name</name>

ホストの名前

<source>
  <host name=hostname />

iSCSI IQN

    <device path= iSCSI_IQN />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>/dev/disk/by-path</path>
</target>

(必要に応じて) iSCSI イニシエーターの IQN。これは、ACL が LUN を特定のイニシエーターに制限する場合に限り必要です。

<initiator>
   <iqn name='initiator0' />
</initiator>

注記

iSCSI イニシエーターの IQN は、iscsi コマンドの virsh find-storage-pool-sources-as を使用して指定できます。

以下は、指定した iSCSI に基づいたストレージプールに対する XML ファイルの例です。

<pool type='iscsi'>
  <name>iSCSI_pool</name>
  <source>
    <host name='server1.example.com'/>
    <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
  </source>
  <target>
    <path>/dev/disk/by-path</path>
  </target>
</pool>

14.4.5. LVM ベースのストレージプールパラメーター

XML 設定ファイルを使用して LVM ベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_logical

パラメーター

以下の表は、LVM ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.5 LVM ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='logical'>

ストレージプールの名前

<name>name</name>

ストレージプールのデバイスのパス

<source>
   <device path='device_path' />`

ボリュームグループの名前

    <name>VG-name</name>

仮想グループの形式

    <format type='lvm2' />
</source>

ターゲットパス

<target>
   <path=target_path />
</target>

注記

論理ボリュームグループが複数のディスクパーティションで作成されている場合は、複数のソースデバイスが一覧表示されている可能性があります。以下に例を示します。

<source>
  <device path='/dev/sda1'/>
  <device path='/dev/sdb3'/>
  <device path='/dev/sdc2'/>
  ...
</source>

以下は、指定した LVM に基づいたストレージプールに対する XML ファイルの例です。

<pool type='logical'>
  <name>guest_images_lvm</name>
  <source>
    <device path='/dev/sdc'/>
    <name>libvirt_lvm</name>
    <format type='lvm2'/>
  </source>
  <target>
    <path>/dev/libvirt_lvm</path>
  </target>
</pool>

14.4.6. NFS ベースのストレージプールパラメーター

XML 設定ファイルを使用して NFS ベースのストレージプールを作成または変更する場合は、必要なパラメーターを指定する必要があります。これらのパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_netfs

パラメーター

以下の表は、NFS ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.6 NFS ベースのストレージプールパラメーター

説明XML

ストレージプールの種類

<pool type='netfs'>

ストレージプールの名前

<name>name</name>

マウントポイントがあるネットワークサーバーのホスト名。これは、ホスト名または IP アドレスになります。

<source>
   <host name=hostname
/>

ストレージプールの形式

次のいずれかになります。

    <format type='nfs' />

    <format type='cifs' />

ネットワークサーバーで使用されるディレクトリー

    <dir path=source_path />
</source>

ターゲットを指定するパス。ストレージプールに使用されるパスになります。

<target>
   <path>target_path</path>
</target>

以下は、NFS サーバー file_server/home/net_mount ディレクトリーでのストレージプールの XML ファイルの例です。

<pool type='netfs'>
  <name>nfspool</name>
  <source>
    <host name='file_server'/>
    <format type='nfs'/>
    <dir path='/home/net_mount'/>
  </source>
  <target>
    <path>/var/lib/libvirt/images/nfspool</path>
  </target>
</pool>

14.4.7. vHBA デバイスを使用した SCSI ベースのストレージプールのパラメーター

仮想ホストアダプターバス (vHBA) デバイスを使用する SCSi ベースのストレージプール用の XML 設定ファイルを作成または変更する場合は、XML 設定ファイルに必要な特定のパラメーターを含める必要があります。必要なパラメーターの詳細は、以下の表を参照してください。

virsh pool-define を使用すると、指定したファイルの XML 設定を基にしてストレージプールを作成できます。以下に例を示します。

# virsh pool-define ~/guest_images.xml
  Pool defined from guest_images_vhba

パラメーター

以下の表は、vHBA を使用する iSCSI ベースのストレージプールの XML ファイルに必要なパラメーターの一覧です。

表14.7 vHBA デバイスを使用した SCSI ベースのストレージプールのパラメーター

説明XML

ストレージプールの種類

<pool type='scsi'>

ストレージプールの名前

<name>name</name>

vHBA の識別子。parent 属性はオプションです。

<source>
   <adapter type='fc_host'
   [parent=parent_scsi_device]
   wwnn='WWNN'
   wwpn='WWPN' />
</source>

ターゲットパス。ストレージプールに使用されるパスになります。

<target>
   <path=target_path />
</target>

重要

<path> フィールドが /dev/ の場合、libvirt は、ボリュームデバイスパスで一意の短いデバイスパスを生成します。たとえば、/dev/sdc です。それ以外の場合は、物理ホストパスが使用されます。たとえば、/dev/disk/by-path/pci-0000:10:00.0-fc-0x5006016044602198-lun-0 などです。一意の短いデバイスパスを使用すると、複数のストレージプールで、同じボリュームを複数の仮想マシン (VM) に一覧表示できます。物理ホストのパスを複数の仮想マシンで使用すると、デバイスタイプが重複していることを示す警告が発生することがあります。

注記

parent 属性は、パスを変更して NPIV LUN の使用元となる物理 HBA の親を識別する <adapter> フィールドで使用できます。scsi_hostN フィールドは、vports 属性および max_vports 属性と合わせて、親 ID を作成します。parentparent_wwnnparent_wwpn、または parent_fabric_wwn の属性は、ホストの再起動後に同じ HBA が使用されることを保証するさまざまなレベルを提供します。

  • を指定しないと、libvirt は、NPIV に対応する最初の scsi_hostN アダプターを使用します。
  • のみを指定し、設定に SCSI ホストアダプターを追加すると、問題が発生する可能性があります。
  • parent_wwnn または parent_wwpn を指定すると、ホストの再起動後に同じ HBA が使用されます。
  • ホストの再起動後、parent_fabric_wwn を使用すると、scsi_hostN が使用されたかどうかにかかわらず、同じファブリックの HBA が選択されます。

以下は、vHBA を使用する SCSI ベースのストレージプールの XML ファイルの例です。

  • HBA にある唯一のストレージプール

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
  • parent 属性を使用して SCSI ホストデバイスを識別し、vHBA を 1 つ使用する複数のストレージプールの 1 つ。

    <pool type='scsi'>
      <name>vhbapool_host3</name>
      <source>
        <adapter type='fc_host' parent='scsi_host3' wwnn='5001a4a93526d0a1' wwpn='5001a4ace3ee047d'/>
      </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>

14.5. CLI を使用した仮想マシンのストレージボリュームの管理

CLI を使用して、ストレージプボリュームの次の側面を管理し、仮想マシン (VM) にストレージを割り当てることができます。

14.5.1. CLI でストレージボリューム情報の表示

コマンドラインを使用して、ホストで利用可能なすべてのストレージプールの一覧と、指定したストレージプールの詳細を表示できます。

手順

  1. virsh vol-list コマンドを使用して、指定したストレージプールにあるストレージボリュームを一覧表示します。

    # virsh vol-list --pool RHEL-Storage-Pool --details
     Name                Path                                               Type   Capacity  Allocation
    ---------------------------------------------------------------------------------------------
     .bash_history       /home/VirtualMachines/.bash_history       file  18.70 KiB   20.00 KiB
     .bash_logout        /home/VirtualMachines/.bash_logout        file    18.00 B    4.00 KiB
     .bash_profile       /home/VirtualMachines/.bash_profile       file   193.00 B    4.00 KiB
     .bashrc             /home/VirtualMachines/.bashrc             file   1.29 KiB    4.00 KiB
     .git-prompt.sh      /home/VirtualMachines/.git-prompt.sh      file  15.84 KiB   16.00 KiB
     .gitconfig          /home/VirtualMachines/.gitconfig          file   167.00 B    4.00 KiB
     RHEL_Volume.qcow2   /home/VirtualMachines/RHEL8_Volume.qcow2  file  60.00 GiB   13.93 GiB
  2. virsh vol-info コマンドを使用して、指定したストレージプール内のストレージボリュームを一覧表示します。

    # vol-info --pool RHEL-Storage-Pool --vol RHEL_Volume.qcow2
    Name:           RHEL_Volume.qcow2
    Type:           file
    Capacity:       60.00 GiB
    Allocation:     13.93 GiB

14.5.2. CLI でストレージボリュームの作成および割り当て

ディスクイメージを取得して、仮想ディスクとして仮想マシンに割り当てるには、ストレージボリュームを作成し、その XML 設定を仮想マシンに割り当てます。

前提条件

  • 空き領域が割り当てられていないストレージプールがホストに存在する。

    • ホストのストレージプールを一覧表示して確認します。

      # virsh pool-list --details
      
      Name               State     Autostart   Persistent   Capacity     Allocation   Available
      --------------------------------------------------------------------------------------------
      default            running   yes         yes          48.97 GiB    36.34 GiB    12.63 GiB
      Downloads          running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
      VM-disks           running   yes         yes          175.92 GiB   121.20 GiB   54.72 GiB
    • 既存のストレージプールがない場合は、作成します。詳細は、「仮想マシンのストレージの管理」を参照してください。

手順

  1. virsh vol-create-as コマンドを使用してストレージボリュームを作成します。たとえば、guest-images-fs ストレージプールをもとに 20 GB qcow2 ボリュームを作成するには以下を実行します。

    # virsh vol-create-as --pool guest-images-fs --name vm-disk1 --capacity 20 --format qcow2

    重要:ストレージプールタイプによっては、virsh vol-create-as コマンドがサポートされないため、代わりにストレージボリューム作成の特定のプロセスが必要になります。

    • iSCSI ベース - iSCSI サーバーに事前に iSCSI LUN を準備します。
    • マルチパスベース - multipathd コマンドを使用して、マルチパスを準備または管理します。
    • vHBA ベース - ファイバーチャンネルカードを事前に準備します。
  2. XML ファイルを作成し、そのファイルに以下の行を追加します。このファイルは、ストレージボリュームをディスクとして仮想マシンに追加するために使用します。

    <disk type='volume' device='disk'>
        <driver name='qemu' type='qcow2'/>
        <source pool='guest-images-fs' volume='vm-disk1'/>
        <target dev='hdk' bus='ide'/>
    </disk>

    この例では、前の手順で作成した vm-disk1 ボリュームを使用する仮想ディスクを指定し、このボリュームを ide バスに hdk ディスクとして指定するように設定します。実際の環境に応じてそれぞれのパラメーターを変更します。

    重要:特定のストレージプールタイプでは、別の XML 形式を使用してストレージボリュームディスクを記述する必要があります。

    • マルチパスベース のプールの場合:

      <disk type='block' device='disk'>
      <driver name='qemu' type='raw'/>
      <source dev='/dev/mapper/mpatha' />
      <target dev='sda' bus='scsi'/>
      </disk>
    • RBD ベースのストレージ プールの場合:

        <disk type='network' device='disk'>
          <driver name='qemu' type='raw'/>
          <source protocol='rbd' name='pool/image'>
            <host name='mon1.example.org' port='6321'/>
          </source>
          <target dev='vdc' bus='virtio'/>
        </disk>
  3. XML ファイルを使用して、ストレージボリュームをディスクとして仮想マシンに割り当てます。たとえば、~/vm-disk1.xml で定義したディスクを testguest1 仮想マシンに割り当てるには、以下を実行します。

    # attach-device --config testguest1 ~/vm-disk1.xml

検証

  • 仮想マシンのゲストオペレーティングシステムで、ディスクイメージが未フォーマットかつ未割り当てのディスクとして利用できるようになっていることを確認します。

14.5.3. CLI でストレージボリュームの削除

ホストシステムからストレージボリュームを削除するには、プールを停止して、その XML 定義を削除する必要があります。

前提条件

  • 削除するストレージボリュームを使用する仮想マシンがすべてシャットダウンしている。

手順

  1. virsh vol-list コマンドを使用して、指定したストレージプールにあるストレージボリュームを一覧表示します。

    # virsh vol-list --pool RHEL-SP
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig
     vm-disk1             /home/VirtualMachines/vm-disk1
  2. オプション:virsh vol-wipe コマンドを実行して、ストレージボリュームをワイプします。たとえば、ストレージプールRHEL-SPに関連付けられている vm-disk1 という名前のストレージボリュームを削除する場合は、次のコマンドを実行します。

    # virsh vol-wipe --pool RHEL-SP vm-disk1
    Vol vm-disk1 wiped
  3. virsh vol-delete コマンドを使用して、ストレージボリュームを削除します。たとえば、ストレージプールRHEL-SPに関連付けられている vm-disk1 という名前のストレージボリュームを削除する場合は、次のコマンドを実行します。

    # virsh vol-delete --pool RHEL-SP vm-disk1
    Vol vm-disk1 deleted

検証

  • virsh vol-list を再度実行して、ストレージボリュームが削除されたことを確認します。

    # virsh vol-list --pool RHEL-SP
     Name                 Path
    ---------------------------------------------------------------
     .bash_history        /home/VirtualMachines/.bash_history
     .bash_logout         /home/VirtualMachines/.bash_logout
     .bash_profile        /home/VirtualMachines/.bash_profile
     .bashrc              /home/VirtualMachines/.bashrc
     .git-prompt.sh       /home/VirtualMachines/.git-prompt.sh
     .gitconfig           /home/VirtualMachines/.gitconfig

14.6. Web コンソールを使用した仮想マシンのストレージボリュームの管理

RHEL を使用すると、仮想マシン (VM) にストレージを割り当てるために使用されるストレージボリュームを管理できます。

RHEL Web コンソールを使用して以下を実行できます。

14.6.1. Web コンソールでストレージボリュームの作成

機能している仮想マシンを作成するには、仮想マシンイメージと仮想マシン関連のデータを保存できるローカルストレージデバイスが仮想マシンに割り当てられている必要があります。ストレージプールにストレージボリュームを作成し、それをストレージディスクとして仮想マシンに割り当てることができます。

Web コンソールを使用してストレージボリュームを作成するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    ホストに現在設定されているすべてのストレージプールを表示するイメージ。
  2. ストレージプール 画面で、ストレージボリュームを作成するストレージプールをクリックします。

    行が展開され、選択したストレージプールに関する基本情報を含む概要ペインが表示されます。

    選択したストレージプールの詳細情報を表示するイメージ。
  3. 拡張された行の概要タブの横にある ストレージボリューム をクリックします。

    ストレージボリュームタブが表示され、既存のストレージボリュームが存在する場合は、そのボリュームに関する基本的な情報が表示されます。

    選択したストレージプールに関連付けられているストレージボリュームの一覧を表示するイメージ。
  4. ボリュームの作成 をクリックします。

    ストレージボリュームの作成ダイアログが表示されます。

    「ストレージボリュームの作成」ダイアログボックスが表示されるイメージ
  5. ストレージボリュームの作成ダイアログに、次の情報を入力します。

    • 名前 - ストレージボリュームの名前。
    • サイズ - ストレージボリュームのサイズ (MiB または GiB)
    • フォーマット - ストレージボリュームの形式サポートされているタイプは qcow2 および raw です。
  6. 作成 をクリックします。

    ストレージボリュームが作成され、ストレージボリュームの作成ダイアログが閉じられ、ストレージボリュームの一覧に新しいストレージボリュームが表示されます。

14.6.2. Web コンソールでストレージボリュームの削除

ストレージプールの領域を解放するためにストレージボリュームを削除したり、仮想マシンが切断された場合に関連付けられたストレージ項目を削除したりできます。

RHEL Web コンソールを使用してストレージボリュームを削除するには、以下の手順を参照してください。

前提条件

手順

  1. 仮想マシンタブの上部にある ストレージプール をクリックします。ストレージプール画面が表示され、設定されているストレージプールの一覧が示されます。

    ホストに現在設定されているすべてのストレージプールを表示するイメージ。
  2. ストレージプール 画面で、ストレージボリュームを削除するストレージプールをクリックします。

    行が展開され、選択したストレージプールに関する基本情報を含む概要ペインが表示されます。

    選択したストレージプールの詳細情報を表示するイメージ。
  3. 拡張された行の概要タブの横にある ストレージボリューム をクリックします。

    ストレージボリュームタブが表示され、既存のストレージボリュームが存在する場合は、そのボリュームに関する基本的な情報が表示されます。

    選択したストレージプールに関連付けられているストレージボリュームの一覧を表示するイメージ。
  4. 削除するストレージボリュームを選択します。

    選択したストレージボリュームを削除するオプションを表示するイメージ。
  5. 1 ボリュームの削除 をクリックします。

14.7. Web コンソールを使用した仮想マシンストレージディスクの管理

RHEL を使用すると、仮想マシン (VM) に接続されているストレージディスクを管理できます。

RHEL Web コンソールを使用して以下を実行できます。

14.7.1. Web コンソールで仮想マシンのディスク情報の表示

Web コンソールを使用して、選択した仮想マシンに割り当てられたディスクの詳細情報を表示できます。

前提条件

手順

  1. 情報を表示する仮想マシンをクリックします。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ディスク までスクロールします。

    「ディスク」セクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの 追加削除、または 編集 のオプションが表示されます。

    選択した仮想マシンのディスク使用率を表示するイメージ

この情報には以下が含まれます。

  • デバイス - ディスクのデバイスの種類。
  • 使用済み - 現在割り当てられているディスク容量。
  • 容量 - ストレージボリュームの最大サイズ。
  • バス - エミュレートされるディスクデバイスの種類。
  • アクセス - ディスクが書き込み可能 かどうか、読み取り専用 であるか。raw ディスクの場合は、書き込み可能および共有 へのアクセスを設定することもできます。
  • ソース - ディスクデバイスまたはファイル

14.7.2. Web コンソールで新しいディスクを仮想マシンに追加

新しいディスクを仮想マシンに追加するには、RHEL 9 Web コンソールを使用して、新しいストレージボリュームを作成し、仮想マシンに割り当てます。

前提条件

手順

  1. 仮想マシン インターフェースで、新しいディスクを作成して割り当てる仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ディスク までスクロールします。

    「ディスク」セクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの 追加削除、または 編集 のオプションが表示されます。

    選択した仮想マシンのディスク使用率を表示するイメージ
  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。

    Image displaying the Add Disk dialog box.

  4. 新規作成 オプションを選択します。
  5. 新しいディスクを設定します。

    • プール - 仮想ディスクの作成元であるストレージプールを選択します。
    • 名前 - 作成する仮想ディスクの名前を入力します。
    • サイズ - 作成する仮想ディスクのサイズを入力し、単位 (MiB または GiB) を選択します。
    • フォーマット - 作成する仮想ディスクの形式を選択します。サポートされているタイプは qcow2 および raw です。
    • 永続 -選択すると、仮想ディスクが永続化されます。選択しないと、仮想ディスクは一時的になります。

      注記

      一時的なデバイスは、稼働中の仮想マシンにのみ追加できます。

    • 追加オプション - 仮想ディスクの追加設定を指定します。

      • キャッシュ - キャッシュメカニズムを選択します。
      • バス - エミュレートするディスクデバイスの種類を選択します。
  6. Add をクリックします。

    仮想ディスクが作成され、仮想マシンに接続します。

14.7.3. Web コンソールで既存ディスクを仮想マシンに割り当て

Web コンソールを使用して、既存のストレージボリュームをディスクとして仮想マシンに割り当てることができます。

前提条件

手順

  1. 仮想マシン インターフェースで、新しいディスクを作成して割り当てる仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ディスク までスクロールします。

    「ディスク」セクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの 追加削除、または 編集 のオプションが表示されます。

    選択した仮想マシンのディスク使用率を表示するイメージ
  3. ディスクの追加 をクリックします。

    ディスクの追加ダイアログが表示されます。

    「ディスクの追加」ダイアログボックスが表示されるイメージ。
  4. 既存の使用 ラジオボタンをクリックします。

    ディスクの追加ダイアログに、適切な設定フィールドが表示されます。

    Use Existing オプションを選択して「ディスクの追加」ダイアログボックスを表示するイメージ。width=100%
  5. 仮想マシンのディスクを設定します。

    • プール - 仮想ディスクを割り当てるストレージプールを選択します。
    • ボリューム - 割り当てるストレージボリュームを選択します。
    • 永続性: 仮想マシンの実行中に利用できます。常に接続 チェックボックスを選択して、仮想ディスクを永続化します。仮想ディスクを一時的にするには、チェックボックスをオフにします。
    • 追加オプション - 仮想ディスクの追加設定を指定します。

      • キャッシュ - キャッシュメカニズムを選択します。
      • バス - エミュレートするディスクデバイスの種類を選択します。
  6. 追加 をクリックします。

    選択した仮想ディスクが仮想マシンに割り当てられます。

14.7.4. Web コンソールを使用した仮想マシンからのディスクの割り当て解除

Web コンソールを使用して、仮想マシンからディスクの割り当てを解除できます。

前提条件

手順

  1. 仮想マシン インターフェースで、ディスクの割り当てを解除する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ディスク までスクロールします。

    「ディスク」セクションには、仮想マシンに割り当てられたディスクに関する情報と、ディスクの 追加削除、または 編集 のオプションが表示されます。

    選択した仮想マシンのディスク使用率を表示するイメージ
  3. 仮想マシンから接続を解除するディスクの横にある 削除 ボタンをクリックします。Remove Disk の確認ダイアログボックスが表示されます。
  4. 確認ダイアログボックスで、削除 をクリックします。

    仮想マシンから、仮想ディスクの割り当てが解除されます。

14.8. libvirt シークレットを使用した iSCSI ストレージプールのセキュリティー保護

ユーザー名とパスワードのパラメーターは、iSCSI ストレージプールを保護するため、virsh で設定できます。プールの定義前または後に設定できますが、認証設定を有効にするにはプールを起動する必要があります。

ここでは、libvirt シークレットを使用して、iSCSI ベースのストレージプールのセキュリティーを保護する手順を説明します。

注記

この手順は、iSCSI ターゲットの作成時に user_ID および password が定義される場合に必要です。

前提条件

手順

  1. チャレンジハンドシェイク認証プロトコル (CHAP) のユーザー名を使用して、libvirt シークレットファイルを作成します。以下に例を示します。

    <secret ephemeral='no' private='yes'>
        <description>Passphrase for the iSCSI example.com server</description>
        <usage type='iscsi'>
            <target>iscsirhel7secret</target>
        </usage>
    </secret>
  2. virsh secret-define コマンドを使用して、libvirt シークレットを定義します。

    # virsh secret-define secret.xml

  3. virsh secret-list コマンドで UUID を確認します。

    # virsh secret-list
    UUID                                  Usage
    -------------------------------------------------------------------
    2d7891af-20be-4e5e-af83-190e8a922360  iscsi iscsirhel7secret
  4. virsh secret-set-value コマンドを使用して、前の手順の出力の UUID に、シークレットを割り当てます。これにより、CHAP ユーザー名とパスワードが、libvirt が制御するシークレット一覧にあることが保証されます。以下に例を示します。

    # virsh secret-set-value --interactive 2d7891af-20be-4e5e-af83-190e8a922360
    Enter new value for secret:
    Secret value set
  5. virsh edit コマンドを使用してストレージプールの XML ファイルに認証エントリーを追加し、<auth> 要素を追加して認証タイプユーザー名、および シークレットの使用方法 を指定します。

    以下に例を示します。

    <pool type='iscsi'>
      <name>iscsirhel7pool</name>
        <source>
           <host name='192.168.122.1'/>
           <device path='iqn.2010-05.com.example.server1:iscsirhel7guest'/>
           <auth type='chap' username='redhat'>
              <secret usage='iscsirhel7secret'/>
           </auth>
        </source>
      <target>
        <path>/dev/disk/by-path</path>
      </target>
    </pool>
    注記

    サブ要素 <auth> は仮想マシンの <pool> および <disk> XML 要素内の異なる場所に存在します。<pool> の場合は、<auth><source> 要素に指定されます。認証は一部のプールソース (iSCSI および RBD) のプロパティーであるため、これはプールソースの検索場所を説明する要素となります。ドメインのサブ要素である <disk> の場合、iSCSI ディスクまたは RBD ディスクに対する認証は、ディスクのプロパティーです。また、ディスクのサブ要素 <auth> は、ストレージプールのサブ要素とは異なります。

    <auth username='redhat'>
      <secret type='iscsi' usage='iscsirhel7secret'/>
    </auth>
  6. 変更を有効にするには、ストレージプールを有効にします。プールがすでに起動している場合は、ストレージプールを停止して再起動します。

    # virsh pool-destroy iscsirhel7pool
    # virsh pool-start iscsirhel7pool

14.9. vHBA の作成

仮想ホストバスアダプター (vHBA) デバイスは、ホストシステムを SCSI デバイスに接続し、SCSI ベースのストレージプールを作成するために必要です。

vHBA デバイスは、XML 設定ファイルで定義することで作成できます。

手順

  1. virsh nodedev-list --cap vports コマンドを使用して、ホストシステムの HBA を見つけます。

    以下の例は、vHBA に対応する HBA が 2 つ搭載されているホストを示しています。

    # virsh nodedev-list --cap vports
    scsi_host3
    scsi_host4
  2. virsh nodedev-dumpxml HBA_device コマンドを使用して、HBA の詳細を表示します。

    # virsh nodedev-dumpxml scsi_host3

    コマンドからの出力には、<name><wwnn>、および <wwpn> フィールドの一覧が表示されます。これは、vHBA を作成するために使用されます。<max_vports> は、対応している vHBA の最大数を示します。以下に例を示します。

    <device>
      <name>scsi_host3</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3</path>
      <parent>pci_0000_10_00_0</parent>
      <capability type='scsi_host'>
        <host>3</host>
        <unique_id>0</unique_id>
        <capability type='fc_host'>
          <wwnn>20000000c9848140</wwnn>
          <wwpn>10000000c9848140</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
        <capability type='vport_ops'>
          <max_vports>127</max_vports>
          <vports>0</vports>
        </capability>
      </capability>
    </device>

    この例では、<max_vports> 値は、HBA 構成で使用できる合計 127 の仮想ポートがあることを示します。<vports> の値は、現在使用中の仮想ポートの数を示します。この値は、vHBA の作成後に更新されます。

  3. vHBA ホスト用に、以下のいずれかの XML ファイルを作成します。この例では、ファイルの名前は vhba_host3.xml です。

    次の例では、scsi_host3 を使用して親 vHBA を説明します。

    <device>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>

    次の例では、WWNN/WWPN のペアを使用して親 vHBA を説明します。

    <device>
      <name>vhba</name>
      <parent wwnn='20000000c9848140' wwpn='10000000c9848140'/>
      <capability type='scsi_host'>
        <capability type='fc_host'>
        </capability>
      </capability>
    </device>
    注記

    WWNN および WWPN の値は、前の手順で確認した HBA の詳細の値と一致する必要があります。

    <parent> フィールドは、この vHBA デバイスに関連付ける HBA デバイスを指定します。<device> タグの詳細は、ホスト用の新しい vHBA デバイスを作成するために、次の手順で使用されます。nodedev の XML 形式の詳細は、アップストリームの libvirt ページ を参照してください。

    注記

    virsh コマンドでは、parent_wwnn 属性、parent_wwpn 属性、または parent_fabric_wwn 属性を定義する方法が提供されません。

  4. virsh nodev-create コマンドを使用して、前の手順で作成した XML ファイルに基づいて VHBA を作成します。

    # virsh nodedev-create vhba_host3
    Node device scsi_host5 created from vhba_host3.xml

検証

  • virsh nodedev-dumpxml コマンドで、新しい vHBA の詳細 (scsi_host5) を確認します。

    # virsh nodedev-dumpxml scsi_host5
    <device>
      <name>scsi_host5</name>
      <path>/sys/devices/pci0000:00/0000:00:04.0/0000:10:00.0/host3/vport-3:0-0/host5</path>
      <parent>scsi_host3</parent>
      <capability type='scsi_host'>
        <host>5</host>
        <unique_id>2</unique_id>
        <capability type='fc_host'>
          <wwnn>5001a4a93526d0a1</wwnn>
          <wwpn>5001a4ace3ee047d</wwpn>
          <fabric_wwn>2002000573de9a81</fabric_wwn>
        </capability>
      </capability>
    </device>

第15章 仮想マシンでの GPU デバイスの管理

RHEL 9 ホストで仮想マシンのグラフィカルパフォーマンスを向上させるために、仮想マシンにホスト GPU を割り当てることができます。

  • ホストから GPU を取り外し、GPU の完全な制御を仮想マシンに直接渡すことができます。
  • 物理 GPU から複数の仲介デバイスを作成し、これらのデバイスを仮想 GPU (vGPU) として複数のゲストに割り当てることができます。現在、これは選択した NVIDIA GPU でのみ対応しており、1 つのゲストに割り当てることができる仲介デバイスは 1 つだけです。

15.1. 仮想マシンへの GPU の割り当て

ホストシステムに接続されている GPU にアクセスして制御するには、GPU の直接制御を仮想マシンに渡すようにホストシステムを設定する必要があります。

注記

仮想 GPU の割り当て方法の詳細は、Managing NVIDIA vGPU devices を参照してください。

前提条件

  • ホストマシンカーネルで IOMMU サポートを有効にする必要があります。

    • Intel ホストでは、VT-d を有効にする必要があります。

      1. intel_iommu=on および iommu=pt パラメーターを使用して GRUB 設定を再生成します。

        # grubby --args="intel_iommu=on iommu_pt" --update-kernel DEFAULT
      2. ホストを再起動します。
    • AMD ホストでは、AMD-Vi を有効にする必要があります。

      AMD ホストでは、IOMMU はデフォルトで有効になっているため、iommu=pt を追加してパススルーモードに切り替えることができます。

      1. iommu=pt パラメーターで GRUB 設定を再生成します。

        # grubby --args="iommu=pt" --update-kernel DEFAULT
        注記

        pt オプションは、パススルーモードで使用されるデバイスにのみ IOMMU を有効にし、ホストパフォーマンスを向上させます。ただし、すべてのハードウェアがこのオプションに対応しているわけではありません。このオプションが有効かどうかに関係なく、デバイスを割り当てることができます。

      2. ホストを再起動します。

手順

  1. ドライバーが GPU にバインドしないようにします。

    1. GPU の接続先である PCI バスアドレスを特定します。

      # lspci -Dnn | grep VGA
      0000:02:00.0 VGA compatible controller [0300]: NVIDIA Corporation GK106GL [Quadro K4000] [10de:11fa] (rev a1)
    2. ホストのグラフィックドライバーが GPU を使用しないようにします。これには、pci-stub ドライバーで GPU の PCI ID を使用します。

      たとえば、次のコマンドは、ドライバーが10de: 11fa バスに接続されている GPU にバインドしないようにします。

      # grubby --args="pci-stub.ids=10de:11fa" --update-kernel DEFAULT
    3. ホストを再起動します。
  2. オプション:サポートの制限により、オーディオなどの特定の GPU 機能が仮想マシンに渡せない場合は、IOMMU グループ内のエンドポイントのドライバーバインドを変更して、必要な GPU 機能のみを通過させることができます。

    1. GPU 設定を XML に変換し、ホストドライバーに接続しないようにするエンドポイントの PCI アドレスを書き留めておきます。

      これを行うには、アドレスにpci_プレフィックスを追加し、区切り文字をアンダースコアに変換することにより、GPUのPCIバスアドレスをlibvirt互換形式に変換します。

      たとえば、次のコマンドは、0000:02:00.0 バスアドレスに接続されている GPU の XML 設定を表示します。

      # virsh nodedev-dumpxml pci_0000_02_00_0
      <device>
       <name>pci_0000_02_00_0</name>
       <path>/sys/devices/pci0000:00/0000:00:03.0/0000:02:00.0</path>
       <parent>pci_0000_00_03_0</parent>
       <driver>
        <name>pci-stub</name>
       </driver>
       <capability type='pci'>
        <domain>0</domain>
        <bus>2</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x11fa'>GK106GL [Quadro K4000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <iommuGroup number='13'>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
         <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/>
        </iommuGroup>
        <pci-express>
         <link validity='cap' port='0' speed='8' width='16'/>
         <link validity='sta' speed='2.5' width='16'/>
        </pci-express>
       </capability>
      </device>
    2. エンドポイントがホストドライバーに接続されないようにします。

      この例では、GPU を仮想マシンに割り当て、オーディオ機能である <address domain='0x0000' bus='0x02' slot='0x00' function='0x1'/> に対応するエンドポイントがホストオーディオドライバーに接続されないようにし、代わりにエンドポイントを VFIO-PCI に接続します。

      # driverctl set-override 0000:02:00.1 vfio-pci
  3. GPU の仮想マシンへの接続

    1. PCI バスアドレスを使用して GPU 用の XML 設定ファイルを作成します。

      たとえば、GPU のバスアドレスからパラメーターを使用して、次の XML ファイル GPU-Assign.xml を作成できます。

      <hostdev mode='subsystem' type='pci' managed='yes'>
       <driver name='vfio'/>
       <source>
        <address domain='0x0000' bus='0x02' slot='0x00' function='0x0'/>
       </source>
      </hostdev>
    2. ホストシステムにファイルを保存します。
    3. ファイルを仮想マシンの XML 設定とマージします。

      たとえば、次のコマンドは、GPU XML ファイルの GPU-Assign.xml を、System1 仮想マシンの XML 設定ファイルにマージします。

      # virsh attach-device System1 --file /home/GPU-Assign.xml --persistent
      Device attached successfully.
      注記

      GPU は、セカンダリーグラフィックスデバイスとして仮想マシンに接続されています。GPU をプライマリーグラフィックスデバイスとして割り当てることには対応していません。Red Hat では、仮想マシンの XML 設定で、エミュレートしているプライマリーグラフィックスデバイスを削除することは推奨しません。

検証

既知の問題

  • VM に接続できる GPU の数は、割り当てられた PCI デバイスの最大数 (RHEL 9 では現在 64) によって制限されます。ただし、VM に複数の GPU を接続すると、ゲストのメモリーマップド I/O (MMIO) で問題が発生する可能性があり、その結果、GPU が VM で使用できなくなる可能性があります。

    これらの問題を回避するには、より大きな 64 ビット MMIO 空間を設定し、vCPU 物理アドレスビットを設定して、拡張された 64 ビット MMIO 空間をアドレス指定可能にします。

  • 現在 RHEL 9 ゲストオペレーティングシステムを使用している仮想マシンに NVIDIA GPU デバイスを接続すると、その仮想マシンで Wayland セッションが無効になり、代わりに Xorg セッションが読み込まれます。これは、NVIDIA ドライバーと Wayland の間の非互換性が原因です。

15.2. NVIDIA vGPU デバイスの管理

vGPU 機能により、仲介デバイス として参照される物理的な NVIDIA GPU デバイスを複数の仮想デバイスに分割できます。この仲介デバイスは、仮想 GPU として複数の仮想マシンに割り当てることができます。これにより、この仮想マシンが、1 つの物理 GPU のパフォーマンスを共有できます。

重要

仲介デバイスの使用にかかわらず、仮想マシンに物理 GPU を割り当てると、ホストが GPU を使用できなくなります。

15.2.1. NVIDIA vGPU デバイスの設定

NVIDIA の vGPU 機能を設定するには、GPU デバイスの NVIDIA vGPU ドライバーをダウンロードして、仲介デバイスを作成し、使用する仮想マシンに割り当てる必要があります。詳細な手順は、以下を参照してください。

前提条件

  • GPU が vGPU 仲介デバイスをサポートしている。vGPU の作成をサポートする NVIDIA GPU の最新の一覧については、NVIDIA vGPU ソフトウェアのドキュメント を参照してください。

    • ホストが使用している GPU が分からない場合は、lshw パッケージをインストールして、lshw -C display コマンドを使用します。以下の例は、システムが、vGPU と互換性がある NVIDIA Tesla P4 GPU を使用していることを示しています。

      # lshw -C display
      
      *-display
             description: 3D controller
             product: GP104GL [Tesla P4]
             vendor: NVIDIA Corporation
             physical id: 0
             bus info: pci@0000:01:00.0
             version: a1
             width: 64 bits
             clock: 33MHz
             capabilities: pm msi pciexpress cap_list
             configuration: driver=vfio-pci latency=0
             resources: irq:16 memory:f6000000-f6ffffff memory:e0000000-efffffff memory:f0000000-f1ffffff

手順

  1. NVIDIA vGPU ドライバーをダウンロードして、システムにインストールします。手順は NVIDIA ドキュメント を参照してください。
  2. NVIDIA ソフトウェアのインストーラーで /etc/modprobe.d/nvidia-installer-disable-nouveau.conf ファイルが作成されなかった場合は、/etc/modprobe.d/ に任意の名前で conf ファイルを作成し、そのファイルに以下の行を追加します。

    blacklist nouveau
    options nouveau modeset=0
  3. 現在のカーネル用に初期 ramdisk を再生成してから再起動します。

    # dracut --force
    # reboot
  4. カーネルで nvidia_vgpu_vfio モジュールが読み込まれていること、nvidia-vgpu-mgr.service サービスが実行されていることを確認してください。

    # lsmod | grep nvidia_vgpu_vfio
    nvidia_vgpu_vfio 45011 0
    nvidia 14333621 10 nvidia_vgpu_vfio
    mdev 20414 2 vfio_mdev,nvidia_vgpu_vfio
    vfio 32695 3 vfio_mdev,nvidia_vgpu_vfio,vfio_iommu_type1
    
    # systemctl status nvidia-vgpu-mgr.service
    nvidia-vgpu-mgr.service - NVIDIA vGPU Manager Daemon
       Loaded: loaded (/usr/lib/systemd/system/nvidia-vgpu-mgr.service; enabled; vendor preset: disabled)
       Active: active (running) since Fri 2018-03-16 10:17:36 CET; 5h 8min ago
     Main PID: 1553 (nvidia-vgpu-mgr)
     [...]

    さらに、NVIDIA Ampere GPU デバイスに基づいて vGPU を作成する場合は、物理 GPU で仮想機能が有効になっていることを確認してください。手順は NVIDIA ドキュメント を参照してください。

  5. デバイスの UUID を生成します。

    # uuidgen
    30820a6f-b1a5-4503-91ca-0c10ba58692a
  6. 検出された GPU ハードウェアに基づいて、仲介されたデバイスの設定を含む XML ファイルを準備します。たとえば、次の例では、0000:01:00.0 PCI バスで実行され、前の手順で生成された UUID を使用する NVIDIA Tesla P4 カードで nvidia-63 vGPU タイプの仲介デバイスを設定します。

    <device>
        <parent>pci_0000_01_00_0</parent>
        <capability type="mdev">
            <type id="nvidia-63"/>
            <uuid>30820a6f-b1a5-4503-91ca-0c10ba58692a</uuid>
        </capability>
    </device>
  7. 準備した XML ファイルに基づいて vGPU 仲介デバイスを定義します。以下に例を示します。

    # virsh nodedev-define vgpu-test.xml
    Node device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 created from vgpu-test.xml
  8. オプション:仲介デバイスが非アクティブとしてリストされていることを確認します。

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  9. 作成した vGPU 仲介デバイスを起動します。

    # virsh nodedev-start mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0 started
  10. オプション:仲介デバイスがアクティブとしてリストされていることを確認します。

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  11. ホストの再起動後に自動的に起動するように vGPU デバイスを設定します。

    # virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Device mdev_d196754e_d8ed_4f43_bf22_684ed698b08b_0000_9b_00_0 marked as autostarted
  12. vGPU リソースを共有する仮想マシンに仲介デバイスを割り当てます。これを行うには、以下の行を、仮想マシンの XML 設定の <devices/> セクションに追加します。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci' display='on'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    各 UUID は、一度に 1 つの仮想マシンにしか割り当てることができないのでご注意ください。さらに、仮想マシンに virtio-vga などの QEMU ビデオデバイスがない場合は、<hostdev> 行に ramfb='on' パラメーターも追加します。

  13. 割り当てられた仮想マシンに vGPU 仲介デバイスの全機能が提供されるように、これらの仮想マシンに NVIDIA vGPU ゲストソフトウェアのライセンスを設定します。詳細および手順は、NVIDIA の仮想 GPU ソフトウェアのライセンスサーバーユーザーガイド を参照してください。

検証

  1. 作成した vGPU の機能をクエリーし、アクティブで永続的な機能としてリストされていることを確認します。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         yes
    Persistent:     yes
    Autostart:      yes
  2. 仮想マシンを起動し、ゲストオペレーティングシステムが仲介デバイスを NVIDIA GPU として検出することを確認します。たとえば、仮想マシンが Linux を使用している場合は、以下のとおりとなります。

    # lspci -d 10de: -k
    07:00.0 VGA compatible controller: NVIDIA Corporation GV100GL [Tesla V100 SXM2 32GB] (rev a1)
            Subsystem: NVIDIA Corporation Device 12ce
            Kernel driver in use: nvidia
            Kernel modules: nouveau, nvidia_drm, nvidia

既知の問題

  • 現在 RHEL 9 ゲストオペレーティングシステムを使用している仮想マシンに NVIDIA vGPU 仲介デバイスを割り当てると、その仮想マシンで Wayland セッションが無効になり、代わりに Xorg セッションが読み込まれます。これは、NVIDIA ドライバーと Wayland の間の非互換性が原因です。

関連情報

15.2.2. NVIDIA vGPU デバイスの削除

割り当てられた vGPU 仲介デバイス の設定を変更する場合は、割り当てられた仮想マシンから既存のデバイスを削除する必要があります。手順は、以下を参照してください。

前提条件

  • デバイスを削除する仮想マシンがシャットダウンしている。

手順

  1. 削除する仲介デバイスの ID を取得します。

    # virsh nodedev-list --cap mdev
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  2. vGPU 仲介バイスの実行中のインスタンスを停止します。

    # virsh nodedev-destroy mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Destroyed node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'
  3. オプション:仲介デバイスが非アクティブ化されていることを確認します。

    # virsh nodedev-info mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Name:           virsh nodedev-autostart mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Parent:         pci_0000_01_00_0
    Active:         no
    Persistent:     yes
    Autostart:      yes
  4. 仮想マシンの XML 設定からデバイスを削除します。これには、virsh edit ユーティリティーを使用して仮想マシンの XML 設定を編集し、mdev の設定セグメントを削除します。このセグメントは、以下のようになります。

    <hostdev mode='subsystem' type='mdev' managed='no' model='vfio-pci'>
      <source>
        <address uuid='30820a6f-b1a5-4503-91ca-0c10ba58692a'/>
      </source>
    </hostdev>

    仲介デバイスを停止してデタッチしても、このデバイスは削除されずに 定義された とおりに保持されるのでご注意ください。したがって、デバイスを 再起動 して、別の仮想マシンに 割り当てる ことができます。

  5. オプション:停止した仲介デバイスを削除するには、デバイスの定義を削除します。

    # virsh nodedev-undefine mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
    Undefined node device 'mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0'

検証

  • デバイスを停止して切り離しただけの場合は、仲介デバイスが非アクティブとしてリストされていることを確認してください。

    # virsh nodedev-list --cap mdev --inactive
    mdev_30820a6f_b1a5_4503_91ca_0c10ba58692a_0000_01_00_0
  • デバイスも削除した場合は、次のコマンドでデバイスが表示されないことを確認してください。

    # virsh nodedev-list --cap mdev

関連情報

  • man virsh コマンド

15.2.3. システムに関する NVIDIA vGPU 情報の取得

利用可能な vGPU 機能の機能を評価するには、お使いのシステムの仲介デバイスに関する以下のような追加情報を取得してください。

  • 特定タイプの仲介デバイスを何個作成できるか
  • お使いのシステムに設定済みの仲介デバイスはどれか

手順

  • vGPU 仲介デバイスをサポートできるホストで使用可能な GPU デバイスを確認するには、virsh nodedev-list--capmdev_types コマンドを使用します。たとえば、以下は 2 つの NVIDIA Quadro RTX6000 デバイスを備えたシステムを示しています。

    # virsh nodedev-list --cap mdev_types
    pci_0000_5b_00_0
    pci_0000_9b_00_0
  • 特定の GPU デバイスでサポートされている vGPU タイプと追加のメタデータを表示するには、virsh nodedev-dumpxml コマンドを使用します。

    # virsh nodedev-dumpxml pci_0000_9b_00_0
    <device>
      <name>pci_0000_9b_00_0</name>
      <path>/sys/devices/pci0000:9a/0000:9a:00.0/0000:9b:00.0</path>
      <parent>pci_0000_9a_00_0</parent>
      <driver>
        <name>nvidia</name>
      </driver>
      <capability type='pci'>
        <class>0x030000</class>
        <domain>0</domain>
        <bus>155</bus>
        <slot>0</slot>
        <function>0</function>
        <product id='0x1e30'>TU102GL [Quadro RTX 6000/8000]</product>
        <vendor id='0x10de'>NVIDIA Corporation</vendor>
        <capability type='mdev_types'>
          <type id='nvidia-346'>
            <name>GRID RTX6000-12C</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>2</availableInstances>
          </type>
          <type id='nvidia-439'>
            <name>GRID RTX6000-3A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>8</availableInstances>
          </type>
          [...]
          <type id='nvidia-440'>
            <name>GRID RTX6000-4A</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>6</availableInstances>
          </type>
          <type id='nvidia-261'>
            <name>GRID RTX6000-8Q</name>
            <deviceAPI>vfio-pci</deviceAPI>
            <availableInstances>3</availableInstances>
          </type>
        </capability>
        <iommuGroup number='216'>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x3'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x1'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x2'/>
          <address domain='0x0000' bus='0x9b' slot='0x00' function='0x0'/>
        </iommuGroup>
        <numa node='2'/>
        <pci-express>
          <link validity='cap' port='0' speed='8' width='16'/>
          <link validity='sta' speed='2.5' width='8'/>
        </pci-express>
      </capability>
    </device>

関連情報

  • man virsh コマンド

15.2.4. NVIDIA vGPU のリモートデスクトップのストリーミングサービス

次のリモートデスクトップストリーミングサービスは、NVIDIA vGPU または NVIDIA GPU パススルーが有効になっている RHEL 9 ハイパーバイザーでサポートされています。

  • HP ZCentral Remote Boost/Teradici
  • NICE DCV
  • Mechdyne TGX

サポートの詳細については、適切なベンダーサポートマトリックスを参照してください。

第16章 仮想マシンのネットワーク接続の設定

ネットワーク経由でホストに接続する、ホスト上の他の仮想マシン、および外部ネットワーク上の場所に接続する場合は、仮想マシンのネットワークを適切に設定する必要があります。仮想マシンのネットワークを提供するために、RHEL 9 ハイパーバイザーおよび新規に作成された仮想マシンには、デフォルトのネットワーク設定があります。これは、さらに変更することもできます。以下に例を示します。

  • 仮想マシンがホストと同じネットワーク上にあるかのように、ホスト上の仮想マシンを検出し、そのホスト外で接続できます。
  • 仮想マシンを受信ネットワークトラフィックから部分的に分離するか、または完全に分離して、セキュリティーを強化し、仮想マシンに影響を及ぼすリスクを最小限に抑えることができます。

以下のセクションでは、さまざまなタイプの仮想マシンネットワーク設定と、選択した仮想マシンネットワーク設定を設定する手順を説明します。

16.1. 仮想ネットワークの概要

ホストハードウェアにより、ネットワーク上の他のデバイスや場所への仮想マシンの接続が容易になります。以下のセクションでは、仮想マシンのネットワーク接続のメカニズムを説明し、デフォルトの仮想マシンのネットワーク設定を説明します。

16.1.1. 仮想ネットワークの仕組み

仮想ネットワークは、仮想ネットワークスイッチの概念を使用します。仮想ネットワークスイッチは、ホストマシンで動作するソフトウエア構成です。仮想マシンは、仮想ネットワークスイッチを介してネットワークに接続します。仮想スイッチの設定に基づいて、仮想マシンはハイパーバイザーによって管理される既存の仮想ネットワーク、または別のネットワーク接続メソッドを使用できます。

以下の図は、2 つの仮想マシンをネットワークに接続する仮想ネットワークスイッチを示しています。

vn 02 スイッチおよび 2 台のゲスト

ゲストオペレーティングシステムの視点から見ると、仮想ネットワーク接続は物理ネットワーク接続と同じです。ホストマシンは、仮想ネットワークスイッチをネットワークインターフェースとして表示します。virtnetworkd サービスを最初にインストールして起動すると、仮想マシンのデフォルトのネットワークインターフェイスである virbr0 が作成されます。

このインターフェースに関する情報を表示するには、ホストで ip ユーティリティーを使用します。

$ ip addr show virbr0
3: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state
 UNKNOWN link/ether 1b:c4:94:cf:fd:17 brd ff:ff:ff:ff:ff:ff
 inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

デフォルトでは、1 台のホストにあるすべての仮想マシンが、virbr0 インターフェースを使用する default という名前の同じ NAT タイプ の仮想ネットワークに接続されています。詳細は、Virtual networking default configuration を参照してください。

仮想マシンからの基本的なアウトバウンドのみのネットワークアクセスでは、デフォルトのネットワークが libvirt-daemon-config-network パッケージと一緒にインストールされ、virtnetworkd サービスが起動すると自動的に開始するため、通常は追加のネットワーク設定は必要ありません。

別の仮想マシンのネットワーク機能が必要な場合は、仮想ネットワークおよびネットワークインターフェースを追加で作成し、仮想マシンがその機能を使用するように設定できます。デフォルトの NAT に加えて、これらのネットワークとインターフェースは以下のいずれかのモードを使用するように設定できます。

16.1.2. デフォルトの仮想ネットワーク設定

仮想化ホストに virtnetworkd サービスが最初にインストールされる際、これにはネットワークアドレス変換 (NAT) モードの仮想ネットワークの初期設定が含まれます。デフォルトでは、1 台のホストにあるすべての仮想マシンが、同じ libvirt 仮想ネットワーク (default) に接続されています。このネットワーク上の仮想マシンは、ホスト上およびホスト外のネットワーク上の場所の両方に接続できますが、以下の制限があります。

  • ネットワーク上の仮想マシンはホスト上のホストおよび他の仮想マシンに表示されますが、ネットワークトラフィックはゲストオペレーティングシステムのネットワークスタックのファイアウォールと、ゲストインターフェースに接続されている libvirt ネットワークフィルタールールの影響を受けます。
  • ネットワーク上の仮想マシンは、ホスト外の場所に接続可能ですが、表示されません。送信トラフィックは NAT ルールおよびホストシステムのファイアウォールの影響を受けます。

以下の図は、仮想マシンのデフォルトのネットワーク設定を示しています。

vn 08 ネットワークの概要

16.2. Web コンソールで仮想マシンのネットワークインターフェースの管理

RHEL 9 Web コンソールを使用して、Web コンソールが接続している仮想マシンの仮想ネットワークインターフェースを管理できます。以下を行うことができます。

16.2.1. Web コンソールで仮想ネットワークインターフェース情報の表示および編集

RHEL 9 Web コンソールを使用して、選択した仮想マシン (VM) で仮想ネットワークインターフェイスを表示および変更することができます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ネットワークインターフェース までスクロールします。

    「ネットワークインターフェース」セクションには、仮想マシンに設定された仮想ネットワークインターフェースに関する情報と、ネットワークインターフェースの追加削除編集、またはアンプラグ のオプションが表示されます。

    選択した仮想マシンのネットワークインターフェースの詳細を表示するイメージ。

    + この情報には以下が含まれます。

    • 種類 - 仮想マシンのネットワークインターフェースの種類。タイプには、仮想ネットワーク、LAN へのブリッジ、および直接割り当てが含まれます。

      注記

      RHEL 9 以降では、汎用イーサネット接続はサポートされていません。

    • モデルタイプ - 仮想ネットワークインターフェースのモデル。
    • MACアドレス - 仮想ネットワークインターフェースの MAC アドレス。
    • IP アドレス - 仮想ネットワークインターフェースの IP アドレス。
    • ソース - ネットワークインターフェースのソース。これはネットワークの種類によって異なります。
    • 状態 - 仮想ネットワークインターフェースの状態。
  3. 仮想ネットワークインターフェースの設定を編集するには、編集 をクリックします。仮想ネットワークインターフェースの設定ダイアログが開きます。

    選択したネットワークインターフェースで編集可能なさまざまなオプションを表示するイメージ。
  4. インターフェースの種類、ソース、モデル、または MAC アドレスを変更します。
  5. 保存 をクリックします。ネットワークインターフェースが変更しました。

    注記

    仮想ネットワークインターフェース設定の変更は、仮想マシンを再起動しないと有効になりません。

    また、MAC アドレスは、仮想マシンがシャットダウンしている場合にのみ変更できます。

16.2.2. Web コンソールでの仮想ネットワークインターフェースの追加および接続

RHEL 9 Web コンソールを使用して、仮想ネットワークインターフェースを作成し、仮想マシン(VM)を接続できます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ネットワークインターフェース までスクロールします。

    「ネットワークインターフェース」セクションには、仮想マシンに設定された仮想ネットワークインターフェースに関する情報と、ネットワークインターフェースの追加削除編集、またはプラグ のオプションが表示されます。

  3. 接続する仮想ネットワークインターフェースの行の プラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンに接続します。

16.2.3. Web コンソールでの仮想ネットワークインターフェースの切断および削除

RHEL 9 Web コンソールを使用して、選択した仮想マシンに接続した仮想ネットワークインターフェースの接続を解除できます。

前提条件

手順

  1. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  2. ネットワークインターフェース までスクロールします。

    「ネットワークインターフェース」セクションには、仮想マシンに設定された仮想ネットワークインターフェースに関する情報と、ネットワークインターフェースの追加削除編集、またはアンプラグ のオプションが表示されます。

    選択した仮想マシンのネットワークインターフェースの詳細を表示するイメージ。
  3. 切断する仮想ネットワークインターフェースの行で アンプラグ をクリックします。

    選択した仮想ネットワークインターフェースが仮想マシンから切断されます。

16.4. 仮想マシンのネットワーク接続の種類

仮想マシンのネットワークプロパティーと動作を変更するには、仮想マシンが使用する仮想ネットワークまたはインターフェースの種類を変更します。次のセクションでは、RHEL 9 の仮想マシンで利用可能な接続の種類を説明します。

16.4.1. ネットワークアドレス変換のある仮想ネットワーク

デフォルトでは、仮想ネットワークスイッチはネットワークアドレス変換 (NAT) モードで動作します。Source-NAT (SNAT) または Destination-NAT (DNAT) の代わりに IP マスカレードを使用します。IP マスカレードで接続されている仮想マシンは、外部ネットワークとの通信にホストマシンの IP アドレスを使用できるようになります。ホスト外のコンピューターは、仮想ネットワークスイッチが NAT モードで動作している場合に、ホスト内部の仮想マシンと通信ができません。

vn 04 NAT スイッチを使用するホスト
警告

仮想ネットワークスイッチは、ファイアウォールルールで設定された NAT を使用します。スイッチの実行中にこのルールを編集することは推奨されていません。誤ったルールがあると、スイッチが通信できなくなる可能性があるためです。

16.4.2. ルーティングモードの仮想ネットワーク

ルーティング モードを使用する場合は、仮想スイッチを、ホストマシンに接続された物理 LAN に接続し、NAT を使用せずにトラフィックをやり取りします。仮想スイッチは、すべてのトラフィックを調べ、ネットワークパケットに含まれる情報を使用して、ルーティングの決定を行うことができます。このモードを使用すると、仮想マシンはすべてホストマシンから分離された 1 つのサブネットに表示されます。仮想マシンサブネットは、ホストマシンにある仮想スイッチを介してルーティングされます。これにより、着信接続が有効になりますが、外部ネットワークのシステムに追加のルーティングテーブルエントリーが必要になります。

ルーティングモードは、IP アドレスに基づくルーティングを使用します。

vn 06 ルーティングスイッチ

ルーティングモードを使用する一般的なトポロジーには DMZ および仮想サーバーのホストが含まれます。

DMZ

セキュリティー上の理由から、制御されたサブネットワークにノードを配置するネットワークを作成できます。このようなサブネットワークは、非武装地帯 (DMZ) して知られています。

vn 09 ルーティングモード DMZ

DMZ のホストマシンは、通常、WAN (外部) のホストマシンと、LAN (内部) のホストマシンにサービスを提供します。これにより、複数の場所からアクセスでき、この場所はセキュリティーおよび信頼レベルに基づいて異なる方法で制御および操作されるため、ルーティングモードはこの環境に最適な設定になります。

仮想サーバーのホスト

プロバイダーをホストする仮想サーバーには複数のホストマシンがあり、それぞれに 2 つの物理ネットワーク接続がある場合があります。管理とアカウンティングにはいずれかのインターフェースが使用されており、もう 1 つは仮想マシンによる接続に使用されます。各仮想マシンには独自のパブリック IP アドレスがありますが、ホストマシンはプライベート IP アドレスを使用するため、内部管理者のみが仮想マシンを管理できます。

vn 10 ルーティングモードのデータセンター

16.4.3. ブリッジモードの仮想ネットワーク

ほとんどの仮想マシンネットワークモードでは、仮想マシンは virbr0 仮想ブリッジを自動的に作成して接続します。一方、ブリッジ モードでは、仮想マシンはホストの既存の Linux ブリッジに接続します。これにより、仮想マシンが物理ネットワークに直接表示されます。これにより、着信接続が有効になりますが、追加のルーティングテーブルエントリーは必要ありません。

ブリッジモードは、MAC アドレスに基づいて接続スイッチを使用します。

VN ブリッジモードダイアグラム

ブリッジモードでは、仮想マシンがホストマシンと同じサブネットに表示されます。同じ物理ネットワークにあるその他のすべての物理マシンは、仮想マシンを検出し、そのマシンにアクセスできます。

ブリッジネットワークボンディング

複数の物理ブリッジインターフェースをボンドで結合することで、ハイパーバイザーで複数の物理ブリッジインターフェースを使用できます。ボンドをブリッジに追加すると、仮想マシンをブリッジに追加できるようになります。ただし、ボンディングドライバーにはいくつかの操作モードがあり、これらのモードのすべてが、仮想マシンが使用されているブリッジで機能する訳ではありません。

以下の ボンディングモード を使用できます。

  • モード 1
  • モード 2
  • モード 4

一方、モード 0、3、5、または 6 を使用すると、接続が失敗する可能性が高くなります。また、ARP (Address Resolution Protocol) の監視が適切に機能しないため、MII (Media-Independent Interface) 監視を使用してボンディングモードを監視する必要があります。

ボンディングモードの詳細は、Red Hat ナレッジベース「仮想マシンのゲストが接続するブリッジで使用される場合にどのボンディングモードが有効ですか?」を参照してください。

一般的なシナリオ

ブリッジモードにおける最も一般的なユースケースには、たとえば以下のようなものがあります。

  • ホストマシンとともに既存のネットワークに仮想マシンをデプロイし、仮想マシンと物理マシンの相違点をエンドユーザーに非表示にする。
  • 既存の物理ネットワーク設定を変更せずに仮想マシンをデプロイする。
  • 既存の物理ネットワークから簡単にアクセスできる必要がある仮想マシンをデプロイする。DHCP サービスにアクセスする必要のある物理ネットワークに仮想マシンを配置する。
  • 仮想 LAN (VLAN) を使用する既存のネットワークに仮想マシンを接続する。

16.4.4. 分離モードの仮想ネットワーク

分離 モードを使用すると、仮想スイッチに接続されている仮想マシンは相互に通信でき、ホストマシンとも通信できますが、トラフィックはホストマシンの外部を通過せず、ホストマシンの外部からトラフィックを受信することができません。DHCP などの基本的な機能には、このモードの dnsmasq を使用する必要があります。

vn 07 分離スイッチ

16.4.5. オープンモードの仮想ネットワーク

ネットワークに オープン モードを使用する場合、libvirt はネットワークにファイアウォールルールを生成しません。したがって、libvirt はホストが提供するファイアウォールルールを上書きせず、仮想マシンのファイアウォールルールを手動で管理できます。

16.4.6. 仮想マシンの接続タイプの比較

以下の表は、選択したタイプの仮想マシンネットワーク設定が接続できる場所とその表示に関する情報を示しています。

表16.1 仮想マシンの接続タイプ

 ホストへの接続ホスト上の他の仮想マシンへの接続外部ロケーションへの接続外部の場所から見ることができる

ブリッジモード

はい

はい

はい

はい

NAT

はい

はい

はい

no

ルーティングモード

はい

はい

はい

はい

分離モード

はい

はい

no

いいえ

オープンモード

ホストのファイアウォールルールにより異なります。

16.5. PXE サーバーから仮想マシンの起動

PXE (Preboot Execution Environment) を使用する仮想マシンは、ネットワークから起動して設定を読み込むことができます。本章では、libvirt を使用して、仮想ネットワークまたはブリッジネットワークの PXE サーバーから仮想マシンを起動する方法を説明します。

警告

以下の手順は、例としてのみ提供されます。続行する前に、十分なバックアップがあることを確認してください。

16.5.1. 仮想ネットワークで PXE ブートサーバーの設定

この手順では、PXE (Preboot Execution Environment) を提供するように libvirt 仮想ネットワークを設定する方法を説明します。これにより、ホストの仮想マシンを、仮想ネットワークで利用可能な起動イメージから起動するように設定できます。

前提条件

  • 次のようなローカルの PXE サーバー (DHCP および TFTP)

    • libvirt 内部サーバー
    • 手動で設定した dhcpd および tftpd
    • dnsmasq
    • Cobbler サーバー
  • Cobbler が設定した PXELINUX など、または手動で設定した PXE 起動イメージ。

手順

  1. PXE ブートイメージおよび設定を /var/lib/tftpboot フォルダーに置きます。
  2. フォルダーのパーミッションを設定する:

    # chmod -R a+r /var/lib/tftpboot
  3. フォルダーの所有権を設定する:

    # chown -R nobody: /var/lib/tftpboot
  4. SELinux コンテキストを更新します。

    # chcon -R --reference /usr/sbin/dnsmasq /var/lib/tftpboot
    # chcon -R --reference /usr/libexec/libvirt_leaseshelper /var/lib/tftpboot
  5. 仮想ネットワークをシャットダウンします。

    # virsh net-destroy default
  6. デフォルトエディターで仮想ネットワーク設定ファイルを開きます。

    # virsh net-edit default
  7. <ip> 要素を編集して、適切なアドレス、ネットワークマスク、DHCP アドレス範囲、および起動ファイルを追加します。BOOT_FILENAME は、ブートイメージファイルの名前になります。

    <ip address='192.168.122.1' netmask='255.255.255.0'>
       <tftp root='/var/lib/tftpboot' />
       <dhcp>
          <range start='192.168.122.2' end='192.168.122.254' />
          <bootp file='BOOT_FILENAME' />
       </dhcp>
    </ip>
  8. 仮想ネットワークを起動します。

    # virsh net-start default

検証

  • default 仮想ネットワークが有効であることを確認します。

    # virsh net-list
    Name             State    Autostart   Persistent
    ---------------------------------------------------
    default          active   no          no

16.5.2. PXE および仮想ネットワークを使用した仮想マシンの起動

仮想ネットワークで利用可能な PXE (Preboot Execution Environment) サーバーから仮想マシンを起動するには、PXE ブートを有効にする必要があります。

前提条件

手順

  • PXE 起動が有効になっている新しい仮想マシンを作成します。たとえば、default 仮想ネットワークで利用可能な PXE から、新しい 10GB の qcow2 イメージファイルにインストールする場合は、次のコマンドを実行します。

    # virt-install --pxe --network network=default --memory 2048 --vcpus 2 --disk size=10
    • または、既存の仮想マシンの XML 設定ファイルを手動で編集できます。

      1. <os> 要素の内部に <boot dev='network'/> 要素があることを確認します。

        <os>
           <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
           <boot dev='network'/>
           <boot dev='hd'/>
        </os>
      2. 仮想ネットワークを使用するようにゲストネットワークが設定されている。

        <interface type='network'>
           <mac address='52:54:00:66:79:14'/>
           <source network='default'/>
           <target dev='vnet0'/>
           <alias name='net0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

検証

  • virsh start を使用して仮想マシンを起動します。PXE が正しく設定されていると、仮想マシンは、PXE サーバーで利用可能な起動イメージから起動します。

16.5.3. PXE およびブリッジネットワークを使用した仮想マシンの起動

ブリッジネットワークで利用可能な PXE (Preboot Execution Environment) サーバーから仮想マシンを起動するには、PXE ブートを有効にする必要があります。

前提条件

  • ネットワークブリッジが有効になっている。
  • ブリッジネットワークでは、PXE ブートサーバーが利用できます。

手順

  • PXE 起動が有効になっている新しい仮想マシンを作成します。たとえば、breth0 ブリッジネットワークで利用可能な PXE から、新しい 10GB の qcow2 イメージファイルにインストールする場合は、次のコマンドを実行します。

    # virt-install --pxe --network bridge=breth0 --memory 2048 --vcpus 2 --disk size=10
    • または、既存の仮想マシンの XML 設定ファイルを手動で編集できます。

      1. <os> 要素の内部に <boot dev='network'/> 要素があることを確認します。

        <os>
           <type arch='x86_64' machine='pc-i440fx-rhel7.0.0'>hvm</type>
           <boot dev='network'/>
           <boot dev='hd'/>
        </os>
      2. ブリッジネットワークを使用するように仮想マシンが設定されていることを確認します。

        <interface type='bridge'>
           <mac address='52:54:00:5a:ad:cb'/>
           <source bridge='breth0'/>
           <target dev='vnet0'/>
           <alias name='net0'/>
           <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
        </interface>

検証

  • virsh start を使用して仮想マシンを起動します。PXE が正しく設定されていると、仮想マシンは、PXE サーバーで利用可能な起動イメージから起動します。

16.6. 関連情報

第17章 仮想マシンのパフォーマンスの最適化

仮想マシンでは、ホストと比べて、パフォーマンス低下が常に見られます。以下のセクションでは、この低下の理由を説明します。また、ハードウェアのインフラストラクチャーリソースを可能な限り効率的に使用できるように、RHEL 9 での仮想化によるパフォーマンスへの影響を最小限に抑える方法を説明します。

17.1. 仮想マシンのパフォーマンスに影響を及ぼすもの

仮想マシンは、ホストのユーザー空間プロセスとして実行します。したがって、ハイパーバイザーは、仮想マシンがホストシステムのリソースを使用できるように、ホストのシステムリソースを変換する必要があります。したがって、変換によりリソースの一部が消費されるため、仮想マシンのパフォーマンス効率は、ホストと同じにはなりません。

システムパフォーマンスにおける仮想化の影響

仮想マシンのパフォーマンス低下の理由には、以下のようなものがあります。

  • 仮想 CPU (vCPU) がホスト上のスレッドとして実装され、Linux スケジューラーで処理される。
  • 仮想マシンは、ホストカーネルから NUMA や Huge Page などの最適化機能を自動的に継承しない。
  • ホストのディスクおよびネットワーク I/O の設定が、仮想マシンのパフォーマンスに大きく影響する可能性がある。
  • ネットワークトラフィックは、一般的に、ソフトウェアベースのブリッジから仮想マシンに流れる。
  • ホストデバイスとそのモデルによっては、その特定のハードウェアのエミュレーションにより、オーバーヘッドが著しくなる可能性がある。

仮想化が仮想マシンのパフォーマンスに与える影響の重大度は、次のようなさまざまな要因の影響を受けます。

  • 同時に実行している仮想マシンの数
  • 各仮想マシンで使用される仮想デバイスのサイズ
  • 仮想マシンが使用するデバイスの種類

仮想マシンのパフォーマンス損失を減らす

RHEL 9は、仮想化のパフォーマンスへの悪影響を減らすのに使用できる多くの機能を提供します。以下に例を示します。

重要

仮想マシンのパフォーマンスのチューニングは、その他の仮想化機能に悪影響を与える可能性があります。たとえば、変更した仮想マシンの移行がより困難になります。

17.2. TuneD を使用した仮想マシンのパフォーマンスの最適化

TuneD ユーティリティーは、CPU 集中型タスクや、ストレージネットワークスループットの応答などの特定のワークロードの特性に対して RHEL を調整するプロファイル配信メカニズムです。これにより、特定のユースケースで、パフォーマンスを強化し、電力消費を減らすように事前設定されたチューニングプロファイルを多数利用できます。これらのプロファイルを編集するか、または新規プロファイルを作成して、仮想化環境に適したパフォーマンスソリューション (仮想化環境を含む) を作成できます。

RHEL 9 を仮想化に最適化するには、次のプロファイルを使用します。

  • RHEL 9 仮想マシンの場合は、virtual-guest プロファイルを使用します。これは、一般的に適用された throughput-performance プロファイルをベースにしていますが、仮想メモリーのスワップは減少します。
  • RHEL 9 仮想ホストの場合は、virtual-host プロファイルを使用します。これにより、ダーティーメモリーページのより集中的なライトバックが有効になり、ホストのパフォーマンスを活用できます。

手順

特定の TuneD プロファイルを有効にするには、以下を実行します。

  1. 使用可能な Tuned プロファイルを一覧表示します。

    # tuned-adm list
    
    Available profiles:
    - balanced             - General non-specialized TuneD profile
    - desktop              - Optimize for the desktop use-case
    [...]
    - virtual-guest        - Optimize for running inside a virtual guest
    - virtual-host         - Optimize for running KVM guests
    Current active profile: balanced
  2. オプション:新しい TuneD プロファイルを作成するか、既存の TuneD プロファイルを編集してください。

    詳しくは、TuneD プロファイルのカスタマイズ を参照してください。

  3. TuneD プロファイルをアクティベートします。

    # tuned-adm profile selected-profile
    • 仮想化ホストを最適化するには、virtual-host プロファイルを使用します。

      # tuned-adm profile virtual-host
    • RHEL ゲストオペレーティングシステムで、virtual-guest プロファイルを使用します。

      # tuned-adm profile virtual-guest

17.3. libvirt デーモンの最適化

libvirt 仮想化スイートは、RHEL ハイパーバイザーの管理層として機能し、libvirt の設定は仮想化ホストに大きな影響を与えます。特に、RHEL 9 には、モノリシックまたはモジュラーの 2 つのタイプの libvirt デーモンが含まれており、使用するデーモンのタイプは、個々の仮想化ドライバーをどの程度細かく設定できるかに影響します。

17.3.1. libvirt デーモンのタイプ

RHEL 9 は、以下の libvirt デーモンタイプをサポートします。

モノリシックな libvirt

従来の libvirt デーモンである libvirtd は、単一の設定ファイル /etc/libvirt/libvirtd.conf を使用して、さまざまな仮想化ドライバーを制御します。

このため、libvirtd は一元化されたハイパーバイザー設定を可能にしますが、システムリソースの使用が非効率的となる可能性があります。したがって、libvirtd は、RHEL の今後のメジャーリリースではサポートされなくなる予定です。

ただし、RHEL 8 から RHEL 9 に更新した場合、ホストはデフォルトで引き続き libvirtd を使用します。

モジュラー libvirt

RHEL 9 で新たに導入されたモジュラー libvirt は、仮想化ドライバーごとに特定のデーモンを提供します。これらには以下が含まれます。

  • virtqemud - ハイパーバイザー管理用のプライマリーデーモン
  • virtinterfaced - ホストの NIC 管理用のセカンダリーデーモン
  • virtnetworkd - 仮想ネットワーク管理用のセカンダリーデーモン
  • virtnodedevd - ホストの物理デバイス管理用のセカンダリーデーモン
  • virtnwfilterd - ホストのファイアウォール管理用のセカンダリーデーモン
  • virtsecretd - ホストシークレット管理用のセカンダリーデーモン
  • virtstoraged - ストレージ管理用のセカンダリーデーモン

デーモンごとに個別の設定ファイル (/etc/libvirt/virtqemud.conf など) があります。したがって、モジュラーの libvirt デーモンは、libvirt リソース管理を細かく調整するためのより良いオプションを提供します。

RHEL 9 を新規インストールした場合、モジュラー libvirt はデフォルトで設定されています。

次のステップ

17.3.2. モジュラー libvirt デーモンの有効化

RHEL 9 では、libvirt ライブラリーは、ホスト上の個々の仮想化ドライバーセットを処理するモジュラーデーモンを使用します。たとえば、virtqemud デーモンは QEMU ドライバーを処理します。

RHEL 9 ホストの新規インストールを実行すると、ハイパーバイザーはデフォルトでモジュラー libvirt デーモンを使用します。ただし、ホストを RHEL 8 から RHEL 9 にアップグレードした場合、ハイパーバイザーは RHEL 8 のデフォルトであるモノリシックな libvirtd デーモンを使用します。

その場合、Red Hat は、代わりにモジュラー libvirt デーモンを有効にすることをお勧めします。これは、libvirt リソース管理を微調整するためのより良いオプションを提供するためです。また、RHEL の今後のメジャーリリースでは libvirtd はサポートされなくなる予定です。

前提条件

  • ハイパーバイザーがモノリシックな libvirtd サービスを使用している。これに該当するかどうかを知るには、次のコマンドを実行します。

    # systemctl is-active libvirtd.service
    active

    このコマンドで active が表示される場合、libvirtd を使用していることになります。

  • 仮想マシンがシャットダウンしている。

手順

  1. libvirtd とそのソケットを停止します。

    # systemctl stop libvirtd.service
    # systemctl stop libvirtd{,-ro,-admin,-tcp,-tls}.socket
  2. libvirtd を無効にして、システムの起動時に開始されないようにします。

    $ systemctl disable libvirtd.service
    $ systemctl disable libvirtd{,-ro,-admin,-tcp,-tls}.socket
  3. モジュラーの libvirt デーモンを有効にします。

    # for drv in qemu interface network nodedev nwfilter secret storage; do systemctl unmask virt${drv}d.service; systemctl unmask virt${drv}d{,-ro,-admin}.socket; systemctl enable virt${drv}d.service; systemctl enable virt${drv}d{,-ro,-admin}.socket; done
  4. モジュラーデーモンのソケットを起動します。

    # for drv in qemu network nodedev nwfilter secret storage; do systemctl start virt${drv}d{,-ro,-admin}.socket; done
  5. オプション:リモートホストからホストに接続する必要がある場合は、仮想化プロキシーデーモンを有効にして起動します。

    # systemctl unmask virtproxyd.service
    # systemctl unmask virtproxyd{,-ro,-admin,-tls}.socket
    # systemctl enable virtproxyd.service
    # systemctl enable virtproxyd{,-ro,-admin,-tls}.socket
    # systemctl start virtproxyd{,-ro,-admin,-tls}.socket

検証

  1. 有効化された仮想化デーモンをアクティブにします。

    # virsh uri
    qemu:///system
  2. ホストが virtqemud モジュラーデーモンを使用していることを確認します。

    # systemctl is-active virtqemud.service
    active

    このコマンドで active が表示される場合は、モジュラー libvirt デーモンが正常に有効化されていることになります。

17.4. 仮想マシンのメモリーの設定

仮想マシンのパフォーマンスを改善するために、追加のホスト RAM を仮想マシンに割り当てることができます。同様に、仮想マシンに割り当てるメモリー量を減らして、ホストメモリーを他の仮想マシンやタスクに割り当てることができます。

これらのアクションを実行するには、Web コンソール または コマンドラインインターフェース を使用します。

17.4.1. Web コンソールで仮想マシンのメモリーの追加と削除

仮想マシンのパフォーマンスを向上させるか、または仮想マシンが使用するホストリソースを解放するために、Web コンソールを使用して、仮想マシンに割り当てられたメモリーの量を調整できます。

前提条件

  • ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。

    1. 仮想マシンの設定に memballoon デバイスが含まれていることを確認します。

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      このコマンドで出力が表示され、モデルが none に設定されていない場合は、memballoon デバイスが存在します。

    2. バルーンドライバーがゲスト OS で実行していることを確認します。

      • Windows ゲストでは、ドライバーは virtio-win ドライバーパッケージの一部としてインストールされます。手順は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。
      • Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、memballoon デバイスがあれば、アクティベートされます。
  • Web コンソールの VM プラグインが システムにインストールされている

手順

  1. オプション:最大メモリーと、仮想マシンに現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
  2. 仮想マシン インターフェースで、情報を表示する仮想マシンを選択します。

    新しいページが開き、選択したVMに関する基本情報を含む「概要」セクションと、VMのグラフィカルインターフェイスにアクセスするための「コンソール」セクションが表示されます。

  3. 概要ペインで、Memory 行の横にある 編集 をクリックします。

    メモリー調整 ダイアログが表示されます。

    仮想マシンのメモリー調整ダイアログボックスを表示するイメージ。
  4. 選択した仮想マシンの仮想 CPU を設定します。

    • 最大割り当て - 仮想マシンがそのプロセスに使用できるホストメモリーの最大量を設定します。VMの作成時に最大メモリを指定することも、後で増やすこともできます。メモリーは、MiB または GiB の倍数で指定できます。

      仮想マシンをシャットダウンしてからでないと、最大メモリー割り当てを調整できません。

    • 現在の割り当て - 仮想マシンに割り当てる実際のメモリー量を設定します。この値は、最大割り当てより小さい値にすることができますが、上限を超えることはできません。値を調整して、仮想マシンで利用可能なメモリーをプロセス用に調整できます。メモリーは、MiB または GiB の倍数で指定できます。

      この値を指定しない場合、デフォルトの割り当ては最大割り当て の値になります。

  5. 保存 をクリックします。

    仮想マシンのメモリー割り当てが調整されます。

17.4.2. コマンドラインインターフェースで仮想マシンのメモリーの追加と削除

仮想マシンのパフォーマンスを改善したり、使用しているホストリソースを解放したりするために、CLI を使用して仮想マシンに割り当てられたメモリーの量を調整できます。

前提条件

  • ゲスト OS がメモリーバルーンドライバーを実行している。これを確認するには、以下を実行します。

    1. 仮想マシンの設定に memballoon デバイスが含まれていることを確認します。

      # virsh dumpxml testguest | grep memballoon
      <memballoon model='virtio'>
          </memballoon>

      このコマンドで出力が表示され、モデルが none に設定されていない場合は、memballoon デバイスが存在します。

    2. ballon ドライバーがゲスト OS で実行されていることを確認します。

      • Windows ゲストでは、ドライバーは virtio-win ドライバーパッケージの一部としてインストールされます。手順は、Installing KVM paravirtualized drivers for Windows virtual machines を参照してください。
      • Linux ゲストでは、通常、このドライバーはデフォルトで含まれており、memballoon デバイスがあれば、アクティベートされます。

手順

  1. オプション:最大メモリーと、仮想マシンに現在使用されているメモリーに関する情報を取得します。これは、変更のベースラインとしても、検証のためにも機能します。

    # virsh dominfo testguest
    Max memory:     2097152 KiB
    Used memory:    2097152 KiB
  2. 仮想マシンに割り当てる最大メモリーを調整します。この値を増やすと、仮想マシンのパフォーマンスが低下する可能性が向上し、値を減らすことで、仮想マシンがホスト上にあるパフォーマンスフットプリントが低減します。この変更は、停止している仮想マシンでのみ実行できるため、実行中の仮想マシンを調整するには再起動する必要があります。

    たとえば、仮想マシン testguest が使用可能な最大メモリーを 4096 MiB に変更するには、次のコマンドを実行します。

    # virt-xml testguest --edit --memory memory=4096,currentMemory=4096
    Domain 'testguest' defined successfully.
    Changes will take effect after the domain is fully powered off.

    実行中の仮想マシンの最大メモリーを増やすには、仮想マシンにメモリーデバイスを割り当てます。これは、メモリーのホットプラグとも呼ばれます。詳細は、Attaching memory devices to virtual machines を参照してください。

    警告

    実行中の仮想マシン (メモリーのホットアンプラグとも呼ばれる) から、メモリーデバイスを削除することはサポートされておらず、Red Hat では推奨していません。

  3. オプション:仮想マシンが現在使用しているメモリーを最大割り当てまで調整することもできます。これにより、仮想マシンの最大割り当てを変更せずに、仮想マシンが次回の再起動までホスト上にあるメモリー負荷が調整されます。

    # virsh setmem testguest --current 2048

検証

  1. 仮想マシンが使用するメモリーが更新されていることを確認します。

    # virsh dominfo testguest
    Max memory:     4194304 KiB
    Used memory:    2097152 KiB
  2. オプション:現在の仮想マシンメモリーを調整すると、仮想マシンのメモリーバルーンの統計を取得して、そのメモリー使用量をどの程度効果的に調整するかを評価できます。

     # virsh domstats --balloon testguest
    Domain: 'testguest'
      balloon.current=365624
      balloon.maximum=4194304
      balloon.swap_in=0
      balloon.swap_out=0
      balloon.major_fault=306
      balloon.minor_fault=156117
      balloon.unused=3834448
      balloon.available=4035008
      balloon.usable=3746340
      balloon.last-update=1587971682
      balloon.disk_caches=75444
      balloon.hugetlb_pgalloc=0
      balloon.hugetlb_pgfail=0
      balloon.rss=1005456

17.4.3. 関連情報

17.5. 仮想マシンの I/O パフォーマンスの最適化

仮想マシンの入出力 (I/O) 機能は、仮想マシンの全体的な効率を大幅に制限する可能性があります。これに対処するために、ブロック I/O パラメーターを設定して、仮想マシンの I/O を最適化できます。

17.5.1. 仮想マシンにおけるブロック I/O のチューニング

複数のブロックデバイスが、複数の仮想マシンで使用されている場合は、I/O ウェイト を変更して特定の仮想デバイスの I/O の優先度を調整することが重要になる場合があります。

デバイスの I/O ウェイトを上げると、I/O 帯域幅の優先度が高まるため、より多くのホストリソースが提供されます。同様に、デバイスのウェイトを下げると、ホストのリソースが少なくなります。

注記

各デバイスの ウェイト の値は 100 から 1000 の範囲内でなければなりません。もしくは、値を 0 にすると、各デバイスの一覧からそのデバイスを削除できます。

手順

仮想マシンのブロック I/O パラメーターを表示および設定するには、以下を行います。

  1. 仮想マシンの現在の <blkio> パラメーターを表示します。

    # virsh dumpxml VM-name

    <domain>
      [...]
      <blkiotune>
        <weight>800</weight>
        <device>
          <path>/dev/sda</path>
          <weight>1000</weight>
        </device>
        <device>
          <path>/dev/sdb</path>
          <weight>500</weight>
        </device>
      </blkiotune>
      [...]
    </domain>
  2. 指定したデバイスの I/O ウェイトを編集します。

    # virsh blkiotune VM-name --device-weights device, I/O-weight

    たとえば、以下では、liftrul 仮想マシンの /dev/sda デバイスのウェイトを 500 に変更します。

    # virsh blkiotune liftbrul --device-weights /dev/sda, 500

17.5.2. 仮想マシンのディスク I/O スロットリング

複数の仮想マシンが同時に実行する場合は、過剰なディスク I/O により、システムパフォーマンスに影響が及ぶ可能性があります。KVM 仮想化のディスク I/O スロットリングでは、仮想マシンからホストマシンに送られるディスク I/O 要求に制限を設定する機能を利用できます。これにより、仮想マシンが共有リソースを過剰に使用し、その他の仮想マシンのパフォーマンスに影響を及ぼすことを防ぐことができます。

ディスク I/O スロットリングを有効にするには、仮想マシンに割り当てられた各ブロックデバイスからホストマシンに送られるディスク I/O 要求に制限を設定します。

手順

  1. virsh domblklist コマンドを使用して、指定された仮想マシン上のすべてのディスクデバイスの名前を一覧表示します。

    # virsh domblklist rollin-coal
    Target     Source
    ------------------------------------------------
    vda        /var/lib/libvirt/images/rollin-coal.qcow2
    sda        -
    sdb        /home/horridly-demanding-processes.iso
  2. スロットルする仮想ディスクがマウントされているホストブロックデバイスを見つけます。

    たとえば、前の手順の sdb 仮想ディスクをスロットリングする場合は、以下の出力では、ディスクが /dev/nvme0n1p3 パーティションにマウントされていることを示しています。

    $ lsblk
    NAME                                          MAJ:MIN RM   SIZE RO TYPE  MOUNTPOINT
    zram0                                         252:0    0     4G  0 disk  [S